protected function performSave($data, $fork)
 {
     $fitEntryType = array();
     $fitEntryTypes1 = ECP\FitEntryTypeQuery::create()->find();
     foreach ($fitEntryTypes1 as $fitEntryType1) {
         $fitEntryType[$fitEntryType1->getName()] = $fitEntryType1->getId();
     }
     $entity = $this->getLocalyMappedEntityToSave($data, $fork);
     $connection = $this->getPropelConnection();
     try {
         $connection->beginTransaction();
         $entity->setRulesetEntityId($data->ruleset->id);
         foreach ($data->content as $dataRow) {
             $compositionRow = $this->getSubentity($entity, 'CompositionRow', $dataRow);
             $compositionRow->setShipId($dataRow->shipId);
             $compositionRow->setNotes(property_exists($dataRow, 'notes') ? $dataRow->notes : '');
             $dataFitContent = $dataRow->fit->content;
             $compositionRow->setFitName($dataFitContent->header->shipName);
             $fitEntries = $compositionRow->getFitEntries();
             $fitEntryIndex = 0;
             foreach ($dataFitContent->body as $dataFitEntry) {
                 $fitEntryExists = count($fitEntries) > $fitEntryIndex;
                 $fitEntry = null;
                 if ($fitEntryExists) {
                     $fitEntry = $fitEntries[$fitEntryIndex];
                 } else {
                     $fitEntry = new ECP\FitEntry();
                     $fitEntry->setInd3x($fitEntryIndex);
                 }
                 $fitEntry->setFitEntryTypeId($fitEntryType[property_exists($dataFitEntry, 'type') ? $dataFitEntry->type : 'none']);
                 $fitEntry->setItemId(property_exists($dataFitEntry, 'item') ? $dataFitEntry->item : 0);
                 $fitEntry->setAmmoId(property_exists($dataFitEntry, 'ammo') ? $dataFitEntry->ammo : 0);
                 $fitEntry->setAmount(property_exists($dataFitEntry, 'amount') ? $dataFitEntry->amount : 0);
                 $this->prepareSubentitySave2($connection, $compositionRow, 'FitEntry', $fitEntry, !$fitEntryExists);
                 $fitEntryIndex++;
             }
             for (; $fitEntryIndex < count($fitEntries); $fitEntryIndex++) {
                 $compositionRow->removeFitEntry($fitEntries[$fitEntryIndex]);
             }
             $this->prepareSubentitySave($connection, $entity, 'CompositionRow', $compositionRow, $dataRow);
         }
         $this->cleanupOldEnties($entity, 'CompositionRow', $data->content);
         $this->saveGroupAccess($connection, $entity, $data);
         $entity->save($connection);
         $connection->commit();
         return $this->createIdObj($entity->getId());
     } catch (Exception $e) {
         $connection->rollBack();
         throw $e;
     }
 }