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);
     }
 }
 /**
  * @param Adresse $adresse
  */
 public function addAdresse(Adresse $adresse)
 {
     $id = $adresse->getId();
     if (!$id) {
         $this->adressen->add($adresse);
     } elseif (!$this->adressen->containsKey($id)) {
         $this->adressen->set($id, $adresse);
     }
     $adresse->setTraeger($this);
 }
 private function setDataFromJson(Traeger $traeger = null)
 {
     $rawData = file_get_contents("php://input");
     $data = json_decode($rawData);
     if ($traeger === null && isset($data->email)) {
         $traeger = new Traeger($data->email);
         if (isset($data->password)) {
             $encoder = $this->container->get('security.password_encoder');
             $encoded = $encoder->encodePassword($traeger, $data->passwort);
             $traeger->setPassword($encoded);
         }
     } else {
         if (isset($data->email)) {
             $traeger->setEmail($data->email);
         }
         if (isset($data->passwort)) {
             $encoder = $this->container->get('security.password_encoder');
             $encoded = $encoder->encodePassword($traeger, $data->passwort);
             $traeger->setPassword($encoded);
         }
     }
     // Ansprechpartner
     if (isset($data->ansprechpartner)) {
         // TODO: Unperformant und auch nicht besonders Elegant immer alle Ansprechpartner zu löschen...
         $traeger->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);
             }
             $traeger->addAnsprechpartner($ansprechpartner);
         }
     }
     // Kategorie
     if (isset($data->kategorie)) {
         /** @var Kategorie $kategorie */
         $kategorie = $this->getKategorieRepository()->find($data->kategorie);
         $traeger->setKategorie($kategorie);
     }
     // Links
     if (isset($data->links)) {
         // TODO: Unelegant
         $traeger->deleteAllLinks();
         foreach ($data->links as $rawLink) {
             $link = new Link($rawLink->titel, $rawLink->url);
             $traeger->addLink($link);
         }
     }
     // Adressen
     if (isset($data->adressen)) {
         // TODO: Unelegant
         $traeger->deleteAllAdressen();
         foreach ($data->adressen as $rawAdresse) {
             $adresse = new Adresse($rawAdresse->strasse, $rawAdresse->ort);
             $adresse->setPlz($rawAdresse->plz);
             $traeger->addAdresse($adresse);
         }
     }
     if (isset($data->titel)) {
         $traeger->setTitel($data->titel);
     }
     if (isset($data->beschreibung)) {
         $traeger->setBeschreibung($data->beschreibung);
     }
     if (isset($data->bilder)) {
         // TODO: Unelegant
         $traeger->deleteAllBilder();
         foreach ($data->bilder as $rawBild) {
             $bild = new Bild();
             $bild->setFileName($rawBild->name);
             $bild->setFileType($rawBild->type);
             $bild->setFileChangetime(new \DateTime($rawBild->lastModifiedDate));
             $bild->setFileSize($rawBild->size);
             $bild->setTmpName($rawBild->tmp_name);
             $traeger->addBild($bild);
         }
     }
     return $traeger;
 }