/* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the * License for the specific language governing rights and limitations under * the License. * * The Original Code is OpenELIS code. * * Copyright (C) ITECH, University of Washington, Seattle WA. All Rights Reserved. */ package us.mn.state.health.lims.common.provider.query; import org.apache.commons.validator.GenericValidator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import us.mn.state.health.lims.analysis.dao.AnalysisDAO; import us.mn.state.health.lims.analysis.daoimpl.AnalysisDAOImpl; import us.mn.state.health.lims.analysis.valueholder.Analysis; import us.mn.state.health.lims.common.services.LocalizationService; import us.mn.state.health.lims.common.services.StatusService; import us.mn.state.health.lims.common.services.TypeOfSampleService; import us.mn.state.health.lims.common.servlet.validation.AjaxServlet; import us.mn.state.health.lims.test.valueholder.Test; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.List; public class PendingAnalysisForTestProvider extends BaseQueryProvider { protected AjaxServlet ajaxServlet = null; private static AnalysisDAO analysisDAO = new AnalysisDAOImpl(); private static final List<Integer> NOT_STARTED; private static final List<Integer> TECH_REJECT; private static final List<Integer> BIO_REJECT; private static final List<Integer> NOT_VALIDATED; static{ StatusService statusService = StatusService.getInstance(); NOT_STARTED = new ArrayList<Integer>(); NOT_STARTED.add(Integer.parseInt(statusService.getStatusID(StatusService.AnalysisStatus.NotStarted))); TECH_REJECT = new ArrayList<Integer>(); TECH_REJECT.add(Integer.parseInt(statusService.getStatusID(StatusService.AnalysisStatus.TechnicalRejected))); BIO_REJECT = new ArrayList<Integer>(); BIO_REJECT.add(Integer.parseInt(statusService.getStatusID(StatusService.AnalysisStatus.BiologistRejected))); NOT_VALIDATED = new ArrayList<Integer>(); NOT_VALIDATED.add(Integer.parseInt(statusService.getStatusID(StatusService.AnalysisStatus.TechnicalAcceptance))); } @Override public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String testId = request.getParameter("testId"); String jResult; JSONObject jsonResult = new JSONObject(); String jString; if (GenericValidator.isBlankOrNull(testId) ){ jResult = INVALID; jString = "Internal error, please contact Admin and file bug report"; } else { jResult = createJsonGroupedAnalysis(testId, jsonResult); StringWriter out = new StringWriter(); try{ jsonResult.writeJSONString( out ); jString = out.toString(); }catch( IOException e ){ e.printStackTrace(); jResult = INVALID; jString = "Internal error, please contact Admin and file bug report"; }catch( IllegalStateException e ){ e.printStackTrace(); jResult = INVALID; jString = "Internal error, please contact Admin and file bug report"; } } ajaxServlet.sendData(jString, jResult, request, response); } @SuppressWarnings("unchecked") private String createJsonGroupedAnalysis(String testId, JSONObject jsonResult)throws IllegalStateException{ createPendingList(testId, jsonResult,"notStarted", NOT_STARTED); createPendingList(testId, jsonResult,"technicianRejection", TECH_REJECT); createPendingList(testId, jsonResult,"biologistRejection", BIO_REJECT); createPendingList(testId, jsonResult,"notValidated", NOT_VALIDATED); return VALID; } private void createPendingList(String testId, JSONObject jsonResult, String tag, List<Integer> statusList) { List<Analysis> notStartedAnalysis = analysisDAO.getAllAnalysisByTestAndStatus(testId, statusList); JSONArray analysisArray = new JSONArray(); for(Analysis analysis : notStartedAnalysis){ JSONObject analysisObject = new JSONObject(); analysisObject.put("labNo", analysis.getSampleItem().getSample().getAccessionNumber()); analysisObject.put("id", analysis.getId()); analysisArray.add(analysisObject); } jsonResult.put(tag, analysisArray); } @Override public void setServlet(AjaxServlet as) { this.ajaxServlet = as; } @Override public AjaxServlet getServlet() { return this.ajaxServlet; } }