package org.akaza.openclinica.controller; import org.akaza.openclinica.bean.core.Role; import org.akaza.openclinica.bean.core.Status; import org.akaza.openclinica.bean.core.UserType; import org.akaza.openclinica.bean.login.StudyUserRoleBean; import org.akaza.openclinica.bean.login.UserAccountBean; import org.akaza.openclinica.bean.login.UserDTO; import org.akaza.openclinica.bean.managestudy.EventDefinitionCRFBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean; import org.akaza.openclinica.bean.managestudy.StudySubjectBean; import org.akaza.openclinica.bean.service.StudyParameterValueBean; import org.akaza.openclinica.bean.submit.ItemBean; import org.akaza.openclinica.bean.submit.ItemGroupBean; import org.akaza.openclinica.control.SpringServletAccess; import org.akaza.openclinica.dao.hibernate.AuthoritiesDao; import org.akaza.openclinica.dao.hibernate.EventCrfFlagDao; import org.akaza.openclinica.dao.hibernate.EventCrfFlagWorkflowDao; import org.akaza.openclinica.dao.hibernate.ItemDataDao; import org.akaza.openclinica.dao.hibernate.IdtViewDao; import org.akaza.openclinica.dao.hibernate.ItemDataFlagDao; import org.akaza.openclinica.dao.hibernate.ItemDataFlagWorkflowDao; import org.akaza.openclinica.dao.login.UserAccountDAO; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.akaza.openclinica.dao.managestudy.StudySubjectDAO; import org.akaza.openclinica.dao.service.StudyParameterValueDAO; import org.akaza.openclinica.dao.submit.ItemDataDAO; import org.akaza.openclinica.domain.datamap.EventCrfFlag; import org.akaza.openclinica.domain.datamap.EventCrfFlagWorkflow; import org.akaza.openclinica.domain.datamap.EventDefinitionCrfTag; import org.akaza.openclinica.domain.datamap.EventDefinitionCrfItemTag; import org.akaza.openclinica.domain.datamap.IdtView; import org.akaza.openclinica.domain.datamap.ItemDataFlag; import org.akaza.openclinica.domain.datamap.ItemDataFlagWorkflow; import org.akaza.openclinica.domain.user.AuthoritiesBean; import org.akaza.openclinica.domain.user.UserAccount; import org.akaza.openclinica.i18n.util.ResourceBundleProvider; import org.akaza.openclinica.service.pmanage.ParticipantPortalRegistrar; import org.apache.commons.dbcp.BasicDataSource; import org.apache.fop.area.Page; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletResponse; import java.awt.print.Pageable; import java.net.URLDecoder; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.UUID; @Controller @RequestMapping(value = "auth/api/itemdata") @ResponseStatus(value = org.springframework.http.HttpStatus.INTERNAL_SERVER_ERROR) public class IdtViewController { @Autowired @Qualifier("dataSource") private BasicDataSource dataSource; @Autowired ServletContext context; @Autowired AuthenticationManager authenticationManager; @Autowired IdtViewDao idtViewDao; @Autowired ItemDataFlagDao itemDataFlagDao; @Autowired EventCrfFlagWorkflowDao eventCrfFlagWorkflowDao; @Autowired ItemDataFlagWorkflowDao itemDataFlagWorkflowDao; @Autowired EventCrfFlagDao eventCrfFlagDao; protected final Logger logger = LoggerFactory.getLogger(getClass().getName()); StudyDAO sdao; @RequestMapping(value = "/sdv/{filternumber}/{studyoid}/paginated", params = { "page", "per_page" }, method = RequestMethod.GET) public ResponseEntity<List<IdtView>> getPaginatedIdtViewData(@PathVariable("filternumber") String filterNumber, @PathVariable("studyoid") String studyOid, @RequestParam("page") int page, @RequestParam("per_page") int per_page) throws Exception { ResourceBundleProvider.updateLocale(new Locale("en_US")); List<IdtView> idtDTO = null; if (page == 0) page = 1; if (per_page == 0) per_page = 30; // default to 30 records / page System.out.println("I'm in getPaginatedIdtViewData"); StudyBean parentStudy = getParentStudy(studyOid); Integer pStudyId = parentStudy.getId(); Integer studyId = getStudy(studyOid).getId(); ArrayList<String> studySubjects = new ArrayList<>(); // studySubjects.add("Sub B 101"); // studySubjects.add("FIEL01"); // studySubjects.add("104Waltham"); // studySubjects.add("SS_SUBB101"); ArrayList<String> studyEventDefinitions = new ArrayList<>(); // studyEventDefinitions.add("SE_FOLLOWUPVISIT"); ArrayList<String> crfs = new ArrayList<>(); // crfs.add("Groups_Adverse_Events"); int tagId = 1; int filter = Integer.valueOf(filterNumber); if (studyId == pStudyId) { // parent Study if (filter == 1) idtDTO = getIdtViewDao().findFilter1(studyId, pStudyId, per_page, page, studySubjects, studyEventDefinitions, crfs, tagId, "OR"); } else { // Site if (filter == 1) idtDTO = getIdtViewDao().findFilter1(studyId, pStudyId, per_page, page, studySubjects, studyEventDefinitions, crfs, tagId, "AND"); } return new ResponseEntity<List<IdtView>>(idtDTO, HttpStatus.OK); } @RequestMapping(value = "/", method = RequestMethod.POST) public ResponseEntity postSDVedItemDataAndEventCrfWorkflow(@RequestBody ArrayList<HashMap<String, String>> maps) throws Exception { int tagId = 1; UserAccount userAccount = null; HashSet<String> listOfEventCrfPaths = new HashSet(); for (HashMap map : maps) { String eventCrfPath = map.get("ssOid") + "." + map.get("sedOid") + "." + map.get("eventOrdinal") + "." + map.get("crfOid"); String itemDataPath = eventCrfPath + "." + map.get("groupOid") + "." + map.get("groupOrdinal") + "." + map.get("itemOid"); String workflowStatus = (String) map.get("itemDataWorkflowStatus"); listOfEventCrfPaths.add(eventCrfPath); saveOrUpdateItemDataFlag(tagId, itemDataPath, workflowStatus); } for (String eventCrfPath : listOfEventCrfPaths) { saveOrUpdateEventCrfFlag(tagId, eventCrfPath, userAccount); } return new ResponseEntity<>(HttpStatus.OK); } public void saveOrUpdateItemDataFlag(int tagId, String itemDataPath, String workflowStatus) { ItemDataFlag itemDataFlag = null; ItemDataFlagWorkflow itemDataFlagWorkflow = null; itemDataFlag = getItemDataFlagDao().findByItemDataPath(tagId, itemDataPath); if (itemDataFlag != null) { itemDataFlagWorkflow = getItemDataFlagWorkflowDao().findById(itemDataFlag.getItemDataFlagWorkflow().getId()); itemDataFlagWorkflow.setDateUpdated(new Date()); itemDataFlagWorkflow.setWorkflowStatus(workflowStatus); // itemDataFlagWorkflow.setUpdateId(updateId); getItemDataFlagWorkflowDao().saveOrUpdate(itemDataFlagWorkflow); itemDataFlag.setDateUpdated(new Date()); // itemDataFlag.setUpdateId(updateId);; // add user account getItemDataFlagDao().saveOrUpdate(itemDataFlag); } else { itemDataFlagWorkflow = new ItemDataFlagWorkflow(); itemDataFlagWorkflow.setDateCreated(new Date()); // itemDataFlagWorkflow.setUserAccount(userAccount); itemDataFlagWorkflow.setWorkflowId("abcd"); itemDataFlagWorkflow.setWorkflowStatus(workflowStatus); ItemDataFlagWorkflow idfw = getItemDataFlagWorkflowDao().saveOrUpdate(itemDataFlagWorkflow); itemDataFlag = new ItemDataFlag(); itemDataFlag.setPath(itemDataPath); itemDataFlag.setDateCreated(new Date()); itemDataFlag.setUserAccount(null); // add user account itemDataFlag.setTagId(tagId); itemDataFlag.setItemDataFlagWorkflow(idfw); getItemDataFlagDao().saveOrUpdate(itemDataFlag); } } public void saveOrUpdateEventCrfFlag(int tagId, String eventCrfPath, UserAccount ua) { EventCrfFlag eventCrfFlag = null; EventCrfFlagWorkflow eventCrfFlagWorkflow = null; String workflowStatus = ""; ArrayList<ItemDataFlag> itemDataFlags = (ArrayList<ItemDataFlag>) getItemDataFlagDao().findAllByEventCrfPath(tagId, eventCrfPath); eventCrfFlag = getEventCrfFlagDao().findByEventCrfPath(tagId, eventCrfPath); if (itemDataFlags.size() != 0) { if (eventCrfFlag != null) { eventCrfFlagWorkflow = getEventCrfFlagWorkflowDao().findById(eventCrfFlag.getEventCrfFlagWorkflow().getId()); eventCrfFlagWorkflow.setDateUpdated(new Date()); // itemDataFlagWorkflow.setUpdateId(updateId); getEventCrfFlagWorkflowDao().saveOrUpdate(eventCrfFlagWorkflow); // eventCrfFlag.setUpdateId(ua.getUpdateId()); eventCrfFlag.setDateUpdated(new Date()); getEventCrfFlagDao().saveOrUpdate(eventCrfFlag); } else { eventCrfFlagWorkflow = new EventCrfFlagWorkflow(); eventCrfFlagWorkflow.setDateCreated(new Date()); // eventCrfFlagWorkflow.setUserAccount(userAccount); eventCrfFlagWorkflow.setWorkflowId("abcd"); EventCrfFlagWorkflow ecfw = getEventCrfFlagWorkflowDao().saveOrUpdate(eventCrfFlagWorkflow); EventCrfFlag eventCrfFg = new EventCrfFlag(); eventCrfFg.setPath(eventCrfPath); eventCrfFg.setTagId(1); eventCrfFg.setDateCreated(new Date()); eventCrfFg.setUserAccount(ua); eventCrfFg.setEventCrfFlagWorkflow(ecfw); getEventCrfFlagDao().saveOrUpdate(eventCrfFg); } } } private StudyBean getStudy(String oid) { sdao = new StudyDAO(dataSource); StudyBean studyBean = (StudyBean) sdao.findByOid(oid); return studyBean; } private StudyBean getStudy(Integer id) { sdao = new StudyDAO(dataSource); StudyBean studyBean = (StudyBean) sdao.findByPK(id); return studyBean; } private StudyBean getParentStudy(Integer studyId) { StudyBean study = getStudy(studyId); if (study.getParentStudyId() == 0) { return study; } else { StudyBean parentStudy = (StudyBean) sdao.findByPK(study.getParentStudyId()); return parentStudy; } } private StudyBean getParentStudy(String studyOid) { StudyBean study = getStudy(studyOid); if (study.getParentStudyId() == 0) { return study; } else { StudyBean parentStudy = (StudyBean) sdao.findByPK(study.getParentStudyId()); return parentStudy; } } public IdtViewDao getIdtViewDao() { return idtViewDao; } public ItemDataFlagDao getItemDataFlagDao() { return itemDataFlagDao; } public EventCrfFlagDao getEventCrfFlagDao() { return eventCrfFlagDao; } public EventCrfFlagWorkflowDao getEventCrfFlagWorkflowDao() { return eventCrfFlagWorkflowDao; } public ItemDataFlagWorkflowDao getItemDataFlagWorkflowDao() { return itemDataFlagWorkflowDao; } }