public function addPin(Pin $pin)
 {
     $id = $pin->getId();
     if (!$id) {
         $this->pins->add($pin);
     } elseif (!$this->pins->containsKey($id)) {
         $this->pins->set($id, $pin);
     }
     $pin->setTraeger($this);
 }
 private function setDataFromJson(Pin $pin)
 {
     $rawData = file_get_contents("php://input");
     $data = json_decode($rawData);
     $pin->setTitel($data->titel);
     // Kategorie
     if (isset($data->kategorie)) {
         $kategorie = $this->getKategorieRepository()->find($data->kategorie);
         $pin->setKategorie($kategorie);
     }
     if (isset($data->beschreibung)) {
         $pin->setBeschreibung($data->beschreibung);
     }
     // Adresse
     if (isset($data->adresse)) {
         $rawAdresse = $data->adresse;
         $adresse = new Adresse($rawAdresse->strasse, $rawAdresse->ort);
         $adresse->setPlz($rawAdresse->plz);
         $pin->setAdresse($adresse);
     }
     if (isset($data->markers) && isset($data->markers[0])) {
         $pin->setLatitude($data->markers[0]->lat);
         $pin->setLongitude($data->markers[0]->lng);
     }
     if (isset($data->barrierefreiheit)) {
         $pin->setBarrierefreiheit($data->barrierefreiheit);
     }
     if (isset($data->kostenart)) {
         $pin->setKostenArt($data->kostenart);
     }
     if (isset($data->kostenbemerkung)) {
         $pin->setKostenBemerkung($data->kostenbemerkung);
     }
     if (isset($data->anmeldepflichtig)) {
         $pin->setAnmeldepflichtig($data->anmeldepflichtig);
     }
     if (isset($data->anmdeldepflichtbemerkung)) {
         $pin->setAnmeldepflichtBemerkung($data->anmeldepflichtbemerkung);
     }
     if (isset($data->mindestalter)) {
         $pin->setMindestalter($data->mindestalter);
     }
     // Ansprechpartner
     if (isset($data->ansprechpartner)) {
         // TODO: Unperformant und auch nicht besonders Elegant immer alle Ansprechpartner zu löschen...
         $pin->deleteAllAnsprechpartner();
         foreach ($data->ansprechpartner as $rawAnsprechpartner) {
             $ansprechpartner = new Ansprechpartner($rawAnsprechpartner->name, $rawAnsprechpartner->email);
             if (isset($rawAnsprechpartner->telefonnummer)) {
                 $ansprechpartner->setTelefonnummer($rawAnsprechpartner->telefonnummer);
             }
             if (isset($rawAnsprechpartner->mobilnummer)) {
                 $ansprechpartner->setMobilnummer($rawAnsprechpartner->mobilnummer);
             }
             if (isset($rawAnsprechpartner->bemerkung)) {
                 $ansprechpartner->setBemerkung($rawAnsprechpartner->bemerkung);
             }
             $pin->addAnsprechpartner($ansprechpartner);
         }
     }
     if (isset($data->termine)) {
         // TODO: Unelegant
         $pin->deleteAllTermine();
         foreach ($data->termine as $rawTermin) {
             $isGanztaegig = isset($rawTermin->ganztaegig) && $rawTermin->ganztaegig == true ?: false;
             $beginnDatum = new \DateTime($rawTermin->beginn . ' ' . !$isGanztaegig ? $rawTermin->beginn_uhrzeit : '');
             $termin = new Termin($beginnDatum);
             $termin->setGanztaegig($isGanztaegig);
             if (isset($data->ende)) {
                 $endzeit = '';
                 if (isset($data->ende_uhrzeit)) {
                     $endzeit = ' ' . $data->ende_uhrzeit;
                 }
                 $termin->setEnde(new \DateTime($data->ende . $endzeit));
             }
             foreach ($rawTermin->wiederholungen as $rawWiederholung) {
                 $wiederholung = new TerminWiederholung($rawWiederholung->wochentag);
                 if (isset($rawWiederholung->woche_des_monats)) {
                     $wiederholung->setWocheDesMonats($rawWiederholung->woche_des_monats);
                 }
                 if (isset($rawWiederholung->auch_an_feiertagen)) {
                     $wiederholung->setAuchAnFeiertagen($rawWiederholung->auch_an_feiertagen);
                 }
                 if (isset($rawWiederholung->auch_in_den_ferien)) {
                     $wiederholung->setAuchInDenFerien($rawWiederholung->auch_in_den_ferien);
                 }
                 $termin->addWiederholung($wiederholung);
             }
             $pin->addTermin($termin);
         }
     }
     // Links
     if (isset($data->links)) {
         // TODO: Unelegant
         $pin->deleteAllLinks();
         foreach ($data->links as $rawLink) {
             $link = new Link($rawLink->titel, $rawLink->url);
             $pin->addLink($link);
         }
     }
     $rawTraeger = $this->get('security.token_storage')->getToken()->getUser();
     if ($traeger = $this->getTraegerRepository()->find($rawTraeger)) {
         $pin->setTraeger($traeger);
     }
 }