package edu.asu.spring.quadriga.mapper.workspace.impl;
import java.util.ArrayList;
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.impl.workbench.ProjectWorkspace;
import edu.asu.spring.quadriga.domain.proxy.WorkSpaceProxy;
import edu.asu.spring.quadriga.domain.workbench.IProject;
import edu.asu.spring.quadriga.domain.workbench.IProjectWorkspace;
import edu.asu.spring.quadriga.domain.workspace.IWorkSpace;
import edu.asu.spring.quadriga.dto.ProjectWorkspaceDTO;
import edu.asu.spring.quadriga.dto.WorkspaceDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.mapper.workspace.IWorkspaceDeepMapper;
import edu.asu.spring.quadriga.mapper.workspace.IWorkspaceShallowMapper;
import edu.asu.spring.quadriga.service.user.mapper.IUserDeepMapper;
import edu.asu.spring.quadriga.service.workspace.IWorkspaceManager;
/**
* This class maps {@link WorkspaceDTO}s to {@link WorkSpaceProxy}.
*
* @author Julia Damerow
*
*/
@Service
public class WorkspaceShallowMapper extends BaseWorkspaceMapper implements IWorkspaceShallowMapper {
@Autowired
private IWorkspaceManager wsManager;
@Autowired
private IWorkspaceDeepMapper workspaceDeepMapper;
@Autowired
private IUserDeepMapper userDeepManager;
/**
* {@inheritDoc}
*/
@Override
@Transactional
public IWorkSpace mapWorkspaceDTO(WorkspaceDTO workspaceDTO) throws QuadrigaStorageException {
IWorkSpace workspaceProxy = null;
if (workspaceDTO != null) {
workspaceProxy = createWorkspaceProxy(workspaceDTO);
}
return workspaceProxy;
}
@Override
public List<IProjectWorkspace> getProjectWorkspaceList(IProject project, List<ProjectWorkspaceDTO> projectWorkspaceDTOList) throws QuadrigaStorageException {
List<IProjectWorkspace> projectWorkspaceList = null;
if (project != null) {
if (projectWorkspaceDTOList != null) {
projectWorkspaceList = new ArrayList<IProjectWorkspace>();
for (ProjectWorkspaceDTO projectWorkspaceDTO : projectWorkspaceDTOList) {
IWorkSpace workspaceProxy = createWorkspaceProxy(projectWorkspaceDTO.getWorkspaceDTO());
IProjectWorkspace projectWorkspace = createProjectWorkspace(project, projectWorkspaceDTO, workspaceProxy);
projectWorkspaceList.add(projectWorkspace);
}
}
}
return projectWorkspaceList;
}
/**
* Method to create a new {@link ProjectWorkspace} object from a {@link ProjectWorkspaceDTO}.
* @param project
* @param projectWorkspaceDTO
* @param workspaceProxy
* @return
*/
private IProjectWorkspace createProjectWorkspace(IProject project, ProjectWorkspaceDTO projectWorkspaceDTO,
IWorkSpace workspaceProxy) {
IProjectWorkspace projectWorkspace = new ProjectWorkspace();
projectWorkspace.setProject(project);
projectWorkspace.setWorkspace(workspaceProxy);
projectWorkspace.setCreatedBy(projectWorkspaceDTO.getCreatedby());
projectWorkspace.setCreatedDate(projectWorkspaceDTO.getCreateddate());
projectWorkspace.setUpdatedBy(projectWorkspaceDTO.getUpdatedby());
projectWorkspace.setUpdatedDate(projectWorkspaceDTO.getUpdateddate());
return projectWorkspace;
}
/**
* Method to create a new {@link WorkSpaceProxy} from a {@link WorkspaceDTO}.
*
* @param workspaceDTO
* @return
* @throws QuadrigaStorageException
*/
protected IWorkSpace createWorkspaceProxy(WorkspaceDTO workspaceDTO) throws QuadrigaStorageException {
IWorkSpace workspaceProxy = new WorkSpaceProxy(wsManager);
workspaceProxy.setWorkspaceId(workspaceDTO.getWorkspaceid());
workspaceProxy.setWorkspaceName(workspaceDTO.getWorkspacename());
workspaceProxy.setDescription(workspaceDTO.getDescription());
workspaceProxy.setOwner(userDeepManager.getUser(workspaceDTO.getWorkspaceowner().getUsername()));
workspaceProxy.setCreatedBy(workspaceDTO.getCreatedby());
workspaceProxy.setCreatedDate(workspaceDTO.getCreateddate());
workspaceProxy.setUpdatedBy(workspaceDTO.getUpdatedby());
workspaceProxy.setUpdatedDate(workspaceDTO.getUpdateddate());
workspaceProxy.setProjectWorkspace(getProjectWorkspaceOfWorkspace(workspaceProxy,
workspaceDTO));
return workspaceProxy;
}
}