Browse Source

migrate newick tree loader form to importer class but leave api

Vlad Dracula 7 years ago
parent
commit
23608e43b2

+ 1 - 4
tripal_chado/api/modules/tripal_chado.phylotree.api.inc

@@ -66,10 +66,7 @@ function tripal_validate_phylotree($val_type, &$options, &$errors, &$warnings) {
       $errors['description'] = t('Please provide a description for this tree.');
       return FALSE;
     }
-    if (!array_key_exists('analysis', $options) and !array_key_exists('analysis_id', $options)) {
-      $errors['analysis'] = t('Please provide an analysis or analysis_id for this tree.');
-      return FALSE;
-    }
+
     if (!array_key_exists('tree_file', $options)) {
       $errors['tree_file'] = t('Please provide either the full path to the tree_file or a Drupal managed file ID number.');
       return FALSE;

+ 10 - 363
tripal_chado/includes/TripalImporter/NewickImporter.inc

@@ -180,7 +180,7 @@ class NewickImporter extends TripalImporter {
       'description' => trim($values["description"]),
       'analysis_id' => $values["analysis_id"],
       'leaf_type' => $values["leaf_type"],
-      // 'tree_file'    => $values["tree_file"],
+      'tree_file'    => $this->arguments['files'][0]['file_path'],
       'format' => 'newick',
       'dbxref' => trim($values["dbxref"]),
       'match' => $values["match"],
@@ -215,373 +215,20 @@ class NewickImporter extends TripalImporter {
   public function run() {
 
     $arguments = $this->arguments['run_args'];
-    $file_path = $this->arguments['files'][0]['file_path'];
-    $name = $this->arguments["tree_name"];
-    $description = $this->arguments["description"];
-    $analysis_id = $this->arguments["analysis_id"];
-    $leaf_type = $this->arguments["leaf_type"];
-    $format = 'newick';
-    $dbxref = $this->arguments["dbxref"];
-    $match = $this->arguments["match"];
-    $name_re = $this->arguments["name_re"];
-
 
     $options = array(
-      'name'         => $node->tree_name,
-      'description'  => $node->description,
-      'analysis_id'  => $node->analysis_id,
-      'leaf_type'    => $node->leaf_type,
-      'tree_file'    => $node->tree_file,
+      'name'         => $this->arguments["tree_name"],
+      'description'  => $this->arguments["description"],
+      'analysis_id'  => $this->arguments["analysis_id"],
+      'leaf_type'    => $this->arguments["leaf_type"],
+      'tree_file'    => $this->arguments['files'][0]['file_path'],
       'format'       => 'newick',
-      'dbxref'       => $node->dbxref,
-      'match'        => $node->match,
-      'name_re'      => $node->name_re,
+      'dbxref'       => $this->arguments["dbxref"],
+      'match'        => $this->arguments["match"],
+      'name_re'      => $this->arguments["name_re"],
     );
     $errors = array();
     $warnings = array();
-    if (tripal_insert_phylotree($options, $errors, $warnings))
-
-  }
-
-
-  /**
-   * This code parses the grammar for the Newick format as per the following
-   * grammar:
-   *
-   *  Tree --> Subtree ";" | Branch ";"
-   *  Subtree --> Leaf | Internal
-   *  Leaf --> Name
-   *  Internal --> "(" BranchSet ")" Name
-   *  BranchSet --> Branch | BranchSet "," Branch
-   *  Branch --> Subtree Length
-   *  Name --> empty | string
-   *  Length --> empty | ":" number
-   *
-   */
-
-
-  function parse_newick_file($file_name) {
-
-    // Initialize the bootstrap value and index
-    global $tripal_phylogeny_bootstrap;
-
-    $tripal_phylogeny_bootstrap = 1;
-    $tripal_phylogeny_index = 1;
-
-    $tree = [];
-
-    $fp = fopen($file_name, 'r');
-    if ($fp) {
-      $tree = $this->parse_newick_tree($fp);
-    }
-    else {
-      // ERROR
-    }
-    return $tree;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param number $depth
-   *
-   * @return boolean
-   */
-  function parse_newick_tree($fp, $depth = 0) {
-
-    $subtree = $this->parse_newick_subtree($fp, $depth);
-    $subtree['is_root'] = 1;
-
-    // this subtree may also be a branch. A branch is a subtree with a length,
-    // so see if there is a length
-    $token = $this->parse_newick_get_token($fp);
-    if ($token == ";") {
-      // we're done!
-      return $subtree;
-    }
-    $this->parse_newick_replace_token($fp);
-
-    // Get the length.
-    $length = $this->parse_newick_length($fp, $depth);
-    $subtree['length'] = $length;
-
-    // Now if we're missing the semicolon we have a syntax error.
-    $token = $this->parse_newick_get_token($fp);
-    if ($token != ';') {
-      print "Syntax Error: missing trailing semicolon.\n";
-      exit;
-    }
-
-    return $subtree;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $depth
-   *
-   * @return Ambigous|unknown
-   */
-  function parse_newick_subtree($fp, $depth) {
-
-    $internal = $this->parse_newick_internal($fp, $depth + 1);
-    if (!is_array($internal)) {
-      $leaf_node = $this->parse_newick_leaf($fp, $depth);
-      return [
-        'name' => $leaf_node,
-        'depth' => $depth,
-        'is_leaf' => TRUE,
-        'descendents' => 0,
-      ];
-    }
-    else {
-      $internal['depth'] = $depth;
-    }
-    return $internal;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $depth
-   *
-   * @return boolean|multitype:unknown Ambigous <Ambigous, unknown>
-   */
-  function parse_newick_branch($fp, $depth) {
-
-    $subtree = $this->parse_newick_subtree($fp, $depth);
-    $length = $this->parse_newick_length($fp, $depth);
-
-    $subtree['length'] = $length;
-    return $subtree;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $parent
-   * @param unknown $depth
-   */
-  function parse_newick_internal($fp, $depth) {
-
-    // If the next character is not an open paren then this is an internal node
-    if ($this->parse_newick_get_token($fp) != '(') {
-      $this->parse_newick_replace_token($fp);
-      return FALSE;
-    }
-
-    $branches = $this->parse_newick_branchset($fp, $depth);
-    if (!is_array($branches)) {
-      return FALSE;
-    }
-    // If we don't have a closing parent then this is a syntax error.
-    if ($this->parse_newick_get_token($fp) != ')') {
-      $this->parse_newick_replace_token($fp);
-      return FALSE;
-    }
-    $internal_node = $this->parse_newick_name($fp, $depth);
-    $descendent_count = 0;
-    for ($i = 0; $i < count($branches); $i++) {
-      $branches[$i]['parent'] = $internal_node;
-      $descendent_count += 1 + $branches[$i]['descendents'];
-    }
-
-    return [
-      'name' => $internal_node,
-      'depth' => $depth,
-      'branch_set' => $branches,
-      'is_internal' => TRUE,
-      'descendents' => $descendent_count,
-    ];
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $parent
-   * @param unknown $depth
-   */
-  function parse_newick_branchset($fp, $depth) {
-    $branches = [];
-
-    $num_read = 0;
-    $branch = $this->parse_newick_branch($fp, $depth);
-    $branches[] = $branch;
-
-    // If it's not a branch then return false, a branchset will
-    // always appear as a branch.
-    if (!is_array($branch)) {
-      return FALSE;
-    }
-
-    // If we have a comma as the next token then this is
-    // a branchset and we should recurse.
-    $token = $this->parse_newick_get_token($fp);
-    if ($token == ',') {
-      $rbranches = $this->parse_newick_branchset($fp, $depth);
-      foreach ($rbranches as $branch) {
-        $branches[] = $branch;
-      }
-    }
-    else {
-      $this->newick_replace_token($fp);
-    }
-
-    return $branches;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $depth
-   *
-   * @return Ambigous <string, boolean, unknown>
-   */
-  function parse_newick_leaf($fp, $depth) {
-    return $this->parse_newick_name($fp, $depth);
+    tripal_insert_phylotree($options, $errors, $warnings);
   }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $depth
-   *
-   * @return string|boolean|Ambigous <string, unknown>
-   */
-  function parse_newick_name($fp, $depth) {
-    global $tripal_phylogeny_bootstrap;
-
-    $token = $this->parse_newick_get_token($fp);
-
-    // If the next token is a colon, semicolon, close paren, or comma
-    // then the name is empty.
-    if ($token == ':' or $token == ',' or $token == ';' or $token == ')') {
-      $this->parse_newick_replace_token($fp);
-      // create a bootstrap value
-      return $tripal_phylogeny_bootstrap++;
-    }
-
-    // If the next token is an open paren then this is a syntax error:
-    if ($token == '(') {
-      $this->parse_newick_replace_token($fp);
-      return FALSE;
-    }
-    return $token;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   * @param unknown $depth
-   *
-   * @return string|boolean|unknown
-   */
-  function parse_newick_length($fp, $depth) {
-    $length = '';
-
-    $token = $this->parse_newick_get_token($fp);
-
-    // If the next token is a semicolon, close paren, or comma
-    // then the length is empty.
-    if ($token == ',' or $token == ';' or $token == ')') {
-      $this->newick_replace_token($fp);
-      return '';
-    }
-
-    // If the next token is a colon then we are parsing the length.
-    // Otherwise we are not.
-    if ($token != ':') {
-      $this->parse_newick_replace_token($fp);
-      return FALSE;
-    }
-
-    // Now get the length.
-    $token = $this->parse_newick_get_token($fp);
-
-    // If the next token is an open paren then this is a syntax error:
-    if ($token == '(') {
-      exit();
-    }
-
-    return $token;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   *
-   * @return string
-   */
-  function parse_newick_get_token($fp) {
-
-    // Keep track of the file position that we start with
-    global $tripal_phylogeny_fp_pos;
-    $tripal_phylogeny_fp_pos = ftell($fp);
-
-    $token = '';
-    $in_quote = FALSE;
-    $num_read = 0;
-
-    $c = fgetc($fp);
-    while (!feof($fp)) {
-      $num_read++;
-
-      switch ($c) {
-        // If the first character is a reserved character and we
-        // we have not encountered any other charcters then return
-        // it as the token. Otherwise, return the collected token.
-        case ';':
-        case '(':
-        case ')':
-        case ',':
-        case ':':
-          if (!$token) {
-            return $c;
-          }
-          else {
-            // put the character back and return the token
-            fseek($fp, $tripal_phylogeny_fp_pos + $num_read - 1);
-            return $token;
-          }
-
-          break;
-        // Quotes are allowed around names and if a name is in
-        // quotes then allow spaces. Otherwise, spaces are ignored.
-        case '\'':
-        case '"':
-          if (!$in_quote) {
-            $in_quote = TRUE;
-          }
-          else {
-            $in_quote = FALSE;
-          }
-          break;
-        case " ":
-        case "\t":
-        case "\r":
-        case "\n":
-          if ($in_quote) {
-            $token .= $c;
-          }
-          break;
-        // All other characters get saved as the token
-        default:
-          $token .= $c;
-      }
-      $c = fgetc($fp);
-    }
-    return $token;
-  }
-
-  /**
-   *
-   * @param unknown $fp
-   */
-  function parse_newick_replace_token($fp) {
-    global $tripal_phylogeny_fp_pos;
-
-    fseek($fp, $tripal_phylogeny_fp_pos);
-    $tripal_phylogeny_fp_pos = ftell($fp);
-  }
-
 }

+ 0 - 10
tripal_chado/tripal_chado.module

@@ -364,16 +364,6 @@ function tripal_chado_menu() {
   //                           Data Loaders
   //////////////////////////////////////////////////////////////////////////////
 
-  // Data Loaders
-  $items['admin/tripal/loaders/newic_phylotree_loader'] = array(
-    'title' => 'Chado Phylogenetic Trees (Newic format)',
-    'description' => 'Loads phylogenetic trees in Newic format.',
-    'page callback' => 'drupal_goto',
-    'page arguments' => array('node/add/chado-phylotree'),
-    'access arguments' => array('load tripal data'),
-    'type' => MENU_NORMAL_ITEM,
-  );
-
   $items['admin/tripal/loaders/pub'] = array(
     'title' => t('Chado Publication Importers'),
     'description' => t('Create and modify importers that can connect to and retreive publications from remote databases.'),