All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.cybergarage.upnp.StateVariable Maven / Gradle / Ivy

Go to download

A pure Java Open Source implementation of the UPnP stack for JDK 1.4 or above

The newest version!
/******************************************************************
*
*	CyberUPnP for Java
*
*	Copyright (C) Satoshi Konno 2002
*
*	File: StateVariable.java
*
*	Revision;
*
*	12/06/02
*		- first revision.
*	06/17/03
*		- Added setSendEvents(), isSendEvents().
*		- Changed to send a event after check the eventing state using isSendEvents().
*	01/04/04
*		- Added UPnP status methods.
*	01/06/04
*		- Added the following methods.
*		  getQueryListener() 
*		  setQueryListener() 
*		  performQueryListener()
*	01/07/04
*		- Added StateVariable() and set();
*		- Changed performQueryListener() to use a copy of the StateVariable.
*	03/27/04
*		- Thanks for Adavy
*		- Added getAllowedValueList() and getAllowedValueRange().
*	05/11/04
*		- Added hasAllowedValueList() and hasAllowedValueRange().
*	07/09/04
*		- Thanks for Dimas  and Stefano Lenzi 
*		- Changed postQuerylAction() to set the status code to the UPnPStatus.
*	11/09/04
*		- Theo Beisch 
*		- Changed StateVariable::setValue() to update and send the event when the value is not equal to the current value.
*	11/19/04
*		- Rick Keiner 
*		- Fixed setValue() to compare only when the current value is not null.
*	02/28/05
*		- Changed getAllowedValueList() to use AllowedValue instead of String as the member.
*	04/12/06
*		- Added setUserData() and getUserData() to set a user original data object.
*	
******************************************************************/

package org.cybergarage.upnp;
import java.util.Iterator;

import org.cybergarage.upnp.control.QueryListener;
import org.cybergarage.upnp.control.QueryRequest;
import org.cybergarage.upnp.control.QueryResponse;
import org.cybergarage.upnp.xml.NodeData;
import org.cybergarage.upnp.xml.StateVariableData;
import org.cybergarage.util.Debug;
import org.cybergarage.xml.Node;

public class StateVariable extends NodeData
{
	////////////////////////////////////////////////
	//	Constants
	////////////////////////////////////////////////
	
	public final static String ELEM_NAME = "stateVariable";

	////////////////////////////////////////////////
	//	Member
	////////////////////////////////////////////////

	private Node stateVariableNode;
	private Node serviceNode;

	public Node getServiceNode()
	{
		return serviceNode;
	}
	
	void setServiceNode(Node n){
		serviceNode=n;
	}

	public Service getService()
	{
		Node serviceNode = getServiceNode();
		if (serviceNode == null)
			return null;
		return new Service(serviceNode);
	}

	public Node getStateVariableNode()
	{
		return stateVariableNode;
	}
	
	////////////////////////////////////////////////
	//	Constructor
	////////////////////////////////////////////////

	public StateVariable()
	{
		this.serviceNode = null;
		this.stateVariableNode = new Node(ELEM_NAME);
	}
	
	public StateVariable(Node serviceNode, Node stateVarNode)
	{
		this.serviceNode = serviceNode;
		this.stateVariableNode = stateVarNode;
	}

	////////////////////////////////////////////////
	//	isStateVariableNode
	////////////////////////////////////////////////

	public static boolean isStateVariableNode(Node node)
	{
		return StateVariable.ELEM_NAME.equals(node.getName());
	}

	////////////////////////////////////////////////
	//	name
	////////////////////////////////////////////////

	private final static String NAME = "name";
	
	public void setName(String value)
	{
		getStateVariableNode().setNode(NAME, value);
	}

	public String getName()
	{
		return getStateVariableNode().getNodeValue(NAME);
	}

	////////////////////////////////////////////////
	//	dataType
	////////////////////////////////////////////////

	private final static String DATATYPE = "dataType";
	
	public void setDataType(String value)
	{
		getStateVariableNode().setNode(DATATYPE, value);
	}

	public String getDataType()
	{
		return getStateVariableNode().getNodeValue(DATATYPE);
	}

	////////////////////////////////////////////////
	// dataType
	////////////////////////////////////////////////

	private final static String SENDEVENTS = "sendEvents";
	private final static String SENDEVENTS_YES = "yes";
	private final static String SENDEVENTS_NO = "no";

	public void setSendEvents(boolean state)
	{
		getStateVariableNode().setAttribute(SENDEVENTS, (state == true) ? SENDEVENTS_YES : SENDEVENTS_NO);
	}
	
	public boolean isSendEvents()
	{
		String state = getStateVariableNode().getAttributeValue(SENDEVENTS);
		if (state == null)
			return false;
		if (state.equalsIgnoreCase(SENDEVENTS_YES) == true)
			return true;
		return false;
	}
	
	////////////////////////////////////////////////
	// set
	////////////////////////////////////////////////

	public void set(StateVariable stateVar) 
	{
		setName(stateVar.getName());
		setValue(stateVar.getValue());
		setDataType(stateVar.getDataType());
		setSendEvents(stateVar.isSendEvents());
	}
	
	////////////////////////////////////////////////
	//	UserData
	////////////////////////////////////////////////

	public StateVariableData getStateVariableData ()
	{
		Node node = getStateVariableNode();
		StateVariableData userData = (StateVariableData)node.getUserData();
		if (userData == null) {
			userData = new StateVariableData();
			node.setUserData(userData);
			userData.setNode(node);
		}
		return userData;
	}

	////////////////////////////////////////////////
	//	Value
	////////////////////////////////////////////////

	public void setValue(String value) 
	{
		// Thnaks for Tho Beisch (11/09/04)
		String currValue = getStateVariableData().getValue();
		// Thnaks for Tho Rick Keiner (11/18/04)
		if (currValue != null && currValue.equals(value) == true)
			return;
		
		getStateVariableData().setValue(value);
		
		// notify event
		Service service = getService();
		if (service == null)
			return;
		if (isSendEvents() == false)
			return;
		service.notify(this);
	}

	public void setValue(int value)
	{
		setValue(Integer.toString(value));	
	}
	
	public void setValue(long value)
	{
		setValue(Long.toString(value));	
	}
	
	public String getValue() 
	{
		return getStateVariableData().getValue();
	}

	////////////////////////////////////////////////
	//	AllowedValueList
	////////////////////////////////////////////////

	public AllowedValueList getAllowedValueList()
	{
		AllowedValueList valueList= new AllowedValueList();
		Node valueListNode = getStateVariableNode().getNode(AllowedValueList.ELEM_NAME);
		if (valueListNode == null)
			return null;
		int nNode = valueListNode.getNNodes();
		for (int n=0; n
	 * of this object. 
*
* Note: This method should be used to create a dynamic
* Device withtout writing any XML that describe the device
. *
* Note2: The enforce the constraint of the SCPD rule the
* AllowedValueList and AllowedValueRange are mutal exclusive
* the last set will be the only present
* * @param avl The new AllowedValueList * * @author Stefano "Kismet" Lenzi - [email protected] - 2005 */ public void setAllowedValueList(AllowedValueList avl) { //TODO Some test done not stable getStateVariableNode().removeNode(AllowedValueList.ELEM_NAME); getStateVariableNode().removeNode(AllowedValueRange.ELEM_NAME); Node n = new Node(AllowedValueList.ELEM_NAME); Iterator i=avl.iterator(); while (i.hasNext()) { AllowedValue av = (AllowedValue) i.next(); //n.addNode(new Node(AllowedValue.ELEM_NAME,av.getValue())); wrong! n.addNode(av.getAllowedValueNode()); //better (twa) } getStateVariableNode().addNode(n); } public boolean hasAllowedValueList() { AllowedValueList valueList = getAllowedValueList(); return (valueList != null) ? true : false; } //////////////////////////////////////////////// // AllowedValueRange //////////////////////////////////////////////// public AllowedValueRange getAllowedValueRange() { Node valueRangeNode = getStateVariableNode().getNode(AllowedValueRange.ELEM_NAME); if (valueRangeNode == null) return null; return new AllowedValueRange(valueRangeNode); } /** * This method ovverride the value of the AllowedValueRange Node
* of this object.
*
* Note: This method should be used to create a dynamic
* Device withtout writing any XML that describe the device
. *
* Note2: The enforce the constraint of the SCPD rule the
* AllowedValueList and AllowedValueRange are mutal exclusive
* the last set will be the only present
* * @param avr The new AllowedValueRange * * @author Stefano "Kismet" Lenzi - [email protected] - 2005 */ public void setAllowedValueRange(AllowedValueRange avr){ //TODO Some test done not stable getStateVariableNode().removeNode(AllowedValueList.ELEM_NAME); getStateVariableNode().removeNode(AllowedValueRange.ELEM_NAME); getStateVariableNode().addNode(avr.getAllowedValueRangeNode()); } public boolean hasAllowedValueRange() { return (getAllowedValueRange() != null) ? true : false; } //////////////////////////////////////////////// // queryAction //////////////////////////////////////////////// public QueryListener getQueryListener() { return getStateVariableData().getQueryListener(); } public void setQueryListener(QueryListener listener) { getStateVariableData().setQueryListener(listener); } public boolean performQueryListener(QueryRequest queryReq) { QueryListener listener = getQueryListener(); if (listener == null) return false; QueryResponse queryRes = new QueryResponse(); StateVariable retVar = new StateVariable(); retVar.set(this); retVar.setValue(""); retVar.setStatus(UPnPStatus.INVALID_VAR); if (listener.queryControlReceived(retVar) == true) { queryRes.setResponse(retVar); } else { UPnPStatus upnpStatus = retVar.getStatus(); queryRes.setFaultResponse(upnpStatus.getCode(), upnpStatus.getDescription()); } queryReq.post(queryRes); return true; } //////////////////////////////////////////////// // ActionControl //////////////////////////////////////////////// public QueryResponse getQueryResponse() { return getStateVariableData().getQueryResponse(); } private void setQueryResponse(QueryResponse res) { getStateVariableData().setQueryResponse(res); } public UPnPStatus getQueryStatus() { return getQueryResponse().getUPnPError(); } //////////////////////////////////////////////// // ActionControl //////////////////////////////////////////////// public boolean postQuerylAction() { QueryRequest queryReq = new QueryRequest(); queryReq.setRequest(this); if (Debug.isOn() == true) queryReq.print(); QueryResponse queryRes = queryReq.post(); if (Debug.isOn() == true) queryRes.print(); setQueryResponse(queryRes); // Thanks for Dimas and Stefano Lenzi (07/09/04) if (queryRes.isSuccessful() == false) { setValue(queryRes.getReturnValue()); return false; } setValue(queryRes.getReturnValue()); return true; } //////////////////////////////////////////////// // UPnPStatus //////////////////////////////////////////////// private UPnPStatus upnpStatus = new UPnPStatus(); public void setStatus(int code, String descr) { upnpStatus.setCode(code); upnpStatus.setDescription(descr); } public void setStatus(int code) { setStatus(code, UPnPStatus.code2String(code)); } public UPnPStatus getStatus() { return upnpStatus; } private static final String DEFAULT_VALUE = "defaultValue"; //////////////////////////////////////////////// /** * Get the value of DefaultValue of this StateVariable * * @author Stefano Lenzi [email protected] */ public String getDefaultValue() { return getStateVariableNode().getNodeValue(DEFAULT_VALUE); } /** * This method ovverride the value of the DefaultValue of this object.
*
* Note: This method should be used to create a dynamic
* Device withtout writing any XML that describe the device
. * * @param value The new String value * * @author Stefano Lenzi [email protected] */ public void setDefaultValue(String value){ getStateVariableNode().setNode(DEFAULT_VALUE,value); } //////////////////////////////////////////////// // userData //////////////////////////////////////////////// private Object userData = null; public void setUserData(Object data) { userData = data; } public Object getUserData() { return userData; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy