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");
+ }
+}