Solaris WBEM Developer's Guide

Example of Generating JavaBeans Components

The following example shows the JavaBeans components that are produced when you use the mofcomp command with the -j option.

You must run the mofcomp command as root or as a user with write access to the name space in which you are compiling.


Note –

Avoid specifying both the -u (user) and -p (password) options when running the mofcomp command. You want to avoid having to type your password directly on the command line. Instead, specify only the -u option so that you are prompted to specify an encrypted password.



Example 7–1 Generating JavaBeans Components


/usr/sadm/bin/mofcomp -u root p mypassword -o /tmp \
-j /tmp/bean.txt /usr/sadm/mof/Simple.mof

The content of /usr/sadm/mof/Simple.mof is as follows:


/usr/sadm/mof/Simple.mof
-------------------
#pragma include ("CIM_Core26.mof")

class Simple_Class {

      [Key, Description ("Name of the class.") ]
   string Name;

      [Description ("Method to print the contents of the class.") ]
   string printClass();

};

The content of /tmp/bean.txt is as follows:


/tmp/bean.txt
----------
PACKAGE=foo.com
IMPORTS=java.lang.Exception
EXCEPTIONS=Exception

The content of CIMBean.java is as follows:

package foo.com;

import javax.wbem.cim.CIMException;
import javax.wbem.client.CIMOMHandle;
import javax.wbem.cim.CIMInstance;

/**
 * This Interface defines the methods that must be implemented by 
 *  CIMBeanImpl and its subclasses. CIMBeanImpl constitutes the base
 *  class of the Java source generated by 'mofcomp -j'. 
 */
public interface CIMBean {

    /**
     * This method returns the CIMBean's CIMOMHandle.
     * 
     * @return	CIMOMHandle	handle to the CIMOM
     */
    public CIMOMHandle getCIMOMHandle();

    /**
     * This method sets the CIMBean's CIMOMHandle to the specifed value.
     * 
     * @param	CIMOMHandle	handle to the CIMOM
     */
    public void setCIMOMHandle(CIMOMHandle handle);

    /**
     * This method returns the CIMBean's CIMInstance.
     * 
     * @return	CIMInstance	handle to the CIMInstance being managed
     */
    public CIMInstance getCIMInstance();

    /**
     * This method sets the CIMBean's CIMInstance to the specified value.
     * 
     * @param	CIMInstance	handle to the CIMInstance being managed
     */
    public void setCIMInstance(CIMInstance instance);

    /**
     * This method makes the remote call to update the CIMInstance in the 
     * CIMOM. 
     */
    public void update() throws CIMException;

    /**
     * This method makes the remote call to update the specified 
     * CIMProperty of the CIMInstance in the CIMOM. 
     * 
     * @param	String	property name to update in the CIMInstance
     * @param	Object	property value to update in the CIMProperty
     */
    public void update(String propName, Object value) throws CIMException;

    /**
     * This method makes the remote call to delete the CIMInstance in the 
     * CIMOM. 
     */
    public void delete() throws CIMException;

    /**
     * This method returns a string array of the Key qualified property 
     * name(s) in the CIMInstance. This is needed to build the 
     * CIMObjectPath for the CIMInstance if it does not contain any 
     * qualifier information. 
     * 
     * @return String Version qualifier value or "-1" if there isn't 
     * one
     */
    public String[] getBeanKeys();

    /**
     * This method returns the CIM class's Version qualifier value or 
     * '-1' if it does not have this qualifier. 
     * 
     * @return	String[]	array of the key qualified property names
     */
    public String getBeanVersion();

    /**
     * This method returns a string representation of the CIMBean. 
     * This method is intended for debug purposes and the format of the 
     * string may vary from implementation to implementation. The string 
     * returned may be empty, but may not be null. 
     * 
     * @return	String	string representation of the Bean
     */
    public String toString();

} // Interface CIMBean

The content of CIMBeanImpl.java is as follows:

package foo.com;

import java.io.Serializable;
import java.util.*;
import javax.wbem.client.CIMOMHandle;
import javax.wbem.cim.CIMException;
import javax.wbem.cim.CIMInstance;
import javax.wbem.cim.CIMObjectPath;
import javax.wbem.cim.CIMValue;
import javax.wbem.client.CIMOMHandle;

/**
 * This Class implements the CIMBean Interface. It is the base Class 
 * of the Java source code generated by 'mofcomp -j'. 
 */
public class CIMBeanImpl implements CIMBean, Serializable {

    private CIMInstance	cimInstance = null;
    private CIMOMHandle	cimomHandle = null;

    /**
     * This default constructor takes no parameters and creates an empty 
     * instance of CIMBeanImpl. 
     */
    public CIMBeanImpl() {

	super();

    } // constructor

    /**
     * This constructor takes the specified CIMOMHandle and CIMInstance and 
     * creates a CIMBeanImpl. 
     * 
     * @param	CIMOMHandle	handle to the CIMOM
     * @param	CIMInstance	handle to the CIMInstance being managed
     */
    public CIMBeanImpl(CIMOMHandle handle, CIMInstance instance) {

	super();
	cimomHandle = handle;
	cimInstance = instance;

    } // constructor

    /**
     * This method returns the CIMBean's CIMOMHandle.
     * 
     * @return	CIMOMHandle	handle to the CIMOM
     */
    public CIMOMHandle getCIMOMHandle() {

	return (cimomHandle);

    } // getCIMOMHandle

    /**
     * This method sets the CIMBean's CIMOMHandle to the specifed value.
     * 
     * @param	CIMOMHandle	handle to the CIMOM
     */
    public void setCIMOMHandle(CIMOMHandle handle) {

	this.cimomHandle = handle;

    } // setCIMOMHandle

    /**
     * This method returns the CIMBean's CIMInstance.
     * 
     * @return	CIMInstance	handle to the CIMInstance being managed
     */
    public CIMInstance getCIMInstance() {

	return (cimInstance);

    } // getCIMInstance

    /**
     * This method sets the CIMBean's CIMInstance to the specified 
     * value.
     * 
     * @param	CIMInstance	handle to the CIMInstance being managed
     */
    public void setCIMInstance(CIMInstance instance) {

	this.cimInstance = instance;

    } // setCIMInstance

    /**
     * This method makes the remote call to update the CIMInstance in 
     * the CIMOM. 
     */
    public void update() throws CIMException {

	cimomHandle.setInstance(getObjectPath(), cimInstance);

} // update

    /**
     * This method makes the remote call to update the specified 
     * CIMProperty of the CIMInstance in the CIMOM. 
     * 
     * @param	String	property name to update in the CIMInstance
     * @param	Object	property value to update in the CIMProperty
     */
    public void update(String propName, Object value) throws CIMException {

	cimomHandle.setProperty(getObjectPath(), propName, new CIMValue(value));

    } // update

    /**
     * This method makes the remote call to delete the CIMInstance in the 
     * CIMOM. 
     */
    public void delete() throws CIMException {

	cimomHandle.deleteInstance(getObjectPath());

    } // delete

    /**
     * This is a convenience method for use by subclasses to get the 
     * Object contained in the given CIMProperty's CIMValue. 
     * NOTE: The Object returned may be null. 
     * 
     * @param	String	property name whose value should be retrieved
     * @return	Object	object contained in the CIMProperty's CIMValue
     */
    protected Object getProperty(String propName) {

	try {

	    return (cimInstance.getProperty(propName).getValue().getValue());

	} catch (NullPointerException npe) {
	}
	return ((Object)null);

    } // getProperty

    /**
     * This is a convenience method for use by subclasses to get 
     * the String[] equivalent to the Vector contained in the given 
     * CIMProperty's CIMValue. 
     * NOTE: The String[] returned may be null. 
     * 
     * @param	String	property name to get the value for
     * @param	String[]	property Values qualifier data
     * @param	Object[]	property ValueMap qualifier data
     * @return	String[]	container of constants for property value
     */
    protected String[] getArrayProperty(String propName, String[] 
    valueArr,	Object[] valueMapArr) {

	List propList = null;
	try {

	    propList =
		((List)cimInstance.getProperty(propName).getValue().getValue());

	} catch (NullPointerException npe) {
	}

	if (propList != null) {

	    String[] returnArr;
	    returnArr = new String[propList.size()];
	    ListIterator listIterator = propList.listIterator();
	    int counter = 0;
	    while (listIterator.hasNext()) {

		returnArr[counter] = valueArr[getArrayIndex(valueMapArr,
		    listIterator.next())];
		counter++;

	    }
	    return (returnArr);

	}
	return ((String[])null);

    } // getArrayProperty

    /**
     * This method gets the CIMInstance referenced by the property 
     * value (i.e., the object path specified) and sets it in the 
     * specified Bean. This method is used by accessor methods of 
     * Association properties. 
     * 
     * @param	CIMObjectPath	object path for the CIMInstance
     * @param	CIMBeanImpl	Bean container for CIMInstance retrieved
     */
    protected void getAssociationProperty(CIMObjectPath cop, 
    CIMBeanImp	bean) throws CIMException {

	cop.setNameSpace("");
	CIMInstance ci = cimomHandle.getInstance(cop, false, true, true,
	    (String[])null);
	bean.setCIMInstance(ci);
	bean.setCIMOMHandle(cimomHandle);

    } // getAssociationProperty

    /**
     * This is a convenience method for use by subclasses to set a 
     * CIMValue containing the specified Object value in the 
     * CIMProperty of the specified name. 
     * 
     * @param	String	property name to set a new value for
     * @param	Object	property value to update in the CIMInstance
     */
    protected void setProperty(String propName, Object propValue)throws
	IllegalArgumentException {

	cimInstance.setProperty(propName, new CIMValue(propValue));

    } // setProperty

    /**
     * This is a convenience method for use by subclasses to set a 
     * CIMValue containing a Vector equivalent to the specified 
     * String[] in the CIMProperty of the specified name. 
     * 
     * @param	String	property name to get the value for
     * @param	String[]	property Values qualifier data
     * @param	Object[]	property ValueMap qualifier data
     * @param	String[]	property value to set in the CIMInstance
     */
    protected void setArrayProperty(String propName, String[] valueArr,
	Object[] valueMapArr, String[] propValues) {

	Vector vPropValue = new Vector(propValues.length);
	for (int i = 0; i < propValues.length; i++) {

	    vPropValue.addElement(valueMapArr[getArrayIndex(valueArr,
		propValues[i])]);

	}
	setProperty(propName, vPropValue);

    } // setArrayProperty

    /**
     * This method returns a string array of the Key qualified property 
     * name(s) in the CIMInstance. This is needed to build the 
     * CIMObjectPath for the CIMInstance if it does not contain any 
     * qualifier information. 
     * 
     * @return	String[]	array of the key qualified property names
     */
    public String[] getBeanKeys() {

	return ((String[])null);

    } // getBeanKeys

    /**
     * This method returns the CIMObjectPath of the class's CIMInstance.
     * 
     * @return	CIMObjectPath	object path for the CIMInstance
     */
    protected CIMObjectPath getObjectPath() {

	CIMObjectPath cop = new CIMObjectPath(cimInstance.getClassName());
	Vector vKeys = cimInstance.getKeyValuePairs();
	if ((vKeys != null) && (vKeys.size() > 0)) {

	    cop.setKeys(vKeys);

	} else {

	    String[] keyArr = getBeanKeys();
	    if (keyArr != null) {

		String keyProperty;
		for (int i = 0; i < keyArr.length; i++) {

		    keyProperty = keyArr[i];
		    cop.addKey(keyProperty,
			(cimInstance.getProperty(keyProperty)).getValue());

		}

	    }

	}
	return (cop);

    } // getObjectPath

    /**
     * This convenience method returns the index of the specified 
     * object in the specified array, or '-1' if the object is not 
     * contained in the array. 
     * 
     * @param	Object[]	Object array to find index of Object in
     * @param	Object	Object to find index of in Object array
     * @return	int	index of Object in Object array
     */
    protected int getArrayIndex(Object[] objArr, Object obj) {

	List arrList = Arrays.asList(objArr);
	return (arrList.indexOf(obj));

    } // getArrayIndex

    /**
     * This method returns the CIM class's Version qualifier value, or 
     * '-1' if it does not have this qualifier. 
     * 
     * @return	String	Version qualifier value or '-1' if there isn't 
     * one
     */
    public String getBeanVersion() {

	return ("-1");

    } // getBeanVersion

    /**
     * This method returns a string representation of the CIMBean. 
     * This method is intended for debug purposes and the format of 
     * the string may vary from implementation to implementation. 
     * The string returned may be empty, but may not be null. 
     * 
     * @return	String	string representation of the Bean
     */
    public String toString() {

	return (cimInstance.toString());

    } // toString

} // Class CIMBeanImpl

The content of Simple_ClassBean.java is as follows:

package foo.com;

import javax.wbem.client.*;
import javax.wbem.cim.*;
import java.util.*;
import java.lang.Exception;

/**
 * This Interface contains accessor and mutator methods for all 
 * properties defined in CIM class Simple_Class as well as methods 
 * comparable to the invokeMethods defined for this class. This Interface 
 * is implemented by Simple_ClassBeanImpl. The CIM class Simple_Class is 
 * described as follows: 
 */
public interface Simple_ClassBean extends CIMBean {

    /**
     * This method returns the Simple_Class.Name property value. This 
     * property is described as follows: 
     * 
     * Name of the class.
     * 
     * @return	String	current Name property value
     * @exception	Exception	
     */
    public String getName() throws Exception;

    /**
     * This method sets the Simple_Class.Name property value. This 
     * property is described as follows: 
     * 
     * Name of the class.
     * 
     * @param	String	new Name property value
     * @exception	Exception	
     */
    public void setName(String name) throws Exception;


    /**
     * This method invokes the Simple_Class.printClass() method. This 
     * method is described as follows: 
     * 
     * Method to print the contents of the class.
     * 
     * @return	String	return value of printClass() invokation
     * @exception	Exception	
     */
    public String printClass() throws Exception, CIMException;

} // Interface Simple_ClassBean

The content of Simple_ClassBeanImpl.java is as follows:

package foo.com;

import javax.wbem.client.*;
import javax.wbem.cim.*;
import java.util.*;
import java.lang.Exception;

/**
 * This class contains accessor and mutator methods for all properties 
 * defined in the CIM class Simple_Class as well as methods comparable 
 * to the invokeMethods defined for this class. This class implements 
 * the Simple_ClassBean interface. The CIM class Simple_Class is 
 * described as follows: 
 */
public class Simple_ClassBeanImpl extends CIMBeanImpl implements 
    Simple_ClassBean {

     private CIMOMHandle cimomHandle = null;
    private CIMInstance cimInstance = null;
    private final static String[] keysArr = {"Name"};

    /**
     * This constructor creates a Simple_ClassBeanImpl class which 
     * implements the Simple_ClassBean interface, and encapsulates the 
     * CIM class Simple_Class in a bean. The CIM class Simple_Class 
     * is described as follows: 
     * 
     * @param	CIMOMHandle	handle to the CIMOM
     * @param	CIMInstance	handle to the CIMInstance being managed
     */
    public Simple_ClassBeanImpl(CIMOMHandle handle, CIMInstance instance) 
	{

 	super(handle, instance);

	this.cimomHandle = handle;
	this.cimInstance = instance;

    } // constructor

    /**
     * This method returns an array of Strings with the names of the key 
     * qualified properties defined for the CIM class. This method is 
     * used to build the CIMObjectPath of the CIMInstance managed by 
     * the Bean in the case that the key qualifiers are not included 
     * in the CIMInstance. 
     * 
     * @return	String[]	array of the key qualified property names
     */
    public String[] getBeanKeys() {

	return keysArr;

    } // getBeanKeys

    /**
     * This method returns the Simple_Class.Name property value. This 
     * property is described as follows: 
     * 
     * Name of the class.
     * 
     * @return	String	current Name property value
     * @exception	Exception	
     */
    public String getName() throws Exception {

	return (String)getProperty("Name");

    } // getName

    /**
     * This method sets the Simple_Class.Name property value. This 
     * property is described as follows: 
     * 
     * Name of the class.
     * 
     * @param	String	new Name property value
     * @exception	Exception	
     */
    public void setName(String name) throws Exception {

	setProperty("Name", name);

    } // setName


    /**
     * This method invokes the Simple_Class.printClass() method. This 
     * method is described as follows: 
     * 
     * Method to print the contents of the class.
     * 
     * @return	String	return value of printClass() invokation
     * @exception	Exception	
     */
    public String printClass() throws Exception, CIMException {

	Vector vInParams = new Vector();
	Vector vOutParams = new Vector();

	CIMValue cv = cimomHandle.invokeMethod(cimInstance.getObjectPath(), 
 "printClass", vInParams, vOutParams);
	return (String)cv.getValue();

    } // printClass
} // Class Simple_ClassBeanImpl