1 3 package org.contineo.actions.rest; 4 5 import java.io.IOException ; 6 import java.io.PrintWriter ; 7 import java.util.Collection ; 8 9 import javax.servlet.http.HttpServletResponse ; 10 import javax.xml.parsers.ParserConfigurationException ; 11 import javax.xml.transform.TransformerConfigurationException ; 12 import javax.xml.transform.TransformerException ; 13 14 import org.contineo.admin.Menu; 15 import org.contineo.admin.dao.MenuDAO; 16 import org.contineo.apis.rest.HttpStatusCodes; 17 import org.contineo.documan.Version; 18 import org.contineo.documan.dao.DocumentDAO; 19 import org.w3c.dom.Document ; 20 import org.w3c.dom.Element ; 21 22 26 public class GetDocumentMetaRESTAction extends RESTAction { 27 28 29 private final int thisDocId; 30 31 32 private String thisDocName; 33 34 35 private int parentId; 36 37 38 private String parentName; 39 40 41 private boolean thisWriteable; 42 43 44 private String uploadUser; 45 46 47 private String uploadDate; 48 49 50 private String sourceAuthor; 51 52 53 private String sourceDate; 54 55 56 private String sourceSource; 57 58 59 private String sourceDocType; 60 61 62 private String sourceLocation; 63 64 65 private String language; 66 67 68 private boolean isCheckedOut; 69 70 71 private Collection <Version> versions; 72 73 74 public GetDocumentMetaRESTAction(String p_schemaName, 75 String requestedRESTUrl, String p_userName, 76 HttpServletResponse p_response, int p_docId) { 77 super(p_schemaName, requestedRESTUrl, p_userName, p_response, "GET REST/document/XX/meta: get meta data of doc XX"); 78 thisDocId = p_docId; 79 80 processRequest(); 81 } 82 83 @Override 84 protected void processRequest() { 85 MenuDAO menuDao = new MenuDAO(); 87 Menu thisMenu = menuDao.findByPrimaryKey(thisDocId); 88 DocumentDAO ddao = new DocumentDAO(); 89 org.contineo.documan.Document thisDoc = ddao.findByMenuId(thisDocId); 90 if (thisMenu == null || thisDoc == null) { 91 setHttpStatusCode(HttpStatusCodes.NOT_FOUND); 92 return; 93 } 94 95 if (!menuDao.isReadEnable(thisDocId, userName)) { 97 setHttpStatusCode(HttpStatusCodes.FORBIDDEN); 98 return; 99 } 100 101 parentId = thisMenu.getMenuParent(); 105 Menu parentMenu = menuDao.findByPrimaryKey(parentId); 106 if (parentMenu == null) { 107 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 108 return; 109 } 110 parentName = parentMenu.getMenuText(); 111 112 thisDocName = thisDoc.getDocName(); 114 thisWriteable = menuDao.isWriteEnable(thisDocId, userName); 115 uploadUser = thisDoc.getDocPublisher(); 116 uploadDate = convertDateToXML(thisDoc.getDocDate()); 117 sourceSource = thisDoc.getSource(); 118 sourceAuthor = thisDoc.getSourceAuthor(); 119 sourceDate = convertDateToXML(thisDoc.getSourceDate()); 120 sourceDocType = thisDoc.getSourceType(); 121 sourceLocation = thisDoc.getCoverage(); 122 language = thisDoc.getLanguage(); 123 124 if (thisDoc.getDocStatus() == org.contineo.documan.Document.DOC_CHECKED_OUT) 126 isCheckedOut = true; 127 else 128 isCheckedOut = false; 129 130 versions = thisDoc.getVersions(); 132 133 if (createXMLAnswer() == false) { 136 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 137 return; 138 } else { 139 setHttpStatusCode(HttpStatusCodes.OK); 141 return; 142 } 143 } 144 145 149 private boolean createXMLAnswer() { 150 PrintWriter responseWriter; 151 try { 152 responseWriter = response.getWriter(); 153 } catch (IOException e) { 154 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 155 addLogMessage("Unable to get output object for sending XML answer to client: " + e.getMessage()); 156 return false; 157 } 158 159 response.setContentType("text/xml;charset=utf-8"); 161 boolean ret = true; 162 163 try { 164 Document xmlDoc = createXMLDocument(); 166 167 Element rootElement = createRootElement(xmlDoc, "documentMetaData", "document", "get-meta.xsd"); 169 170 writeHeader(xmlDoc, rootElement); 172 173 writeVersions(xmlDoc, rootElement); 175 176 writeXMLDocument(xmlDoc, responseWriter); 178 } catch (ParserConfigurationException e) { 179 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 180 addLogMessage("While trying to create XML answer a ParserConfigurationException occured: " + e.getMessage()); 181 ret = false; 182 } catch (TransformerConfigurationException e) { 183 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 184 addLogMessage("While trying to create XML answer a TransformerConfigurationException occured: " + e.getMessage()); 185 ret = false; 186 } catch (TransformerException e) { 187 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 188 addLogMessage("While trying to create XML answer a TransformerException occured: " + e.getMessage()); 189 ret = false; 190 } finally { 191 responseWriter.flush(); 193 responseWriter.close(); 194 } 195 196 return ret; 197 } 198 199 204 private void writeVersions(Document xmlDoc, Element parentElement) { 205 for (Version version : versions) { 206 Element verElement = createChildElement(xmlDoc, "versionInfo", parentElement, ""); createTextNodeElement(xmlDoc, "id", verElement, version.getVersion()); 209 createTextNodeElement(xmlDoc, "downloadURL", verElement, 211 localRESTUrl + "document/" + thisDocId + "/" + version.getVersion()); 212 213 createTextNodeElement(xmlDoc, "uploadUser", verElement, version.getVersionUser()); 215 216 String versionDate = convertDateToXML(version.getVersionDate()); 218 if (versionDate != null) 219 createTextNodeElement(xmlDoc, "versionDate", verElement, versionDate); 220 221 createTextNodeElement(xmlDoc, "description", verElement, version.getVersionComment()); 223 } 224 } 225 226 231 private void writeHeader(Document xmlDoc, Element parentElement) { 232 Element headerRootElement = createChildElement(xmlDoc, "header", parentElement, ""); createTextNodeElement(xmlDoc, "id", headerRootElement, thisDocId); createTextNodeElement(xmlDoc, "name", headerRootElement, thisDocName); createTextNodeElement(xmlDoc, "writeable", headerRootElement, thisWriteable); 237 createTextNodeElement(xmlDoc, "downloadURL", headerRootElement, localRESTUrl + "document/" + thisDocId); 239 240 createTextNodeElement(xmlDoc, "parentId", headerRootElement, parentId); createTextNodeElement(xmlDoc, "parentName", headerRootElement, parentName); createTextNodeElement(xmlDoc, "uploadUser", headerRootElement, uploadUser); 244 if (uploadDate != null) 246 createTextNodeElement(xmlDoc, "uploadDate", headerRootElement, uploadDate); 247 createTextNodeElement(xmlDoc, "source", headerRootElement, sourceSource); createTextNodeElement(xmlDoc, "author", headerRootElement, sourceAuthor); 250 if (sourceDate != null) 252 createTextNodeElement(xmlDoc, "creationDate", headerRootElement, sourceDate); 253 254 createTextNodeElement(xmlDoc, "documentType", headerRootElement, sourceDocType); 256 257 createTextNodeElement(xmlDoc, "creationLocation", headerRootElement, sourceLocation); 259 createTextNodeElement(xmlDoc, "language", headerRootElement, language); 261 if (isCheckedOut == false) 263 createTextNodeElement(xmlDoc, "checkoutURL", headerRootElement, localRESTUrl + "document/" + thisDocId + "/checkout"); 264 else 265 createTextNodeElement(xmlDoc, "checkinURL", headerRootElement, localRESTUrl + "document/" + thisDocId + "/checkin"); 266 } 267 } | Popular Tags |