Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java =================================================================== diff -u -rc2a96caab480d04c02dc7a90e719fc0bb9af6a50 -r1ed58a0c7e540a027d04adadde8eb5b2a5b623fa --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java (.../LearningDesignRepositoryServlet.java) (revision c2a96caab480d04c02dc7a90e719fc0bb9af6a50) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java (.../LearningDesignRepositoryServlet.java) (revision 1ed58a0c7e540a027d04adadde8eb5b2a5b623fa) @@ -1,8 +1,14 @@ package org.lamsfoundation.lams.webservice.xml; +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.io.PrintWriter; import java.io.StringWriter; +import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Vector; @@ -28,10 +34,14 @@ import org.lamsfoundation.lams.integration.security.Authenticator; import org.lamsfoundation.lams.integration.service.IntegrationService; import org.lamsfoundation.lams.integration.util.LoginRequestDispatcher; +import org.lamsfoundation.lams.learningdesign.service.ExportToolContentException; +import org.lamsfoundation.lams.learningdesign.service.IExportToolContentService; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; import org.lamsfoundation.lams.util.CentralConstants; +import org.lamsfoundation.lams.util.FileUtil; import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.util.WebUtil; import org.lamsfoundation.lams.workspace.dto.FolderContentDTO; import org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService; import org.lamsfoundation.lams.workspace.web.WorkspaceAction; @@ -41,337 +51,381 @@ public class LearningDesignRepositoryServlet extends HttpServlet { - private static Logger log = Logger - .getLogger(LearningDesignRepositoryServlet.class); + private static final long serialVersionUID = -4962711640290319063L; - private static IntegrationService integrationService = null; + private static Logger log = Logger.getLogger(LearningDesignRepositoryServlet.class); - private static IWorkspaceManagementService service = null; + private static IntegrationService integrationService = null; - private static MessageService msgService = null; + private static IWorkspaceManagementService service = null; - /** - * Constructor of the object. - */ - public LearningDesignRepositoryServlet() { - super(); - } + private static MessageService msgService = null; - /** - * Destruction of the servlet.
- */ - public void destroy() { - super.destroy(); // Just puts "destroy" string in log - // Put your code here - } + private static IExportToolContentService exportToolContentService = null; - // TODO, this is common with the webservices class, we should move it from - // here. - private static class ContentTreeNode { - FolderContentDTO content; + private static final String PARAM_LEARING_DESIGN_ID = "learningDesignID"; + private static final String PARAM_EXPORT_FORMAT = "format"; + private static final String IMS_XSLT_NAME = "learning-design-ims.xslt"; + private static final String IMS_XSLT_PATH = "/toolcontent"; - List children; + /** + * Constructor of the object. + */ + public LearningDesignRepositoryServlet() { + super(); + } - ContentTreeNode(FolderContentDTO content) { - this.content = content; - children = new LinkedList(); - } + /** + * Destruction of the servlet.
+ */ + public void destroy() { + super.destroy(); // Just puts "destroy" string in log + // Put your code here + } - List getChildren() { - return children; - } + // TODO, this is common with the webservices class, we should move it from + // here. + private static class ContentTreeNode { + FolderContentDTO content; - void setChildren(List children) { - this.children = children; - } + List children; - FolderContentDTO getContent() { - return content; - } + ContentTreeNode(FolderContentDTO content) { + this.content = content; + children = new LinkedList(); + } - void setContent(FolderContentDTO content) { - this.content = content; - } + List getChildren() { + return children; + } - void addChild(FolderContentDTO content) { - children.add(new ContentTreeNode(content)); - } + void setChildren(List children) { + this.children = children; + } - void addChild(ContentTreeNode node) { - children.add(node); - } + FolderContentDTO getContent() { + return content; + } - /** - * the format should be something like this: [ ['My Workspace', null, - * ['Mary Morgan Folder', null, ['3 activity sequence','1024'] ], - * ['Organisations', null, ['Developers Playpen', null, ['Lesson - * Sequence Folder', null, ['',null] ] ], ['MATH111', null, ['Lesson - * Sequence Folder', null, ['',null] ] ] ] ] ] - */ - public String toString() { - // return '[' + convert() + ']'; + void setContent(FolderContentDTO content) { + this.content = content; + } - Document document = getDocument(); + void addChild(FolderContentDTO content) { + children.add(new ContentTreeNode(content)); + } - try { - DOMSource domSource = new DOMSource(document); - StringWriter writer = new StringWriter(); - StreamResult result = new StreamResult(writer); - TransformerFactory tf = TransformerFactory.newInstance(); - Transformer transformer = tf.newTransformer(); - transformer.transform(domSource, result); - return writer.toString(); - } catch (TransformerException ex) { - ex.printStackTrace(); - return null; - } - } + void addChild(ContentTreeNode node) { + children.add(node); + } - String convert() { - StringBuilder sb = new StringBuilder(); - if (content.getResourceType().equals(FolderContentDTO.FOLDER)) { - sb.append("['"); - sb.append(content.getName()).append("',").append("null") - .append(','); - if (children.size() == 0) { - sb.append("['',null]"); - } else { - sb.append(children.get(0).convert()); - for (int i = 1; i < children.size(); i++) { - sb.append(',').append(children.get(i).convert()); - } - } - sb.append(']'); - } else if (content.getResourceType() - .equals(FolderContentDTO.DESIGN)) { - sb.append('['); - sb.append('\'').append(content.getName()).append('\'').append( - ',').append('\'').append(content.getResourceID()) - .append('\''); - sb.append(']'); - } - return sb.toString(); - } + /** + * the format should be something like this: [ ['My Workspace', null, + * ['Mary Morgan Folder', null, ['3 activity sequence','1024'] ], + * ['Organisations', null, ['Developers Playpen', null, ['Lesson + * Sequence Folder', null, ['',null] ] ], ['MATH111', null, ['Lesson + * Sequence Folder', null, ['',null] ] ] ] ] ] + */ + public String toString() { + // return '[' + convert() + ']'; - public Document getDocument() { - try { - DocumentBuilderFactory factory = DocumentBuilderFactory - .newInstance(); - DocumentBuilder builder = factory.newDocumentBuilder(); - Document document = builder.newDocument(); + Document document = getDocument(); - Element element = createXML(document); + try { + DOMSource domSource = new DOMSource(document); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + transformer.transform(domSource, result); + return writer.toString(); + } catch (TransformerException ex) { + ex.printStackTrace(); + return null; + } + } - document.appendChild(element); // TODO null values ?? + String convert() { + StringBuilder sb = new StringBuilder(); + if (content.getResourceType().equals(FolderContentDTO.FOLDER)) { + sb.append("['"); + sb.append(content.getName()).append("',").append("null").append(','); + if (children.size() == 0) { + sb.append("['',null]"); + } else { + sb.append(children.get(0).convert()); + for (int i = 1; i < children.size(); i++) { + sb.append(',').append(children.get(i).convert()); + } + } + sb.append(']'); + } else if (content.getResourceType().equals(FolderContentDTO.DESIGN)) { + sb.append('['); + sb.append('\'').append(content.getName()).append('\'').append(',').append('\'').append( + content.getResourceID()).append('\''); + sb.append(']'); + } + return sb.toString(); + } - return document; + public Document getDocument() { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); - } catch (Exception e) { - e.printStackTrace(); - } + Element element = createXML(document); - return null; - } + document.appendChild(element); // TODO null values ?? - public Element createXML(Document document) { - Element elem = null; - if (content.getResourceType().equals(FolderContentDTO.FOLDER)) { - elem = document.createElement(CentralConstants.ELEM_FOLDER); - elem.setAttribute(CentralConstants.ATTR_NAME, content.getName()); + return document; - if (children.size() > 0) { - for (int i = 0; i < children.size(); i++) { - elem.appendChild(children.get(i).createXML(document)); - } - } + } catch (Exception e) { + e.printStackTrace(); + } - } else if (content.getResourceType() - .equals(FolderContentDTO.DESIGN)) { - elem = document.createElement(CentralConstants.ELEM_LEARNING_DESIGN); - elem.setAttribute(CentralConstants.ATTR_NAME, content.getName()); - elem.setAttribute(CentralConstants.ATTR_RESOURCE_ID, content.getResourceID() - .toString()); - } else { - // TODO ERROR shouldnt get here !! - } + return null; + } - return elem; + public Element createXML(Document document) { + Element elem = null; + if (content.getResourceType().equals(FolderContentDTO.FOLDER)) { + elem = document.createElement(CentralConstants.ELEM_FOLDER); + elem.setAttribute(CentralConstants.ATTR_NAME, content.getName()); + + if (children.size() > 0) { + for (int i = 0; i < children.size(); i++) { + elem.appendChild(children.get(i).createXML(document)); + } } + + } else if (content.getResourceType().equals(FolderContentDTO.DESIGN)) { + elem = document.createElement(CentralConstants.ELEM_LEARNING_DESIGN); + elem.setAttribute(CentralConstants.ATTR_NAME, content.getName()); + elem.setAttribute(CentralConstants.ATTR_RESOURCE_ID, content.getResourceID().toString()); + } else { + // TODO ERROR shouldnt get here !! + } + + return elem; } + } - private ContentTreeNode buildContentTree(Integer userId, Integer mode) - throws IOException, UserAccessDeniedException, - RepositoryCheckedException { - log.debug("User Id - " + userId); - FolderContentDTO rootFolder = new FolderContentDTO(msgService - .getMessage("label.workspace.root_folder"), msgService - .getMessage("folder"), null, null, FolderContentDTO.FOLDER, - WorkspaceAction.BOOTSTRAP_FOLDER_ID.longValue(), - WorkspaceFolder.READ_ACCESS, null); - ContentTreeNode root = new ContentTreeNode(rootFolder); - FolderContentDTO userFolder = service.getUserWorkspaceFolder(userId); - root.addChild(buildContentTreeNode(userFolder, userId, mode)); - FolderContentDTO dummyOrgFolder = new FolderContentDTO(msgService - .getMessage("organisations"), msgService.getMessage("folder"), - null, null, FolderContentDTO.FOLDER, new Long( - WorkspaceAction.ORG_FOLDER_ID.longValue()), - WorkspaceFolder.READ_ACCESS, null); - ContentTreeNode dummyOrgNode = new ContentTreeNode(dummyOrgFolder); - // tried using service.getAccessibleOrganisationWorkspaceFolders(userId) - // api, - // but it doesn't work, the userOrganisations set of the user - // got from workspaceManagementService with the userId supplied is - // empty, which - // is not true. - Vector orgFolders = service - .getAccessibleOrganisationWorkspaceFolders(userId); - for (int i = 0; i < orgFolders.size(); i++) { - FolderContentDTO orgFolder = (FolderContentDTO) orgFolders.get(i); - dummyOrgNode - .addChild(buildContentTreeNode(orgFolder, userId, mode)); - } - root.addChild(dummyOrgNode); - return root; + private ContentTreeNode buildContentTree(Integer userId, Integer mode) throws IOException, + UserAccessDeniedException, RepositoryCheckedException { + log.debug("User Id - " + userId); + FolderContentDTO rootFolder = new FolderContentDTO(msgService.getMessage("label.workspace.root_folder"), + msgService.getMessage("folder"), null, null, FolderContentDTO.FOLDER, + WorkspaceAction.BOOTSTRAP_FOLDER_ID.longValue(), WorkspaceFolder.READ_ACCESS, null); + ContentTreeNode root = new ContentTreeNode(rootFolder); + FolderContentDTO userFolder = service.getUserWorkspaceFolder(userId); + root.addChild(buildContentTreeNode(userFolder, userId, mode)); + FolderContentDTO dummyOrgFolder = new FolderContentDTO(msgService.getMessage("organisations"), msgService + .getMessage("folder"), null, null, FolderContentDTO.FOLDER, new Long(WorkspaceAction.ORG_FOLDER_ID + .longValue()), WorkspaceFolder.READ_ACCESS, null); + ContentTreeNode dummyOrgNode = new ContentTreeNode(dummyOrgFolder); + // tried using service.getAccessibleOrganisationWorkspaceFolders(userId) + // api, + // but it doesn't work, the userOrganisations set of the user + // got from workspaceManagementService with the userId supplied is + // empty, which + // is not true. + Vector orgFolders = service.getAccessibleOrganisationWorkspaceFolders(userId); + for (int i = 0; i < orgFolders.size(); i++) { + FolderContentDTO orgFolder = (FolderContentDTO) orgFolders.get(i); + dummyOrgNode.addChild(buildContentTreeNode(orgFolder, userId, mode)); } + root.addChild(dummyOrgNode); + return root; + } - private ContentTreeNode buildContentTreeNode(FolderContentDTO folder, - Integer userId, Integer mode) throws UserAccessDeniedException, - RepositoryCheckedException { - log.debug("build content tree node for folder - " + folder.getName()); - ContentTreeNode node = new ContentTreeNode(folder); - if (folder.getResourceType().equals(FolderContentDTO.FOLDER)) { - log.debug(folder.getName() + " is a folder"); - WorkspaceFolder wsfolder = service.getWorkspaceFolder(folder - .getResourceID().intValue()); - Vector items = service.getFolderContentsExcludeHome(userId, - wsfolder, mode); - for (int i = 0; i < items.size(); i++) { - FolderContentDTO content = (FolderContentDTO) items.get(i); - node.addChild(buildContentTreeNode(content, userId, mode)); - } - } - return node; + private ContentTreeNode buildContentTreeNode(FolderContentDTO folder, Integer userId, Integer mode) + throws UserAccessDeniedException, RepositoryCheckedException { + log.debug("build content tree node for folder - " + folder.getName()); + ContentTreeNode node = new ContentTreeNode(folder); + if (folder.getResourceType().equals(FolderContentDTO.FOLDER)) { + log.debug(folder.getName() + " is a folder"); + WorkspaceFolder wsfolder = service.getWorkspaceFolder(folder.getResourceID().intValue()); + Vector items = service.getFolderContentsExcludeHome(userId, wsfolder, mode); + for (int i = 0; i < items.size(); i++) { + FolderContentDTO content = (FolderContentDTO) items.get(i); + node.addChild(buildContentTreeNode(content, userId, mode)); + } } + return node; + } - /** - * The doGet method of the servlet.
- * - * This method is called when a form has its tag value method equals to get. - * - * @param request - * the request send by the client to the server - * @param response - * the response send by the server to the client - * @throws ServletException - * if an error occurred - * @throws IOException - * if an error occurred - */ - public void doGet(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { + /** + * The doGet method of the servlet.
+ * + * This method is called when a form has its tag value method equals to get. + * + * @param request + * the request send by the client to the server + * @param response + * the response send by the server to the client + * @throws ServletException + * if an error occurred + * @throws IOException + * if an error occurred + */ + public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - try { + try { - // get parameters - String serverId = request.getParameter(CentralConstants.PARAM_SERVER_ID); - String datetime = request.getParameter(CentralConstants.PARAM_DATE_TIME); - String hashValue = request.getParameter(CentralConstants.PARAM_HASH_VALUE); - String username = request.getParameter(CentralConstants.PARAM_USERNAME); - String courseId = request.getParameter(CentralConstants.PARAM_COURSE_ID); - String courseName = request.getParameter(CentralConstants.PARAM_COURSE_NAME); - String country = request.getParameter(CentralConstants.PARAM_COUNTRY); - String lang = request.getParameter(CentralConstants.PARAM_LANG); - String modeStr = request.getParameter(CentralConstants.PARAM_MODE); + // get parameters + String serverId = request.getParameter(CentralConstants.PARAM_SERVER_ID); + String datetime = request.getParameter(CentralConstants.PARAM_DATE_TIME); + String hashValue = request.getParameter(CentralConstants.PARAM_HASH_VALUE); + String username = request.getParameter(CentralConstants.PARAM_USERNAME); + String courseId = request.getParameter(CentralConstants.PARAM_COURSE_ID); + String courseName = request.getParameter(CentralConstants.PARAM_COURSE_NAME); + String country = request.getParameter(CentralConstants.PARAM_COUNTRY); + String lang = request.getParameter(CentralConstants.PARAM_LANG); + String modeStr = request.getParameter(CentralConstants.PARAM_MODE); + String method = request.getParameter(CentralConstants.PARAM_METHOD); - String firstName = request.getParameter(LoginRequestDispatcher.PARAM_FIRST_NAME); - String lastName = request.getParameter(LoginRequestDispatcher.PARAM_LAST_NAME); - String email = request.getParameter(LoginRequestDispatcher.PARAM_EMAIL); + String firstName = request.getParameter(LoginRequestDispatcher.PARAM_FIRST_NAME); + String lastName = request.getParameter(LoginRequestDispatcher.PARAM_LAST_NAME); + String email = request.getParameter(LoginRequestDispatcher.PARAM_EMAIL); - if (serverId == null || datetime == null || hashValue == null - || username == null || courseId == null || country == null - || lang == null || modeStr == null) { - String msg = "Parameters missing"; - log.error(msg); - response.sendError(response.SC_BAD_REQUEST, "Parameters missing"); - } + if (serverId == null || datetime == null || hashValue == null || username == null || courseId == null + || country == null || lang == null || modeStr == null) { + String msg = "Parameters missing"; + log.error(msg); + response.sendError(response.SC_BAD_REQUEST, "Parameters missing"); + } - Integer mode = new Integer(modeStr); + Integer mode = new Integer(modeStr); - // get Server map - ExtServerOrgMap serverMap = integrationService - .getExtServerOrgMap(serverId); + // get Server map + ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); - // authenticate + // authenticate + Authenticator.authenticate(serverMap, datetime, username, hashValue); - Authenticator - .authenticate(serverMap, datetime, username, hashValue); + // get user map, user is created if this is their first use - // get user map, user is created if this is their first use - - ExtUserUseridMap userMap = null; - if (firstName==null && lastName==null) - { - userMap = integrationService.getExtUserUseridMap(serverMap, username); - } - else - { - userMap = integrationService.getImplicitExtUserUseridMap(serverMap, username, firstName, lastName, lang, country, email); - } - - - // create group for external course if necessary - - integrationService.getExtCourseClassMap(serverMap, userMap, - courseId, - country, lang, courseName); + if (method != null && method.equals("exportLD")) { + // do export + exportLD(request, response); + } else { - String contentTree = buildContentTree( - userMap.getUser().getUserId(), mode).toString(); + ExtUserUseridMap userMap = null; + if (firstName == null && lastName == null) { + userMap = integrationService.getExtUserUseridMap(serverMap, username); + } else { + userMap = integrationService.getImplicitExtUserUseridMap(serverMap, username, firstName, lastName, + lang, country, email); + } - // generate response - response.setContentType("text/xml"); - response.setCharacterEncoding("UTF8"); - PrintWriter out = response.getWriter(); + // create group for external course if necessary + integrationService.getExtCourseClassMap(serverMap, userMap, courseId, country, lang, courseName); - out.print(contentTree); + String contentTree = buildContentTree(userMap.getUser().getUserId(), mode).toString(); - } catch (NumberFormatException nfe) { - log.error("mode is not an integer", nfe); - response.sendError(response.SC_BAD_REQUEST, "mode is not an integer"); - } catch (AuthenticationException e) { - log.error("can not authenticate", e); - response.sendError(response.SC_BAD_REQUEST, "can not authenticate"); - } catch (UserInfoFetchException e) { - log.error("can not retreive user information", e); - response.sendError(response.SC_BAD_REQUEST, "can not retreive user information"); - } catch (UserAccessDeniedException e) { - log.error("user access denied", e); - response.sendError(response.SC_BAD_REQUEST, "user access denied"); - } catch (RepositoryCheckedException e) { - log.error("repository checked", e); - response.sendError(response.SC_BAD_REQUEST, "repository checked"); - } catch (Exception e){ - log.error("Problem with LearningDesignRepositoryServlet request", e); - response.sendError(response.SC_BAD_REQUEST, "Problem with LearningDesignRepositoryServlet request"); - } - + // generate response + response.setContentType("text/xml"); + response.setCharacterEncoding("UTF8"); + PrintWriter out = response.getWriter(); + + out.print(contentTree); + } + + } catch (NumberFormatException nfe) { + log.error("mode is not an integer", nfe); + response.sendError(response.SC_BAD_REQUEST, "mode is not an integer"); + } catch (AuthenticationException e) { + log.error("can not authenticate", e); + response.sendError(response.SC_BAD_REQUEST, "can not authenticate"); + } catch (UserInfoFetchException e) { + log.error("can not retreive user information", e); + response.sendError(response.SC_BAD_REQUEST, "can not retreive user information"); + } catch (UserAccessDeniedException e) { + log.error("user access denied", e); + response.sendError(response.SC_BAD_REQUEST, "user access denied"); + } catch (RepositoryCheckedException e) { + log.error("repository checked", e); + response.sendError(response.SC_BAD_REQUEST, "repository checked"); + } catch (Exception e) { + log.error("Problem with LearningDesignRepositoryServlet request", e); + response.sendError(response.SC_BAD_REQUEST, "Problem with LearningDesignRepositoryServlet request"); } - /** - * Initialization of the servlet.
- * - * @throws ServletException - * if an error occure - */ - public void init() throws ServletException { - integrationService = (IntegrationService) WebApplicationContextUtils - .getRequiredWebApplicationContext(getServletContext()).getBean( - "integrationService"); + } - service = (IWorkspaceManagementService) WebApplicationContextUtils - .getRequiredWebApplicationContext(getServletContext()).getBean( - "workspaceManagementService"); + public void exportLD(HttpServletRequest request, HttpServletResponse response) { + Long learningDesignId = WebUtil.readLongParam(request, PARAM_LEARING_DESIGN_ID); + int format = WebUtil.readIntParam(request, PARAM_EXPORT_FORMAT); + List toolsErrorMsgs = new ArrayList(); - msgService = service.getMessageService(); + try { + File xslt = new File(getServletContext().getRealPath(IMS_XSLT_PATH) + File.separator + IMS_XSLT_NAME); + String zipFilename = exportToolContentService.exportLearningDesign(learningDesignId, toolsErrorMsgs, + format, xslt); + + // get only filename + String zipfile = FileUtil.getFileName(zipFilename); + + // replace spaces (" ") with underscores ("_") + zipfile = zipfile.replaceAll(" ", "_"); + + // Different browsers handle stream downloads differently LDEV-1243 + String filename = FileUtil.encodeFilenameForDownload(request, zipfile); + log.debug("Final filename to export: " + filename); + + response.setContentType("application/x-download"); + // response.setContentType("application/zip"); + response.setHeader("Content-Disposition", "attachment;filename=" + filename); + InputStream in = null; + OutputStream out = null; + try { + in = new BufferedInputStream(new FileInputStream(zipFilename)); + out = response.getOutputStream(); + int count = 0; + + int ch; + while ((ch = in.read()) != -1) { + out.write((char) ch); + count++; + } + log.debug("Wrote out " + count + " bytes"); + response.setContentLength(count); + out.flush(); + } catch (Exception e) { + log.error("Exception occured writing out file:" + e.getMessage()); + throw new ExportToolContentException(e); + } finally { + try { + if (in != null) + in.close(); // very important + if (out != null) + out.close(); + } catch (Exception e) { + log.error("Error Closing file. File already written out - no exception being thrown.", e); + } + } + } catch (Exception e1) { + log.error("Unable to export tool content to external integrated server: " + e1.toString()); } + } + + /** + * Initialization of the servlet.
+ * + * @throws ServletException + * if an error occure + */ + public void init() throws ServletException { + integrationService = (IntegrationService) WebApplicationContextUtils.getRequiredWebApplicationContext( + getServletContext()).getBean("integrationService"); + + service = (IWorkspaceManagementService) WebApplicationContextUtils.getRequiredWebApplicationContext( + getServletContext()).getBean("workspaceManagementService"); + + msgService = service.getMessageService(); + + exportToolContentService = (IExportToolContentService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean("exportToolContentService"); + } }