package edu.harvard.i2b2.crc.dao.setfinder.querybuilder; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import edu.harvard.i2b2.crc.datavo.setfinder.query.PanelType; public class GroupPanelByTiming { public HashMap<String, List<PanelType>> groupPanelByTiming( List<PanelType> panelList, String queryTiming) { List<PanelType> anyPanelList = new ArrayList<PanelType>(); List<PanelType> sameVisitPanelList = new ArrayList<PanelType>(); List<PanelType> sameInstanceNumPanelList = new ArrayList<PanelType>(); // iterate the panel list and put them in seperate bucket String panelTiming = null, finalTiming = QueryTimingHandler.ANY; HashMap<String, List<PanelType>> panelTimingMap = new HashMap<String, List<PanelType>>(); for (PanelType panel : panelList) { panelTiming = panel.getPanelTiming(); if (panelTiming != null) { finalTiming = panelTiming; } else if (queryTiming != null) { finalTiming = queryTiming; } else { finalTiming = "ANY"; } if (finalTiming.equals(QueryTimingHandler.ANY)) { anyPanelList.add(panel); } else if (finalTiming.equalsIgnoreCase(QueryTimingHandler.SAME) || finalTiming.equals(QueryTimingHandler.SAMEVISIT)) { sameVisitPanelList.add(panel); } else if (finalTiming .equalsIgnoreCase(QueryTimingHandler.SAMEINSTANCENUM)) { sameInstanceNumPanelList.add(panel); } } // panelTimingMap.put(QueryTimingHandler.ANY, anyPanelList); panelTimingMap.put(QueryTimingHandler.SAMEVISIT, sameVisitPanelList); panelTimingMap.put(QueryTimingHandler.SAMEINSTANCENUM, sameInstanceNumPanelList); return panelTimingMap; } public List<PanelType> filterByInverFlag(List<PanelType> panelList, boolean excludeFlag) { int checkInvertVal = 0; if (excludeFlag == true) { checkInvertVal = 1; } List<PanelType> excludePanelList = new ArrayList<PanelType>(); for (PanelType panelType : panelList) { int invert = panelType.getInvert(); if (invert == checkInvertVal ) { excludePanelList.add(panelType); } } return excludePanelList; } public Map<String, List<PanelType>> filterByExcludeFlag(Map<String, List<PanelType>> groupPanelByTimingMap,boolean excludeFlag) { Map<String, List<PanelType>> invertGroupPanelByTimingMap = new HashMap<String, List<PanelType>>(); String[] timingOrder = new String[] { QueryTimingHandler.SAMEINSTANCENUM, QueryTimingHandler.SAMEVISIT, QueryTimingHandler.ANY }; for (int k = 0; k < timingOrder.length; k++) { List<PanelType> panelList = groupPanelByTimingMap.get(timingOrder[k]); if (panelList == null) { continue; } List<PanelType> filteredPanelList1 = filterByInverFlag (panelList, excludeFlag); if (filteredPanelList1.size()>0) { invertGroupPanelByTimingMap .put(timingOrder[k], filteredPanelList1); } } return invertGroupPanelByTimingMap; } }