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.ExtMenu; 15 import org.contineo.admin.Menu; 16 import org.contineo.admin.dao.MenuDAO; 17 import org.contineo.apis.rest.HttpStatusCodes; 18 import org.contineo.documan.dao.DocumentDAO; 19 import org.w3c.dom.Document ; 20 import org.w3c.dom.Element ; 21 22 26 public class GetFolderContentRESTAction extends RESTAction { 27 28 private int thisMenuId = -1; 29 30 31 private boolean thisMenuWriteable = false; 32 33 34 private String thisMenuName; 35 36 37 private int parentMenuId = -1; 38 39 40 private String parentMenuName; 41 42 43 Collection <ExtMenu> subMenus = null; 44 45 46 public GetFolderContentRESTAction(HttpServletResponse response, String userName, String requestedRESTUrl, int p_menuId) { 47 super("get-folder.xsd", requestedRESTUrl, userName, response, "GET REST/folder/XX: get content folder XX"); 48 thisMenuId = p_menuId; 49 processRequest(); 50 } 51 52 @Override 53 protected void processRequest() { 54 if (userName == null || userName.equals("") || thisMenuId == -1 || response == null) { 56 setHttpStatusCode(HttpStatusCodes.BAD_REQUEST); 57 return; 58 } 59 60 MenuDAO menuDao = new MenuDAO(); 62 63 Menu thisMenu = menuDao.findByPrimaryKey(thisMenuId); 65 if (thisMenu == null) { 66 setHttpStatusCode(HttpStatusCodes.NOT_FOUND); 67 return; 68 } 69 70 if (!menuDao.isReadEnable(thisMenuId, userName)) { 72 setHttpStatusCode(HttpStatusCodes.FORBIDDEN); 73 return; 74 } 75 76 thisMenuName = thisMenu.getMenuText(); 78 79 parentMenuId = thisMenu.getMenuParent(); 81 82 Menu parentMenu = menuDao.findByPrimaryKey(parentMenuId); 84 parentMenuName = parentMenu.getMenuText(); 85 thisMenuWriteable = menuDao.isWriteEnable(thisMenuId, userName); 87 88 subMenus = menuDao.getContainedMenus(thisMenuId, userName); 90 if (subMenus == null) { 91 setHttpStatusCode(HttpStatusCodes.NOT_FOUND); 92 return; 93 } 94 95 if (createXMLAnswer() == false) { 98 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 99 return; 100 } else { 101 setHttpStatusCode(HttpStatusCodes.OK); 103 return; 104 } 105 } 106 107 111 private boolean createXMLAnswer() { 112 PrintWriter responseWriter; 113 try { 114 responseWriter = response.getWriter(); 115 } catch (IOException e) { 116 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 117 addLogMessage("Unable to get output object for sending XML answer to client: " + e.getMessage()); 118 return false; 119 } 120 121 response.setContentType("text/xml;charset=utf-8"); 123 boolean ret = true; 124 try { 125 Document xmlDoc = createXMLDocument(); 127 128 Element rootElement = createRootElement(xmlDoc, "folderContent", "folder", "get-folder.xsd"); 130 131 Element headerRootElement = createChildElement(xmlDoc, "header", rootElement, ""); createTextNodeElement(xmlDoc, "id", headerRootElement, thisMenuId); createTextNodeElement(xmlDoc, "name", headerRootElement, thisMenuName); createTextNodeElement(xmlDoc, "writeable", headerRootElement, thisMenuWriteable); createTextNodeElement(xmlDoc, "parentId", headerRootElement, parentMenuId); createTextNodeElement(xmlDoc, "parentName", headerRootElement, parentMenuName); 139 for (ExtMenu menu : subMenus) { 141 if (menu.getMenuType() == Menu.MENUTYPE_DIRECTORY) { 142 writeSubFolderToXML(xmlDoc, rootElement, menu); 143 } 144 } 145 146 for (ExtMenu menu : subMenus) { 148 if (menu.getMenuType() == Menu.MENUTYPE_FILE) { 149 writeDocumentToXML(xmlDoc, rootElement, menu); 150 } 151 } 152 153 writeXMLDocument(xmlDoc, responseWriter); 155 } catch (ParserConfigurationException e) { 156 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 157 addLogMessage("While trying to create XML answer a ParserConfigurationException occured: " + e.getMessage()); 158 ret = false; 159 } catch (TransformerConfigurationException e) { 160 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 161 addLogMessage("While trying to create XML answer a TransformerConfigurationException occured: " + e.getMessage()); 162 ret = false; 163 } catch (TransformerException e) { 164 setHttpStatusCode(HttpStatusCodes.INTERNAL_SERVER_ERROR); 165 addLogMessage("While trying to create XML answer a TransformerException occured: " + e.getMessage()); 166 ret = false; 167 } finally { 168 responseWriter.flush(); 170 responseWriter.close(); 171 } 172 173 return ret; 174 } 175 176 182 private void writeDocumentToXML(Document xmlDoc, Element parentElement, ExtMenu document) { 183 Element documentRootElement = createChildElement(xmlDoc, "document", parentElement, ""); createTextNodeElement(xmlDoc, "name", documentRootElement, document.getMenuText()); createTextNodeElement(xmlDoc, "id", documentRootElement, document.getMenuId()); createTextNodeElement(xmlDoc, "writeable", documentRootElement, document.getWritable()); 188 createTextNodeElement(xmlDoc, "downloadURL", documentRootElement, localRESTUrl + 190 "document/" + document.getMenuId()); 191 createTextNodeElement(xmlDoc, "metadataURL", documentRootElement, localRESTUrl + 193 "document/" + document.getMenuId() + "/meta"); 194 195 DocumentDAO ddao = new DocumentDAO(); 197 org.contineo.documan.Document tmpDocument = ddao.findByMenuId(document.getMenuId()); 198 if (tmpDocument.getDocStatus() == org.contineo.documan.Document.DOC_CHECKED_IN) { 199 createTextNodeElement(xmlDoc, "checkoutURL", documentRootElement, localRESTUrl + 201 "document/" + document.getMenuId() + "/checkout"); 202 } else { 203 createTextNodeElement(xmlDoc, "checkinURL", documentRootElement, localRESTUrl + 205 "document/" + document.getMenuId() + "/checkin"); 206 } 207 } 208 209 215 private void writeSubFolderToXML(Document xmlDoc, Element parentElement, ExtMenu folder) { 216 Element subFolderRootElement = createChildElement(xmlDoc, "subfolder", parentElement, ""); createTextNodeElement(xmlDoc, "id", subFolderRootElement, folder.getMenuId()); createTextNodeElement(xmlDoc, "name", subFolderRootElement, folder.getMenuText()); createTextNodeElement(xmlDoc, "writeable", subFolderRootElement, folder.getWritable()); createTextNodeElement(xmlDoc, "url", subFolderRootElement, localRESTUrl + "folder/" + 221 folder.getMenuId()); } 223 } | Popular Tags |