1 3 package org.contineo.actions.rest; 4 5 import java.io.PrintWriter ; 6 7 import javax.servlet.http.HttpServletResponse ; 8 import javax.xml.parsers.DocumentBuilder ; 9 import javax.xml.parsers.DocumentBuilderFactory ; 10 import javax.xml.parsers.ParserConfigurationException ; 11 import javax.xml.transform.OutputKeys ; 12 import javax.xml.transform.Transformer ; 13 import javax.xml.transform.TransformerConfigurationException ; 14 import javax.xml.transform.TransformerException ; 15 import javax.xml.transform.TransformerFactory ; 16 import javax.xml.transform.TransformerFactoryConfigurationError ; 17 import javax.xml.transform.dom.DOMSource ; 18 import javax.xml.transform.stream.StreamResult ; 19 20 import org.apache.log4j.Level; 21 import org.apache.log4j.Logger; 22 import org.contineo.apis.rest.HttpStatusCodes; 23 import org.contineo.core.DateBean; 24 import org.contineo.core.LoggingManager; 25 import org.w3c.dom.Document ; 26 import org.w3c.dom.Element ; 27 import org.w3c.dom.Text ; 28 29 public abstract class RESTAction { 30 31 32 protected int httpStatusCode = HttpStatusCodes.OK; 33 34 35 protected HttpServletResponse response = null; 36 37 38 protected String userName; 39 40 41 protected final String namespaceUrlPrefix = "http://contineo.sourceforge.net/"; 42 43 44 protected final String schemaLocation = namespaceUrlPrefix + "schemas/ver2.2/"; 45 46 50 protected final String schemaName; 51 52 53 protected final String localRESTUrl; 54 55 56 private final String interfaceIdentifier; 57 58 59 protected Logger logger; 60 61 69 protected RESTAction(String p_schemaName, String requestedRESTUrl, String p_userName, 70 HttpServletResponse p_response, String p_interfaceIdentifier) { 71 schemaName = p_schemaName; 72 localRESTUrl = requestedRESTUrl; 73 response = p_response; 74 userName = p_userName; 75 logger = LoggingManager.getLogger(this.getClass()); 76 interfaceIdentifier = p_interfaceIdentifier; 77 } 78 79 80 protected abstract void processRequest(); 81 82 85 protected Document createXMLDocument() throws ParserConfigurationException { 86 DocumentBuilderFactory docBuildFactory = DocumentBuilderFactory.newInstance(); 87 DocumentBuilder docBuilder = docBuildFactory.newDocumentBuilder(); 88 Document xmlDoc = docBuilder.newDocument(); 89 return xmlDoc; 90 } 91 92 97 protected void writeXMLDocument(Document xmlDoc, PrintWriter responseWriter) 98 throws TransformerFactoryConfigurationError , TransformerConfigurationException , TransformerException { 99 TransformerFactory transFactory = TransformerFactory.newInstance(); 101 Transformer transformer = transFactory.newTransformer(); 102 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8"); 104 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); 105 106 DOMSource domSrc = new DOMSource (xmlDoc); 108 StreamResult result = new StreamResult (responseWriter); 109 transformer.transform(domSrc, result); 110 } 111 112 119 protected Element createRootElement(Document xmlDoc, String nameRootElement, String resourceName, String schemaFile) { 120 String namespace = namespaceUrlPrefix + resourceName; 121 Element rootElement = xmlDoc.createElement(nameRootElement); 122 rootElement.setAttribute("xmlns", namespace); 123 rootElement.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 124 rootElement.setAttribute("xsi:schemaLocation", namespace + " " + schemaLocation + schemaFile); 125 xmlDoc.appendChild(rootElement); 126 return rootElement; 127 } 128 129 136 protected Element createChildElement(Document xmlDoc, String name, Element parentElement, String namespace) { 137 if (xmlDoc == null) 138 return null; 139 Element newElement = xmlDoc.createElement(name); 140 newElement.setAttribute("xmlns", namespace); 141 if (parentElement != null) 142 parentElement.appendChild(newElement); 143 return newElement; 144 } 145 146 153 protected void createTextNodeElement(Document xmlDoc, String elementName, Element parentElement, String textValue) { 154 if (xmlDoc == null || parentElement == null) 155 return; 156 Element newElement = xmlDoc.createElement(elementName); 157 parentElement.appendChild(newElement); 158 Text textNode = xmlDoc.createTextNode(textValue); 159 newElement.appendChild(textNode); 160 } 161 162 169 protected void createTextNodeElement(Document xmlDoc, String elementName, Element parentElement, boolean boolValue) { 170 createTextNodeElement(xmlDoc, elementName, parentElement, (new Boolean (boolValue)).toString()); 171 } 172 173 180 protected void createTextNodeElement(Document xmlDoc, String elementName, Element parentElement, int intValue) { 181 createTextNodeElement(xmlDoc, elementName, parentElement, (new Integer (intValue)).toString()); 182 } 183 184 185 public HttpServletResponse getResponse() { 186 return response; 187 } 188 189 190 public int getHttpStatusCode() { 191 return httpStatusCode; 192 } 193 194 195 protected void setHttpStatusCode(int p_httpStatusCode) { 196 httpStatusCode = p_httpStatusCode; 197 } 198 199 200 public boolean isSuccessful() { 201 if (httpStatusCode == HttpStatusCodes.OK || httpStatusCode == HttpStatusCodes.CREATED) 202 return true; 203 else 204 return false; 205 } 206 207 208 protected String convertDateToXML(String date) { 209 return DateBean.convertDate("yyyyMMdd", "yyyy-MM-dd", date); 210 211 } 212 213 216 protected void addLogMessage(String msg) { 217 if (logger.isEnabledFor(Level.ERROR)) 218 logger.error(interfaceIdentifier + " - " + msg); 219 } 220 } | Popular Tags |