package fi.otavanopisto.muikku.plugins.workspace;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.enterprise.context.Dependent;
import javax.inject.Inject;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity;
import fi.otavanopisto.muikku.plugins.workspace.dao.WorkspaceMaterialReplyDAO;
import fi.otavanopisto.muikku.plugins.workspace.dao.WorkspaceNodeDAO;
import fi.otavanopisto.muikku.plugins.workspace.dao.WorkspaceRootFolderDAO;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterial;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialReply;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialReplyState;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceNode;
import fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceRootFolder;
@Dependent
public class WorkspaceMaterialReplyController {
@Inject
private WorkspaceMaterialReplyDAO workspaceMaterialReplyDAO;
@Inject
private WorkspaceRootFolderDAO workspaceRootFolderDAO;
@Inject
private WorkspaceNodeDAO workspaceNodeDAO;
public WorkspaceMaterialReply createWorkspaceMaterialReply(WorkspaceMaterial workspaceMaterial, WorkspaceMaterialReplyState state,
UserEntity userEntity, Long numberOfTries, Date created, Date lastModified) {
Date submitted = state == WorkspaceMaterialReplyState.SUBMITTED ? new Date() : null;
Date withdrawn = state == WorkspaceMaterialReplyState.WITHDRAWN ? new Date() : null;
return workspaceMaterialReplyDAO.create(workspaceMaterial, state, userEntity.getId(), numberOfTries, created, lastModified, submitted, withdrawn);
}
public WorkspaceMaterialReply createWorkspaceMaterialReply(WorkspaceMaterial workspaceMaterial, WorkspaceMaterialReplyState state, UserEntity userEntity) {
Date now = new Date();
return createWorkspaceMaterialReply(workspaceMaterial, state, userEntity, 1l, now, now);
}
public WorkspaceMaterialReply findWorkspaceMaterialReplyByWorkspaceMaterialAndUserEntity(WorkspaceMaterial workspaceMaterial, UserEntity userEntity) {
return workspaceMaterialReplyDAO.findByWorkspaceMaterialAndUserEntityId(workspaceMaterial, userEntity.getId());
}
public fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialReply findWorkspaceMaterialReplyById(Long workspaceMaterialReplyId) {
return workspaceMaterialReplyDAO.findById(workspaceMaterialReplyId);
}
public List<WorkspaceMaterialReply> listVisibleWorkspaceMaterialRepliesByWorkspaceEntity(WorkspaceEntity workspaceEntity, UserEntity userEntity) {
List<WorkspaceMaterialReply> workspaceMaterialReplies = new ArrayList<WorkspaceMaterialReply>();
WorkspaceRootFolder rootFolder = workspaceRootFolderDAO.findByWorkspaceEntityId(workspaceEntity.getId());
List<WorkspaceMaterial> workspaceMaterials = new ArrayList<WorkspaceMaterial>();
appendVisibleWorkspaceMaterials(workspaceMaterials, rootFolder);
WorkspaceMaterialReply reply;
for (WorkspaceMaterial workspaceMaterial : workspaceMaterials) {
reply = findWorkspaceMaterialReplyByWorkspaceMaterialAndUserEntity(workspaceMaterial, userEntity);
if (reply != null) {
workspaceMaterialReplies.add(reply);
}
}
return workspaceMaterialReplies;
}
public Long getReplyCountByUserEntityAndReplyStatesAndWorkspaceMaterials(Long userEntityId, List<WorkspaceMaterialReplyState> replyStates, List<WorkspaceMaterial> materials) {
return workspaceMaterialReplyDAO.countByUserAndStatesAndMaterials(userEntityId, replyStates, materials);
}
private void appendVisibleWorkspaceMaterials(List<WorkspaceMaterial> materials, WorkspaceNode workspaceNode) {
List<WorkspaceNode> childNodes = workspaceNodeDAO.listByParentAndHidden(workspaceNode, Boolean.FALSE);
for (WorkspaceNode childNode : childNodes) {
if (childNode instanceof WorkspaceMaterial) {
materials.add((WorkspaceMaterial) childNode);
}
appendVisibleWorkspaceMaterials(materials, childNode);
}
}
public List<WorkspaceMaterialReply> listWorkspaceMaterialRepliesByWorkspaceMaterial(WorkspaceMaterial workspaceMaterial) {
return workspaceMaterialReplyDAO.listByWorkspaceMaterial(workspaceMaterial);
}
public void deleteWorkspaceMaterialReply(WorkspaceMaterialReply workspaceMaterialReply) {
workspaceMaterialReplyDAO.delete(workspaceMaterialReply);
}
public void incWorkspaceMaterialReplyTries(WorkspaceMaterialReply workspaceMaterialReply) {
workspaceMaterialReplyDAO.update(workspaceMaterialReply, workspaceMaterialReply.getNumberOfTries() + 1, new Date());
}
public WorkspaceMaterialReply updateWorkspaceMaterialReplyModified(fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialReply workspaceMaterialReply, Date lastModified) {
return workspaceMaterialReplyDAO.updateLastModified(workspaceMaterialReply, lastModified);
}
public WorkspaceMaterialReply updateWorkspaceMaterialReply(fi.otavanopisto.muikku.plugins.workspace.model.WorkspaceMaterialReply workspaceMaterialReply, WorkspaceMaterialReplyState state) {
switch (state) {
case SUBMITTED:
workspaceMaterialReplyDAO.updateSubmitted(workspaceMaterialReply, new Date());
break;
case WITHDRAWN:
workspaceMaterialReplyDAO.updateWithdrawn(workspaceMaterialReply, new Date());
break;
default:
break;
}
return workspaceMaterialReplyDAO.updateState(workspaceMaterialReply, state);
}
}