package edu.asu.spring.quadriga.dao.workspace.impl; import java.util.ArrayList; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import edu.asu.spring.quadriga.dao.impl.BaseDAO; import edu.asu.spring.quadriga.dao.workspace.IWorkspaceDictionaryDAO; import edu.asu.spring.quadriga.domain.dictionary.IDictionary; import edu.asu.spring.quadriga.domain.workspace.IWorkSpace; import edu.asu.spring.quadriga.dto.DictionaryDTO; import edu.asu.spring.quadriga.dto.WorkspaceDTO; import edu.asu.spring.quadriga.dto.WorkspaceDictionaryDTO; import edu.asu.spring.quadriga.dto.WorkspaceDictionaryDTOPK; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.mapper.DictionaryDTOMapper; import edu.asu.spring.quadriga.mapper.WorkspaceCollaboratorDTOMapper; import edu.asu.spring.quadriga.mapper.WorkspaceDTOMapper; import edu.asu.spring.quadriga.service.dictionary.mapper.IDictionaryDeepMapper; @Repository public class WorkspaceDictionaryDAO extends BaseDAO<WorkspaceDictionaryDTO> implements IWorkspaceDictionaryDAO { @Autowired DictionaryDTOMapper dictionaryMapper; @Autowired IDictionaryDeepMapper dictionaryDeepMapper; @Autowired WorkspaceDTOMapper workspaceDTOMapper; @Autowired WorkspaceCollaboratorDTOMapper collaboratorDTOMapper; @Autowired private SessionFactory sessionFactory; /** * {@inheritDoc} */ @Override public void addWorkspaceDictionary(String workspaceId, String dictionaryId, String userId) throws QuadrigaStorageException { WorkspaceDTO workspace = null; DictionaryDTO dictionary = null; List<WorkspaceDictionaryDTO> workspaceDictionaryList = null; // check if the dictionary is already associated to the workspace try { workspace = (WorkspaceDTO) sessionFactory.getCurrentSession().get(WorkspaceDTO.class, workspaceId); dictionary = (DictionaryDTO) sessionFactory.getCurrentSession().get(DictionaryDTO.class, dictionaryId); WorkspaceDictionaryDTO workspaceDictionary = workspaceDTOMapper.getWorkspaceDictionary(workspace, dictionary, userId); sessionFactory.getCurrentSession().save(workspaceDictionary); // add the workspace dictionary mapping to workspace object workspaceDictionaryList = workspace.getWorkspaceDictionaryDTOList(); if (workspaceDictionaryList == null) { workspaceDictionaryList = new ArrayList<WorkspaceDictionaryDTO>(); } workspaceDictionaryList.add(workspaceDictionary); workspace.setWorkspaceDictionaryDTOList(workspaceDictionaryList); sessionFactory.getCurrentSession().update(workspace); // add the workspace dictionary mapping to dictionary object workspaceDictionaryList = dictionary.getWsDictionaryDTOList(); if (workspaceDictionaryList == null) { workspaceDictionaryList = new ArrayList<WorkspaceDictionaryDTO>(); } workspaceDictionaryList.add(workspaceDictionary); dictionary.setWsDictionaryDTOList(workspaceDictionaryList); sessionFactory.getCurrentSession().update(dictionary); } catch (Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); throw new QuadrigaStorageException(); } } /** * {@inheritDoc} */ @Override public WorkspaceDTO listWorkspaceDictionary(String workspaceId, String userId) throws QuadrigaStorageException { WorkspaceDTO workspaceDTO = null; try { workspaceDTO = (WorkspaceDTO) sessionFactory.getCurrentSession().get(WorkspaceDTO.class, workspaceId); } catch (Exception ex) { throw new QuadrigaStorageException(); } return workspaceDTO; } /** * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public List<IDictionary> getNonAssociatedWorkspaceDictionaries(String workspaceId) throws QuadrigaStorageException { List<IDictionary> dictionaryList = new ArrayList<IDictionary>(); try { Query query = sessionFactory .getCurrentSession() .createQuery( "FROM DictionaryDTO dict WHERE dict.dictionaryid NOT IN(" + "SELECT w.workspaceDictionaryDTOPK.dictionaryid FROM WorkspaceDictionaryDTO w WHERE w.workspaceDictionaryDTOPK.workspaceid = :workspaceid)"); query.setParameter("workspaceid", workspaceId); List<DictionaryDTO> dictionaryDTOList = query.list(); for (DictionaryDTO dictionaryDTO : dictionaryDTOList) { IDictionary dictionary = dictionaryDeepMapper.getDictionaryDetails(dictionaryDTO); dictionaryList.add(dictionary); } } catch (HibernateException ex) { throw new QuadrigaStorageException(ex); } return dictionaryList; } /** * {@inheritDoc} */ @Override public void deleteWorkspaceDictionary(String workspaceId, String dictionaryId) throws QuadrigaStorageException { WorkspaceDTO workspace = null; List<WorkspaceDictionaryDTO> workspaceDictionaryList = new ArrayList<WorkspaceDictionaryDTO>(); try { workspace = (WorkspaceDTO) sessionFactory.getCurrentSession().get(WorkspaceDTO.class, workspaceId); WorkspaceDictionaryDTOPK workspaceDictionaryKey = new WorkspaceDictionaryDTOPK(workspaceId, dictionaryId); WorkspaceDictionaryDTO workspaceDictionary = (WorkspaceDictionaryDTO) sessionFactory.getCurrentSession() .get(WorkspaceDictionaryDTO.class, workspaceDictionaryKey); workspaceDictionaryList = workspace.getWorkspaceDictionaryDTOList(); if (workspaceDictionaryList.contains(workspaceDictionary)) { workspaceDictionaryList.remove(workspaceDictionary); } workspace.setWorkspaceDictionaryDTOList(workspaceDictionaryList); sessionFactory.getCurrentSession().delete(workspaceDictionary); sessionFactory.getCurrentSession().update(workspace); } catch (HibernateException ex) { throw new QuadrigaStorageException(ex); } } @Override public List<IWorkSpace> getWorkspaceByDictId(String dictionaryId) throws QuadrigaStorageException { List<IWorkSpace> workspaces = new ArrayList<IWorkSpace>(); DictionaryDTO dictionaryDTO = (DictionaryDTO) sessionFactory.getCurrentSession().get(DictionaryDTO.class, dictionaryId); List<WorkspaceDictionaryDTO> workspaceDTOList = dictionaryDTO.getWsDictionaryDTOList(); for (WorkspaceDictionaryDTO workspaceDictionaryDTO : workspaceDTOList) { WorkspaceDTO workspaceDTO = workspaceDictionaryDTO.getWorkspaceDTO(); if (workspaceDTO != null) { IWorkSpace workSpace = workspaceDTOMapper.getWorkSpace(workspaceDTO); workspaces.add(workSpace); } } return workspaces; } @Override public WorkspaceDictionaryDTO getDTO(String id) { return getDTO(WorkspaceDictionaryDTO.class, id); } }