Index: lams_central/conf/xdoclet/servlet-mappings.xml =================================================================== diff -u -r60b025687e5ce92bc99d425ca9a62c48265b4088 -r90cc91c53b04121fbe222b3ba847c6c1348129d8 --- lams_central/conf/xdoclet/servlet-mappings.xml (.../servlet-mappings.xml) (revision 60b025687e5ce92bc99d425ca9a62c48265b4088) +++ lams_central/conf/xdoclet/servlet-mappings.xml (.../servlet-mappings.xml) (revision 90cc91c53b04121fbe222b3ba847c6c1348129d8) @@ -26,4 +26,14 @@ LoginRequest /LoginRequest + + + + LearningDesignRepository + /services/xml/LearningDesignRepository/* + + + + LessonManager + /services/xml/LessonManager/* \ No newline at end of file Index: lams_central/conf/xdoclet/servlets.xml =================================================================== diff -u -r60b025687e5ce92bc99d425ca9a62c48265b4088 -r90cc91c53b04121fbe222b3ba847c6c1348129d8 --- lams_central/conf/xdoclet/servlets.xml (.../servlets.xml) (revision 60b025687e5ce92bc99d425ca9a62c48265b4088) +++ lams_central/conf/xdoclet/servlets.xml (.../servlets.xml) (revision 90cc91c53b04121fbe222b3ba847c6c1348129d8) @@ -60,3 +60,19 @@ org.lamsfoundation.lams.web.LoginRequestServlet + + + LearningDesignRepository + LearningDesignRepository Servlet + + org.lamsfoundation.lams.webservice.xml.LearningDesignRepositoryServlet + + + + + LessonManager + LessonManager Servlet + + org.lamsfoundation.lams.webservice.xml.LessonManagerServlet + + Index: lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java =================================================================== diff -u -r08950e1090443c3423a3d1c587416a2fccd8bbdf -r90cc91c53b04121fbe222b3ba847c6c1348129d8 --- lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 08950e1090443c3423a3d1c587416a2fccd8bbdf) +++ lams_central/src/java/org/lamsfoundation/lams/util/CentralConstants.java (.../CentralConstants.java) (revision 90cc91c53b04121fbe222b3ba847c6c1348129d8) @@ -28,4 +28,54 @@ public static final String MODULE_NAME = "central"; + // Constants used by web services. + public static final String PARAM_SERVER_ID = "serverId"; + + public static final String PARAM_DATE_TIME = "datetime"; + + public static final String PARAM_HASH_VALUE = "hashValue"; + + public static final String PARAM_USERNAME = "username"; + + public static final String PARAM_COURSE_ID = "courseId"; + + public static final String PARAM_LEARNING_DESIGN_ID = "ldId"; + + public static final String PARAM_LESSON_ID = "lsId"; + + public static final String PARAM_TITLE = "title"; + + public static final String PARAM_DESC = "desc"; + + public static final String PARAM_STARTDATE = "startdate"; + + public static final String PARAM_COUNTRY = "country"; + + public static final String PARAM_LANG = "lang"; + + public static final String PARAM_METHOD = "method"; + + public static final String METHOD_START = "start"; + + public static final String METHOD_SCHEDULE = "schedule"; + + public static final String METHOD_DELETE = "delete"; + + public static final String PARAM_MODE = "mode"; + + + public static final String ELEM_LESSON = "Lesson"; + + public static final String ATTR_LESSON_ID = "lessonId"; + + public static final String ATTR_DELETED = "deleted"; + + + public static final String ELEM_FOLDER = "Folder"; + + public static final String ELEM_LEARNING_DESIGN = "LearningDesign"; + + public static final String ATTR_NAME = "name"; + + public static final String ATTR_RESOURCE_ID = "resourceId"; } Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LearningDesignRepositoryServlet.java (revision 90cc91c53b04121fbe222b3ba847c6c1348129d8) @@ -0,0 +1,357 @@ +package org.lamsfoundation.lams.webservice.xml; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.LinkedList; +import java.util.List; +import java.util.Vector; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; +import org.lamsfoundation.lams.integration.ExtServerOrgMap; +import org.lamsfoundation.lams.integration.ExtUserUseridMap; +import org.lamsfoundation.lams.integration.UserInfoFetchException; +import org.lamsfoundation.lams.integration.security.AuthenticationException; +import org.lamsfoundation.lams.integration.security.Authenticator; +import org.lamsfoundation.lams.integration.service.IntegrationService; +import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.usermanagement.exception.UserAccessDeniedException; +import org.lamsfoundation.lams.util.CentralConstants; +import org.lamsfoundation.lams.util.MessageService; +import org.lamsfoundation.lams.workspace.dto.FolderContentDTO; +import org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService; +import org.lamsfoundation.lams.workspace.web.WorkspaceAction; +import org.springframework.web.context.support.WebApplicationContextUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class LearningDesignRepositoryServlet extends HttpServlet { + + private static Logger log = Logger + .getLogger(LearningDesignRepositoryServlet.class); + + private static IntegrationService integrationService = null; + + private static IWorkspaceManagementService service = null; + + private static MessageService msgService = null; + + /** + * Constructor of the object. + */ + public LearningDesignRepositoryServlet() { + super(); + } + + /** + * Destruction of the servlet.
+ */ + public void destroy() { + super.destroy(); // Just puts "destroy" string in log + // Put your code here + } + + // TODO, this is common with the webservices class, we should move it from + // here. + private static class ContentTreeNode { + FolderContentDTO content; + + List children; + + ContentTreeNode(FolderContentDTO content) { + this.content = content; + children = new LinkedList(); + } + + List getChildren() { + return children; + } + + void setChildren(List children) { + this.children = children; + } + + FolderContentDTO getContent() { + return content; + } + + void setContent(FolderContentDTO content) { + this.content = content; + } + + void addChild(FolderContentDTO content) { + children.add(new ContentTreeNode(content)); + } + + void addChild(ContentTreeNode node) { + children.add(node); + } + + /** + * 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() + ']'; + + Document document = getDocument(); + + 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; + } + } + + 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(); + } + + public Document getDocument() { + try { + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); + + Element element = createXML(document); + + document.appendChild(element); // TODO null values ?? + + return document; + + } catch (Exception e) { + e.printStackTrace(); + } + + return null; + } + + 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 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 { + + 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 country = request.getParameter(CentralConstants.PARAM_COUNTRY); + String lang = request.getParameter(CentralConstants.PARAM_LANG); + String modeStr = request.getParameter(CentralConstants.PARAM_MODE); + + 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); + + // get Server map + ExtServerOrgMap serverMap = integrationService + .getExtServerOrgMap(serverId); + + // authenticate + + Authenticator + .authenticate(serverMap, datetime, username, hashValue); + + // get user map and course class map + + ExtUserUseridMap userMap; + + userMap = integrationService.getExtUserUseridMap(serverMap, + username); + // integrationService.getExtCourseClassMap(serverMap, userMap, + // courseId, + // country, lang); + // TODO, do we need this ?? does not assign return values to a + // variable, + // copied from original WS + + String contentTree = buildContentTree( + userMap.getUser().getUserId(), mode).toString(); + + // 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"); + response.sendError(response.SC_BAD_REQUEST, "mode is not an integer"); + } catch (AuthenticationException e) { + response.sendError(response.SC_BAD_REQUEST, "can not authenticate"); + } catch (UserInfoFetchException e) { + response.sendError(response.SC_BAD_REQUEST, "can not retreive user information"); + } catch (UserAccessDeniedException e) { + response.sendError(response.SC_BAD_REQUEST, "user access denied"); + } catch (RepositoryCheckedException e) { + response.sendError(response.SC_BAD_REQUEST, "repository checked"); + } + } + + /** + * 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(); + } +} Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/LessonManagerServlet.java (revision 90cc91c53b04121fbe222b3ba847c6c1348129d8) @@ -0,0 +1,348 @@ +package org.lamsfoundation.lams.webservice.xml; + +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.rmi.RemoteException; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.integration.ExtCourseClassMap; +import org.lamsfoundation.lams.integration.ExtServerOrgMap; +import org.lamsfoundation.lams.integration.ExtUserUseridMap; +import org.lamsfoundation.lams.integration.security.Authenticator; +import org.lamsfoundation.lams.integration.service.IntegrationService; +import org.lamsfoundation.lams.lesson.Lesson; +import org.lamsfoundation.lams.monitoring.service.IMonitoringService; +import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.util.CentralConstants; +import org.lamsfoundation.lams.util.DateUtil; +import org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService; +import org.springframework.web.context.support.WebApplicationContextUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +public class LessonManagerServlet extends HttpServlet { + + private static Logger log = Logger.getLogger(LessonManagerServlet.class); + + private static IntegrationService integrationService = null; + + private static IWorkspaceManagementService service = null; + + private static IMonitoringService monitoringService = null; + + /** + * Constructor of the object. + */ + public LessonManagerServlet() { + super(); + } + + /** + * Destruction of the servlet.
+ */ + public void destroy() { + super.destroy(); // Just puts "destroy" string in log + // Put your code here + } + + /** + * 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 { + + PrintWriter out = response.getWriter(); + response.setContentType("text/xml"); + response.setCharacterEncoding("UTF8"); + + 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 ldIdStr = request.getParameter(CentralConstants.PARAM_LEARNING_DESIGN_ID); + String lsIdStr = request.getParameter(CentralConstants.PARAM_LESSON_ID); + String country = request.getParameter(CentralConstants.PARAM_COUNTRY); + String title = request.getParameter(CentralConstants.PARAM_TITLE); + String desc = request.getParameter(CentralConstants.PARAM_DESC); + String startDate = request.getParameter(CentralConstants.PARAM_STARTDATE); + String lang = request.getParameter(CentralConstants.PARAM_LANG); + String method = request.getParameter(CentralConstants.PARAM_METHOD); + + Long ldId = null; + Long lsId = null; + try { + // TODO check input parameters are valid. + + // Create xml document + DocumentBuilderFactory factory = DocumentBuilderFactory + .newInstance(); + DocumentBuilder builder = factory.newDocumentBuilder(); + Document document = builder.newDocument(); + + Element element = null; + + if (method.equals(CentralConstants.METHOD_START)) { + ldId = new Long(ldIdStr); + Long lessonId = startLesson(serverId, datetime, hashValue, + username, ldId, courseId, title, desc, country, lang); + + element = document.createElement("Lesson"); + element.setAttribute("lessonId", lessonId.toString()); + + } else if (method.equals(CentralConstants.METHOD_SCHEDULE)) { + ldId = new Long(ldIdStr); + Long lessonId = scheduleLesson(serverId, datetime, hashValue, + username, ldId, courseId, title, desc, startDate, + country, lang); + + element = document.createElement("Lesson"); + element.setAttribute("lessonId", lessonId.toString()); + + } else if (method.equals(CentralConstants.METHOD_DELETE)) { + lsId = new Long(lsIdStr); + Boolean deleted = deleteLesson(serverId, datetime, hashValue, + username, lsId); + + element = document.createElement("Lesson"); + element.setAttribute("lessonId", lsId.toString()); + element.setAttribute("deleted", deleted.toString()); + + } else { + String msg = "Method :" + method + " is not recognised"; + log.error(msg); + response.sendError(response.SC_BAD_REQUEST, msg); + } + + document.appendChild(element); + + // write out the xml document. + 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); + + out.write(writer.toString()); + + } catch (NumberFormatException nfe) { + log.error("lsId or ldId is not an integer" + lsIdStr + ldIdStr); + response.sendError(response.SC_BAD_REQUEST, "lsId or ldId is not an integer"); + } catch (TransformerConfigurationException e) { + log.error("Can not convert XML document to string"); + response.sendError(response.SC_INTERNAL_SERVER_ERROR); + } catch (TransformerException e) { + log.error("Can not convert XML document to string"); + response.sendError(response.SC_INTERNAL_SERVER_ERROR); + } catch (ParserConfigurationException e) { + log.error("Can not build XML document"); + response.sendError(response.SC_INTERNAL_SERVER_ERROR); + } catch (Exception e) { + response.sendError(response.SC_INTERNAL_SERVER_ERROR); + } + + out.flush(); + out.close(); + } + + /** + * The doPost method of the servlet.
+ * + * This method is called when a form has its tag value method equals to + * post. + * + * @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 doPost(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + // TODO services should be implemented as POST + response.setContentType("text/html"); + PrintWriter out = response.getWriter(); + out.flush(); + out.close(); + } + + public Long startLesson(String serverId, String datetime, String hashValue, + String username, long ldId, String courseId, String title, + String desc, String countryIsoCode, String langIsoCode) + throws RemoteException { + try { + ExtServerOrgMap serverMap = integrationService + .getExtServerOrgMap(serverId); + Authenticator + .authenticate(serverMap, datetime, username, hashValue); + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap( + serverMap, username); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap( + serverMap, userMap, courseId, countryIsoCode, langIsoCode); + // 1. init lesson + Lesson lesson = monitoringService + .initializeLesson(title, desc, Boolean.TRUE, ldId, orgMap + .getOrganisation().getOrganisationId(), userMap + .getUser().getUserId()); + // 2. create lessonClass for lesson + createLessonClass(lesson, orgMap.getOrganisation(), userMap + .getUser()); + // 3. start lesson + monitoringService.startLesson(lesson.getLessonId(), userMap + .getUser().getUserId()); + + return lesson.getLessonId(); + } catch (Exception e) { + throw new RemoteException(e.getMessage(), e); + } + } + + public Long scheduleLesson(String serverId, String datetime, + String hashValue, String username, long ldId, String courseId, + String title, String desc, String startDate, String countryIsoCode, + String langIsoCode) throws RemoteException { + try { + ExtServerOrgMap serverMap = integrationService + .getExtServerOrgMap(serverId); + Authenticator + .authenticate(serverMap, datetime, username, hashValue); + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap( + serverMap, username); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap( + serverMap, userMap, courseId, countryIsoCode, langIsoCode); + // 1. init lesson + Lesson lesson = monitoringService + .initializeLesson(title, desc, Boolean.TRUE, ldId, orgMap + .getOrganisation().getOrganisationId(), userMap + .getUser().getUserId()); + // 2. create lessonClass for lesson + createLessonClass(lesson, orgMap.getOrganisation(), userMap + .getUser()); + // 3. schedule lesson + Date date = DateUtil.convertFromLAMSFlashFormat(startDate); + monitoringService.startLessonOnSchedule(lesson.getLessonId(), date, + userMap.getUser().getUserId()); + return lesson.getLessonId(); + } catch (Exception e) { + throw new RemoteException(e.getMessage(), e); + } + } + + public boolean deleteLesson(String serverId, String datetime, + String hashValue, String username, long lsId) + throws RemoteException { + try { + ExtServerOrgMap serverMap = integrationService + .getExtServerOrgMap(serverId); + Authenticator + .authenticate(serverMap, datetime, username, hashValue); + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap( + serverMap, username); + monitoringService.removeLesson(lsId, userMap.getUser().getUserId()); + return true; + } catch (Exception e) { + throw new RemoteException(e.getMessage(), e); + } + } + + private void createLessonClass(Lesson lesson, Organisation organisation, + User creator) { + List staffList = new LinkedList(); + staffList.add(creator); + List learnerList = new LinkedList(); + monitoringService.createLessonClassForLesson(lesson.getLessonId(), + organisation, organisation.getName() + "Learners", learnerList, + organisation.getName() + "Staff", staffList, creator + .getUserId()); + + } + + // private IMonitoringService getMonitoringService() { + // if (monitoringService == null) { + // monitoringService = (IMonitoringService) WebApplicationContextUtils + // .getRequiredWebApplicationContext(getServletContext()) + // .getBean("monitoringService"); + // } + // return monitoringService; + // } + // + // private IntegrationService getIntegrationService() { + // if (integrationService == null) { + // integrationService = (IntegrationService) WebApplicationContextUtils + // .getRequiredWebApplicationContext(getServletContext()) + // .getBean("integrationService"); + // } + // return integrationService; + // } + // + // private IWorkspaceManagementService getService() { + // if (service == null) { + // service = (IWorkspaceManagementService) WebApplicationContextUtils + // .getRequiredWebApplicationContext(getServletContext()) + // .getBean("workspaceManagementService"); + // } + // return service; + // } + // + // private MessageService getMessageService() { + // if (msgService == null) { + // msgService = getService().getMessageService(); + // } + // return msgService; + // } + + /** + * Initialization of the servlet.
+ * + * @throws ServletException + * if an error occure + */ + public void init() throws ServletException { + service = (IWorkspaceManagementService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean( + "workspaceManagementService"); + + integrationService = (IntegrationService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean( + "integrationService"); + + monitoringService = (IMonitoringService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean( + "monitoringService"); + } +}