static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'calculatedmulti') {
             return new self($category);
         } else {
             return null;
         }
     }
     if (count($item->list_interactions()) > 1 || !self::has_score($item)) {
         return null;
     }
     if (!self::is_calculated($item)) {
         return null;
     }
     $main = self::get_main_interaction($item);
     if ($main->is_choiceInteraction()) {
         return new self($category);
     } else {
         return false;
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'shortanswer') {
             return new self($category);
         } else {
             return null;
         }
     }
     if (count($item->list_interactions()) != 1 || !self::has_score($item)) {
         return null;
     } else {
         $main = self::get_main_interaction($item);
         $is_text_entry = $main->is_extendedTextInteraction() || $main->is_textEntryInteraction();
         $is_numeric = self::is_numeric_interaction($item, $main);
         $has_answers = self::has_answers($item, $main);
         if ($is_text_entry && !$is_numeric && $has_answers) {
             return new self($category);
         } else {
             return null;
         }
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'truefalse') {
             return new self($category);
         } else {
             return null;
         }
     }
     if (count($item->list_interactions()) > 1 || !self::has_score($item)) {
         return null;
     }
     $main = self::get_main_interaction($item);
     if (!$main->is_choiceInteraction()) {
         return null;
     }
     $choices = $main->list_simpleChoice();
     if (count($choices) != 2) {
         return null;
     }
     $t0 = strtolower($choices[0]->value());
     $t1 = strtolower($choices[1]->value());
     $true = strtolower(get_string('true', 'qtype_truefalse'));
     $false = strtolower(get_string('false', 'qtype_truefalse'));
     if (($t0 == $true || $t0 == $false) && ($t1 == $true || $t1 == $false)) {
         return new self($category);
     } else {
         return null;
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'numerical') {
             return new self($category);
         } else {
             return null;
         }
     }
     if (count($item->list_interactions()) > 2 || !self::has_score($item)) {
         return null;
     }
     if (self::is_calculated($item)) {
         return null;
     }
     $interactions = $item->list_interactions();
     $main = self::get_main_interaction($item);
     if (count($interactions) == 2) {
         $second = $interactions[0]->responseIdentifier == $main->responseIdentifier ? $interactions[1] : $interactions[0];
         if (strtoupper($second->responseIdentifier) != 'UNIT') {
             return null;
         }
     }
     if (!self::is_numeric_interaction($item, $main)) {
         return null;
     }
     if (!self::has_answers($item, $main)) {
         return null;
     }
     return new self($category);
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'calculatedsimple') {
             return new self($category);
         } else {
             return null;
         }
     }
     $accept = !is_null(CalculatedBuilder::factory($item, $source_root, $target_root)) && $item->toolName == self::get_tool_name() && $item->toolVersion >= Qti::get_tool_version() && $item->label == 'calculatedsimple';
     if ($accept) {
         return new self($category);
     } else {
         return null;
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'description') {
             return new self($category);
         } else {
             return null;
         }
     }
     $count = count($item->list_interactions());
     if ($count == 0) {
         return new self($category);
     } else {
         return null;
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'essay') {
             return new self($category);
         } else {
             return null;
         }
     }
     $count = count($item->list_interactions());
     $main = self::get_main_interaction($item);
     $has_answers = self::has_answers($item, $main);
     if ($count == 1 && $main->is_extendedTextInteraction() && !$has_answers) {
         return new self($category);
     } else {
         return null;
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'multianswer') {
             return new self($category);
         } else {
             return null;
         }
     }
     if ($item->has_templateDeclaration() || !self::has_score($item)) {
         return null;
     } else {
         $interactions = $item->list_interactions();
         foreach ($interactions as $interaction) {
             if (!($interaction->is_inlineChoiceInteraction() || $interaction->is_choiceInteraction() || $interaction->is_textEntryInteraction() || $interaction->is_gapMatchInteraction())) {
                 return null;
             }
         }
         return new self($category);
     }
 }
 static function factory(QtiImportSettings $settings)
 {
     $item = $settings->get_reader();
     $category = $settings->get_category();
     //if it is a reimport
     if ($data = $settings->get_data()) {
         if ($data->qtype == 'match') {
             return new self($category);
         } else {
             return null;
         }
     }
     if (!self::has_score($item)) {
         return null;
     } else {
         $count = count($item->list_interactions());
         $main = self::get_main_interaction($item);
         if ($count == 1 && $main->is_associateInteraction() || $main->is_matchInteraction()) {
             return new self($category);
         } else {
             return null;
         }
     }
 }