@Override public String processRequest( String tempFilePath, String pid, String state, String specialty, String city, String iDisplayStart, String iDisplayLength, String searchString, String iSortCol_0, String sortDir, HttpSession session) throws IOException { List<Provider> list = new ArrayList<Provider>(); final int startIndex = Integer.parseInt(iDisplayStart); final int records = Integer.parseInt(iDisplayLength); final int sortCol = Integer.parseInt(iSortCol_0); // HttpSession session = request.getSession(true); String fileName = pid + state + city + specialty; String sortDone = (String) session.getAttribute("sort"); boolean filterResults = false; if (searchString != null && !searchString.equals("") && !searchString.startsWith("debug")) { filterResults = true; } // File f = new File(tempFilePath + "/" + "b10878b7-a254-4670-ba6e-7529d98c742e"); File f = new File(tempFilePath + "/" + fileName); if (!f.exists()) { // First run of the query if (pidPresent(pid)) { ImpalaClient hc = new ImpalaClient(); try { Provider p = hc.getProviderById(pid); list.add(p); } catch (SQLException exception) { logger.error(exception); } } else if (statePresent(state) && !cityPresent(city) && !specialtyPresent(specialty)) { ImpalaClient hc = new ImpalaClient(); try { list = hc.getProvidersByState(state); } catch (SQLException exception) { logger.error(exception); } } else if (statePresent(state) && !cityPresent(city) && specialtyPresent(specialty)) { ImpalaClient hc = new ImpalaClient(); try { // get provider by state & specialty list = hc.getProvidersByStateAndSpecialty( PredicateHelper.getFlatFilteredProviderSpecialtyNodes( ProviderSpecialtyTreeServlet.nodes.getNodes(), specialty), state); } catch (SQLException exception) { logger.error(exception); } } else if (!statePresent(state) && !cityPresent(city) && specialtyPresent(specialty)) { ImpalaClient hc = new ImpalaClient(); try { // get provider by specialty list = hc.getProvidersBySpecialty( PredicateHelper.getFlatFilteredProviderSpecialtyNodes( ProviderSpecialtyTreeServlet.nodes.getNodes(), specialty)); } catch (SQLException exception) { logger.error(exception); } } else if (statePresent(state) && cityPresent(city) && specialtyPresent(specialty)) { ImpalaClient hc = new ImpalaClient(); try { // get provider by specialty list = hc.getProvidersByStateAndCityAndSpecialty( PredicateHelper.getFlatFilteredProviderSpecialtyNodes( ProviderSpecialtyTreeServlet.nodes.getNodes(), specialty), state, city); } catch (SQLException exception) { logger.error(exception); } } else if (statePresent(state) && cityPresent(city) && !specialtyPresent(specialty)) { ImpalaClient hc = new ImpalaClient(); try { // get provider by specialty list = hc.getProvidersByStateAndCity(state, city); } catch (SQLException exception) { logger.error(exception); } } else { list = getStubData(pid); } logger.info("Got the Hive results - Writing temp file"); if (sortDone == null || !sortDone.equalsIgnoreCase(sortCol + sortDir)) { session.setAttribute("sort", sortCol + sortDir); applySorting(list, sortCol, sortDir); } ProviderGridResult pgr = new ProviderGridResult(String.valueOf(list.size()), String.valueOf(list.size()), list); if (list.size() > 0) { File f1 = createTempFile(tempFilePath, fileName); logger.info("File path: " + f1.getAbsolutePath()); ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(f1)); output.writeObject(pgr); output.close(); } if (filterResults) { List<Provider> filteredList = Lists.newArrayList( Collections2.filter(list, PredicateHelper.getFilterPredicate(searchString))); List<Provider> pagedList = getProviders(startIndex, records, filteredList); Neo4jClient nc = new Neo4jClient(); try { nc.getReferralCountByProvider(pagedList); } catch (SQLException e) { logger.error(e); } ProviderGridResult pgr1 = new ProviderGridResult( String.valueOf(list.size()), String.valueOf(filteredList.size()), pagedList); return writeJSON(pgr1); } else { List<Provider> pagedList = getProviders(startIndex, records, list); Neo4jClient nc = new Neo4jClient(); try { nc.getReferralCountByProvider(pagedList); } catch (SQLException e) { logger.error(e); } ProviderGridResult pgr1 = new ProviderGridResult( String.valueOf(list.size()), String.valueOf(list.size()), pagedList); return writeJSON(pgr1); } } else { // Look for existing file and get the data. logger.info("Reading existing file: " + f.getAbsolutePath()); ObjectInputStream input = new ObjectInputStream(new FileInputStream(f)); try { ProviderGridResult pgr = (ProviderGridResult) input.readObject(); if (sortDone == null || !sortDone.equalsIgnoreCase(sortCol + sortDir)) { session.setAttribute("sort", sortCol + sortDir); applySorting(pgr.getAaData(), sortCol, sortDir); logger.info(sortDir + " " + pgr.getAaData()); ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream(f)); output.writeObject(pgr); output.close(); } if (filterResults) { List<Provider> filteredList = Lists.newArrayList( Collections2.filter( pgr.getAaData(), PredicateHelper.getFilterPredicate(searchString))); List<Provider> pagedList = getProviders(startIndex, records, filteredList); Neo4jClient nc = new Neo4jClient(); try { nc.getReferralCountByProvider(pagedList); } catch (SQLException e) { logger.error(e); } ProviderGridResult pgr1 = new ProviderGridResult( String.valueOf(pgr.getAaData().size()), String.valueOf(filteredList.size()), pagedList); return writeJSON(pgr1); } else { List<Provider> pagedList = getProviders(startIndex, records, pgr.getAaData()); Neo4jClient nc = new Neo4jClient(); try { nc.getReferralCountByProvider(pagedList); } catch (SQLException e) { logger.error(e); } ProviderGridResult pgr1 = new ProviderGridResult( String.valueOf(pgr.getAaData().size()), String.valueOf(pgr.getAaData().size()), pagedList); return writeJSON(pgr1); } } catch (ClassNotFoundException e) { logger.error(e); ProviderGridResult pgr = new ProviderGridResult(String.valueOf(list.size()), String.valueOf(list.size()), list); return writeJSON(pgr); } finally { input.close(); } } }