/** Copyright (C) 2012 Delcyon, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.delcyon.capo.controller.client; import java.util.HashMap; import java.util.logging.Level; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.delcyon.capo.CapoApplication; import com.delcyon.capo.controller.AbstractControl; import com.delcyon.capo.controller.Group; import com.delcyon.capo.controller.server.ControllerResponse; import com.delcyon.capo.protocol.client.XMLServerResponse; import com.delcyon.capo.protocol.client.XMLServerResponseProcessor; import com.delcyon.capo.protocol.client.XMLServerResponseProcessorProvider; /** * @author jeremiah * */ @XMLServerResponseProcessorProvider(documentElementNames={"ControllerResponse"},namespaceURIs={}) public class ServerControllerResponse implements XMLServerResponseProcessor { private Document responseDocument; private XMLServerResponse xmlServerResponse; private HashMap<String, String> sessionHashMap = null; @Override public void init(Document responseDocument,XMLServerResponse xmlServerResponse,HashMap<String, String> sessionHashMap) throws Exception { this.sessionHashMap = sessionHashMap; this.responseDocument = responseDocument; this.xmlServerResponse = xmlServerResponse; } @Override public boolean isStreamProcessor() { return false; } @Override public void process() throws Exception { Element controlElement = getControlElementDeclaration(); if (controlElement != null) { ClientSideControl clientSideControl = (ClientSideControl) AbstractControl.getControlElementInstanceForLocalName(controlElement.getLocalName()); Element resultElement = null; if (clientSideControl != null) { Group group = new Group(null, null, null, null); group.setVariableHashMap(sessionHashMap); clientSideControl.init(getControlElementDeclaration(), null, group, this); resultElement = clientSideControl.processClientSideElement(); if (resultElement != null) { ControllerResponse controllerResponse = new ControllerResponse(); controllerResponse.setSessionID(xmlServerResponse.getSessionID()); controllerResponse.setType(xmlServerResponse.getResponseType()); controllerResponse.appendElement(resultElement); xmlServerResponse.writeDocument(controllerResponse.getResponseDocument()); } } else { CapoApplication.logger.log(Level.SEVERE, "Couldn't get a ControlElement instance for "+controlElement.getLocalName()); throw new Exception("Couldn't get a ControlElement instance for "+controlElement.getLocalName()); } } //TODO process result Element } @Override public Document getResponseDocument() { return responseDocument; } public Element getControlElementDeclaration() throws Exception { NodeList nodeList = responseDocument.getDocumentElement().getElementsByTagName("*"); if (nodeList.getLength() > 0) { return (Element) nodeList.item(0); } else { return null; } } public String getSessionID() { return xmlServerResponse.getSessionID(); } }