/[cvs]/nfo/perl/libs/Data/Rap/Metadata.pm
ViewVC logotype

Diff of /nfo/perl/libs/Data/Rap/Metadata.pm

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

revision 1.1 by joko, Tue Feb 18 15:35:49 2003 UTC revision 1.3 by joko, Sat Mar 29 07:13:19 2003 UTC
# Line 2  Line 2 
2  ##  $Id$  ##  $Id$
3  ## ----------------------------------------------------------------------  ## ----------------------------------------------------------------------
4  ##  $Log$  ##  $Log$
5    ##  Revision 1.3  2003/03/29 07:13:19  joko
6    ##  better exception handling if target was not found in xml
7    ##
8    ##  Revision 1.2  2003/02/20 20:04:35  joko
9    ##  renamed methods
10    ##  - refactored xml-specific code to Data::Storage::Handler::XML
11    ##
12  ##  Revision 1.1  2003/02/18 15:35:49  joko  ##  Revision 1.1  2003/02/18 15:35:49  joko
13  ##  + initial commit  ##  + initial commit
14  ##  ##
# Line 15  use warnings; Line 22  use warnings;
22    
23    
24  use Data::Dumper;  use Data::Dumper;
25  use XML::Parser;  use DesignPattern::Object;
 use XML::Parser::EasyTree;  
 use XML::XPath;  
 #$XML::Parser::Easytree::Noempty=0;  
 #use XML::Simple;  
26    
27    
28  sub getTargetMetadata {  sub accessMetadata {
29    my $self = shift;    my $self = shift;
30    my $target = shift;  
31    #my $result = $self->queryXml("*/target[\@name=\"$target\"]", keyattr => [qw( name )], forcearray => 1);    # create instance of storage object once
32    my $keyattr = {    if (!$self->{__rap}->{metadbengine}) {
33      topic => 'name',      $self->{__rap}->{metadbengine} =
34      taskdef => 'name',        DesignPattern::Object->fromPackage('Data::Storage::Handler::XML', filename => $self->{__rap}->{filename} );
35      target => 'name',    }
36    };    
37    #my $result = $self->queryXml("*/target[\@name=\"$target\"]", keyattr => $keyattr, forcearray => 1);    return $self->{__rap}->{metadbengine};
38    $self->queryXml("*/target[\@name=\"$target\"]");  
   #return $self->_queryXml($self->{filename}, "target");  
   #print Dumper($result);  
   #return $result->{target};  
   #return $result->{target}->{$target};  
   #return $result;  
   $self->xml2easytree();  
   return $self->{payload};  
39  }  }
40    
41  sub readXmlOverview {  sub getTargetList {
42    my $self = shift;    my $self = shift;
43    
44    $self->log( "Reading Job Database from XML.", 'notice' );    $self->log( "Reading database of targets (dot) from XML.", 'notice' );
45    
46    #$self->{payload} = XMLin($self->{filename});    # prepare access to metadata (assure instantiated storage handle)
47    #my $result = $self->queryXml("*/target", forcearray => 1);    my $mdbe = $self->accessMetadata();
48    #my $result = $self->queryXml("*/target", keyattr =>[]);  
49    $self->queryXml("*/target", keyattr => [qw( name )] );    $mdbe->sendQuery("*/target");
50    $self->xml2simplehash();    $mdbe->circumflex('result');  
   #return $result;  
     
 }  
51    
52    sub queryXml {    # checks  
53      my $self = shift;      if ($mdbe->isEmpty) {
54      my $xpq = shift;        $self->log("XML metadata was empty.", 'critical');
     my $options = shift;  
   
     $self->log( "_queryXml( xpq='$xpq' ) ", 'info' );  
   
     my $file = $self->{filename};  
       
     if (! -e $file) {  
       $self->log("file not found: '$file'", 'error');  
55        return;        return;
56      }      }
57      
58      # trace
59        #print Dumper($self->{buffer});
60        #exit;
61    
62      # behaviour
63        #$self->xml2simplehash();
64        my $tree = $mdbe->toEasyTree();
65      #return $result;
66      
67      # trace
68        #print Dumper($tree);
69        #exit;
70      
71      # build result
72        my @targets;
73        foreach my $entry (@{$tree->{content}}) {
74          my $description = $entry->{content}->[0]->{content}->[0]->{content};
75          push @targets, { name => $entry->{attrib}->{name}, description => $description };
76        }
77    
78      #print "file: $file", "\n";    return \@targets;
79      #print "xpq: $xpq", "\n";    
80        }
     # filter nodes by xpath-query  
       my $xp = XML::XPath->new( filename => $file );  
       my $nodeset = $xp->find($xpq);  
       
     # build result xml  
       my $buffer;  
       foreach my $node ($nodeset->get_nodelist) {  
         $buffer .= XML::XPath::XMLParser::as_string($node) . "\n\n";  
       }  
       #$buffer .= '';  
       #$buffer = "<result>$buffer</result>";  
       
     # trace  
       #print $buffer, "\n";  
   
     $self->{buffer} = $buffer;  
       
   }  
81    
82    
83  sub xml2easytree {  sub getTargetDetails {
84    my $self = shift;    my $self = shift;
85      # convert xml data to native perl data structure    my $target = shift;
86        my $parser = XML::Parser->new( Style => 'EasyTree', Handlers => { Char => sub {} } );    
87        my $data = $parser->parse($self->{buffer});    # get metadata for single task from storage
88      my $mdbe = $self->accessMetadata();
89      my $hash = $data->[0];    $mdbe->sendQuery("*/target[\@name=\"$target\"]");
90          
91      # trace    # FIXME: this is wrong behaviour! upper statement should return a proper
92        #print Dumper($hash);    # result, which itself (already) has the method 'isEmpty' or similar...
93        #exit;    if ($mdbe->isEmpty()) {
94        $self->log( "Target '$target' not found.", 'notice' );
95      $self->{payload} = $hash;      return;
96      }
97      
98      my $tree = $mdbe->toEasyTree();
99      
100      # trace
101      #print Dumper($tree);
102      #exit;
103      
104      return $tree;
105  }  }
106    
 sub xml2simplehash {  
   my $self = shift;  
   $self->{payload} = XMLin($self->{buffer});  
 }  
107    
108  1;  1;
109  __END__  __END__

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.3

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed