//
// XMLSetProperty.java
//
// The contents of this file are subject to the SNIA Public License Version 1.0
// (the "License"); you may not use this file except in compliance with the
// License. You may obtain a copy of the License at
//
//	http://www.snia.org/resources/openSource.html
//
// Software distributed under the License is distributed on an "AS IS" basis,
// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the 
// License for the specific language governing rights and limitations
// under the License.
//
// The Original Code is XMLSetProperty.java
// 
// The Initial Developer of the Original Code is David Simons.
//
// Contributor(s):
//
//
// This source uses the Solaris WBEM APIs version 2.2. 
// Synchronization will be maintained with the Solaris WBEM APIS,
// which are being standardized through the Java Community Process.
//
//
// $Id: XMLSetProperty.java,v 1.1 2003/07/17 18:32:55 kumpf Exp $
//
// $Log: XMLSetProperty.java,v $
// Revision 1.1  2003/07/17 18:32:55  kumpf
// HP-BAPU: PEP-64 CIM Client and CIM Listener Java Interface
//
// Revision 1.1.1.1  2001/10/31 18:18:01  karl
// import of SNIA 0_7
//
// Revision 1.5  2000/08/16 06:00:00  shawn
// merge P_TOMCAT31 branch
//
// Revision 1.4.8.1  2000/08/10 00:03:36  shawn
// head merge
//
// Revision 1.4  2000/05/11 10:11:25  davidsi
// - Fixed tabs.
//
// Revision 1.3  2000/05/06 17:20:05  davidsi
// - Brought in line with SUN WBEM APIs 2.2
//
// Revision 1.2  2000/02/13 15:10:08  davidsi
// - Added text to cover re-use of Solaris WBEM APIs.
//
// Revision 1.1.1.1  2000/02/06 16:41:02  davidsi
// Initial version.
//
//
//
package org.snia.wbemcmd.xml;

import java.util.Enumeration;
import java.util.Vector;
import java.net.MalformedURLException;
import org.snia.wbem.cim.CIMException;
import org.snia.wbem.cim.CIMObjectPath;
import org.snia.wbem.cim.CIMValue;
import org.snia.wbem.cim.CIMInstance;
import org.snia.wbem.cim.CIMProperty;
import org.snia.wbem.client.CIMOMHandle;

public class XMLSetProperty extends XMLClass {
    static int allowedElements[]={
	XMLNode.XML_ELEMENT_IPARAMVALUE
	};
    static String commandName="SetProperty";
    static Vector allowedAttrs;
    
	
    static {
	//
	// Set up valid parameter names
	//
	allowedAttrs=new Vector();
	allowedAttrs.addElement(new XMLAttribute(paramName,XMLP_PROPERTYNAME));

    }
    
    
    public void execute(HTTPWriter pw,XMLNode propNode,CIMObjectPath path,CIMOMHandle hdl)
	    throws CIMException, MalformedURLException {
	String instanceName;
	CIMInstance cimInstance;
	CIMValue cv;
	
	String propertyName=propNode.extractParameterValue(XMLP_PROPERTYNAME,(String)null);
	if (propertyName==null)
	    throw new CIMException(CIMException.CIM_ERR_INVALID_PARAMETER,"Cannot find property Name");

	XMLNode valueNode=propNode.findElementAndParameter(XMLP_NewValue);
	if (valueNode==null)
	    throw new CIMException(CIMException.CIM_ERR_INVALID_PARAMETER,"Cannot find Newvalue attribute");

	
	//
	// Get value for property
	//
	CIMValue propValue=new CIMValue(valueNode);

	propNode=propNode.findElementAndParameter(XMLP_INSTANCENAME);
	if (propNode==null)
	    throw new CIMException(CIMException.CIM_ERR_INVALID_PARAMETER,
		"Could not find InstanceName");     
		       
	getInstanceName(propNode,path);
	hdl.setProperty(path,propertyName,propValue);
	return;
    }
    
    
    //
    //
    //
    public static void setProperty(HTTPOutput output,
		   CIMObjectPath path,
		   String propName,
		   CIMValue value) throws CIMException {
	XMLNode result;
	Vector params=new Vector();

	output.setMethod(commandName);
	//
	// Always request qualifiers
	//
	try {
	    params.addElement(new Param(XMLP_PROPERTYNAME,propName));
	    params.addElement(new Param(XMLP_NewValue,Param.VALUESET,value.toXml()));
	} catch (MalformedURLException url) {
	    throw new CIMException(CIMException.CIM_ERR_INVALID_PARAMETER);
	}
	
	result=intrinsicMethod(output,path,commandName,params,
			       instanceNameToKey(path,"InstanceName")
			      );
	return;
    }	
    
    
    
}
