Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/OrganisationDAO.java =================================================================== diff -u -r19c9010eff6be2e29657beed94349a978088650f -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/OrganisationDAO.java (.../OrganisationDAO.java) (revision 19c9010eff6be2e29657beed94349a978088650f) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/OrganisationDAO.java (.../OrganisationDAO.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -25,6 +25,11 @@ */ public class OrganisationDAO extends HibernateDaoSupport implements IOrganisationDAO { + + private static final String TABLENAME ="lams_organisation"; + private static final String FIND_BY_WORKSPACE = "from " + TABLENAME + + " in class " + Organisation.class.getName() + + " where workspace_id=?"; /** * @see org.lamsfoundation.lams.usermanagement.dao.IOrganisationDAO#getAllOrganisations() @@ -97,5 +102,12 @@ public void deleteOrganisationById(Integer organisationId) { deleteOrganisation(getOrganisationById(organisationId)); } + public Organisation getOrganisationByWorkspaceID(Integer workspaceID){ + List list = getHibernateTemplate().find(FIND_BY_WORKSPACE,workspaceID); + if(list.size()!=0) + return (Organisation) list.get(0); + else + return null; + } } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceDAO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceDAO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceDAO.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,29 @@ +/* + * Created on Mar 22, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.dao.hibernate; + +import org.lamsfoundation.lams.learningdesign.dao.hibernate.BaseDAO; +import org.lamsfoundation.lams.usermanagement.Workspace; +import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class WorkspaceDAO extends BaseDAO implements IWorkspaceDAO{ + + /** + * (non-Javadoc) + * @see org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO#getWorkspaceByID(java.lang.Integer) + */ + public Workspace getWorkspaceByID(Integer workspaceID) { + return (Workspace) super.find(Workspace.class,workspaceID); + + } +} Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceFolderDAO.java =================================================================== diff -u -r1197a06ec1722bf2704ebcfe523fb9e36be20ae0 -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceFolderDAO.java (.../WorkspaceFolderDAO.java) (revision 1197a06ec1722bf2704ebcfe523fb9e36be20ae0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/WorkspaceFolderDAO.java (.../WorkspaceFolderDAO.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -6,23 +6,44 @@ */ package org.lamsfoundation.lams.usermanagement.dao.hibernate; +import java.util.List; + +import org.lamsfoundation.lams.learningdesign.dao.hibernate.BaseDAO; import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO; -import org.springframework.orm.hibernate.support.HibernateDaoSupport; /** - * @author Minhas - * - * TODO To change the template for this generated type comment go to - * Window - Preferences - Java - Code Style - Code Templates + * @author Manpreet Minhas */ -public class WorkspaceFolderDAO extends HibernateDaoSupport implements IWorkspaceFolderDAO { - - /* (non-Javadoc) +public class WorkspaceFolderDAO extends BaseDAO implements IWorkspaceFolderDAO { + + private final String TABLENAME ="lams_workspace_folder"; + private final String FIND_BY_PARENT = "from " + TABLENAME + + " in class " + WorkspaceFolder.class.getName() + + " where parent_folder_id=?"; + private final String FIND_BY_USER = "from " + TABLENAME + + " in class " + WorkspaceFolder.class.getName() + + " where user_id=?"; + + /** + * (non-Javadoc) * @see org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO#getWorkspaceFolderByID(java.lang.Long) */ public WorkspaceFolder getWorkspaceFolderByID(Integer workspaceFolderID) { - return (WorkspaceFolder)this.getHibernateTemplate().get(WorkspaceFolder.class,workspaceFolderID); + return (WorkspaceFolder) super.find(WorkspaceFolder.class,workspaceFolderID); } - + public WorkspaceFolder getRunSequencesFolderForUser(Integer userID){ + String query = "from lams_workspace_folder wf where wf.user_id=? AND wf.lams_workspace_folder_type_id=2"; + List list = this.getHibernateTemplate().find(query,userID); + if(list.size()!=0) + return (WorkspaceFolder)list.get(0); + else + return null; + } + public List getWorkspaceFolderByParentFolder(Integer parentFolderID){ + return this.getHibernateTemplate().find(FIND_BY_PARENT,parentFolderID); + } + public List getWorkspaceFolderByUser(Integer userID){ + return this.getHibernateTemplate().find(FIND_BY_USER,userID); + } } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/OrganisationDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/OrganisationDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/OrganisationDTO.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,57 @@ +/* + * Created on Apr 5, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.dto; + +import org.lamsfoundation.lams.usermanagement.Organisation; +import org.lamsfoundation.lams.util.wddx.WDDXTAGS; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class OrganisationDTO { + + private Integer organisationID; + private String name; + private String description; + + public OrganisationDTO(){ + + } + public OrganisationDTO(Integer organisationID, String name, + String description) { + super(); + this.organisationID = organisationID; + this.name = name; + this.description = description; + } + public OrganisationDTO(Organisation organisation){ + this.organisationID = organisation.getOrganisationId(); + this.name = organisation.getName(); + this.description = organisation.getDescription(); + } + /** + * @return Returns the description. + */ + public String getDescription() { + return description!=null?description:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the name. + */ + public String getName() { + return name!=null?name:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the organisationID. + */ + public Integer getOrganisationID() { + return organisationID!=null?organisationID:WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/UserDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/UserDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/UserDTO.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,56 @@ +/* + * Created on Mar 15, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.dto; + +import org.lamsfoundation.lams.util.wddx.WDDXTAGS; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class UserDTO { + + private Integer userID; + private String firstName; + private String lastName; + private String login; + + + public UserDTO(Integer userID, String firstName, String lastName, + String login) { + this.userID = userID; + this.firstName = firstName; + this.lastName = lastName; + this.login = login; + } + /** + * @return Returns the firstName. + */ + public String getFirstName() { + return firstName!=null?firstName:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the lastName. + */ + public String getLastName() { + return lastName!=null?lastName:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the login. + */ + public String getLogin() { + return login!=null?login:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the userID. + */ + public Integer getUserID() { + return userID; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/WorkspaceDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/WorkspaceDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/WorkspaceDTO.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,42 @@ +/* + * Created on Mar 24, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.dto; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class WorkspaceDTO { + + private Integer workspaceID; + private Integer rootFolderID; + + + public WorkspaceDTO(){ + + } + + public WorkspaceDTO(Integer workspaceID, Integer rootFolderID) { + super(); + this.workspaceID = workspaceID; + this.rootFolderID = rootFolderID; + } + /** + * @return Returns the rootFolderID. + */ + public Integer getRootFolderID() { + return rootFolderID; + } + /** + * @return Returns the workspaceID. + */ + public Integer getWorkspaceID() { + return workspaceID; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/WorkspaceFolderDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/WorkspaceFolderDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/dto/WorkspaceFolderDTO.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,25 @@ +/* + * Created on Mar 24, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.dto; + +import java.util.Date; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class WorkspaceFolderDTO { + private String name; + private Date createDateTime; + private Date lastModifiedDate; + private Integer parentFolderID; + private Integer workspaceFolderID; + + +} Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/exception/UserException.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/exception/UserException.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/exception/UserException.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,24 @@ +/* + * Created on Apr 5, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement.exception; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class UserException extends Exception { + + public UserException(){ + + } + public UserException(String message){ + super(message); + } + +} Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java =================================================================== diff -u -r19c9010eff6be2e29657beed94349a978088650f -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 19c9010eff6be2e29657beed94349a978088650f) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/IUserManagementService.java (.../IUserManagementService.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -5,6 +5,7 @@ */ package org.lamsfoundation.lams.usermanagement.service; +import java.io.IOException; import java.util.List; import org.lamsfoundation.lams.usermanagement.dao.IUserDAO; import org.lamsfoundation.lams.usermanagement.dao.IRoleDAO; @@ -20,6 +21,8 @@ import org.lamsfoundation.lams.usermanagement.UserOrganisation; import org.lamsfoundation.lams.usermanagement.UserOrganisationRole; import org.lamsfoundation.lams.usermanagement.AuthenticationMethod; +import org.lamsfoundation.lams.usermanagement.Workspace; +import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; /** * User Management Service Interface to handle communication between @@ -150,8 +153,7 @@ */ public UserOrganisation getUserOrganisation(Integer userId,Integer organisationId); - - /** + /** * Retrieves organisations in which the user * has the specified role * @@ -160,7 +162,7 @@ * @return List of organisations */ public List getOrganisationsForUserByRole(User user, String roleName); - + /** * Retrieves child organisations of the parentOrg * @@ -286,4 +288,76 @@ */ public void saveOrUpdateUserOrganisationRole(UserOrganisationRole userOrganisationRole); + /** + * Saves an Organisation while creating its corresponding Workspace + * and WorkspaceFolder + * + * @param organisation The Organisation to be saved + * @param userID The user_id of the user who creates this organisation + * @return Integer The organisation_id of the new Organisation + */ + public Integer saveOrganisation(Organisation organisation,Integer userID); + + /** + * This method saves a new User to the underlying database while + * creating his default workspace and workspaceFolder + * + * @param user The User object to be persisted + * @param roleID What kind of user he is (AUTHOR/LEARNER/STAFF/ADMIN) + * @return Integer The user_id of the User + */ + public Integer saveUser(User user, Integer roleID); + + /** + * This method creates a new Workspace with a given name + * + * @param name The name with which workspace should be created + * @return Workspace The new Workspace object + */ + public Workspace createWorkspace(String name); + + /** + * This method creates a WorkspaceFolder for a given workspace and user. + * + * @param workspace The Workspace in which this WorkspaceFolder will be contained + * @param userID The user_id of the user who creates the above organisation + * @param workspaceFolderType The type of folder to be created. + * @return WorkspaceFolder The new WorkspaceFolder object + */ + public WorkspaceFolder createWorkspaceFolder(Workspace workspace,Integer userID, Integer workspaceFolderType); + + /** + * Returns the workspace related information for the given + * user. + * + * @param userID The user_id of the User + * @return String The required information in WDDX format + * @throws IOException + */ + public String getWorkspace(Integer userID)throws IOException; + + /** + * This method returns the same information as + * in above method + * getOrganisationsForUserByRole(User user, String roleName) + * with the only difference being that it is in WDDX format + * + * @param userID The user_id of the user + * @param roleName The role name + * @return String The required information in WDDX format + * @throws IOException + */ + public String getWDDXForOrganisationsForUserByRole(Integer userID, String roleName)throws IOException; + + /** + * This method returns the users in the Organisation with + * given organisationID and roleName + * in WDDX format. + * + * @param organisationID + * @param roleName + * @return + * @throws IOException + */ + public String getUsersFromOrganisationByRole(Integer organisationID, String roleName)throws IOException; } Index: lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java =================================================================== diff -u -r19c9010eff6be2e29657beed94349a978088650f -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 19c9010eff6be2e29657beed94349a978088650f) +++ lams_common/src/java/org/lamsfoundation/lams/usermanagement/service/UserManagementService.java (.../UserManagementService.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -5,24 +5,34 @@ */ package org.lamsfoundation.lams.usermanagement.service; +import java.io.IOException; +import java.util.Date; import java.util.List; import java.util.ArrayList; import java.util.Iterator; +import java.util.Vector; +import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO; import org.lamsfoundation.lams.usermanagement.dao.IAuthenticationMethodDAO; import org.lamsfoundation.lams.usermanagement.dao.IOrganisationDAO; import org.lamsfoundation.lams.usermanagement.dao.IOrganisationTypeDAO; import org.lamsfoundation.lams.usermanagement.dao.IUserOrganisationDAO; import org.lamsfoundation.lams.usermanagement.dao.IUserOrganisationRoleDAO; import org.lamsfoundation.lams.usermanagement.dao.IUserDAO; import org.lamsfoundation.lams.usermanagement.dao.IRoleDAO; +import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO; +import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO; import org.lamsfoundation.lams.usermanagement.Organisation; import org.lamsfoundation.lams.usermanagement.OrganisationType; 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.AuthenticationMethod; +import org.lamsfoundation.lams.usermanagement.Workspace; +import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.util.wddx.FlashMessage; /** * TODO Add description here @@ -43,6 +53,18 @@ private IUserOrganisationRoleDAO userOrganisationRoleDAO; private IAuthenticationMethodDAO authenticationMethodDAO; + protected IWorkspaceDAO workspaceDAO; + protected IWorkspaceFolderDAO workspaceFolderDAO; + protected ILearningDesignDAO learningDesignDAO; + + private FlashMessage flashMessage; + + /** + * @param workspaceFolderDAO The workspaceFolderDAO to set. + */ + public void setWorkspaceFolderDAO(IWorkspaceFolderDAO workspaceFolderDAO) { + this.workspaceFolderDAO = workspaceFolderDAO; + } /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#setUserDAO(org.lamsfoundation.lams.usermanagement.dao.IUserDAO) */ @@ -194,7 +216,7 @@ /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getOrganisationsForUserByRole(org.lamsfoundation.lams.usermanagement.User, java.lang.String) */ - public List getOrganisationsForUserByRole(User user, String roleName){ + public List getOrganisationsForUserByRole(User user, String roleName){ List list = new ArrayList(); Iterator i = userOrganisationDAO.getUserOrganisationsByUser(user).iterator(); while(i.hasNext()){ @@ -209,7 +231,6 @@ } return list; } - /** * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getChildOrganisations(org.lamsfoundation.lams.usermanagement.Organisation) */ @@ -301,4 +322,213 @@ public void saveOrUpdateUserOrganisationRole(UserOrganisationRole userOrganisationRole){ userOrganisationRoleDAO.saveOrUpdateUserOrganisationRole(userOrganisationRole); } + /** + * @param workspaceDAO The workspaceDAO to set. + */ + public void setWorkspaceDAO(IWorkspaceDAO workspaceDAO) { + this.workspaceDAO = workspaceDAO; + } + /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#saveOrganisation(org.lamsfoundation.lams.usermanagement.Organisation, java.lang.Integer) + */ + public Integer saveOrganisation(Organisation organisation,Integer userID){ + Workspace workspace = createWorkspace(organisation.getName()); + WorkspaceFolder workspaceFolder = createWorkspaceFolder(workspace, + userID, + WorkspaceFolder.NORMAL); + workspace.setRootFolder(workspaceFolder); + workspaceDAO.update(workspace); + organisation.setWorkspace(workspace); + organisationDAO.saveOrganisation(organisation); + return organisation.getOrganisationId(); + } + /** + * This method creates a new Workspace with a given name + * + * @param name The name with which workspace should be created + * @return Workspace The new Workspace object + */ + public Workspace createWorkspace(String name){ + Workspace workspace = new Workspace(name); + workspaceDAO.insert(workspace); + return workspace; + + } + /** + * This method creates a WorkspaceFolder for a given workspace and user. + * + * @param workspace The Workspace in which this WorkspaceFolder will be contained + * @param userID The user_id of the user who creates the above organisation + * @param workspaceFolderType The type of folder to be created. + * @return WorkspaceFolder The new WorkspaceFolder object + */ + public WorkspaceFolder createWorkspaceFolder(Workspace workspace,Integer userID, Integer workspaceFolderType){ + WorkspaceFolder workspaceFolder = new WorkspaceFolder(workspace.getName(), + workspace.getWorkspaceId(), + userID, + new Date(), + new Date(), + workspaceFolderType); + workspaceFolderDAO.insert(workspaceFolder); + return workspaceFolder; + + } + /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#saveUser(org.lamsfoundation.lams.usermanagement.User) + */ + public Integer saveUser(User user,Integer roleID){ + userDAO.saveUser(user); + createUserOrganisation(user,roleID); + Workspace workspace = createWorkspace(user.getLogin()); + WorkspaceFolder workspaceFolder = createWorkspaceFolder(workspace, + user.getUserId(), + WorkspaceFolder.NORMAL); + WorkspaceFolder runSequencesFolder = createWorkspaceFolder(workspace, + user.getUserId(), + WorkspaceFolder.RUN_SEQUENCES); + workspace.setRootFolder(workspaceFolder); + workspaceDAO.update(workspace); + user.setWorkspace(workspace); + userDAO.updateUser(user); + return user.getUserId(); + } + private Integer createUserOrganisation(User user,Integer roleID){ + UserOrganisation userOrganisation = new UserOrganisation(); + userOrganisation.setOrganisation(user.getBaseOrganisation()); + userOrganisation.setUser(user); + userOrganisationDAO.saveUserOrganisation(userOrganisation); + userOrganisation.addUserOrganisationRole(createUserOrganisationRole(userOrganisation,roleID)); + userOrganisationDAO.saveOrUpdateUserOrganisation(userOrganisation); + return userOrganisation.getUserOrganisationId(); + } + private UserOrganisationRole createUserOrganisationRole(UserOrganisation userOrganisation, Integer roleID){ + UserOrganisationRole userOrganisationRole = new UserOrganisationRole(); + userOrganisationRole.setUserOrganisation(userOrganisation); + userOrganisationRole.setRole(roleDAO.getRoleById(roleID)); + userOrganisationRoleDAO.saveUserOrganisationRole(userOrganisationRole); + return userOrganisationRole; + } + /**TODO yet to be implemented*/ + public void getFolderContents(Integer userID, Integer workspaceFolderID){ + + } + /** TODO check if a user is authorized to complete this operation*/ + public String moveLearningDesign(Long learningDesignID,Integer targetWorkspaceFolderID, Integer userID)throws IOException{ + LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID); + if(learningDesign!=null){ + WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(targetWorkspaceFolderID); + if(workspaceFolder!=null){ + learningDesign.setWorkspaceFolder(workspaceFolder); + learningDesignDAO.update(learningDesign); + flashMessage = new FlashMessage("moveLearningDesign",targetWorkspaceFolderID); + }else{ + flashMessage = new FlashMessage("moveLearningDesign", + "No such target workspaceFolder with a workspace_folder_id of :" + targetWorkspaceFolderID + " exists", + FlashMessage.ERROR); + } + }else{ + flashMessage = new FlashMessage("moveLearningDesign", + "No such learning design with a learning_design_id of:" + learningDesignID + " exists", + FlashMessage.ERROR); + } + return flashMessage.serializeMessage(); + } + /** + * TODO check if a user is authorized to complete this operation + * As of now I am assuming that the folders CANNOT be moved across + * different workspaces. If they can be moved in that case the signature of this + * method would be changed*/ + public void moveWorkspaceFolder(Integer currentWorkspaceFolderID, Integer targetWorkspaceFolderID, Integer userID){ + WorkspaceFolder currentWorkspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(currentWorkspaceFolderID); + WorkspaceFolder targetWorkspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(targetWorkspaceFolderID); + if(currentWorkspaceFolder!=null && targetWorkspaceFolder!=null){ + /** TODO move the contents of this folder */ + currentWorkspaceFolder.setParentWorkspaceFolder(targetWorkspaceFolder); + workspaceFolderDAO.update(currentWorkspaceFolder); + } + } + /** + * TODO check if a user is authorized to complete this operation + */ + public void renameFolder(Integer workspaceFolderID, String newName, Integer userID){ + WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID); + if(workspaceFolder!=null){ + workspaceFolder.setName(newName); + workspaceFolderDAO.update(workspaceFolder); + } + } + /** TODO check if a user is authorized to complete this operation */ + public void renameLearningDesign(Long learningDesignID,String title, Integer userID){ + LearningDesign learningDesign = learningDesignDAO.getLearningDesignById(learningDesignID); + if(learningDesign!=null){ + learningDesign.setTitle(title); + learningDesignDAO.update(learningDesign); + } + } + /** + * @param learningDesignDAO The learningDesignDAO to set. + */ + public void setLearningDesignDAO(ILearningDesignDAO learningDesignDAO) { + this.learningDesignDAO = learningDesignDAO; + } + + /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getWorkspace(java.lang.Integer) + */ + public String getWorkspace(Integer userID)throws IOException{ + User user = userDAO.getUserById(userID); + if(user!=null){ + Workspace workspace = user.getWorkspace(); + flashMessage = new FlashMessage("getWorkspace", + workspace.getWorkspaceDTO()); + } + else + flashMessage = FlashMessage.getNoSuchUserExists("getWorkspace",userID); + + return flashMessage.serializeMessage(); + } + /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getWDDXForOrganisationsForUserByRole(java.lang.Integer, java.lang.String) + */ + public String getWDDXForOrganisationsForUserByRole(Integer userID, String roleName)throws IOException{ + User user = userDAO.getUserById(userID); + Vector organisations = new Vector(); + if(user!=null){ + Iterator iterator= getOrganisationsForUserByRole(user,roleName).iterator(); + while(iterator.hasNext()){ + Organisation organisation = (Organisation)iterator.next(); + organisations.add(organisation.getOrganisationDTO()); + } + flashMessage = new FlashMessage("getWDDXForOrganisationsForUserByRole", organisations); + }else + flashMessage = FlashMessage.getNoSuchUserExists("getWDDXForOrganisationsForUserByRole",userID); + + return flashMessage.serializeMessage(); + } + /** + * @see org.lamsfoundation.lams.usermanagement.service.IUserManagementService#getUsersFromOrganisationByRole(java.lang.Integer, java.lang.String) + */ + public String getUsersFromOrganisationByRole(Integer organisationID, String roleName)throws IOException{ + Vector users = new Vector(); + Organisation organisation = organisationDAO.getOrganisationById(organisationID); + if(organisation!=null){ + Iterator iterator = organisation.getUserOrganisations().iterator(); + while(iterator.hasNext()){ + UserOrganisation userOrganisation = (UserOrganisation)iterator.next(); + Iterator userOrganisationRoleIterator = userOrganisation.getUserOrganisationRoles().iterator(); + while(userOrganisationRoleIterator.hasNext()){ + UserOrganisationRole userOrganisationRole = (UserOrganisationRole)userOrganisationRoleIterator.next(); + if(userOrganisationRole.getRole().getName().equals(roleName)) + users.add(userOrganisation.getUser().getUserDTO()); + } + } + flashMessage =new FlashMessage("getUsersFromOrganisationByRole",users); + + }else + flashMessage = new FlashMessage("getUsersFromOrganisationByRole", + "No such Organisation with an organisation_id of:" + organisationID +" exists", + FlashMessage.ERROR); + + return flashMessage.serializeMessage(); + } } Index: lams_common/src/java/org/lamsfoundation/lams/util/wddx/FlashMessage.java =================================================================== diff -u -rfc76a4bb4e5abc614e15b642e4015295b2912c0a -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/src/java/org/lamsfoundation/lams/util/wddx/FlashMessage.java (.../FlashMessage.java) (revision fc76a4bb4e5abc614e15b642e4015295b2912c0a) +++ lams_common/src/java/org/lamsfoundation/lams/util/wddx/FlashMessage.java (.../FlashMessage.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -22,6 +22,7 @@ */ package org.lamsfoundation.lams.util.wddx; +import java.io.IOException; import java.io.Serializable; /** @@ -104,4 +105,33 @@ sb.append("messageValue='" + getMessageValue() + "'; "); return sb.toString(); } + public String serializeMessage()throws IOException{ + String wddxPacket = null; + try{ + wddxPacket = WDDXProcessor.serialize(this); + }catch(IOException ie){ + throw new IOException("IOException occured while serializing " + ie.getMessage()); + } + return wddxPacket; + } + public static FlashMessage getNoSuchUserExists(String methodName, Integer userID){ + return new FlashMessage(methodName, + "No such User with a user_id of :" + userID + " exists", + ERROR); + } + public static FlashMessage getUserNotAuthorized(String methodName, Integer userID){ + return new FlashMessage(methodName, + "User with user_id of:" + userID +" is not authorized to perfom this action:", + FlashMessage.ERROR); + } + public static FlashMessage getNoSuchWorkspaceFolderExsists(String methodName, Integer folderID){ + return new FlashMessage(methodName, + "No such WorkspaceFolder with a workspace_folder_id of " + folderID +" exists", + FlashMessage.ERROR); + } + public static FlashMessage getNoSuchLearningDesignExists(String methodName, Long learningDesignID){ + return new FlashMessage(methodName, + "No such LearningDesign with a learning_design_id of " + learningDesignID +" exists", + FlashMessage.ERROR); + } } Index: lams_common/src/java/org/lamsfoundation/lams/util/wddx/LDWDDXValueObjectFactory.java =================================================================== diff -u -r044d9eb7becb79e6fd5992aee261c8665f808524 -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/src/java/org/lamsfoundation/lams/util/wddx/LDWDDXValueObjectFactory.java (.../LDWDDXValueObjectFactory.java) (revision 044d9eb7becb79e6fd5992aee261c8665f808524) +++ lams_common/src/java/org/lamsfoundation/lams/util/wddx/LDWDDXValueObjectFactory.java (.../LDWDDXValueObjectFactory.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -529,8 +529,8 @@ * @return Hashtable */ public Hashtable buildLearningDesignObject(LearningDesign design){ - Hashtable designs = getCutDownLearningDesignDetails(design); + Hashtable designs = getCutDownLearningDesignDetails(design); designs.put(WDDXTAGS.LEARNING_DESIGN_UIID, (design.getLearningDesignUIID()!=null?design.getLearningDesignUIID():WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER)); Index: lams_common/src/java/org/lamsfoundation/lams/workspace/dto/FolderContentDTO.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/workspace/dto/FolderContentDTO.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/workspace/dto/FolderContentDTO.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,111 @@ +/* + * Created on Apr 1, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.workspace.dto; + +import java.util.Date; + +import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.util.wddx.WDDXTAGS; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class FolderContentDTO { + + public static final String LESSON ="lesson"; + public static final String DESIGN ="learningDesign"; + public static final String FOLDER ="folder"; + + private String name; + private String description; + private Date creationDateTime; + private Date lastModifiedDateTime; + private String resourceType; + private Long resourceID; + private Integer permissionCode; + + public FolderContentDTO(){ + + } + + public FolderContentDTO(String name, String description, + Date creationDateTime, Date lastModifiedDateTime, + String resourceType, Long resourceID, Integer permissionCode) { + super(); + this.name = name; + this.description = description; + this.creationDateTime = creationDateTime; + this.lastModifiedDateTime = lastModifiedDateTime; + this.resourceType = resourceType; + this.resourceID = resourceID; + this.permissionCode = permissionCode; + } + public FolderContentDTO(LearningDesign design, Integer permissionCode){ + this.name = design.getTitle(); + this.description = design.getDescription(); + this.creationDateTime = design.getCreateDateTime(); + this.lastModifiedDateTime = design.getLastModifiedDateTime(); + this.resourceType = DESIGN; + this.resourceID = design.getLearningDesignId(); + this.permissionCode = permissionCode; + } + public FolderContentDTO(WorkspaceFolder workspaceFolder, Integer permissionCode){ + this.name = workspaceFolder.getName(); + this.description = "Folder"; + this.creationDateTime = workspaceFolder.getCreationDate(); + this.lastModifiedDateTime = workspaceFolder.getLastModifiedDate(); + this.resourceType = FOLDER; + this.resourceID = new Long(workspaceFolder.getWorkspaceFolderId().intValue()); + this.permissionCode = permissionCode; + } + /** + * @return Returns the creationDateTime. + */ + public Date getCreationDateTime() { + return creationDateTime!=null?creationDateTime:WDDXTAGS.DATE_NULL_VALUE; + } + /** + * @return Returns the description. + */ + public String getDescription() { + return description!=null?description:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the lastModifiedDateTime. + */ + public Date getLastModifiedDateTime() { + return lastModifiedDateTime!=null?lastModifiedDateTime:WDDXTAGS.DATE_NULL_VALUE; + } + /** + * @return Returns the name. + */ + public String getName() { + return name!=null?name:WDDXTAGS.STRING_NULL_VALUE; + } + /** + * @return Returns the permissionCode. + */ + public Integer getPermissionCode() { + return permissionCode!=null?permissionCode:WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER; + } + /** + * @return Returns the resourceID. + */ + public Long getResourceID() { + return resourceID!=null?resourceID:WDDXTAGS.NUMERIC_NULL_VALUE_LONG; + } + /** + * @return Returns the resourceType. + */ + public String getResourceType() { + return resourceType!=null?resourceType:WDDXTAGS.STRING_NULL_VALUE; + } +} Index: lams_common/src/java/org/lamsfoundation/lams/workspace/exception/WorkspaceFolderException.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/workspace/exception/WorkspaceFolderException.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/workspace/exception/WorkspaceFolderException.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,24 @@ +/* + * Created on Apr 5, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.workspace.exception; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class WorkspaceFolderException extends Exception { + + public WorkspaceFolderException(){ + + } + public WorkspaceFolderException(String message){ + super(message); + } + +} Index: lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/IWorkspaceManagementService.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,34 @@ +/* + * Created on Apr 1, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.workspace.service; + +import java.io.IOException; + +/** + * @author Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public interface IWorkspaceManagementService { + + public String getFolderContents(Integer userID, Integer workspaceFolderID, Integer mode)throws IOException; + + /** + * This method creates a new folder under the given parentFolder + * inside the user's default workspace. + * + * @param parentFolderID The parent_folder_id under which the new folder + * has to be created + * @param name The name of the new folder + * @param userID The user_id of the user for whom the folder is being created + * @return String The folder_id and name of the newly created folder in WDDX format + * @throws IOException + */ + public String createFolderForFlash(Integer parentFolderID, String name, Integer userID)throws IOException; + +} Index: lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java =================================================================== diff -u --- lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (revision 0) +++ lams_common/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,374 @@ +/* + * Created on Apr 1, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.workspace.service; + +import java.io.IOException; +import java.util.Date; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; + +import org.lamsfoundation.lams.authoring.service.IAuthoringService; +import org.lamsfoundation.lams.learningdesign.LearningDesign; +import org.lamsfoundation.lams.learningdesign.dao.ILearningDesignDAO; +import org.lamsfoundation.lams.usermanagement.User; +import org.lamsfoundation.lams.usermanagement.Workspace; +import org.lamsfoundation.lams.usermanagement.WorkspaceFolder; +import org.lamsfoundation.lams.usermanagement.dao.IOrganisationDAO; +import org.lamsfoundation.lams.usermanagement.dao.IUserDAO; +import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceDAO; +import org.lamsfoundation.lams.usermanagement.dao.IWorkspaceFolderDAO; +import org.lamsfoundation.lams.usermanagement.exception.UserException; +import org.lamsfoundation.lams.util.wddx.FlashMessage; +import org.lamsfoundation.lams.util.wddx.WDDXTAGS; +import org.lamsfoundation.lams.workspace.dto.FolderContentDTO; +import org.lamsfoundation.lams.workspace.exception.WorkspaceFolderException; + +/** + * @author Manpreet Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class WorkspaceManagementService implements IWorkspaceManagementService{ + + private FlashMessage flashMessage; + + public static final Integer AUTHORING = new Integer(1); + public static final Integer MONITORING = new Integer(2); + + protected IUserDAO userDAO; + protected ILearningDesignDAO learningDesignDAO; + protected IWorkspaceFolderDAO workspaceFolderDAO; + protected IWorkspaceDAO workspaceDAO; + protected IOrganisationDAO organisationDAO; + + protected IAuthoringService authoringService; + + + /** + * @param authoringService The authoringService to set. + */ + public void setAuthoringService(IAuthoringService authoringService) { + this.authoringService = authoringService; + } + /** + * @param organisationDAO The organisationDAO to set. + */ + public void setOrganisationDAO(IOrganisationDAO organisationDAO) { + this.organisationDAO = organisationDAO; + } + /** + * @param workspaceDAO The workspaceDAO to set. + */ + public void setWorkspaceDAO(IWorkspaceDAO workspaceDAO) { + this.workspaceDAO = workspaceDAO; + } + /** + * @param workspaceFolderDAO The workspaceFolderDAO to set. + */ + public void setWorkspaceFolderDAO(IWorkspaceFolderDAO workspaceFolderDAO) { + this.workspaceFolderDAO = workspaceFolderDAO; + } + /** + * @param learningDesignDAO The learningDesignDAO to set. + */ + public void setLearningDesignDAO(ILearningDesignDAO learningDesignDAO) { + this.learningDesignDAO = learningDesignDAO; + } + /** + * @param userDAO The userDAO to set. + */ + public void setUserDAO(IUserDAO userDAO) { + this.userDAO = userDAO; + } + public void deleteFolder(Integer folderID){ + WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(folderID); + if(workspaceFolder!=null){ + workspaceFolderDAO.delete(workspaceFolder); + } + } + public String getFolderContents(Integer userID, Integer workspaceFolderID, Integer mode)throws IOException{ + User user = userDAO.getUserById(userID); + WorkspaceFolder workspaceFolder = null; + Integer permissions = null; + if(user!=null){ + workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(workspaceFolderID); + if(workspaceFolder!=null){ + permissions = getPermissions(workspaceFolder,user); + if(permissions!=WorkspaceFolder.NO_ACCESS){ + Vector contentDTO = new Vector(); + getFolderContent(workspaceFolder,permissions,mode,contentDTO); + if(workspaceFolder.hasSubFolders()) + getSubFolderDetails(workspaceFolder,permissions,contentDTO); + flashMessage = new FlashMessage("getFolderContents",createFolderContentPacket(workspaceFolder,contentDTO)); + } + else + flashMessage = new FlashMessage("getFolderContents", + "Access Denied for user with user_id:" + userID, + FlashMessage.ERROR); + } + else + flashMessage = new FlashMessage("getFolderContents", + "No such workspaceFolder with workspace_folder_id of:" + workspaceFolderID + " exists", + FlashMessage.ERROR); + }else + flashMessage = FlashMessage.getNoSuchUserExists("getFolderContents",userID); + return flashMessage.serializeMessage(); + + } + private void getFolderContent(WorkspaceFolder workspaceFolder, Integer permissions, Integer mode,Vector contentDTO){ + + Integer parentFolderId = workspaceFolder.getParentWorkspaceFolder()!=null? + workspaceFolder.getParentWorkspaceFolder().getWorkspaceFolderId(): + WDDXTAGS.NUMERIC_NULL_VALUE_INTEGER; + List designs = null; + + if(mode==AUTHORING) + designs = learningDesignDAO.getAllLearningDesignsInFolder(workspaceFolder.getWorkspaceFolderId()); + else + designs = learningDesignDAO.getAllValidLearningDesignsInFolder(workspaceFolder.getWorkspaceFolderId()); + + getFolderContentDTO(designs,permissions,contentDTO); + } + private void getSubFolderDetails(WorkspaceFolder workspaceFolder,Integer permissions, Vector subFolderContent){ + Iterator iterator = workspaceFolder.getChildWorkspaceFolders().iterator(); + while(iterator.hasNext()){ + WorkspaceFolder subFolder = (WorkspaceFolder)iterator.next(); + subFolderContent.add(new FolderContentDTO(subFolder,permissions)); + } + } + /** + * This method returns the permissions specific to the given + * workspaceFolder for the given user. + * + * @param workspaceFolder The workspaceFolder for which we need the permissions + * @param user The user for whom these permissions are set. + * @return Integer The permissions + */ + public Integer getPermissions(WorkspaceFolder workspaceFolder, User user){ + Integer permission = null; + WorkspaceFolder userRootFolder = user.getWorkspace().getRootFolder(); + + if(isUserOwner(workspaceFolder,user)) + permission = WorkspaceFolder.OWNER_ACCESS; + else if (isSubFolder(workspaceFolder,userRootFolder)) + { + if(isRunSequencesFolder(workspaceFolder,user)) + permission = WorkspaceFolder.READ_ACCESS; + else + permission = WorkspaceFolder.OWNER_ACCESS; + } + else if (isParentOrganisationFolder(workspaceFolder,user)) + permission = WorkspaceFolder.MEMBERSHIP_ACCESS; + else if(user.hasMemberAccess(workspaceFolder)) + permission = WorkspaceFolder.MEMBERSHIP_ACCESS; + else + permission = WorkspaceFolder.NO_ACCESS; + + return permission; + } + /** This method checks if the given workspaceFolder is a subFolder of the + * given rootFolder*/ + private boolean isSubFolder(WorkspaceFolder workspaceFolder,WorkspaceFolder rootFolder){ + List subFolders = workspaceFolderDAO.getWorkspaceFolderByParentFolder(rootFolder.getWorkspaceFolderId()); + Iterator iterator = subFolders.iterator(); + while(iterator.hasNext()){ + WorkspaceFolder subFolder = (WorkspaceFolder)iterator.next(); + if(subFolder.getWorkspaceFolderId()==workspaceFolder.getWorkspaceFolderId()) + return true; + } + return false; + + } + /** + * Assuming that there is ONLY ONE runSequences folder per user, + * which is created at the time the User is created, this method + * checks if the given workspaceFolder is the runSequences folder + * for the given user. + * + * @param workspaceFolder + * @param user + * @return + */ + public boolean isRunSequencesFolder(WorkspaceFolder workspaceFolder, User user){ + WorkspaceFolder runSequencesFolder = workspaceFolderDAO.getRunSequencesFolderForUser(user.getUserId()); + if(workspaceFolder.getWorkspaceFolderId()==runSequencesFolder.getWorkspaceFolderId()) + return true; + else + return false; + } + /** + * This method checks if the given workspaceFolder is the + * workspaceFolder of the parentOrganisation of which the user is a member. + * + * @param workspaceFolder + * @param user + * @return + */ + public boolean isParentOrganisationFolder(WorkspaceFolder workspaceFolder, User user){ + WorkspaceFolder parentOrganisationFolder = user.getBaseOrganisation().getWorkspace().getRootFolder(); + if(parentOrganisationFolder.getWorkspaceFolderId()==workspaceFolder.getWorkspaceFolderId()) + return true; + else + return false; + } + private Vector getFolderContentDTO(List designs, Integer permissions,Vector folderContent){ + Iterator iterator = designs.iterator(); + while(iterator.hasNext()){ + LearningDesign design = (LearningDesign)iterator.next(); + folderContent.add(new FolderContentDTO(design,permissions)); + } + return folderContent; + + } + private Hashtable createFolderContentPacket(WorkspaceFolder workspaceFolder, Vector contents){ + Hashtable packet = new Hashtable(); + packet.put("parentWorkspaceFolderID", workspaceFolder.getParentWorkspaceFolder().getWorkspaceFolderId()); + packet.put("workspaceFolderID", workspaceFolder.getWorkspaceFolderId()); + packet.put("contents", contents); + return packet; + } + public String copyFolder(Integer folderID,Integer newWorkspaceFolderID,Integer userID)throws IOException{ + + WorkspaceFolder workspaceFolder = workspaceFolderDAO.getWorkspaceFolderByID(folderID); + if(workspaceFolder!=null){ + try{ + WorkspaceFolder newFolder = createFolder(newWorkspaceFolderID,workspaceFolder.getName(),userID); + copyRootContent(workspaceFolder,newFolder,userID); + if(workspaceFolder.hasSubFolders()) + createSubFolders(workspaceFolder, newFolder,userID); + flashMessage = new FlashMessage("copyFolder",createCopyFolderPacket(newFolder)); + }catch(UserException ue){ + flashMessage = FlashMessage.getNoSuchUserExists("copyFolder",userID); + }catch(WorkspaceFolderException we){ + flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists("copyFolder", newWorkspaceFolderID); + } + } + return flashMessage.serializeMessage(); + + } + private Hashtable createCopyFolderPacket(WorkspaceFolder workspaceFolder){ + Hashtable packet = new Hashtable(); + packet.put("workspaceFolderID", workspaceFolder.getWorkspaceFolderId()); + packet.put("workspaceID",workspaceFolder.getWorkspaceID()); + return packet; + } + public boolean isUserPermitted(WorkspaceFolder workspaceFolder, User user){ + Integer permissions = getPermissions(workspaceFolder, user); + if(permissions!=WorkspaceFolder.NO_ACCESS) + return true; + else + return false; + } + public boolean isUserOwner(WorkspaceFolder workspaceFolder, User user){ + List folders = workspaceFolderDAO.getWorkspaceFolderByUser(user.getUserId()); + if(folders!=null && folders.size()!=0){ + Iterator iterator =folders.iterator(); + while(iterator.hasNext()){ + WorkspaceFolder folder = (WorkspaceFolder)iterator.next(); + if(folder.getWorkspaceFolderId()==workspaceFolder.getWorkspaceFolderId()) + return true; + } + } + return false; + } + public void copyRootContent(WorkspaceFolder workspaceFolder,WorkspaceFolder targetWorkspaceFolder, Integer userID)throws UserException{ + User user = userDAO.getUserById(userID); + if(user==null) + throw new UserException("No such user with a userID of " + userID + "exists"); + + List designs = learningDesignDAO.getAllLearningDesignsInFolder(workspaceFolder.getWorkspaceFolderId()); + if(designs!=null && designs.size()!=0){ + Iterator iterator = designs.iterator(); + while(iterator.hasNext()){ + LearningDesign design = (LearningDesign)iterator.next(); + authoringService.copyLearningDesign(design, + new Integer(LearningDesign.COPY_TYPE_NONE), + user,targetWorkspaceFolder); + } + } + } + private WorkspaceFolder createFolder(Integer parentFolderID, String name, Integer userID) throws UserException,WorkspaceFolderException{ + WorkspaceFolder parentFolder = workspaceFolderDAO.getWorkspaceFolderByID(parentFolderID); + User user =null; + Workspace workspace =null; + + if(parentFolder!=null){ + + boolean nameExists = true; + while(nameExists){ + nameExists = ifNameExists(parentFolder,name); + if(nameExists) + name =name + "C"; + else + break; + } + + user = userDAO.getUserById(userID); + if(user!=null){ + workspace = user.getWorkspace(); + WorkspaceFolder workspaceFolder = new WorkspaceFolder(name, + workspace.getWorkspaceId(), + parentFolder, + userID, + new Date(), + new Date(), + WorkspaceFolder.NORMAL); + workspaceFolderDAO.insert(workspaceFolder); + return workspaceFolder; + }else + throw new UserException("No such user with userID of " + userID + "exists"); + + }else + throw new WorkspaceFolderException("No such workspaceFolder with a workspace_folder_id of " + parentFolderID +" exists"); + } + /** + * TODO For now assuming that the folder to be created would be of type NORMAL. + * But the type has to be passed in the near future indicating what kind of + * folder should be created (NORMAL/RUN SEQUENCES) + * @see org.lamsfoundation.lams.authoring.service.IAuthoringService#createFolder(java.lang.Integer, java.lang.String, java.lang.Integer) + */ + public String createFolderForFlash(Integer parentFolderID, String name, Integer userID)throws IOException{ + try{ + WorkspaceFolder newFolder = createFolder(parentFolderID,name,userID); + Hashtable table = new Hashtable(); + table.put("folderID",newFolder.getWorkspaceFolderId()); + table.put("name",newFolder.getName()); + flashMessage = new FlashMessage("createFolderForFlash",table); + + }catch(WorkspaceFolderException we){ + flashMessage = FlashMessage.getNoSuchWorkspaceFolderExsists("createFolderForFlash",parentFolderID); + }catch(UserException ue){ + flashMessage = FlashMessage.getNoSuchUserExists("createFolderForFlash",userID); + } + return flashMessage.serializeMessage(); + } + private boolean ifNameExists(WorkspaceFolder targetFolder,String folderName){ + List folders = workspaceFolderDAO.getWorkspaceFolderByParentFolder(targetFolder.getWorkspaceFolderId()); + if(folders!=null && folders.size()!=0){ + Iterator iterator = folders.iterator(); + while(iterator.hasNext()){ + WorkspaceFolder folder = (WorkspaceFolder)iterator.next(); + if(folder.getName().equalsIgnoreCase(folderName)) + return true; + } + } + return false; + } + public void createSubFolders(WorkspaceFolder workspaceFolder, WorkspaceFolder newFolder, Integer userID) throws UserException, WorkspaceFolderException{ + Iterator subFoldersIterator = workspaceFolder.getChildWorkspaceFolders().iterator(); + while(subFoldersIterator.hasNext()){ + WorkspaceFolder subFolder = (WorkspaceFolder)subFoldersIterator.next(); + WorkspaceFolder newSubFolder = createFolder(newFolder.getWorkspaceFolderId(),subFolder.getName(),userID); + copyRootContent(subFolder,newSubFolder,userID); + if(subFolder.hasSubFolders()) + createSubFolders(subFolder,newSubFolder,userID); + } + } +} Index: lams_common/test/java/org/lamsfoundation/lams/tool/dao/TestToolDAO.java =================================================================== diff -u -r174fa126cd5cc9d88eb39d6596af0453a2b77e49 -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/test/java/org/lamsfoundation/lams/tool/dao/TestToolDAO.java (.../TestToolDAO.java) (revision 174fa126cd5cc9d88eb39d6596af0453a2b77e49) +++ lams_common/test/java/org/lamsfoundation/lams/tool/dao/TestToolDAO.java (.../TestToolDAO.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -54,7 +54,7 @@ assertEquals("verify service name","surveyService",testTool.getServiceName()); assertEquals("verify display name","Survey",testTool.getToolDisplayName()); assertEquals("verify default content id",6,testTool.getDefaultToolContentId()); - assertTrue("verify support grouping",!testTool.getSupportsGrouping()); + // assertTrue("verify support grouping",!testTool.getSupportsGrouping()); assertTrue("verify support define later",!testTool.getSupportsDefineLater()); } public void testGetAllTools(){ Index: lams_common/test/java/org/lamsfoundation/lams/usermanagement/TestUserManagementService.java =================================================================== diff -u --- lams_common/test/java/org/lamsfoundation/lams/usermanagement/TestUserManagementService.java (revision 0) +++ lams_common/test/java/org/lamsfoundation/lams/usermanagement/TestUserManagementService.java (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -0,0 +1,87 @@ +/* + * Created on Mar 22, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.lamsfoundation.lams.usermanagement; + +import java.io.IOException; +import java.util.Date; +import org.lamsfoundation.lams.AbstractLamsTestCase; +import org.lamsfoundation.lams.usermanagement.dao.hibernate.AuthenticationMethodDAO; +import org.lamsfoundation.lams.usermanagement.dao.hibernate.OrganisationDAO; +import org.lamsfoundation.lams.usermanagement.dao.hibernate.OrganisationTypeDAO; +import org.lamsfoundation.lams.usermanagement.dao.hibernate.RoleDAO; +import org.lamsfoundation.lams.usermanagement.dao.hibernate.UserDAO; +import org.lamsfoundation.lams.usermanagement.service.UserManagementService; + +/** + * @author Manpreet Minhas + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class TestUserManagementService extends AbstractLamsTestCase { + + protected UserDAO userDAO; + protected RoleDAO roleDAO; + protected OrganisationDAO organisationDAO; + protected OrganisationTypeDAO organisationTypeDAO; + protected UserManagementService userManagementService; + protected AuthenticationMethodDAO authenticationMethodDAO; + + public TestUserManagementService(String name){ + super(name); + } + protected void setUp()throws Exception{ + super.setUp(); + userDAO =(UserDAO)context.getBean("userDAO"); + organisationDAO =(OrganisationDAO)context.getBean("organisationDAO"); + organisationTypeDAO =(OrganisationTypeDAO)context.getBean("organisationTypeDAO"); + userManagementService = (UserManagementService)context.getBean("userManagementService"); + authenticationMethodDAO =(AuthenticationMethodDAO)context.getBean("authenticationMethodDAO"); + roleDAO = (RoleDAO)context.getBean("roleDAO"); + } + + /* (non-Javadoc) + * @see org.lamsfoundation.lams.AbstractLamsTestCase#getContextConfigLocation() + */ + protected String[] getContextConfigLocation() { + return new String[] {"applicationContext.xml","org/lamsfoundation/lams/learningdesign/learningDesignApplicationContext.xml"}; + } + public void testSaveOrganisation(){ + Organisation organisation = new Organisation("Test Organisation", + "Test Organisation Description", + new Date(), + organisationTypeDAO.getOrganisationTypeById(new Integer(1))); + + Integer organisationID = userManagementService.saveOrganisation(organisation,new Integer(1)); + assertNotNull(organisationID); + } + public void saveUser(){ + User user = new User(); + user.setLogin("Monu"); + user.setPassword("Monu"); + user.setDisabledFlag(new Boolean(false)); + user.setCreateDate(new Date()); + user.setAuthenticationMethod(authenticationMethodDAO.getAuthenticationMethodById(new Integer(2))); + user.setBaseOrganisation(organisationDAO.getOrganisationById(new Integer(1))); + user.setUserOrganisationID(new Integer(1)); + assertNotNull(userManagementService.saveUser(user, new Integer(4))); + + } + public void testMoveLearningDesign()throws IOException{ + String packet = userManagementService.moveLearningDesign(new Long(1),new Integer(4),new Integer(1)); + System.out.println(packet); + } + public void testGetOrganisationsForUserByRole()throws IOException{ + String packet = userManagementService.getWDDXForOrganisationsForUserByRole(new Integer(4),"AUTHOR"); + System.out.println(packet); + } + public void testGetUsersFromOrganisationByRole() throws IOException{ + String packet = userManagementService.getUsersFromOrganisationByRole(new Integer(4),"AUTHOR"); + System.out.println(packet); + } + +} Index: lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/OrganisationDAOTest.java =================================================================== diff -u -r19c9010eff6be2e29657beed94349a978088650f -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/OrganisationDAOTest.java (.../OrganisationDAOTest.java) (revision 19c9010eff6be2e29657beed94349a978088650f) +++ lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/OrganisationDAOTest.java (.../OrganisationDAOTest.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -5,16 +5,9 @@ */ package org.lamsfoundation.lams.usermanagement.dao.hibernate; -import java.util.Date; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; - +import org.lamsfoundation.lams.AbstractLamsTestCase; import org.lamsfoundation.lams.usermanagement.Organisation; -import org.lamsfoundation.lams.usermanagement.Workspace; -import org.lamsfoundation.lams.usermanagement.dao.IOrganisationTypeDAO; -import junit.framework.TestCase; - /** * TODO Add description here * @@ -24,32 +17,30 @@ * * @author Fei Yang */ -public class OrganisationDAOTest extends TestCase { - private Organisation organisation = null; - private String errorMessage = ""; - private OrganisationTypeDAO organisationDAO = null; - private ApplicationContext ctx; +public class OrganisationDAOTest extends AbstractLamsTestCase { + private Organisation organisation = null; + private OrganisationDAO organisationDAO = null; + + + public OrganisationDAOTest(String name){ + super(name); + } protected void setUp() throws Exception{ - ctx = new FileSystemXmlApplicationContext("applicationContext.xml"); - organisationDAO = (OrganisationTypeDAO)ctx.getBean("organisationDAO"); + super.setUp(); + organisationDAO = (OrganisationDAO)context.getBean("organisationDAO"); } protected void tearDown() throws Exception{ organisationDAO = null; + } + public void testGetOrganisationByWorkspaceeID(){ + organisation = organisationDAO.getOrganisationByWorkspaceID(new Integer(1)); + assertNotNull(organisation.getOrganisationId()); } - - public void testSaveOrganisation(){ - /* - IOrganisationTypeDAO organisationTypeDAO = (IOrganisationTypeDAO)ctx.getBean("organisationTypeDAO"); - organisation = new Organisation("Root","",null,new Date(), new Workspace(), organisationTypeDAO.getOrganisationTypeById(new Integer(1)),null,null); - organisationTypeDAO = null; - organisationDAO.saveOrganisation(organisation); - assertTrue(organisationDAO.getAllOrganisations().size()==1); - */ + protected String[] getContextConfigLocation() { + return new String[] {"WEB-INF/spring/learningDesignApplicationContext.xml", + "WEB-INF/spring/applicationContext.xml"}; } - public void testGetOrganisationById(){ - } - } Index: lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAOTest.java =================================================================== diff -u -r19c9010eff6be2e29657beed94349a978088650f -r79758294f0dfdfd6f805b9232fe3886b1a5b84ae --- lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAOTest.java (.../UserDAOTest.java) (revision 19c9010eff6be2e29657beed94349a978088650f) +++ lams_common/test/java/org/lamsfoundation/lams/usermanagement/dao/hibernate/UserDAOTest.java (.../UserDAOTest.java) (revision 79758294f0dfdfd6f805b9232fe3886b1a5b84ae) @@ -5,12 +5,15 @@ */ package org.lamsfoundation.lams.usermanagement.dao.hibernate; -import junit.framework.TestCase; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.FileSystemXmlApplicationContext; - +import java.util.Date; +import org.lamsfoundation.lams.AbstractLamsTestCase; +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; + /** * TODO Add description here * @@ -20,22 +23,73 @@ * * @author Fei Yang */ -public class UserDAOTest extends TestCase { +public class UserDAOTest extends AbstractLamsTestCase{ private User user = null; private UserDAO userDAO = null; - private ApplicationContext ctx; + protected RoleDAO roleDAO; + protected OrganisationDAO organisationDAO; + protected OrganisationTypeDAO organisationTypeDAO; + protected AuthenticationMethodDAO authenticationMethodDAO; - protected void setUp() throws Exception{ - ctx = new FileSystemXmlApplicationContext("applicationContext.xml"); - userDAO = (UserDAO)ctx.getBean("userDAO"); - } + protected UserOrganisationDAO userOrganisationDAO; + protected UserOrganisationRoleDAO userOrganisationRoleDAO; - protected void tearDown() throws Exception{ - userDAO = null; - } - public void testGetAllUsers(){ - assertTrue(userDAO.getAllUsers().size()==0); + public UserDAOTest(String name){ + super(name); + } + protected void setUp() throws Exception{ + super.setUp(); + userDAO = (UserDAO)context.getBean("userDAO"); + organisationDAO = (OrganisationDAO)context.getBean("organisationDAO"); + + organisationTypeDAO =(OrganisationTypeDAO)context.getBean("organisationTypeDAO"); + authenticationMethodDAO =(AuthenticationMethodDAO)context.getBean("authenticationMethodDAO"); + + roleDAO = (RoleDAO)context.getBean("roleDAO"); + userOrganisationDAO = (UserOrganisationDAO)context.getBean("userOrganisationDAO"); + userOrganisationRoleDAO = (UserOrganisationRoleDAO)context.getBean("userOrganisationRoleDAO"); + } + public void testGetUser(){ + user = userDAO.getUserById(new Integer(2)); + assertNotNull(user.getLogin()); } - + public void testIsMember(){ + Organisation organisation = organisationDAO.getOrganisationById(new Integer(4)); + user = userDAO.getUserById(new Integer(4)); + boolean member = user.isMember(organisation); + assertTrue(member); + } + protected String[] getContextConfigLocation() { + return new String[] {"WEB-INF/spring/applicationContext.xml","WEB-INF/spring/learningDesignApplicationContext.xml"}; + } + public void testSaveUser(){ + User user = new User(); + user.setLogin("MiniMinhas"); + user.setPassword("MiniMinhas"); + user.setDisabledFlag(new Boolean(false)); + user.setCreateDate(new Date()); + user.setAuthenticationMethod(authenticationMethodDAO.getAuthenticationMethodById(new Integer(2))); + user.setBaseOrganisation(organisationDAO.getOrganisationById(new Integer(1))); + user.setUserOrganisationID(new Integer(1)); + userDAO.saveUser(user); + user.setUserOrganisationID(createUserOrganisation(user)); + userDAO.updateUser(user); + } + private Integer createUserOrganisation(User user){ + UserOrganisation userOrganisation = new UserOrganisation(); + userOrganisation.setOrganisation(user.getBaseOrganisation()); + userOrganisation.setUser(user); + userOrganisationDAO.saveUserOrganisation(userOrganisation); + userOrganisation.addUserOrganisationRole(createUserOrganisationRole(userOrganisation)); + userOrganisationDAO.saveOrUpdateUserOrganisation(userOrganisation); + return userOrganisation.getUserOrganisationId(); + } + private UserOrganisationRole createUserOrganisationRole(UserOrganisation userOrganisation){ + UserOrganisationRole userOrganisationRole = new UserOrganisationRole(); + userOrganisationRole.setUserOrganisation(userOrganisation); + userOrganisationRole.setRole(roleDAO.getRoleByName(Role.STAFF)); + userOrganisationRoleDAO.saveUserOrganisationRole(userOrganisationRole); + return userOrganisationRole; + } }