[Bio] / Sprout / Sprout.pm Repository:
ViewVC logotype

Diff of /Sprout/Sprout.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.45, Thu Oct 20 10:20:27 2005 UTC revision 1.53, Sat Jan 28 08:59:17 2006 UTC
# Line 1153  Line 1153 
1153    
1154  =item RETURN  =item RETURN
1155    
1156  Returns a hash mapping the functional assignment IDs to user IDs.  Returns a hash mapping the user IDs to functional assignment IDs.
1157    
1158  =back  =back
1159    
# Line 1163  Line 1163 
1163      # Get the parameters.      # Get the parameters.
1164      my ($self, $featureID) = @_;      my ($self, $featureID) = @_;
1165      # Get all of the feature's annotations.      # Get all of the feature's annotations.
1166      my @query = $self->GetAll(['IsTargetOfAnnotation', 'Annotation'],      my @query = $self->GetAll(['IsTargetOfAnnotation', 'Annotation', 'MadeAnnotation'],
1167                              "IsTargetOfAnnotation(from-link) = ?",                              "IsTargetOfAnnotation(from-link) = ?",
1168                              [$featureID], ['Annotation(time)', 'Annotation(annotation)']);                              [$featureID], ['Annotation(time)', 'Annotation(annotation)',
1169                                               'MadeAnnotation(from-link)']);
1170      # Declare the return hash.      # Declare the return hash.
1171      my %retVal;      my %retVal;
     # Declare a hash for insuring we only make one assignment per user.  
     my %timeHash = ();  
1172      # Now we sort the assignments by timestamp in reverse.      # Now we sort the assignments by timestamp in reverse.
1173      my @sortedQuery = sort { -($a->[0] <=> $b->[0]) } @query;      my @sortedQuery = sort { -($a->[0] <=> $b->[0]) } @query;
1174      # Loop until we run out of annotations.      # Loop until we run out of annotations.
1175      for my $annotation (@sortedQuery) {      for my $annotation (@sortedQuery) {
1176          # Get the annotation fields.          # Get the annotation fields.
1177          my ($timeStamp, $text) = @{$annotation};          my ($timeStamp, $text, $user) = @{$annotation};
1178          # Check to see if this is a functional assignment.          # Check to see if this is a functional assignment.
1179          my ($user, $function) = _ParseAssignment($text);          my ($actualUser, $function) = _ParseAssignment($user, $text);
1180          if ($user && ! exists $timeHash{$user}) {          if ($actualUser && ! exists $retVal{$actualUser}) {
1181              # Here it is a functional assignment and there has been no              # Here it is a functional assignment and there has been no
1182              # previous assignment for this user, so we stuff it in the              # previous assignment for this user, so we stuff it in the
1183              # return hash.              # return hash.
1184              $retVal{$function} = $user;              $retVal{$actualUser} = $function;
             # Insure we don't assign to this user again.  
             $timeHash{$user} = 1;  
1185          }          }
1186      }      }
1187      # Return the hash of assignments found.      # Return the hash of assignments found.
# Line 1262  Line 1259 
1259              }              }
1260          }          }
1261          # Build a query for all of the feature's annotations, sorted by date.          # Build a query for all of the feature's annotations, sorted by date.
1262          my $query = $self->Get(['IsTargetOfAnnotation', 'Annotation'],          my $query = $self->Get(['IsTargetOfAnnotation', 'Annotation', 'MadeAnnotation'],
1263                                 "IsTargetOfAnnotation(from-link) = ? ORDER BY Annotation(time) DESC",                                 "IsTargetOfAnnotation(from-link) = ? ORDER BY Annotation(time) DESC",
1264                                 [$featureID]);                                 [$featureID]);
1265          my $timeSelected = 0;          my $timeSelected = 0;
1266          # Loop until we run out of annotations.          # Loop until we run out of annotations.
1267          while (my $annotation = $query->Fetch()) {          while (my $annotation = $query->Fetch()) {
1268              # Get the annotation text.              # Get the annotation text.
1269              my ($text, $time) = $annotation->Values(['Annotation(annotation)','Annotation(time)']);              my ($text, $time, $user) = $annotation->Values(['Annotation(annotation)',
1270                                                         'Annotation(time)', 'MadeAnnotation(from-link)']);
1271              # Check to see if this is a functional assignment for a trusted user.              # Check to see if this is a functional assignment for a trusted user.
1272              my ($user, $function) = _ParseAssignment($text);              my ($actualUser, $function) = _ParseAssignment($user, $text);
1273              if ($user) {              Trace("Assignment user is $actualUser, text is $function.") if T(4);
1274                if ($actualUser) {
1275                  # Here it is a functional assignment. Check the time and the user                  # Here it is a functional assignment. Check the time and the user
1276                  # name. The time must be recent and the user must be trusted.                  # name. The time must be recent and the user must be trusted.
1277                  if ((exists $trusteeTable{$user}) && ($time > $timeSelected)) {                  if ((exists $trusteeTable{$actualUser}) && ($time > $timeSelected)) {
1278                      $retVal = $function;                      $retVal = $function;
1279                      $timeSelected = $time;                      $timeSelected = $time;
1280                  }                  }
# Line 1334  Line 1333 
1333          # users.          # users.
1334          my %trusteeTable = ();          my %trusteeTable = ();
1335          # Build a query for all of the feature's annotations, sorted by date.          # Build a query for all of the feature's annotations, sorted by date.
1336          my $query = $self->Get(['IsTargetOfAnnotation', 'Annotation'],          my $query = $self->Get(['IsTargetOfAnnotation', 'Annotation', 'MadeAnnotation'],
1337                                 "IsTargetOfAnnotation(from-link) = ? ORDER BY Annotation(time) DESC",                                 "IsTargetOfAnnotation(from-link) = ? ORDER BY Annotation(time) DESC",
1338                                 [$featureID]);                                 [$featureID]);
1339          my $timeSelected = 0;          my $timeSelected = 0;
1340          # Loop until we run out of annotations.          # Loop until we run out of annotations.
1341          while (my $annotation = $query->Fetch()) {          while (my $annotation = $query->Fetch()) {
1342              # Get the annotation text.              # Get the annotation text.
1343              my ($text, $time) = $annotation->Values(['Annotation(annotation)','Annotation(time)']);              my ($text, $time, $user) = $annotation->Values(['Annotation(annotation)',
1344                                                                'Annotation(time)',
1345                                                                'MadeAnnotation(user)']);
1346              # Check to see if this is a functional assignment for a trusted user.              # Check to see if this is a functional assignment for a trusted user.
1347              my ($user, $function) = _ParseAssignment($text);              my ($actualUser, $function) = _ParseAssignment($user, $text);
1348              if ($user) {              if ($actualUser) {
1349                  # Here it is a functional assignment.                  # Here it is a functional assignment.
1350                  push @retVal, [$user, $function];                  push @retVal, [$actualUser, $function];
1351              }              }
1352          }          }
1353      } else {      } else {
1354          # Here we have a non-FIG feature ID. In this case the user ID does not          # Here we have a non-FIG feature ID. In this case the user ID does not
1355          # matter. We simply get the information from the External Alias Function          # matter. We simply get the information from the External Alias Function
1356          # table.          # table.
1357          push @retVal, $self->GetEntityValues('ExternalAliasFunc', $featureID, ['ExternalAliasFunc(func)']);          my @assignments = $self->GetEntityValues('ExternalAliasFunc', $featureID,
1358                                                     ['ExternalAliasFunc(func)']);
1359            push @retVal, map { ['master', $_] } @assignments;
1360      }      }
1361      # Return the assignments found.      # Return the assignments found.
1362      return @retVal;      return @retVal;
# Line 1479  Line 1482 
1482      my $genomeData = $self->GetEntity('Genome', $genomeID);      my $genomeData = $self->GetEntity('Genome', $genomeID);
1483      if ($genomeData) {      if ($genomeData) {
1484          # The genome exists, so get the completeness flag.          # The genome exists, so get the completeness flag.
1485          ($retVal) = $genomeData->Value('complete');          ($retVal) = $genomeData->Value('Genome(complete)');
1486      }      }
1487      # Return the result.      # Return the result.
1488      return $retVal;      return $retVal;
# Line 3218  Line 3221 
3221      return $retVal;      return $retVal;
3222  }  }
3223    
3224    =head3 DeleteGenome
3225    
3226    C<< my $stats = $sprout->DeleteGenome($genomeID, $testFlag); >>
3227    
3228    Delete a genome from the database.
3229    
3230    =over 4
3231    
3232    =item genomeID
3233    
3234    ID of the genome to delete
3235    
3236    =item testFlag
3237    
3238    If TRUE, then the DELETE statements will be traced, but no deletions will occur.
3239    
3240    =item RETURN
3241    
3242    Returns a statistics object describing the rows deleted.
3243    
3244    =back
3245    
3246    =cut
3247    #: Return Type $%;
3248    sub DeleteGenome {
3249        # Get the parameters.
3250        my ($self, $genomeID, $testFlag) = @_;
3251        # Perform the delete for the genome's features.
3252        my $retVal = $self->{_erdb}->Delete('Feature', "fig|$genomeID.%", $testFlag);
3253        # Perform the delete for the primary genome data.
3254        my $stats = $self->{_erdb}->Delete('Genome', $genomeID, $testFlag);
3255        $retVal->Accumulate($stats);
3256        # Return the result.
3257        return $retVal;
3258    }
3259    
3260  =head2 Internal Utility Methods  =head2 Internal Utility Methods
3261    
3262  =head3 ParseAssignment  =head3 ParseAssignment
# Line 3228  Line 3267 
3267    
3268  A functional assignment is always of the form  A functional assignment is always of the form
3269    
3270      I<XXXX>C<\nset >I<YYYY>C< function to\n>I<ZZZZZ>      C<set >I<YYYY>C< function to\n>I<ZZZZZ>
3271    
3272  where I<XXXX> is the B<assigning user>, I<YYYY> is the B<user>, and I<ZZZZ> is the  where I<YYYY> is the B<user>, and I<ZZZZ> is the actual functional role. In most cases,
3273  actual functional role. In most cases, the user and the assigning user will be the  the user and the assigning user (from MadeAnnotation) will be the same, but that is
3274  same, but that is not always the case.  not always the case.
3275    
3276    In addition, the functional role may contain extra data that is stripped, such as
3277    terminating spaces or a comment separated from the rest of the text by a tab.
3278    
3279  This is a static method.  This is a static method.
3280    
3281  =over 4  =over 4
3282    
3283    =item user
3284    
3285    Name of the assigning user.
3286    
3287  =item text  =item text
3288    
3289  Text of the annotation.  Text of the annotation.
# Line 3253  Line 3299 
3299    
3300  sub _ParseAssignment {  sub _ParseAssignment {
3301      # Get the parameters.      # Get the parameters.
3302      my ($text) = @_;      my ($user, $text) = @_;
3303      # Declare the return value.      # Declare the return value.
3304      my @retVal = ();      my @retVal = ();
3305      # Check to see if this is a functional assignment.      # Check to see if this is a functional assignment.
3306      my ($type, $function) = split(/\n/, $text);      my ($type, $function) = split(/\n/, $text);
3307      if ($type =~ m/^set ([^ ]+) function to$/i) {      if ($type =~ m/^set function to$/i) {
3308          # Here it is, so we return the user name (which is in $1), the functional role text,          # Here we have an assignment without a user, so we use the incoming user ID.
3309          # and the assigning user.          @retVal = ($user, $function);
3310        } elsif ($type =~ m/^set (\S+) function to$/i) {
3311            # Here we have an assignment with a user that is passed back to the caller.
3312          @retVal = ($1, $function);          @retVal = ($1, $function);
3313      }      }
3314        # If we have an assignment, we need to clean the function text. There may be
3315        # extra junk at the end added as a note from the user.
3316        if (@retVal) {
3317            $retVal[1] =~ s/(\t\S)?\s*$//;
3318        }
3319      # Return the result list.      # Return the result list.
3320      return @retVal;      return @retVal;
3321  }  }
# Line 3351  Line 3404 
3404  }  }
3405    
3406    
   
3407  1;  1;

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.53

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3