#!perl -wWall
use strict;
use vars qw(@ISA);
use XML::LibXML;
@ISA = qw{MOBY::Adaptor::moby::DataAdapterI}; # implements the interface
use vars qw /$VERSION/;
$VERSION = sprintf "%d.%02d", q$Revision: 1.3 $ =~ /: (\d+)\.(\d+)/;
=head1 NAME
MOBY::Adaptor::moby::impl::FetaQueryAdaptor.pm - FetaQueryAdaptor
=head1 DESCRIPTION
Todo
=head2 _queryServiceInstanceHash
Title : _queryServiceInstanceHash
Usage : my $un = $API->_queryServiceInstanceHash($xml)
Function : Parses the FETA response XML and creates a hashref of a services properties
Args : FETA response XML => => String
Returns : hashref:
{service_instance_id => Integer,
category => String,
servicename => String,
service_type_uri => String,
authority.authority_uri => String,
url => String,
service_instance.contact_email => String,
authoritative => Integer,
description => String,
signatureURL => String,
lsid => String}
=cut
sub queryServiceInstanceHash {
my ($inputString) = @_;
my %qsiHash;
my $parser = XML::LibXML->new();
my $fetaDom = $parser->parse_string($inputString);
my ( $value, $key );
# add the key/value pair for service_instance_id
$key = 'service_instance_id';
$value = getValueByTagnameNS( $fetaDom, 'serviceName' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for category
$key = 'category';
$value = getValueByTagnameNS( $fetaDom, 'Category' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for servicename
$key = 'servicename';
$value = getValueByTagnameNS( $fetaDom, 'serviceName' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for service_type_uri
$key = 'service_type_uri';
$value = getValueByTagnameNS( $fetaDom, 'operationTask' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for authority.authority_uri
$key = 'authority.authority_uri';
$value = getValueByTagnameNS( $fetaDom, 'serviceName' );
my @auth = split( /\,/, $value );
if ( defined $auth[0] ) {
$qsiHash{$key} = $auth[0];
}
# add the key/value pair for url
$key = 'url';
$value = getValueByTagnameNS( $fetaDom, 'locationURL' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for service_instance.contact_email
$key = 'service_instance.contact_email';
$value = getValueByTagnameNS( $fetaDom, 'email' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for authoritative
$key = 'authoritative';
$value = getValueByTagnameNS( $fetaDom, 'authoritative' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for serviceDescriptionText
$key = 'description';
$value = getValueByTagnameNS( $fetaDom, 'serviceDescriptionText' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for signatureURL
$key = 'signatureURL';
$value = getValueByTagnameNS( $fetaDom, 'signautureURL' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
# add the key/value pair for lsid
$key = 'lsid';
$value = getValueByTagnameNS( $fetaDom, 'lsid' );
if ( defined $value ) {
$qsiHash{$key} = $value;
}
#done
return \%qsiHash;
}
=head2 _querySimpleInputHash
Title : _querySimpleInputHash
Usage : my $un = $API->_querySimpleInputHash($xml)
Function :
Args : FETA response xml => String,
Returns : listref of hashrefs:
[{object_type_uri => String,
namespace_type_uris => String,
article_name => String,
service_instance_id => Integer}, ...]
=cut
sub querySimpleInputHash {
my ($inputString) = @_;
my %qsiHash;
my $parser = XML::LibXML->new();
my $fetaDom = $parser->parse_string($inputString);
my $nodes = $fetaDom->getElementsByTagName('operationInputs/parameter');
#
# articleName1
# false
# http://biomoby.org/RESOURCES/MOBY-S/Objects#DNASequence
# String
# Simple
#
}
=head2 _querySimpleOutputHash
Title : _querySimpleOutputHash
Usage : my $un = $API->_querySimpleOutputHash($xml)
Function : Parses the FETA response xml and creates a hashref describing the output simples
Args : FETA response xml => String,
Returns : listref of hashrefs:
[{object_type_uri => String,
namespace_type_uris => String,
article_name => String,
service_instance_id => Integer}, ...]
Notes : Only allows querying by lsid or type term, so service_instance_id is retrieved from lsid or term
=cut
sub _querySimpleOutputHash {
}
=head2 _queryCollectionInputHash
Title : _queryCollectionInputHash
Usage : my $un = $API->_queryCollectionInputHash($xml)
Function : get the collection input information for a given service from the FETA response XML
Args : FETA response xml => String,
Returns : listref of hashrefs:
[{collection_input_id => Integer
article_name => String}, ...]
one hashref for each collection that service consumes
=cut
sub _queryCollectionInputHash {
}
=head2 _queryCollectionOutputHash
Title : _queryCollectionOutputHash
Usage : my $un = $API->_queryCollectionOutputHash($xml)
Function : get the collection output information for a given service from the FETA response XML
Args : FETA response xml => String,
Returns : listref of hashrefs:
[{collection_output_id => Integer
article_name => String}, ...]
one hashref for each collection that service consumes
=cut
sub _queryCollectionOutputHash {
}
sub getValueByTagnameNS {
my ( $dom, $tagname, $ns ) = @_;
unless ($ns) {
$ns = '';
}
my $node = $dom->getElementsByTagNameNS( $ns, $tagname );
if ( $node->size == 1 ) {
my $string = $node->get_node(1)->textContent();
return $string;
}
return undef;
}
my $string = <
test.suite.com,myfirstservice
http://illuminae/cgi-bin/service.pl
This service is my first service and does nothing
test.suite.com,myfirstservice
This service is my first service and does nothing
myInputDNASequence
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#DNASequence
String
Simple
myInputGFF2
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#GFF2
String
Simple
myInputCollection
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#BasicGFFSequenceFeature
String
Collection
myInputCollection
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#Integer
String
Collection
myInputCollectionOfObject
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#Object
String
Collection
myBag
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#BasicGFFSequenceFeature
String
Collection
myInputCollection
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#Float
String
Collection
myOutputCollection
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#GFF
String
Collection
myOutputCollection
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#GFF2
String
Collection
myOutputObject
false
http://biomoby.org/RESOURCES/MOBY-S/Objects#Object
String
Simple
Retrieval
BioMOBY service
END_QUOTE
my $hash_ref = queryServiceInstanceHash($string);
while ( my ( $key, $value ) = each(%$hash_ref) ) {
print "$key => $value\n";
}