/*
* wsman-filter.i * * filter declarations for openwsman swig bindings * */
%rename(Filter) filter_t; %nodefault filter_t; typedef struct {
char *resultClass; char *assocClass;
} filter_t;
if defined(SWIGRUBY) %{
/* * Build associators (type == 0) or references (type == 1) filter * */ static int associators_references( void *filter, int type, VALUE epr_v, VALUE assocClass_v, VALUE resultClass_v, VALUE role_v, VALUE resultRole_v, VALUE resultProp_v, VALUE propNum_v) { epr_t *epr = NULL; const char *assocClass = as_string(assocClass_v); const char *resultClass = as_string(resultClass_v); const char *role = as_string(role_v); const char *resultRole = as_string(resultRole_v); char **resultProp = NULL; int propNum = 0; int res; KLASS_DECL(SwigClassEndPointReference,SWIGTYPE_p_epr_t); if (CLASS_OF(epr_v) == KLASS_OF(SwigClassEndPointReference)) { SWIG_ConvertPtr(epr_v, (void **)&epr, SWIGTYPE_p_epr_t, 0); } else { epr = epr_from_string(as_string(epr_v)); } if (!NIL_P(resultProp_v)) { int i; if (TYPE(resultProp_v) != T_ARRAY) { SWIG_exception( SWIG_ArgError(resultProp_v), Ruby_Format_TypeError( "", "Array", "resultProp", 6, resultProp_v ) ); } resultProp = (char **)calloc(RARRAY_LEN(resultProp_v), sizeof(char *)); for (i = 0; i < RARRAY_LEN(resultProp_v); ++i) { resultProp[i] = (char *)as_string(rb_ary_entry(resultProp_v, i)); ++propNum; } } res = filter_set_assoc((filter_t *)filter, epr, type, assocClass, resultClass, role, resultRole, resultProp, propNum); if (resultProp) free(resultProp); return res; }
%} endif
/*
* Document-class: Filter * * Filter are evaluated on the server side and help to reduce the amount * of processing and information transport. * * There are five basic ways to filter * * associations * * references * * XPath * * CQL (CIM query language) * * WQL (WS-Management query language) * * Openwsman does not do any filter processing by itself but passes it * to the backend CIMOM. Support for filters and query languages thus * depends on the used CIMOM. * */
%extend filter_t {
/* * Create empty filter * */ filter_t() { return filter_initialize(); } ~filter_t() { filter_destroy( $self ); }
if defined(SWIGJAVA)
%typemap(in) (char **resultProp, const int propNum) { int i = 0; $2 = (*jenv)->GetArrayLength(jenv, $input); $1 = (char **) malloc(($2+1)*sizeof(char *)); /* make a copy of each string */ for (i = 0; i<$2; i++) { jstring j_string = (jstring)(*jenv)->GetObjectArrayElement(jenv, $input, i); const char * c_string = (*jenv)->GetStringUTFChars(jenv, j_string, 0); $1[i] = malloc((strlen(c_string)+1)*sizeof(char)); strcpy($1[i], c_string); (*jenv)->ReleaseStringUTFChars(jenv, j_string, c_string); (*jenv)->DeleteLocalRef(jenv, j_string); } $1[i] = 0; }
/* This cleans up the memory we malloc’d before the function call */
%typemap(freearg) (char **resultProp, const int propNum) { int i; for (i=0; i<$2-1; i++) free($1[i]); free($1); } %typemap(jni) (char **resultProp, const int propNum) "jobjectArray" %typemap(jtype) (char **resultProp, const int propNum) "String[]" %typemap(jstype) (char **resultProp, const int propNum) "String[]" %typemap(javain) (char **resultProp, const int propNum) "$javainput"
endif if defined(SWIGRUBY)
/* * Set associators filter * call-seq: * filter.associators(end_point_reference, assoc_class_name, result_class_name, role, result_role, result_prop[], prop_num) * */ int associators( VALUE epr_v = Qnil, VALUE assocClass_v = Qnil, VALUE resultClass_v = Qnil, VALUE role_v = Qnil, VALUE resultRole_v = Qnil, VALUE resultProp_v = Qnil, VALUE propNum_v = Qnil) { return associators_references( $self, 0, epr_v, assocClass_v, resultClass_v, role_v, resultRole_v, resultProp_v, propNum_v); }
else
int associators( epr_t *epr, const char *assocClass, const char *resultClass, const char *role, const char *resultRole, char **resultProp, const int propNum) { return filter_set_assoc($self, epr, 0, assocClass, resultClass, role, resultRole, resultProp, propNum); }
endif if defined(SWIGRUBY)
/* * Set references filter * * call-seq: * filter.references(end_point_reference, assoc_class_name, result_class_name, role, result_role, result_prop[], prop_num) * */ int references( VALUE epr_v = Qnil, VALUE assocClass_v = Qnil, VALUE resultClass_v = Qnil, VALUE role_v = Qnil, VALUE resultRole_v = Qnil, VALUE resultProp_v = Qnil, VALUE propNum_v = Qnil) { return associators_references( $self, 1, epr_v, assocClass_v, resultClass_v, role_v, resultRole_v, resultProp_v, propNum_v); }
else
int references( epr_t *epr, const char *assocClass, const char *resultClass, const char *role, const char *resultRole, char **resultProp, const int propNum) { return filter_set_assoc($self, epr, 1, assocClass, resultClass, role, resultRole, resultProp, propNum); }
endif
/* * Set simple dialect/query filter * call-seq: * filter.simple(dialect, query) * */ int simple(const char *dialect, const char *query) { return filter_set_simple($self, dialect, query ); } /* * Set XPath filter * call-seq: * filter.xpath(query) * */ int xpath(const char *query) { return filter_set_simple($self, WSM_XPATH_FILTER_DIALECT, query ); } /* * Set CQL (CIM query language) filter * call-seq: * filter.cql(query) * */ int cql(const char *query) { return filter_set_simple($self, WSM_CQL_FILTER_DIALECT, query ); } /* * Set WQL (WS-Management query language) filter * call-seq: * filter.wql(query) * */ int wql(const char *query) { return filter_set_simple($self, WSM_WQL_FILTER_DIALECT, query ); }
}