public HashMap getMinPatientIndexAndTheTotal(int maxInputList) throws SQLException, I2B2Exception { IInputOptionListHandler inputOptionListHandler = PDOFactory.buildInputListHandler(inputList, dataSourceLookup); // inputList.getPatientList().setMax(maxInputList); inputOptionListHandler.setMaxIndex(maxInputList); // iterate the panel and call total IFactRelatedQueryHandler factRelatedHandler = null; String countSqlFrom = " "; if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.ORACLE) || dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.POSTGRESQL)) { factRelatedHandler = new FactRelatedQueryHandler(dataSourceLookup, inputList, filterList, outputOptionList); } else if (dataSourceLookup.getServerType().equalsIgnoreCase(DAOFactoryHelper.SQLSERVER)) { countSqlFrom = "as"; factRelatedHandler = new SQLServerFactRelatedQueryHandler( dataSourceLookup, inputList, filterList, outputOptionList); } // set project param factRelatedHandler.setProjectParamMap(this.projectParamMap); factRelatedHandler.setModifierMetadataXmlMap(this.modifierMetadataXmlMap); FactOutputOptionType factOutputOptionType = new FactOutputOptionType(); factOutputOptionType.setOnlykeys(true); outputOptionList.setObservationSet(factOutputOptionType); // outputOptionList.getObservationSet().setOnlykeys(true); // build sql for all the panel // DAOFactoryHelper daoFactoryHelper = new DAOFactoryHelper( // dataSourceLookup); IPageDao pageTotalDao = daoFactoryHelper.getDAOFactory().getPatientDataDAOFactory().getPageDAO(); int panelCount = filterList.getPanel().size(); List<String> panelMinSqlList = new ArrayList<String>(panelCount); List<Integer> sqlCountList = new ArrayList<Integer>(panelCount); long totalObservations = 0; // things to consider to find the minimum // a)How to handle the different input list (i.e. enumeration list,table // or patient_dimension) String panelSql = ""; for (PanelType singlePanel : filterList.getPanel()) { int sqlParamCount = singlePanel.getItem().size(); if (singlePanel.getInvert() == 1) { sqlParamCount++; } if (inputOptionListHandler.isCollectionId()) { sqlParamCount++; } sqlCountList.add(sqlParamCount); panelSql = pageTotalDao.buildTotalSql(factRelatedHandler, singlePanel); if (panelSql.length() == 0) { continue; } String minSql = inputOptionListHandler.generateMinIndexSql(panelSql); System.out.println("min sql for panel " + minSql); panelMinSqlList.add(minSql); } return pageTotalDao.getMinIndexAndCountAllPanel( panelMinSqlList, sqlCountList, inputOptionListHandler); }