package edu.asu.spring.quadriga.service.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.dao.workspace.IWorkspaceDAO;
import edu.asu.spring.quadriga.domain.proxy.WorkSpaceProxy;
import edu.asu.spring.quadriga.domain.workspace.IWorkSpace;
import edu.asu.spring.quadriga.dto.WorkspaceDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.mapper.workspace.IWorkspaceShallowMapper;
import edu.asu.spring.quadriga.service.workspace.IListWSManager;
/**
* Class implements {@link IListWSManager} to display the active,archived and
* deactivated workspace associated with project.
*
* @implements IListWSManager
* @author Kiran Kumar Batna
*/
@Service
public class ListWSManager implements IListWSManager {
@Autowired
private IWorkspaceShallowMapper workspaceShallowMapper;
@Autowired
private IWorkspaceDAO wsDao;
/**
* This will list all the workspaces associated with the project.
*
* @param projectid
* @return List<IWorkSpace> - list of workspaces associated with the
* project.
* @throws QuadrigaStorageException
* @author Kiran Kumar Batna
*/
@Override
@Transactional
public List<IWorkSpace> listWorkspace(String projectId, String user) throws QuadrigaStorageException {
List<WorkspaceDTO> workspaceDTOList = wsDao.listWorkspaceDTO(projectId, user);
return mapWorkspaceDTOs(workspaceDTOList);
}
/**
* This method retrieves all the workspace associated with the given having
* the user as a collaborator.
*
* @param projectid
* @return List<IWorkSpace> - list of workspaces associated with the
* project.
* @throws QuadrigaStorageException
* @author Kiran Kumar Batna
*/
@Override
@Transactional
public List<IWorkSpace> listWorkspaceOfCollaborator(String projectid, String user) throws QuadrigaStorageException {
List<WorkspaceDTO> workspaceDTOList = wsDao.listWorkspaceDTOofCollaborator(projectid, user);
return mapWorkspaceDTOs(workspaceDTOList);
}
/**
* This will list all the active workspaces associated with the project.
*
* @param projectid
* @return List<IWorkSpace> - list of active workspaces associated with the
* project.
* @throws QuadrigaStorageException
* @author Kiran Kumar Batna
*/
@Override
@Transactional
public List<IWorkSpace> listActiveWorkspace(String projectId, String user) throws QuadrigaStorageException {
List<WorkspaceDTO> workspaceDTOList = wsDao.listActiveWorkspaceDTOofOwner(projectId, user);
return mapWorkspaceDTOs(workspaceDTOList);
}
@Override
@Transactional
public List<IWorkSpace> listActiveWorkspaceByCollaborator(String projectId, String user)
throws QuadrigaStorageException {
List<WorkspaceDTO> workspaceDTOList = wsDao.listActiveWorkspaceDTOofCollaborator(projectId, user);
return mapWorkspaceDTOs(workspaceDTOList);
}
/**
* This will list all the archived workspaces associated with the project.
*
* @param projectid
* @return List<IWorkSpace> - list of archived workspaces associated with
* the project.
* @throws QuadrigaStorageException
* @author Kiran Kumar Batna
*/
@Override
@Transactional
public List<IWorkSpace> listArchivedWorkspace(String projectId, String user) throws QuadrigaStorageException {
List<WorkspaceDTO> workspaceDTOList = wsDao.listArchivedWorkspaceDTO(projectId, user);
return mapWorkspaceDTOs(workspaceDTOList);
}
/**
* This will list all the deactivated workspaces associated with the
* project.
*
* @param projectid
* @return List<IWorkSpace> - list of archived workspaces associated with
* the project.
* @throws QuadrigaStorageException
* @author Kiran Kumar Batna
*/
@Override
@Transactional
public List<IWorkSpace> listDeactivatedWorkspace(String projectId, String user) throws QuadrigaStorageException {
List<WorkspaceDTO> workspaceDTOList = wsDao.listDeactivatedWorkspaceDTO(projectId, user);
return mapWorkspaceDTOs(workspaceDTOList);
}
/**
* Method that takes a list of workspace DTOs and then calls the {@link IWorkspaceShallowMapper}
* to map the DTOs to a list of workspace proxies.
*
* @param workspaceDTOList The list of workspace DTOs to be mapped.
* @return A list of Workspace proxies ({@link WorkSpaceProxy}).
* @throws QuadrigaStorageException
*/
private List<IWorkSpace> mapWorkspaceDTOs(List<WorkspaceDTO> workspaceDTOList) throws QuadrigaStorageException {
List<IWorkSpace> workspaceList = new ArrayList<IWorkSpace>();;
if(workspaceDTOList != null){
for(WorkspaceDTO workspaceDTO : workspaceDTOList){
workspaceList.add(workspaceShallowMapper.mapWorkspaceDTO(workspaceDTO));
}
}
return workspaceList;
}
}