package org.akaza.openclinica.control.submit; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import java.util.Set; import javax.servlet.http.HttpServletResponse; import org.akaza.openclinica.bean.core.Status; import org.akaza.openclinica.bean.login.StudyUserRoleBean; import org.akaza.openclinica.bean.login.UserAccountBean; import org.akaza.openclinica.bean.managestudy.StudyBean; import org.akaza.openclinica.bean.managestudy.StudyEventDefinitionBean; import org.akaza.openclinica.bean.managestudy.StudyGroupClassBean; import org.akaza.openclinica.bean.managestudy.StudySubjectBean; import org.akaza.openclinica.control.AbstractTableFactory; import org.akaza.openclinica.control.DefaultActionsEditor; import org.akaza.openclinica.control.submit.ListDiscNotesSubjectTableFactory.StatusFilterMatcher; import org.akaza.openclinica.control.submit.ListDiscNotesSubjectTableFactory.SubjectEventStatusFilterMatcher; import org.akaza.openclinica.dao.managestudy.DiscrepancyNoteDAO; import org.akaza.openclinica.dao.managestudy.EventDefinitionCRFDAO; import org.akaza.openclinica.dao.managestudy.ListDiscNotesSubjectFilter; import org.akaza.openclinica.dao.managestudy.ListDiscNotesSubjectSort; import org.akaza.openclinica.dao.managestudy.StudyDAO; import org.akaza.openclinica.dao.managestudy.StudyEventDAO; import org.akaza.openclinica.dao.managestudy.StudyEventDefinitionDAO; import org.akaza.openclinica.dao.managestudy.StudyGroupClassDAO; import org.akaza.openclinica.dao.managestudy.StudyGroupDAO; import org.akaza.openclinica.dao.managestudy.StudySubjectDAO; import org.akaza.openclinica.dao.submit.EventCRFDAO; import org.akaza.openclinica.dao.submit.SubjectDAO; import org.akaza.openclinica.dao.submit.SubjectGroupMapDAO; import org.akaza.openclinica.i18n.util.ResourceBundleProvider; import org.jmesa.core.filter.MatcherKey; import org.jmesa.facade.TableFacade; import org.jmesa.limit.Filter; import org.jmesa.limit.FilterSet; import org.jmesa.limit.Limit; import org.jmesa.limit.Sort; import org.jmesa.limit.SortSet; import org.jmesa.view.component.Row; /** * * @author jnyayapathi * */ public class DiscNotesSubjectStatisticsFactory extends AbstractTableFactory{ private String[] columnNames = new String[] {}; private StudyEventDefinitionDAO studyEventDefinitionDao; private StudySubjectDAO studySubjectDAO; private SubjectDAO subjectDAO; private StudyEventDAO studyEventDAO; private StudyGroupClassDAO studyGroupClassDAO; private SubjectGroupMapDAO subjectGroupMapDAO; private StudyGroupDAO studyGroupDAO; private StudyDAO studyDAO; private EventCRFDAO eventCRFDAO; private EventDefinitionCRFDAO eventDefintionCRFDAO; private DiscrepancyNoteDAO discrepancyNoteDAO; private StudyBean studyBean; private ArrayList<StudyEventDefinitionBean> studyEventDefinitions; private ArrayList<StudyGroupClassBean> studyGroupClasses; private StudyUserRoleBean currentRole; private UserAccountBean currentUser; private ResourceBundle resword; private ResourceBundle resformat; private ResourceBundle resterm; private String module; private Integer resolutionStatus; private Integer discNoteType; private Boolean studyHasDiscNotes; private Set<Integer> resolutionStatusIds; private Map<Object,Map> discrepancyMap; @Override protected String getTableName() { return "discNotesSummary"; } @Override protected void configureColumns(TableFacade tableFacade, Locale locale) { //resword = ResourceBundleProvider.getWordsBundle(locale); //resformat = ResourceBundleProvider.getFormatBundle(locale); tableFacade.setColumnProperties(columnNames); Row row = tableFacade.getTable().getRow(); HashMap<Object,Map> items = (HashMap<Object,Map>) getDiscrepancyMap(); Set theKeys = items.keySet(); Iterator theKeysItr = theKeys.iterator(); configureColumn(row.getColumn(columnNames[0]), "_", null, null); configureColumn(row.getColumn(columnNames[1]), theKeysItr.next().toString(), null, null); configureColumn(row.getColumn(columnNames[2]), theKeysItr.next().toString(), null, null); configureColumn(row.getColumn(columnNames[3]), theKeysItr.next().toString(), null, null); configureColumn(row.getColumn(columnNames[4]), theKeysItr.next().toString(), null, null); configureColumn(row.getColumn(columnNames[5]), "Totals", null, null); // study event definition columns //String actionsHeader = resword.getString("rule_actions") + "               "; //configureColumn(row.getColumn(columnNames[columnNames.length - 1]), "Summary Statistics", null, null, false, // false); } @Override public void configureTableFacade(HttpServletResponse response, TableFacade tableFacade) { super.configureTableFacade(response, tableFacade); getColumnNamesMap(); // tableFacade.addFilterMatcher(new MatcherKey(Status.class), new StatusFilterMatcher()); // tableFacade.addFilterMatcher(new MatcherKey(Integer.class), new // SubjectEventStatusFilterMatcher()); } @Override public void setDataAndLimitVariables(TableFacade tableFacade) { StudyBean study = this.getStudyBean(); Limit limit = tableFacade.getLimit(); ListDiscNotesSubjectFilter subjectFilter = getSubjectFilter(limit); // subjectFilter.addFilter("dn.discrepancy_note_type_id", this.discNoteType); StringBuffer constraints = new StringBuffer(); /* if (this.discNoteType > 0 && this.discNoteType < 10) { constraints.append(" and dn.discrepancy_note_type_id=" + this.discNoteType); } if (this.resolutionStatusIds != null && this.resolutionStatusIds.size() > 0) { String s = " and ("; for (Integer resolutionStatusId : this.resolutionStatusIds) { s += "dn.resolution_status_id = " + resolutionStatusId + " or "; } s = s.substring(0, s.length() - 3) + " )"; subjectFilter.addFilter("dn.resolution_status_id", s); constraints.append(s); } */ if (!limit.isComplete()) { // int totalRows = getStudySubjectDAO().getCountWithFilter(subjectFilter, study); tableFacade.setTotalRows(6); } int rowStart = limit.getRowSelect().getRowStart(); int rowEnd = 6; ListDiscNotesSubjectSort subjectSort = getSubjectSort(limit); HashMap<Object,Map> items = (HashMap<Object,Map>) getDiscrepancyMap(); Collection<HashMap<Object, Object>> theItems = new ArrayList<HashMap<Object, Object>>(); Collection<HashMap<Object, Object>> theItemsKeys = new ArrayList<HashMap<Object, Object>>(); Collection<HashMap<Object, Object>> theItemsVals = new ArrayList<HashMap<Object, Object>>(); Iterator keyIt = null; if(items.values().iterator().hasNext()) keyIt = items.values().iterator().next().keySet().iterator(); HashMap<Object, Object> theItem = new HashMap(); Set theKeys = items.keySet(); List<Object> existingKey = new ArrayList(); Iterator theKeysItr = theKeys.iterator(); while(keyIt.hasNext()) { String key = "",val = ""; key = keyIt.next().toString(); // val=keyIt.ne.toString(); // if(!existingKey.contains(key)) // { // existingKey.add(key); // break; // } // else // { // key = keyIt.next().toString(); // // val=firstVals.get(key).toString(); // existingKey.add( key); // break; // } for(Map<String,String[]> firstVals:items.values()) { theItem = new HashMap(); Iterator it = firstVals.values().iterator(); // keyIt = firstVals.keySet().iterator(); String label = (String)theKeysItr.next(); while(it.hasNext()) { theItem.put("_", key); theItem.put(label, it.next()); } theItems.add(theItem); } theItemsVals.addAll(theItems); tableFacade.setItems(theItemsVals); } } private void getColumnNamesMap() { ArrayList<String> columnNamesList = new ArrayList<String>(); HashMap<Object,Map> items = (HashMap<Object,Map>) getDiscrepancyMap(); Set theKeys = items.keySet(); Iterator theKeysItr = theKeys.iterator(); columnNamesList.add("_"); columnNamesList.add(theKeysItr.next().toString()); columnNamesList.add(theKeysItr.next().toString()); columnNamesList.add(theKeysItr.next().toString()); columnNamesList.add(theKeysItr.next().toString()); columnNamesList.add("Totals"); columnNames = columnNamesList.toArray(columnNames); } protected ListDiscNotesSubjectSort getSubjectSort(Limit limit) { ListDiscNotesSubjectSort listDiscNotesSubjectSort = new ListDiscNotesSubjectSort(); SortSet sortSet = limit.getSortSet(); Collection<Sort> sorts = sortSet.getSorts(); for (Sort sort : sorts) { String property = sort.getProperty(); String order = sort.getOrder().toParam(); listDiscNotesSubjectSort.addSort(property, order); } return listDiscNotesSubjectSort; } protected ListDiscNotesSubjectFilter getSubjectFilter(Limit limit) { ListDiscNotesSubjectFilter listDiscNotesSubjectFilter = new ListDiscNotesSubjectFilter(); FilterSet filterSet = limit.getFilterSet(); Collection<Filter> filters = filterSet.getFilters(); for (Filter filter : filters) { String property = filter.getProperty(); String value = filter.getValue(); listDiscNotesSubjectFilter.addFilter(property, value); } return listDiscNotesSubjectFilter; } public Map<Object, Map> getDiscrepancyMap() { return discrepancyMap; } public void setDiscrepancyMap(Map<Object, Map> discrepancyMap) { this.discrepancyMap = discrepancyMap; } public StudyEventDefinitionDAO getStudyEventDefinitionDao() { return studyEventDefinitionDao; } public void setStudyEventDefinitionDao(StudyEventDefinitionDAO studyEventDefinitionDao) { this.studyEventDefinitionDao = studyEventDefinitionDao; } public StudyBean getStudyBean() { return studyBean; } public void setStudyBean(StudyBean studyBean) { this.studyBean = studyBean; } public StudySubjectDAO getStudySubjectDAO() { return studySubjectDAO; } public void setStudySubjectDAO(StudySubjectDAO studySubjectDAO) { this.studySubjectDAO = studySubjectDAO; } public SubjectDAO getSubjectDAO() { return subjectDAO; } public void setSubjectDAO(SubjectDAO subjectDAO) { this.subjectDAO = subjectDAO; } public StudyEventDAO getStudyEventDAO() { return studyEventDAO; } public void setStudyEventDAO(StudyEventDAO studyEventDAO) { this.studyEventDAO = studyEventDAO; } public StudyGroupClassDAO getStudyGroupClassDAO() { return studyGroupClassDAO; } public void setStudyGroupClassDAO(StudyGroupClassDAO studyGroupClassDAO) { this.studyGroupClassDAO = studyGroupClassDAO; } public SubjectGroupMapDAO getSubjectGroupMapDAO() { return subjectGroupMapDAO; } public void setSubjectGroupMapDAO(SubjectGroupMapDAO subjectGroupMapDAO) { this.subjectGroupMapDAO = subjectGroupMapDAO; } public StudyDAO getStudyDAO() { return studyDAO; } public void setStudyDAO(StudyDAO studyDAO) { this.studyDAO = studyDAO; } public StudyUserRoleBean getCurrentRole() { return currentRole; } public void setCurrentRole(StudyUserRoleBean currentRole) { this.currentRole = currentRole; } public EventCRFDAO getEventCRFDAO() { return eventCRFDAO; } public void setEventCRFDAO(EventCRFDAO eventCRFDAO) { this.eventCRFDAO = eventCRFDAO; } public EventDefinitionCRFDAO getEventDefintionCRFDAO() { return eventDefintionCRFDAO; } public void setEventDefintionCRFDAO(EventDefinitionCRFDAO eventDefintionCRFDAO) { this.eventDefintionCRFDAO = eventDefintionCRFDAO; } public StudyGroupDAO getStudyGroupDAO() { return studyGroupDAO; } public void setStudyGroupDAO(StudyGroupDAO studyGroupDAO) { this.studyGroupDAO = studyGroupDAO; } public DiscrepancyNoteDAO getDiscrepancyNoteDAO() { return discrepancyNoteDAO; } public void setDiscrepancyNoteDAO(DiscrepancyNoteDAO discrepancyNoteDAO) { this.discrepancyNoteDAO = discrepancyNoteDAO; } public ResourceBundle getResword() { return resword; } public void setResword(ResourceBundle resword) { this.resword = resword; } public ResourceBundle getResterm() { return resterm; } public void setResterm(ResourceBundle resterm) { this.resterm = resterm; } public String getModule() { return module; } public void setModule(String module) { this.module = module; } public UserAccountBean getCurrentUser() { return currentUser; } public Integer getResolutionStatus() { return resolutionStatus; } public void setResolutionStatus(Integer resolutionStatus) { this.resolutionStatus = resolutionStatus; } public Integer getDiscNoteType() { return discNoteType; } public void setDiscNoteType(Integer discNoteType) { this.discNoteType = discNoteType; } public Boolean isStudyHasDiscNotes() { return studyHasDiscNotes; } public void setStudyHasDiscNotes(Boolean studyHasDiscNotes) { this.studyHasDiscNotes = studyHasDiscNotes; } public void setCurrentUser(UserAccountBean currentUser) { this.currentUser = currentUser; } }