The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

 perfSONAR_PS::DataModels::APIBuilder - builder utils to build binding perl objects collection
 

DESCRIPTION

      single call is here with several private ones
      the public call is:
      buildAPI(<top object name>, <top object>, <path>,<API root name>);
   

SYNOPSIS

      ###
      use   perfSONAR_PS::DataModels::DataModel  qw($message); 
      use  perfSONAR_PS::DataModels::APIBuilderqw(&buildAPI  $API_ROOT $TOP_DIR $DATATYPES_ROOT) ;
       
      $API_ROOT = 'perfSONAR_PS';
      $TOP_DIR = "/tmp/API/" .$API_ROOT;   
      $DATATYPES_ROOT = 'Datatypes';
       
      buildAPI('message', $message, '','' );
      ####
       

API

Exported variables

  $API_ROOT  - name of the  API  ( empty string by default)
  $TOP_DIR  - top dirname of the API location( /tmp/API by default)
  $DATATYPES_ROOT - dirname for schema datamodel files
 

buildAPI

   builds the whole API recursively
   
   accepts  four parameters
   - name of the root element - message by default
   - top hashref ( object to be built) 
   -   path ( empty by default )
   -   root API name ( empty by default )  
 
    

buildClass

   builds  single class on the filesystem and corresponded test file
   
   accepts  four parameters
     -   full  path to the class ( except for .pm extension)
     -   full  package  name  
     -   name of the   element 
     -   hashref with the element definition  
     -   hashref with parent definition if its not the root element

NAME

 $className  - A base class, implements  '$name'  element from the perfSONAR_PS RelaxNG schema
  

DESCRIPTION

   Object representation of the $name element.
   Object fields are:
EOA
#------------------------------------------------------------------------------
map { print $fh   "    Scalar:     $_, \n"  }   @attributes ;
map { print $fh   "    Object reference:   " . $_->[0]  . " => type " . ref($_->[1]) . ",\n" }  @elements ;
   
  
   print $fh <<EOB;
   
   The constructor accepts only single parameter, it could be a hashref to parameters hash  or DOM with  '$name' element 
    
    

SYNOPSIS

              use $className;
          
          my \$el =  $className->new(\$DOM_Obj);
 

METHODS

new( )

      creates   object, accepts DOM with  element tree or hashref to the list of
      keyd parameters
EOD
map { print $fh   "         $_   => undef, \n"  }  @attributes ;
map { print $fh   "         " . $_->[0]  . " => " . ref($_->[1]) . ",\n"   }  @elementnodes;
print $fh "text => 'text'\n" if $element->{text};              
 

print $fh <<EOF;

getDOM (\$)

       accept parent DOM
       return $name object DOM, generated from object contents 
  

add$subname()

    if any of subelements can be an arrray then this method will provide
    facility to add another element to the  array and will return ref to such array
    or just set the element to a new one

remove\u${subname}ById()

     remove specific element from the array of ${subname} elements by id ( if id is supported by this element )
     accepts single param - id - which is id attribute of the element
     if there is no array then it will return undef and warninig
     if it removed some id then \$id will be returned
     

get\u${subname}ByMetadataIdRef()

     get specific object from the array of ${subname} elements by  MetadataIdRef( if  MetadataIdRef is supported by this element )
     accepts single param -  MetadataIdRef
     if there is no array then it will return just an object
     

get\u${subname}ById()

     get specific element from the array of ${subname} elements by id ( if id is supported by this element )
     accepts single param - id
     if there is no array then it will return just an object
     

querySQL ()

      depending on config  it will return some hash ref  to the initialized fields
    for example querySQL ()
    accepts one optional prameter - query hashref
    will return:
    { ip_name_src =>  'hepnrc1.hep.net' },}
    

merge

      merge with another $name ( append + overwrite if exists )
      we can do it differently
      method #1:
         convert to dom both objects and then get resulted object from combined dom 
      method #2 default:
         through the introspection of the object

buildIdMap()

    if any of subelements has id then get a map of it in form of
    hashref to { element}{id} = index in array and store in the idmap field

buildrefIdMap ()

    if any of subelements has  metadataIdRef  then get a map of it in form of
    hashref to { element}{ metadataIdRef } = index in array and store in the idmap field

asString()

   shortcut to get DOM and convert into the XML string
   returns XML string  representation of the  $name object

registerNamespaces ()

   will parse all subelements and register all namepspaces within the $name namespace

fromDOM (\$)

   accepts parent XML DOM   element   tree as parameter 
   returns $name  object

AUTHORS

   Maxim Grigoriev (FNAL)  2007-2008, maxim\@fnal.gov