wsman-epr.i

end point reference declarations for openwsman swig bindings

EndPointReference

%rename(EndPointReference) epr_t; %nodefault epr_t;

struct epr_t {}; without empty struct, the %rename isn't executed.

typedef struct {} epr_t;

/*

 Document-class: EndPointReference

 The EndPointReference is a stub to proxy server-side operations

 Each WS-Management operation (Get, Enumerate, Invoke, ...) has an
 associated end point reference, providing the actual implementation of
 the operation.

/

%extend epr_t { if defined(SWIGRUBY)

/*
   Create EndPointReference from URI (String) or XML (XmlNode or XmlDoc)

   call-seq:
     EndPointReference.new(uri, address, { key=>value, ...})
     EndPointReference.new(uri)
     EndPointReference.new(xml)

  /
epr_t( VALUE uri, VALUE address = Qnil, VALUE selectors = Qnil) {
  KLASS_DECL(SwigClassXmlNode,SWIGTYPE_p___WsXmlNode);
  KLASS_DECL(SwigClassXmlDoc,SWIGTYPE_p__WsXmlDoc);
  if (!NIL_P(address) || !NIL_P(selectors)) {
    const char *uri_s = as_string(uri);
    const char *address_s = as_string(address);
    return epr_create(uri_s, value2hash(NULL,selectors,1), address_s);
  }
  else if (CLASS_OF(uri) == KLASS_OF(SwigClassXmlNode)) {
    WsXmlNodeH node;
    SWIG_ConvertPtr(uri, (void **)&node, SWIGTYPE_p___WsXmlNode, 0);
    return my_epr_deserialize(node);
  }
  else if (CLASS_OF(uri) == KLASS_OF(SwigClassXmlDoc)) {
    WsXmlDocH doc;
    WsXmlNodeH node;
    SWIG_ConvertPtr(uri, (void **)&doc, SWIGTYPE_p__WsXmlDoc, 0);
    node = ws_xml_get_soap_body(doc);
    if (node == NULL)
      node = ws_xml_get_doc_root(doc);
    return my_epr_deserialize(node);
  }
  else {
    return epr_from_string(as_string(uri));
  }
}

else

epr_t( const char *uri, const char *address) {
  return epr_create( uri, NULL, address);
}
epr_t( const char *uri ) {
  return epr_from_string( uri );
}

endif

~epr_t() {
  epr_destroy( $self );
}

if defined(SWIGRUBY)

%newobject clone;
/*
   clone the EndPointReference instance

  /
epr_t *clone(const epr_t *epr) {
  return epr_copy(epr);
}

endif

/*
   Add selector as key/value pair

  /
void add_selector(const char *name, const char *text) {
  epr_add_selector_text($self, name, text);
}

/*
   Serialization

   XML-serialize EndPointReference as child (with namespace and name) of node

  /
int serialize( WsXmlNodeH node, const char *ns, const char *epr_node_name, int embedded) {
  return epr_serialize(node, ns, epr_node_name, $self, embedded);
}

if defined(SWIGRUBY)

%alias cmp "==";
%typemap(out) int cmp
  "$result = ($1 == 0) ? Qtrue : Qfalse;";

endif

/*
   Compare two EndPointReferences

  /
int cmp(const epr_t *epr2) {
  return epr_cmp($self, epr2);
}

/*
   String representation (XML syntax)

  /
char *to_xml( const char *ns = NULL, const char *epr_node_name = NULL) {
  return epr_to_txt($self, ns?ns:XML_NS_ADDRESSING, epr_node_name?epr_node_name:WSA_EPR);
}

if defined(SWIGJAVA)

%rename("toString") string();

endif if defined(SWIGRUBY)

%rename("to_s") string();

endif

%newobject string;
/*
   String representation (<uri>?<selector>,<selector>,...)

  /
char *string() {
  return epr_to_string($self);
}

/*
   Number of selectors
  /
int selector_count(void) {
  return epr_selector_count($self);
}

/*
   The resource URI associated to this EndPointReference

  /
char *resource_uri(void) {
  return epr_get_resource_uri($self);
}

if defined(SWIGRUBY)

/*
   Get value of selector by name
   epr#selector converts any value passed to String

   ==== Shortcut
   epr.selector("name") can also be abbreviated as epr.name

   ==== Examples
     epr.selector("name")
     epr.selector(value)
     epr.name
  /
char *selector(VALUE v) {
  const char *name = as_string(v);

else

/*
   get value of selector by name

  /
char *selector(const char* name) {

endif

  return wsman_epr_selector_by_name($self, name);
}

if !defined(SWIGJAVA) /* Target_* undefined for Java in openwsman.i */

/*
   Return list of selector names
  /

if defined(SWIGRUBY)

VALUE selector_names(void) {

endif if defined(SWIGPYTHON)

PyObject *selector_names(void) {

endif if defined(SWIGPERL)

AV *selector_names(void) {

endif

int i;
Target_Type ary = Target_SizedArray($self->refparams.selectorset.count);
key_value_t *p = $self->refparams.selectorset.selectors;
for (i = 0; i < $self->refparams.selectorset.count; i++) {
  Target_ListSet(ary, i, SWIG_FromCharPtr(p->key));
  ++p;
}

if defined(SWIGPERL)

return (AV *)ary;

else

return ary;

endif

}

endif

if defined(SWIGRUBY)

/*
   enumerate over selectors as key,value pairs

   call-seq:
     epr.each { |key,value| ... }

  /
void each() {
  int i;
  key_value_t *p = NULL;
  VALUE value, ary;
  p = $self->refparams.selectorset.selectors;
  for (i = 0; i < $self->refparams.selectorset.count; i++) {
    ary = rb_ary_new2(2);
    rb_ary_store(ary, 0, SWIG_FromCharPtr(p->key));
    if (p->type == 0) {
      value = SWIG_FromCharPtr(p->v.text);
    } else {
      value = SWIG_NewPointerObj((void*) p->v.epr, SWIGTYPE_p_epr_t, 0);
    }
    rb_ary_store(ary, 1, value);
    rb_yield(ary);
    p++;
  }
}

endif

%newobject classname;
/*
   Classname of EPR
  /
char *classname(void) {
  return uri_classname($self->refparams.uri);
}

%newobject namespace;
/*
   Namespace of EPR
  /
char *namespace(void) {
  char *classname;
  int classnamelen, namespacelen;
  const char *prefix;
  const char *uri;

  /* try to get namespace from selectors (WS-Management style) */
  char *ns = get_cimnamespace_from_selectorset(&($self->refparams.selectorset));
  if (ns) {
    return strdup(ns);
  }
  /* WMI style? - extract namespace from uri */

  uri = $self->refparams.uri;
  prefix = epr_prefix(uri);
  if (prefix == NULL) {
    return NULL; /* bad classname in URI */
  }
  classname = uri_classname(uri);
  if (classname == NULL)
    return NULL; /* bad URI */
  classnamelen = strlen(classname);
  free(classname);
  namespacelen = strlen(uri) - classnamelen - strlen(prefix) - 2; /* drop enclosing slashes */
  if (namespacelen <= 0)
    return strdup("");
  /* copy after prefix slash (+ 1) */
  return strndup(uri + strlen(prefix) + 1, namespacelen);
}

%newobject prefix;
/*
   Prefix of EPR
  /
char *prefix(void) {
  return epr_prefix($self->refparams.uri);
}

}