/**
  * Saves a new object
  * @param $object Object - a new object
  * @return Newly generated object with its id set
  */
 function save(&$object)
 {
     // Fill object Fulltext index
     $fullTextIndex = $this->generateFullTextIndex($object);
     $object->setFullTextIndex($fullTextIndex);
     // Coordinate transaction
     $icfDatabase = new IcfDatabase();
     $conn = $icfDatabase->dbOpen();
     $conn->StartTrans();
     // Save object
     $objectMapper = new ObjectMapper();
     $objectMapper->setConnection($conn);
     $object =& $objectMapper->save($object);
     // Save attributes
     $objectAttributeMapper = new ObjectAttributeMapper();
     $objectAttributeMapper->setConnection($conn);
     $objectAttributeArray =& $object->getAttributes();
     foreach ($objectAttributeArray as $objectAttribute) {
         $objectAttribute->setObjectID($object->getId());
         $objectAttributeMapper->save($objectAttribute);
     }
     // Save folders
     $objectFolderMapper = new ObjectFolderMapper();
     $objectFolderMapper->setConnection($conn);
     $objectFolderArray =& $object->getObjectFolders();
     foreach ($objectFolderArray as $objectFolder) {
         $objectFolder->setObjectID($object->getId());
         $objectFolderMapper->save($objectFolder);
     }
     // Save relationships
     $objectRelationMapper = new ObjectRelationMapper();
     $objectRelationMapper->setConnection($conn);
     $objectRelationArray =& $object->getObjectRelations();
     foreach ($objectRelationArray as $objectRelation) {
         /* @var $objectRelation ObjectRelation */
         $objectRelation->setParentID($object->getId());
         $objectRelationMapper->save($objectRelation);
     }
     // Close transaction
     $conn->completeTrans();
     $icfDatabase->dbClose($conn);
     return $object;
 }