Index: lams_central/src/java/org/lamsfoundation/lams/webservice/Register.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/webservice/Register.java,v diff -u -r1.3 -r1.4 --- lams_central/src/java/org/lamsfoundation/lams/webservice/Register.java 22 Feb 2007 01:18:01 -0000 1.3 +++ lams_central/src/java/org/lamsfoundation/lams/webservice/Register.java 2 Jan 2008 23:35:28 -0000 1.4 @@ -18,30 +18,50 @@ String hash) throws java.rmi.RemoteException; public boolean addUserToGroup( - String username, + String username, String serverId, String datetime, String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, Boolean isTeacher) throws java.rmi.RemoteException; public boolean addUserToGroupLessons( - String username, + String username, String serverId, String datetime, - String hash) throws java.rmi.RemoteException; + String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, + Boolean asStaff) throws java.rmi.RemoteException; public boolean addUserToSubgroup( - String username, - String orgid, + String username, String serverId, String datetime, String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, + String subgroupId, + String subgroupName, Boolean isTeacher) throws java.rmi.RemoteException; public boolean addUserToSubgroupLessons( - String username, - String orgId, + String username, String serverId, String datetime, - String hash) throws java.rmi.RemoteException; + String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, + String subgroupId, + String subgroupName, + Boolean asStaff) throws java.rmi.RemoteException; } Index: lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingImpl.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingImpl.java,v diff -u -r1.11 -r1.12 --- lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingImpl.java 21 Sep 2007 03:34:23 -0000 1.11 +++ lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingImpl.java 2 Jan 2008 23:35:28 -0000 1.12 @@ -7,28 +7,23 @@ package org.lamsfoundation.lams.webservice; -import java.util.Date; import java.util.Iterator; -import java.util.Set; import javax.servlet.http.HttpServlet; import org.apache.axis.MessageContext; import org.apache.axis.transport.http.HTTPConstants; 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.IIntegrationService; import org.lamsfoundation.lams.lesson.Lesson; import org.lamsfoundation.lams.lesson.service.ILessonService; -import org.lamsfoundation.lams.usermanagement.AuthenticationMethod; import org.lamsfoundation.lams.usermanagement.Organisation; -import org.lamsfoundation.lams.usermanagement.Role; import org.lamsfoundation.lams.usermanagement.User; -import org.lamsfoundation.lams.usermanagement.UserOrganisation; -import org.lamsfoundation.lams.usermanagement.UserOrganisationRole; import org.lamsfoundation.lams.usermanagement.service.IUserManagementService; -import org.lamsfoundation.lams.util.LanguageUtil; import org.springframework.web.context.support.WebApplicationContextUtils; public class RegisterServiceSoapBindingImpl implements Register { @@ -66,20 +61,8 @@ Authenticator.authenticate(extServer, datetime, hash); if (service.getUserByLogin(username) != null) return false; - User user = new User(); - user.setLogin(username); - user.setPassword(password); - user.setFirstName(firstName); - user.setLastName(lastName); - user.setEmail(email); - user.setAuthenticationMethod((AuthenticationMethod) service.findById( - AuthenticationMethod.class, AuthenticationMethod.DB)); - user.setCreateDate(new Date()); - user.setDisabledFlag(false); - user.setLocale(LanguageUtil.getDefaultLocale()); - user.setFlashTheme(service.getDefaultFlashTheme()); - user.setHtmlTheme(service.getDefaultHtmlTheme()); - service.save(user); + ExtUserUseridMap userMap = integrationService.getImplicitExtUserUseridMap(extServer, + username, password, firstName, lastName, email); return true; } catch (Exception e) { log.debug(e.getMessage(), e); @@ -92,13 +75,23 @@ String serverId, String datetime, String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, Boolean isTeacher) throws java.rmi.RemoteException { try { - ExtServerOrgMap extServer = integrationService.getExtServerOrgMap(serverId); - Authenticator.authenticate(extServer, datetime, hash); - User user = service.getUserByLogin(username); - Organisation org = extServer.getOrganisation(); - addMemberships(user, org, isTeacher); + // authenticate external server + ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, hash); + + // get user map, creating if necessary + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(serverMap, username); + + // add user to org, creating org if necessary + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(serverMap, userMap, + courseId, courseName, countryIsoCode, langIsoCode, + service.getRootOrganisation().getOrganisationId().toString(), isTeacher, false); return true; } catch (Exception e) { log.debug(e.getMessage(), e); @@ -108,27 +101,33 @@ public boolean addUserToSubgroup( String username, - String orgId, String serverId, String datetime, String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, + String subgroupId, + String subgroupName, Boolean isTeacher) throws java.rmi.RemoteException { try { - ExtServerOrgMap extServer = integrationService.getExtServerOrgMap(serverId); - Authenticator.authenticate(extServer, datetime, hash); - User user = service.getUserByLogin(username); - Organisation group = extServer.getOrganisation(); - Organisation subgroup = (Organisation)service.findById(Organisation.class, new Integer(orgId)); - Set children = group.getChildOrganisations(); - Iterator iter = children.iterator(); - while (iter.hasNext()) { - Organisation child = (Organisation)iter.next(); - if (child.getOrganisationId().equals(subgroup.getOrganisationId())) { - addMemberships(user, subgroup, isTeacher); - return true; - } - } - return false; + // authenticate external server + ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, hash); + + // get group to use for this request + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(serverMap, username); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(serverMap, userMap, + courseId, courseName, countryIsoCode, langIsoCode, + service.getRootOrganisation().getOrganisationId().toString(), isTeacher, false); + Organisation group = orgMap.getOrganisation(); + + // add user to subgroup, creating subgroup if necessary + ExtCourseClassMap subOrgMap = integrationService.getExtCourseClassMap(serverMap, userMap, + subgroupId, subgroupName, countryIsoCode, langIsoCode, + group.getOrganisationId().toString(), isTeacher, false); + return true; } catch (Exception e) { log.debug(e.getMessage(), e); throw new java.rmi.RemoteException(e.getMessage()); @@ -139,13 +138,27 @@ String username, String serverId, String datetime, - String hash) throws java.rmi.RemoteException { + String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, + Boolean asStaff) throws java.rmi.RemoteException { try { - ExtServerOrgMap extServer = integrationService.getExtServerOrgMap(serverId); - Authenticator.authenticate(extServer, datetime, hash); + // authenticate external server + ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, hash); + + // get group to use for this request + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(serverMap, username); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(serverMap, userMap, + courseId, courseName, countryIsoCode, langIsoCode, + service.getRootOrganisation().getOrganisationId().toString(), asStaff, false); + Organisation org = orgMap.getOrganisation(); + + // add user to lessons User user = service.getUserByLogin(username); - Organisation org = extServer.getOrganisation(); - addUserToLessons(user, org); + addUserToLessons(user, org, asStaff); return true; } catch (Exception e) { log.debug(e.getMessage(), e); @@ -155,25 +168,39 @@ public boolean addUserToSubgroupLessons( String username, - String orgId, String serverId, String datetime, - String hash) throws java.rmi.RemoteException { + String hash, + String courseId, + String courseName, + String countryIsoCode, + String langIsoCode, + String subgroupId, + String subgroupName, + Boolean asStaff) throws java.rmi.RemoteException { try { - ExtServerOrgMap extServer = integrationService.getExtServerOrgMap(serverId); - Authenticator.authenticate(extServer, datetime, hash); - User user = service.getUserByLogin(username); - Organisation group = extServer.getOrganisation(); + // authenticate external server + ExtServerOrgMap serverMap = integrationService.getExtServerOrgMap(serverId); + Authenticator.authenticate(serverMap, datetime, hash); - Organisation subgroup = (Organisation)service.findById(Organisation.class, new Integer(orgId)); - Set children = group.getChildOrganisations(); - Iterator iter = children.iterator(); - while (iter.hasNext()) { - Organisation child = (Organisation)iter.next(); - if (child.getOrganisationId().equals(subgroup.getOrganisationId())) { - addUserToLessons(user, subgroup); - return true; - } + // get group to use for this request + ExtUserUseridMap userMap = integrationService.getExtUserUseridMap(serverMap, username); + ExtCourseClassMap orgMap = integrationService.getExtCourseClassMap(serverMap, userMap, + courseId, courseName, countryIsoCode, langIsoCode, + service.getRootOrganisation().getOrganisationId().toString(), asStaff, false); + Organisation group = orgMap.getOrganisation(); + + // get subgroup to add user to + ExtCourseClassMap subOrgMap = integrationService.getExtCourseClassMap(serverMap, userMap, + subgroupId, subgroupName, countryIsoCode, langIsoCode, + group.getOrganisationId().toString(), asStaff, false); + Organisation subgroup = subOrgMap.getOrganisation(); + + // add user to subgroup lessons + if (subgroup != null) { + User user = service.getUserByLogin(username); + addUserToLessons(user, subgroup, asStaff); + return true; } return false; } catch (Exception e) { @@ -182,35 +209,17 @@ } } - @SuppressWarnings("unchecked") - private void addMemberships(User user, Organisation org, Boolean isTeacher) { - log.debug("adding memberships for user " + user.getUserId() + " in " + org.getName()); - UserOrganisation uo = new UserOrganisation(user, org); - service.save(uo); - Integer[] roles; - if (isTeacher) { - roles = new Integer[] { Role.ROLE_AUTHOR, Role.ROLE_MONITOR, Role.ROLE_LEARNER }; - } else { - roles = new Integer[] { Role.ROLE_LEARNER }; - } - for (Integer roleId : roles) { - UserOrganisationRole uor = new UserOrganisationRole(uo, (Role) service.findById( - Role.class, roleId)); - service.save(uor); - uo.addUserOrganisationRole(uor); - } - user.addUserOrganisation(uo); - service.save(user); - } - - private void addUserToLessons(User user, Organisation org) { + private void addUserToLessons(User user, Organisation org, Boolean asStaff) { if (org.getLessons() != null) { Iterator iter2 = org.getLessons().iterator(); while (iter2.hasNext()) { Lesson lesson = (Lesson) iter2.next(); lessonService.addLearner(lesson.getLessonId(), user.getUserId()); - lessonService.addStaffMember(lesson.getLessonId(), user.getUserId()); - log.debug("Added " + user.getLogin() + " to " + lesson.getLessonName()); + if (asStaff) lessonService.addStaffMember(lesson.getLessonId(), user.getUserId()); + if (log.isDebugEnabled()) { + log.debug("Added " + user.getLogin() + " to " + lesson.getLessonName() + + (asStaff ? " as staff, and" : " as learner") ); + } } } } Index: lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingSkeleton.java =================================================================== RCS file: /usr/local/cvsroot/lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingSkeleton.java,v diff -u -r1.3 -r1.4 --- lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingSkeleton.java 22 Feb 2007 01:18:01 -0000 1.3 +++ lams_central/src/java/org/lamsfoundation/lams/webservice/RegisterServiceSoapBindingSkeleton.java 2 Jan 2008 23:35:28 -0000 1.4 @@ -69,6 +69,10 @@ new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "serverId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "datetime"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseName"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "countryIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "langIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "isTeacher"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "boolean"), java.lang.Boolean.class, false, false), }; _oper = new org.apache.axis.description.OperationDesc("addUserToGroup", _params, new javax.xml.namespace.QName("", "addUserToGroupReturn")); @@ -90,7 +94,12 @@ new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "username"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "serverId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "datetime"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), - new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseName"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "countryIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "langIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "asStaff"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "boolean"), java.lang.Boolean.class, false, false), }; _oper = new org.apache.axis.description.OperationDesc("addUserToGroupLessons", _params, new javax.xml.namespace.QName("", "addUserToGroupLessonsReturn")); _oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "boolean")); @@ -109,10 +118,15 @@ org.apache.axis.description.ParameterDesc [] _params; _params = new org.apache.axis.description.ParameterDesc [] { new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "username"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), - new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "orgId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "serverId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "datetime"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), - new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseName"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "countryIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "langIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "subgroupId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "subgroupName"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "isTeacher"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "boolean"), java.lang.Boolean.class, false, false), }; _oper = new org.apache.axis.description.OperationDesc("addUserToSubgroup", _params, new javax.xml.namespace.QName("", "addUserToSubgroupReturn")); @@ -132,10 +146,16 @@ org.apache.axis.description.ParameterDesc [] _params; _params = new org.apache.axis.description.ParameterDesc [] { new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "username"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), - new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "orgId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "serverId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "datetime"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), - new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "hash"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "courseName"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "countryIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "langIsoCode"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "subgroupId"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "subgroupName"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "string"), java.lang.String.class, false, false), + new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("", "asStaff"), org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://schemas.xmlsoap.org/soap/encoding/", "boolean"), java.lang.Boolean.class, false, false), }; _oper = new org.apache.axis.description.OperationDesc("addUserToSubgroupLessons", _params, new javax.xml.namespace.QName("", "addUserToSubgroupLessonsReturn")); _oper.setReturnType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "boolean")); @@ -162,23 +182,33 @@ return ret; } - public boolean addUserToGroup(String username, String serverId, String datetime, String hash, Boolean isTeacher) throws java.rmi.RemoteException { - boolean ret = impl.addUserToGroup(username, serverId, datetime, hash, isTeacher); + public boolean addUserToGroup(String username, String serverId, String datetime, String hash, + String courseId, String courseName, String countryIsoCode, String langIsoCode, Boolean isTeacher) throws java.rmi.RemoteException { + boolean ret = impl.addUserToGroup(username, serverId, datetime, hash, + courseId, courseName, countryIsoCode, langIsoCode, isTeacher); return ret; } - public boolean addUserToGroupLessons(String username, String serverId, String datetime, String hash) throws java.rmi.RemoteException { - boolean ret = impl.addUserToGroupLessons(username, serverId, datetime, hash); + public boolean addUserToGroupLessons(String username, String serverId, String datetime, String hash, + String courseId, String courseName, String countryIsoCode, String langIsoCode, Boolean asStaff) throws java.rmi.RemoteException { + boolean ret = impl.addUserToGroupLessons(username, serverId, datetime, hash, + courseId, courseName, countryIsoCode, langIsoCode, asStaff); return ret; } - public boolean addUserToSubgroup(String username, String orgId, String serverId, String datetime, String hash, Boolean isTeacher) throws java.rmi.RemoteException { - boolean ret = impl.addUserToSubgroup(username, orgId, serverId, datetime, hash, isTeacher); + public boolean addUserToSubgroup(String username, String serverId, String datetime, String hash, + String courseId, String courseName, String countryIsoCode, String langIsoCode, String subgroupId, String subgroupName, Boolean isTeacher) throws java.rmi.RemoteException { + boolean ret = impl.addUserToSubgroup(username, serverId, datetime, hash, + courseId, courseName, countryIsoCode, langIsoCode, + subgroupId, subgroupName, isTeacher); return ret; } - public boolean addUserToSubgroupLessons(String username, String orgId, String serverId, String datetime, String hash) throws java.rmi.RemoteException { - boolean ret = impl.addUserToSubgroupLessons(username, orgId, serverId, datetime, hash); + public boolean addUserToSubgroupLessons(String username, String serverId, String datetime, String hash, + String courseId, String courseName, String countryIsoCode, String langIsoCode, String subgroupId, String subgroupName, Boolean asStaff) throws java.rmi.RemoteException { + boolean ret = impl.addUserToSubgroupLessons(username, serverId, datetime, hash, + courseId, courseName, countryIsoCode, langIsoCode, + subgroupId, subgroupName, asStaff); return ret; } } Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java,v diff -u -r1.5 -r1.6 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java 7 Nov 2007 05:57:05 -0000 1.5 +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IIntegrationService.java 2 Jan 2008 23:35:27 -0000 1.6 @@ -39,8 +39,13 @@ */ public interface IIntegrationService { - ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, String extCourseId, String countryIsoCode, String langIsoCode); + ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, + String extCourseId, String countryIsoCode, String langIsoCode); + ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, + String extCourseId, String extCourseName, String countryIsoCode, String langIsoCode, + String parentOrgId, Boolean isTeacher, Boolean prefix); + ExtUserUseridMap getExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername) throws UserInfoFetchException; ExtServerOrgMap getExtServerOrgMap(Integer sid); @@ -55,8 +60,16 @@ String country, String email) throws UserInfoFetchException; - + ExtUserUseridMap getImplicitExtUserUseridMap( + ExtServerOrgMap serverMap, + String extUsername, + String password, + String firstName, + String lastName, + String email) + throws UserInfoFetchException; + List getAllExtServerOrgMaps(); void saveExtServerOrgMap(ExtServerOrgMap map); Index: lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java =================================================================== RCS file: /usr/local/cvsroot/lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java,v diff -u -r1.15 -r1.16 --- lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java 13 Dec 2007 03:33:32 -0000 1.15 +++ lams_common/src/java/org/lamsfoundation/lams/integration/service/IntegrationService.java 2 Jan 2008 23:35:27 -0000 1.16 @@ -87,29 +87,46 @@ } } - public ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, String extCourseId, String countryIsoCode, String langIsoCode){ + // wrapper method for compatibility with original integration modules + public ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, + String extCourseId, String countryIsoCode, String langIsoCode){ + return getExtCourseClassMap(serverMap, userMap, + extCourseId, extCourseId, countryIsoCode, langIsoCode, + service.getRootOrganisation().getOrganisationId().toString(), true, true); + } + + // newer method which accepts course name, a parent org id, a flag for whether user should get + // 'teacher' roles, and a flag for whether to use a prefix in the org's name + public ExtCourseClassMap getExtCourseClassMap(ExtServerOrgMap serverMap, ExtUserUseridMap userMap, + String extCourseId, String extCourseName, String countryIsoCode, String langIsoCode, + String parentOrgId, Boolean isTeacher, Boolean prefix){ Map properties = new HashMap(); properties.put("courseid", extCourseId); properties.put("extServerOrgMap.sid", serverMap.getSid()); List list = service.findByProperties(ExtCourseClassMap.class, properties); if(list==null || list.size()==0){ - return createExtCourseClassMap(serverMap, userMap.getUser(), extCourseId, countryIsoCode, langIsoCode); + return createExtCourseClassMap(serverMap, userMap.getUser(), + extCourseId, extCourseName, countryIsoCode, langIsoCode, parentOrgId, isTeacher, prefix); }else{ ExtCourseClassMap map = (ExtCourseClassMap)list.get(0); User user = userMap.getUser(); Organisation org = map.getOrganisation(); if(service.getUserOrganisation(user.getUserId(), org.getOrganisationId())==null){ - addMemberships(user, org); + addMemberships(user, org, isTeacher); } return map; } - } - private void addMemberships(User user, Organisation org){ + private void addMemberships(User user, Organisation org, Boolean isTeacher){ UserOrganisation uo = new UserOrganisation(user,org); service.save(uo); - Integer[] roles = new Integer[]{Role.ROLE_AUTHOR, Role.ROLE_MONITOR, Role.ROLE_LEARNER}; + Integer[] roles; + if (isTeacher) { + roles = new Integer[] { Role.ROLE_AUTHOR, Role.ROLE_MONITOR, Role.ROLE_LEARNER }; + } else { + roles = new Integer[] { Role.ROLE_LEARNER }; + } for(Integer roleId:roles){ UserOrganisationRole uor = new UserOrganisationRole(uo,(Role)service.findById(Role.class,roleId)); service.save(uor); @@ -136,50 +153,92 @@ } public ExtUserUseridMap getImplicitExtUserUseridMap( - ExtServerOrgMap serverMap, - String extUsername, - String firstName, - String lastName, - String language, - String country, - String email) - throws UserInfoFetchException + ExtServerOrgMap serverMap, + String extUsername, + String password, + String firstName, + String lastName, + String email) + throws UserInfoFetchException { Map properties = new HashMap(); properties.put("extServerOrgMap.sid", serverMap.getSid()); properties.put("extUsername", extUsername); List list = service.findByProperties(ExtUserUseridMap.class, properties); if(list==null || list.size()==0){ + String[] defaultLangCountry = LanguageUtil.getDefaultLangCountry(); + String[] userData = { "",firstName,lastName,"","","","","","","","",email,defaultLangCountry[1],defaultLangCountry[0] }; + return createExtUserUseridMap(serverMap, extUsername, password, userData, false); + }else{ + return (ExtUserUseridMap)list.get(0); + } + } + + public ExtUserUseridMap getImplicitExtUserUseridMap( + ExtServerOrgMap serverMap, + String extUsername, + String firstName, + String lastName, + String language, + String country, + String email) + throws UserInfoFetchException + { + Map properties = new HashMap(); + properties.put("extServerOrgMap.sid", serverMap.getSid()); + properties.put("extUsername", extUsername); + List list = service.findByProperties(ExtUserUseridMap.class, properties); + if(list==null || list.size()==0){ return createImplicitExtUserUseridMap(serverMap, extUsername, firstName, lastName, language, country, email); }else{ return (ExtUserUseridMap)list.get(0); } } - - private ExtCourseClassMap createExtCourseClassMap(ExtServerOrgMap serverMap, User user, String extCourseId, String countryIsoCode, String langIsoCode) { - Organisation org = new Organisation(); - // TODO group name could be more human readable, need name as well as id from 3rd party server? - org.setName(buildName(serverMap.getPrefix(), extCourseId)); - org.setDescription(extCourseId); - org.setParentOrganisation(service.getRootOrganisation()); - org.setOrganisationType((OrganisationType)service.findById(OrganisationType.class,OrganisationType.COURSE_TYPE)); - org.setOrganisationState((OrganisationState)service.findById(OrganisationState.class,OrganisationState.ACTIVE)); - org.setLocale(LanguageUtil.getSupportedLocale(langIsoCode, countryIsoCode)); - service.saveOrganisation(org, user.getUserId()); - addMemberships(user,org); + + private ExtCourseClassMap createExtCourseClassMap(ExtServerOrgMap serverMap, User user, + String extCourseId, String extCourseName, String countryIsoCode, String langIsoCode, + String parentOrgId, Boolean isTeacher, Boolean prefix) { + Organisation org = createOrganisation(serverMap, user, extCourseId, extCourseName, countryIsoCode, langIsoCode, parentOrgId, prefix); + addMemberships(user,org,isTeacher); ExtCourseClassMap map = new ExtCourseClassMap(); map.setCourseid(extCourseId); map.setExtServerOrgMap(serverMap); map.setOrganisation(org); service.save(map); return map; } + + private Organisation createOrganisation(ExtServerOrgMap serverMap, User user, + String extCourseId, String extCourseName, String countryIsoCode, String langIsoCode, + String parentOrgId, Boolean prefix) { + Organisation org = new Organisation(); + org.setName( prefix ? buildName(serverMap.getPrefix(), extCourseName) : extCourseName ); + org.setDescription(extCourseId); + org.setOrganisationState((OrganisationState)service.findById(OrganisationState.class,OrganisationState.ACTIVE)); + org.setLocale(LanguageUtil.getSupportedLocale(langIsoCode, countryIsoCode)); - private ExtUserUseridMap createExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername) throws UserInfoFetchException { - String[] userData = getUserDataFromExtServer(serverMap, extUsername); + // determine whether org will be a group or subgroup + Organisation parent = (Organisation)service.findById(Organisation.class, Integer.valueOf(parentOrgId)); + if (parent != null) { + org.setParentOrganisation(parent); + if (!parent.getOrganisationId().equals(service.getRootOrganisation().getOrganisationId())) { + org.setOrganisationType((OrganisationType)service.findById(OrganisationType.class,OrganisationType.CLASS_TYPE)); + } else { + org.setOrganisationType((OrganisationType)service.findById(OrganisationType.class,OrganisationType.COURSE_TYPE)); + } + } else { + // default + org.setParentOrganisation(service.getRootOrganisation()); + org.setOrganisationType((OrganisationType)service.findById(OrganisationType.class,OrganisationType.COURSE_TYPE)); + } + return service.saveOrganisation(org, user.getUserId()); + } + + // flexible method to specify username and password + private ExtUserUseridMap createExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername, String password, String[] userData, boolean prefix) throws UserInfoFetchException { User user = new User(); - user.setLogin(buildName(serverMap.getPrefix(),extUsername)); - user.setPassword(HashUtil.sha1(RandomPasswordGenerator.nextPassword(10))); + user.setLogin( prefix ? buildName(serverMap.getPrefix(),extUsername) : extUsername ); + user.setPassword(password); user.setTitle(userData[0]); user.setFirstName(userData[1]); user.setLastName(userData[2]); @@ -207,6 +266,14 @@ return map; } + // compatibility method to support integrations + private ExtUserUseridMap createExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername) throws UserInfoFetchException { + String[] userData = getUserDataFromExtServer(serverMap, extUsername); + String password = HashUtil.sha1(RandomPasswordGenerator.nextPassword(10)); + return createExtUserUseridMap(serverMap, extUsername, password, userData, true); + } + + // compatibility method public ExtUserUseridMap createImplicitExtUserUseridMap(ExtServerOrgMap serverMap, String extUsername, String firstName, @@ -215,36 +282,9 @@ String country, String email) throws UserInfoFetchException { - - User user = new User(); - user.setLogin(buildName(serverMap.getPrefix(),extUsername)); - user.setPassword(HashUtil.sha1(RandomPasswordGenerator.nextPassword(10))); - user.setTitle(""); - user.setFirstName(firstName); - user.setLastName(lastName); - user.setAddressLine1(""); - user.setCity(""); - user.setState(""); - user.setPostcode(""); - user.setCountry(""); - user.setDayPhone(""); - user.setMobilePhone(""); - user.setFax(""); - user.setEmail(email); - user.setAuthenticationMethod((AuthenticationMethod)service.findById(AuthenticationMethod.class, AuthenticationMethod.DB)); - user.setCreateDate(new Date()); - user.setDisabledFlag(false); - user.setLocale(LanguageUtil.getSupportedLocale(language, country)); - user.setFlashTheme(service.getDefaultFlashTheme()); - user.setHtmlTheme(service.getDefaultHtmlTheme()); - service.save(user); - ExtUserUseridMap map = new ExtUserUseridMap(); - map.setExtServerOrgMap(serverMap); - map.setExtUsername(extUsername); - map.setUser(user); - service.save(map); - return map; - + String[] userData = { "",firstName,lastName,"","","","","","","","",email, country, language }; + String password = HashUtil.sha1(RandomPasswordGenerator.nextPassword(10)); + return createExtUserUseridMap(serverMap, extUsername, password, userData, true); }