package edu.asu.spring.quadriga.mapper.workbench.impl; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import edu.asu.spring.quadriga.domain.ICollaborator; import edu.asu.spring.quadriga.domain.IQuadrigaRole; import edu.asu.spring.quadriga.domain.enums.EProjectAccessibility; import edu.asu.spring.quadriga.domain.factories.ICollaboratorFactory; import edu.asu.spring.quadriga.domain.factories.IQuadrigaRoleFactory; import edu.asu.spring.quadriga.domain.factory.workbench.IProjectCollaboratorFactory; import edu.asu.spring.quadriga.domain.impl.workbench.Project; import edu.asu.spring.quadriga.domain.workbench.IProject; import edu.asu.spring.quadriga.domain.workbench.IProjectCollaborator; import edu.asu.spring.quadriga.dto.ConceptCollectionDTO; import edu.asu.spring.quadriga.dto.DictionaryDTO; import edu.asu.spring.quadriga.dto.ProjectCollaboratorDTO; import edu.asu.spring.quadriga.dto.ProjectConceptCollectionDTO; import edu.asu.spring.quadriga.dto.ProjectConceptCollectionDTOPK; import edu.asu.spring.quadriga.dto.ProjectDTO; import edu.asu.spring.quadriga.dto.ProjectDictionaryDTO; import edu.asu.spring.quadriga.dto.ProjectDictionaryDTOPK; import edu.asu.spring.quadriga.dto.ProjectEditorDTO; import edu.asu.spring.quadriga.dto.ProjectEditorDTOPK; import edu.asu.spring.quadriga.dto.ProjectWorkspaceDTO; import edu.asu.spring.quadriga.dto.ProjectWorkspaceDTOPK; import edu.asu.spring.quadriga.dto.QuadrigaUserDTO; import edu.asu.spring.quadriga.dto.WorkspaceDTO; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.mapper.BaseMapper; import edu.asu.spring.quadriga.mapper.resolver.IProjectHandleResolverMapper; import edu.asu.spring.quadriga.mapper.workbench.IProjectBaseMapper; import edu.asu.spring.quadriga.service.IQuadrigaRoleManager; import edu.asu.spring.quadriga.service.IUserManager; import edu.asu.spring.quadriga.service.user.mapper.IUserDeepMapper; @Service("ProjectBaseMapper") public class ProjectDTOMapper extends BaseMapper implements IProjectBaseMapper { @Autowired private IUserManager userManager; @Autowired private ICollaboratorFactory collaboratorFactory; @Autowired private IQuadrigaRoleFactory roleFactory; @Autowired private IUserDeepMapper userDeepMapper; @Autowired private IProjectCollaboratorFactory projectCollaboratorFactory; @Autowired private IQuadrigaRoleManager roleManager; @Autowired private IProjectHandleResolverMapper resolverMapper; /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.mapper.IProjectBaseMapper#getProject(edu.asu. * spring.quadriga.dto.ProjectDTO) */ @Override @Transactional public IProject getProject(ProjectDTO projectDTO) throws QuadrigaStorageException { if (projectDTO == null) { return null; } IProject project = createProjectObject(); fillProject(projectDTO, project); // Set List of IProjectCollaborators to the project project.setProjectCollaborators(getProjectCollaboratorList(project, projectDTO.getCollaboratorList())); return project; } /** * This class would help in getting {@link List} of * {@link IProjectCollaborator} object mapping for a particular * {@link IProject} and {@link ProjectDTO} * * @param projectDTO * {@link ProjectDTO} object used for mapping collaborators * @param project * {@link IProject} object of domain class type {@link Project} * @return Returns {@link List} of {@link IProjectCollaborator} object * @throws QuadrigaStorageException * Throws a storage issue when this method is having issues to * access database. */ @Transactional protected List<IProjectCollaborator> getProjectCollaboratorList( IProject project, List<ProjectCollaboratorDTO> collaboratorDtoList) throws QuadrigaStorageException { List<IProjectCollaborator> projectCollaboratorList = new ArrayList<IProjectCollaborator>(); if (collaboratorDtoList != null && collaboratorDtoList.size() > 0) { HashMap<String, IProjectCollaborator> userProjectCollaboratorMap = mapUserProjectCollaborator( project, collaboratorDtoList); projectCollaboratorList.addAll(userProjectCollaboratorMap.values()); } return projectCollaboratorList; } private HashMap<String, IProjectCollaborator> mapUserProjectCollaborator( IProject project, List<ProjectCollaboratorDTO> collaboratorDtoList) throws QuadrigaStorageException { HashMap<String, IProjectCollaborator> userProjectCollaboratorMap = new HashMap<String, IProjectCollaborator>(); for (ProjectCollaboratorDTO projectCollaboratorDTO : collaboratorDtoList) { String userName = projectCollaboratorDTO.getQuadrigaUserDTO() .getUsername(); if (userProjectCollaboratorMap.containsKey(userName)) { String roleName = projectCollaboratorDTO.getCollaboratorDTOPK() .getCollaboratorrole(); IQuadrigaRole collaboratorRole = roleFactory .createQuadrigaRoleObject(); collaboratorRole.setDBid(roleName); roleManager.fillQuadrigaRole( IQuadrigaRoleManager.PROJECT_ROLES, collaboratorRole); IProjectCollaborator projectCollaborator = userProjectCollaboratorMap .get(userName); ICollaborator collaborator = projectCollaborator .getCollaborator(); collaborator.getCollaboratorRoles().add(collaboratorRole); // Checking if there is a update latest then previous update // date if (projectCollaboratorDTO.getUpdateddate().compareTo( projectCollaborator.getUpdatedDate()) > 0) { projectCollaborator.setUpdatedBy(projectCollaboratorDTO .getUpdatedby()); projectCollaborator.setUpdateDate(projectCollaboratorDTO .getUpdateddate()); } } else { String roleName = projectCollaboratorDTO.getCollaboratorDTOPK() .getCollaboratorrole(); // Prepare collaborator roles IQuadrigaRole collaboratorRole = roleFactory .createQuadrigaRoleObject(); collaboratorRole.setDBid(roleName); roleManager.fillQuadrigaRole( IQuadrigaRoleManager.PROJECT_ROLES, collaboratorRole); // Create a Collaborator Role list List<IQuadrigaRole> collaboratorRoleList = new ArrayList<IQuadrigaRole>(); // Add collaborator role to the list collaboratorRoleList.add(collaboratorRole); // Create a Collaborator ICollaborator collaborator = collaboratorFactory .createCollaborator(); // Set Collaborator Role List to the Collaborator collaborator.setCollaboratorRoles(collaboratorRoleList); collaborator.setUserObj(userDeepMapper.getUser(userName)); // Create ProjectCollaborator object IProjectCollaborator projectCollaborator = projectCollaboratorFactory .createProjectCollaboratorObject(); projectCollaborator.setCollaborator(collaborator); projectCollaborator.setCreatedBy(projectCollaboratorDTO .getCreatedby()); projectCollaborator.setCreatedDate(projectCollaboratorDTO .getCreateddate()); projectCollaborator.setUpdatedBy(projectCollaboratorDTO .getUpdatedby()); projectCollaborator.setUpdateDate(projectCollaboratorDTO .getUpdateddate()); projectCollaborator.setProject(project); userProjectCollaboratorMap.put(userName, projectCollaborator); } } return userProjectCollaboratorMap; } protected IProject createProjectObject() { IProject project = new Project(); return project; } protected void fillProject(ProjectDTO projectDTO, IProject project) throws QuadrigaStorageException { project.setProjectName(projectDTO.getProjectname()); project.setDescription(projectDTO.getDescription()); project.setUnixName(projectDTO.getUnixname()); project.setProjectId(projectDTO.getProjectid()); project.setCreatedBy(projectDTO.getCreatedby()); project.setCreatedDate(projectDTO.getCreateddate()); project.setUpdatedBy(projectDTO.getUpdatedby()); project.setUpdatedDate(projectDTO.getUpdateddate()); project.setOwner(userManager.getUser(projectDTO.getProjectowner().getUsername())); project.setProjectAccess(EProjectAccessibility.valueOf(projectDTO.getAccessibility())); if (projectDTO.getResolvers() != null && projectDTO.getResolvers().size() > 0) { project.setResolver(resolverMapper.mapProjectHandleResolver(projectDTO.getResolvers().get(0))); } } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.mapper.IProjectBaseMapper#getProjectDTO(edu.asu * .spring.quadriga.domain.workbench.IProject, java.lang.String) */ @Override @Transactional public ProjectDTO getProjectDTO(IProject project) { ProjectDTO projectDTO = new ProjectDTO(); fillProjectDTO(project, projectDTO); return projectDTO; } protected void fillProjectDTO(IProject project, ProjectDTO projectDTO) { projectDTO.setProjectname(project.getProjectName()); projectDTO.setDescription(project.getDescription()); projectDTO.setUnixname(project.getUnixName()); projectDTO.setProjectid(project.getProjectId()); QuadrigaUserDTO quadrigaUser = getUserDTO(project.getCreatedBy()); projectDTO.setProjectowner(quadrigaUser); projectDTO.setCreatedby(project.getCreatedBy()); projectDTO.setCreateddate(new Date()); projectDTO.setUpdatedby(project.getUpdatedBy()); projectDTO.setUpdateddate(new Date()); if (project.getProjectAccess() != null) { projectDTO.setAccessibility(project.getProjectAccess().name()); } if (project.getResolver() != null) { projectDTO.setResolvers(new ArrayList<>()); projectDTO.getResolvers().add(resolverMapper.mapProjectHandleResolver(project.getResolver())); } } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.mapper.IProjectBaseMapper#getProjectEditor(edu * .asu.spring.quadriga.dto.ProjectDTO, java.lang.String) */ @Override public ProjectEditorDTO getProjectEditor(ProjectDTO project, String userName) throws QuadrigaStorageException { ProjectEditorDTO projectEditor = null; ProjectEditorDTOPK projectEditorKey = null; String projectId = project.getProjectid(); Date date = new Date(); projectEditor = new ProjectEditorDTO(); projectEditorKey = new ProjectEditorDTOPK(projectId, userName); projectEditor.setProjectEditorDTOPK(projectEditorKey); projectEditor.setProject(project); projectEditor.setQuadrigaUserDTO(getUserDTO(userName)); projectEditor.setUpdatedby(userName); projectEditor.setUpdateddate(date); projectEditor.setCreatedby(userName); projectEditor.setCreateddate(date); return projectEditor; } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.mapper.IProjectBaseMapper#getProjectDictionary * (edu.asu.spring.quadriga.dto.ProjectDTO, * edu.asu.spring.quadriga.dto.DictionaryDTO, java.lang.String) */ @Override public ProjectDictionaryDTO getProjectDictionary(ProjectDTO project, DictionaryDTO dictionary, String userName) { ProjectDictionaryDTO projectDictionary = null; ProjectDictionaryDTOPK projectDictionaryKey = null; Date date = new Date(); projectDictionary = new ProjectDictionaryDTO(); projectDictionaryKey = new ProjectDictionaryDTOPK(project.getProjectid(), dictionary.getDictionaryid()); projectDictionary.setProjectDictionaryDTOPK(projectDictionaryKey); projectDictionary.setProject(project); projectDictionary.setDictionary(dictionary); projectDictionary.setCreatedby(userName); projectDictionary.setCreateddate(date); projectDictionary.setUpdatedby(userName); projectDictionary.setUpdateddate(date); return projectDictionary; } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.mapper.IProjectBaseMapper#getProjectConceptCollection * (edu.asu.spring.quadriga.dto.ProjectDTO, * edu.asu.spring.quadriga.dto.ConceptCollectionDTO, java.lang.String) */ @Override public ProjectConceptCollectionDTO getProjectConceptCollection(ProjectDTO project, ConceptCollectionDTO conceptCollection, String userName) { ProjectConceptCollectionDTO projectConceptCollection = null; ProjectConceptCollectionDTOPK projectConceptCollectionKey = null; Date date = new Date(); projectConceptCollectionKey = new ProjectConceptCollectionDTOPK(project.getProjectid(), conceptCollection.getConceptCollectionid()); projectConceptCollection = new ProjectConceptCollectionDTO(); projectConceptCollection.setProjectConceptcollectionDTOPK(projectConceptCollectionKey); projectConceptCollection.setProjectDTO(project); projectConceptCollection.setConceptCollection(conceptCollection); projectConceptCollection.setCreatedby(userName); projectConceptCollection.setCreateddate(date); projectConceptCollection.setUpdatedby(userName); projectConceptCollection.setUpdateddate(date); return projectConceptCollection; } /* * (non-Javadoc) * * @see * edu.asu.spring.quadriga.mapper.IProjectBaseMapper#getProjectWorkspace * (edu.asu.spring.quadriga.dto.ProjectDTO, * edu.asu.spring.quadriga.dto.WorkspaceDTO) */ @Override public ProjectWorkspaceDTO getProjectWorkspace(ProjectDTO project, WorkspaceDTO workspace) { ProjectWorkspaceDTO projectWorkspace = null; ProjectWorkspaceDTOPK projectWorkspaceKey = null; String userName = workspace.getCreatedby(); Date date = new Date(); projectWorkspaceKey = new ProjectWorkspaceDTOPK(project.getProjectid(), workspace.getWorkspaceid()); projectWorkspace = new ProjectWorkspaceDTO(); projectWorkspace.setProjectWorkspaceDTOPK(projectWorkspaceKey); projectWorkspace.setProjectDTO(project); projectWorkspace.setWorkspaceDTO(workspace); projectWorkspace.setCreatedby(userName); projectWorkspace.setCreateddate(date); projectWorkspace.setUpdatedby(userName); projectWorkspace.setUpdateddate(date); return projectWorkspace; } }