/**
  * @see SampleItemFactoryInterface::create()
  * @param integer $sample_id
  * @param integer $item_id
  * @param integer $gid
  * @param string $keywords
  * @param string $description
  * @param bool $parent
  * @return bool
  */
 public static function create($sample_id, $item_id, $gid, $keywords = null, $description = null, $parent_item_id = null, $parent_sample = false, $parent_is_parent_sample = false)
 {
     global $transaction;
     if ($transaction->is_in_transction() == true) {
         $sample = new Sample($sample_id);
         $sample_item = new SampleItem($sample_id);
         $sample_item->set_gid($gid);
         $sample_item->set_parent($parent_sample);
         // For parent sample only
         $sample_item->set_parent_item_id($parent_item_id);
         if ($sample_item->set_item_id($item_id) == false) {
             return false;
         }
         if ($sample_item->link_item() == false) {
             return false;
         }
         if (($class_name = $sample_item->is_classified()) == true) {
             if ($sample_item->set_class($class_name) == false) {
                 return false;
             }
         }
         $description_required = $sample_item->is_description();
         $keywords_required = $sample_item->is_keywords();
         if ($description_required == true xor $keywords_required == true) {
             if ($description_required == false and $keywords_required == true) {
                 $sample_item->set_information(null, $keywords);
             } else {
                 $sample_item->set_information($description, null);
             }
         } else {
             if ($description_required == true and $keywords_required == true) {
                 $sample_item->set_information($description, $keywords);
             }
         }
         $item_holder_type_array = Item::list_holders();
         $item_holder_id_array = array();
         if (is_array($item_holder_type_array) and count($item_holder_type_array) >= 1) {
             foreach ($item_holder_type_array as $key => $value) {
                 $item_holder_id_array[$key] = $value::list_item_holders_by_item_id($sample->get_item_id());
                 if ($key == "sample" and $parent_is_parent_sample == true) {
                     $item_holder_id_array[$key] = array_merge($item_holder_id_array[$key], Sample_Wrapper::get_sample_id_and_gid_by_parent_sample_id($sample_id));
                 }
             }
         }
         $item_holder_add_event = new ItemHolderAddEvent($item_holder_id_array, $sample->get_item_id(), $item_id, $gid);
         $event_handler = new EventHandler($item_holder_add_event);
         if ($event_handler->get_success() == false) {
             return false;
         }
         return true;
     } else {
         return false;
     }
 }