Index: lams_central/src/java/org/lamsfoundation/lams/webservice/xml/OrganisationGroupServlet.java =================================================================== diff -u --- lams_central/src/java/org/lamsfoundation/lams/webservice/xml/OrganisationGroupServlet.java (revision 0) +++ lams_central/src/java/org/lamsfoundation/lams/webservice/xml/OrganisationGroupServlet.java (revision c39770c3f6bdcc88e858ca6c53b24dbb63bdc0d0) @@ -0,0 +1,133 @@ +package org.lamsfoundation.lams.webservice.xml; + +import java.io.IOException; +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 org.apache.commons.lang.StringEscapeUtils; +import org.apache.log4j.Logger; +import org.lamsfoundation.lams.integration.ExtServerOrgMap; +import org.lamsfoundation.lams.integration.security.Authenticator; +import org.lamsfoundation.lams.integration.service.IntegrationService; +import org.lamsfoundation.lams.usermanagement.OrganisationGroup; +import org.lamsfoundation.lams.usermanagement.OrganisationGrouping; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; +import org.lamsfoundation.lams.util.CentralConstants; +import org.lamsfoundation.lams.util.WebUtil; +import org.springframework.web.context.support.WebApplicationContextUtils; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.ls.DOMImplementationLS; +import org.w3c.dom.ls.LSOutput; +import org.w3c.dom.ls.LSSerializer; + +/** + * Allows course groupings and groups access for integrated environments. + * + * @author Marcin Cieslak + * + */ +public class OrganisationGroupServlet extends HttpServlet { + private static Logger log = Logger.getLogger(OrganisationGroupServlet.class); + + private static IntegrationService integrationService = null; + private static IUserManagementService userManagementService = null; + + private static DocumentBuilder docBuilder = null; + + static { + try { + OrganisationGroupServlet.docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + } catch (ParserConfigurationException e) { + OrganisationGroupServlet.log.error("Error while initialising XML document builder", e); + } + } + + @Override + public void doGet(HttpServletRequest request, HttpServletResponse response) { + 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); + + try { + ExtServerOrgMap serverMap = OrganisationGroupServlet.integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, username, hashValue); + + String method = request.getParameter(CentralConstants.PARAM_METHOD); + if ("getGroupings".equalsIgnoreCase(method)) { + Integer organisationId = WebUtil.readIntParam(request, CentralConstants.ATTR_COURSE_ID, false); + getGroupings(organisationId, response); + } else { + log.error("Unknown method: " + method); + response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Unknown method: " + method); + } + } catch (Exception e) { + OrganisationGroupServlet.log.error("Error while getting notifications", e); + } + } + + @Override + public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + doGet(request, response); + } + + /** + * Initialization of the servlet. + */ + @Override + public void init() throws ServletException { + OrganisationGroupServlet.integrationService = (IntegrationService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean("integrationService"); + + userManagementService = (IUserManagementService) WebApplicationContextUtils + .getRequiredWebApplicationContext(getServletContext()).getBean("userManagementService"); + } + + @SuppressWarnings("unchecked") + private void getGroupings(Integer organisationId, HttpServletResponse response) throws IOException { + Document doc = OrganisationGroupServlet.docBuilder.newDocument(); + Element groupsElement = doc.createElement("groups"); + doc.appendChild(groupsElement); + + List groupings = userManagementService.findByProperty(OrganisationGrouping.class, + "organisationId", organisationId); + for (OrganisationGrouping grouping : groupings) { + Element groupingElement = doc.createElement("grouping"); + groupingElement.setAttribute("id", grouping.getGroupingId().toString()); + groupingElement.setAttribute("name", StringEscapeUtils.escapeXml(grouping.getName())); + groupsElement.appendChild(groupingElement); + for (OrganisationGroup group : grouping.getGroups()) { + Element groupElement = doc.createElement("group"); + groupElement.setAttribute("id", group.getGroupId().toString()); + groupElement.setAttribute("name", StringEscapeUtils.escapeXml(group.getName())); + groupingElement.appendChild(groupElement); + for (User user : group.getUsers()) { + Element userElement = doc.createElement("user"); + userElement.setAttribute("id", user.getUserId().toString()); + userElement.setAttribute("firstname", StringEscapeUtils.escapeXml(user.getFirstName())); + userElement.setAttribute("lastname", StringEscapeUtils.escapeXml(user.getLastName())); + groupElement.appendChild(userElement); + } + } + } + + response.setContentType("text/xml"); + response.setCharacterEncoding("UTF-8"); + + DOMImplementationLS domImplementation = (DOMImplementationLS) doc.getImplementation(); + LSSerializer lsSerializer = domImplementation.createLSSerializer(); + LSOutput lsOutput = domImplementation.createLSOutput(); + lsOutput.setEncoding("UTF-8"); + lsOutput.setByteStream(response.getOutputStream()); + lsSerializer.write(doc, lsOutput); + } +} \ No newline at end of file Index: lams_central/web/WEB-INF/web.xml =================================================================== diff -u -r5d05b2b8e46cb54fdd3fb9658ee83913fd0ab366 -rc39770c3f6bdcc88e858ca6c53b24dbb63bdc0d0 --- lams_central/web/WEB-INF/web.xml (.../web.xml) (revision 5d05b2b8e46cb54fdd3fb9658ee83913fd0ab366) +++ lams_central/web/WEB-INF/web.xml (.../web.xml) (revision c39770c3f6bdcc88e858ca6c53b24dbb63bdc0d0) @@ -382,7 +382,14 @@ + + OrganisationGroupServlet + + org.lamsfoundation.lams.webservice.xml.OrganisationGroupServlet + + + LearningDesignRestServlet /rest/LearningDesign @@ -496,7 +503,12 @@ UserRoleServlet /services/UserRoleManager + + OrganisationGroupServlet + /services/xml/CourseGroupManager + + csv text/plain @@ -635,6 +647,7 @@ /services/Register/* /services/xml/NotificationManager /services/UserRoleManager + /services/xml/CourseGroupManager /ForgotPasswordRequest /forgotPassword.jsp /forgotPasswordChange.jsp