/******************************************************************
*
*	CyberUPnP for Java
*
*	Copyright (C) Satoshi Konno 2002
*
*	File: QueryRequest.java
*
*	Revision;
*
*	01/29/03
*		- first revision.
*	09/02/03
*		- Giordano Sassaroli <sassarol@cefriel.it>
*		- Error : redundant code, the setRequest method in QueryRequest invokes setURI even if after a couple of rows setRequestHost is invoked
*	
******************************************************************/

package org.cybergarage.upnp.control;

import org.cybergarage.http.*;
import org.cybergarage.xml.*;
import org.cybergarage.soap.*;

import org.cybergarage.upnp.*;

public class QueryRequest extends ControlRequest
{
	////////////////////////////////////////////////
	//	Constructor
	////////////////////////////////////////////////
	
	public QueryRequest()
	{
	}

	public QueryRequest(HTTPRequest httpReq)
	{
		set(httpReq);
	}

	////////////////////////////////////////////////
	//	Qyery
	////////////////////////////////////////////////

	private Node getVarNameNode()
	{
		Node bodyNode = getBodyNode();
		if (bodyNode == null)
			return null;
		if (bodyNode.hasNodes() == false)
			return null;
		Node queryStateVarNode = bodyNode.getNode(0);
		if (queryStateVarNode == null)
			return null;
		if (queryStateVarNode.hasNodes() == false)
			return null;
		return queryStateVarNode.getNode(0);
	}
	
	public String getVarName()
	{
		Node node = getVarNameNode();
		if (node == null)
			return "";
		return node.getValue();
	}

	////////////////////////////////////////////////
	//	setRequest
	////////////////////////////////////////////////
	
	public void setRequest(StateVariable stateVar)
	{
		Service service = stateVar.getService();		
		
		setRequestHost(service);

		setEnvelopeNode(SOAP.createEnvelopeBodyNode());
		Node envNode = getEnvelopeNode();
		Node bodyNode = getBodyNode();
		Node qeuryNode = createContentNode(stateVar);
		bodyNode.addNode(qeuryNode);
		setContent(envNode);

		setSOAPAction(Control.QUERY_SOAPACTION);
	}

	////////////////////////////////////////////////
	//	Contents
	////////////////////////////////////////////////

	private Node createContentNode(StateVariable stateVar)
	{
		Node queryVarNode = new Node();
		queryVarNode.setName(Control.NS, Control.QUERY_STATE_VARIABLE);
		queryVarNode.setNameSpace(Control.NS, Control.XMLNS);

		Node varNode = new Node();
		varNode.setName(Control.NS, Control.VAR_NAME);
		varNode.setValue(stateVar.getName());
		queryVarNode.addNode(varNode);
		
		return queryVarNode;
	}
	
	////////////////////////////////////////////////
	//	post
	////////////////////////////////////////////////

	public QueryResponse post()
	{
		SOAPResponse soapRes = postMessage(getRequestHost(), getRequestPort());
		return new QueryResponse(soapRes);
	}
}

