home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / perl5 / RPC / XML / introspection.xpl < prev    next >
Encoding:
Extensible Markup Language  |  2008-11-04  |  3.2 KB  |  103 lines

  1. <?xml version="1.0" encoding="iso-8859-1"?>
  2. <!DOCTYPE methoddef SYSTEM "rpc-method.dtd">
  3. <!--
  4.     Generated automatically by make_method v1.12, Wed Nov  5 03:59:22 2008
  5.  
  6.     Any changes made here will be lost.
  7. -->
  8. <methoddef>
  9. <name>system.introspection</name>
  10. <version>1.1</version>
  11. <signature>array</signature>
  12. <signature>array array</signature>
  13. <signature>struct string</signature>
  14. <help>
  15. Return the name, signatures and help text for the registered methods on
  16. the server. With no parameters, returns an ARRAY of STRUCTs. With an ARRAY
  17. parameter, expects all elements to be of type STRING and specify method
  18. names, with the return value being an ARRAY of STRUCT for the named methods
  19. (in order). If the parameter is a single STRING type, the return value is
  20. a STRUCT for the named method.
  21.  
  22. Each STRUCT will have the following members:
  23.  
  24.         name       A STRING containing the method name
  25.         version    A STRING version stamp. Empty if none was specified.
  26.         signature  An ARRAY containing the signatures, each an ARRAY of STRING
  27.         help       A STRING containing the help text for the method
  28.  
  29. Note that an ARRAY is returned for the signatures even when there is only one
  30. signature.
  31. </help>
  32. <code language="perl">
  33. <![CDATA[
  34. #!/usr/bin/perl
  35. ###############################################################################
  36. #
  37. #   Sub Name:       introspection
  38. #
  39. #   Description:    Collates the data from listMethods, methodHelp and
  40. #                   methodSignature into a single array
  41. #
  42. #   Arguments:      NAME      IN/OUT  TYPE      DESCRIPTION
  43. #                   $srv      in      ref       Server object instance
  44. #                   $list     in      listref   If passed, limit methods listed
  45. #                                     or scalar   to these.
  46. #
  47. #   Globals:        None.
  48. #
  49. #   Environment:    None.
  50. #
  51. #   Returns:        Success:    string or listref
  52. #                   Failure:    fault object
  53. #
  54. ###############################################################################
  55. sub introspection
  56. {
  57.     use strict;
  58.  
  59.     my $srv = shift;
  60.     my $list = shift;
  61.  
  62.     my (@methods, @all_methods, %all_methods, @bad, @results, $scalar, $meth);
  63.  
  64.     my $name = $srv->{method_name};
  65.     $scalar = ($list and (! ref($list))) ? 1 : 0;
  66.     @all_methods = sort $srv->list_methods;
  67.  
  68.     if ($list)
  69.     {
  70.         # This is an expensive-enough operation that I don't want to do it
  71.         # if I don't have to
  72.         @methods = ($scalar) ? ($list) : @$list;
  73.         @all_methods{@all_methods} = (1) x scalar(@all_methods);
  74.         if (@bad = grep(! $all_methods{$_}, @methods))
  75.         {
  76.             local $" = ', ';
  77.             return RPC::XML::fault->new(302, "$name: Method(s) @bad unknown");
  78.         }
  79.     }
  80.     else
  81.     {
  82.         @methods = @all_methods;
  83.     }
  84.  
  85.     # Convert in-place to their objects
  86.     for (@methods) { $_ = $srv->get_method($_); }
  87.     # Since that list came from the server object, we know alls calls were OK
  88.  
  89.     for (@methods)
  90.     {
  91.         push(@results, { name      => $_->name,
  92.                          help      => $_->help,
  93.                          signature => $_->signature,
  94.                          version   => RPC::XML::string->new($_->version) });
  95.     }
  96.  
  97.     return $scalar ? $results[0] : \@results;
  98. }
  99.  
  100. __END__
  101. ]]></code>
  102. </methoddef>
  103.