/** * @(#)Spr001aParentTreeContribAction * Copyright (c) 2005, B.C. Ministry of Forests * All rights reserved. */ package ca.bc.gov.mof.spar.web.action; /******************************************************** Action Class: Spr001aParentTreeContribAction Purpose: Handles user actions for Spr001aParentTreeContribForm Naviagation: Revision History Person Date Comments ----------------- --------- ----------------------- Pangaea June 22 2005 Created *******************************************************/ import java.io.IOException; import java.util.Iterator; import javax.servlet.*; import javax.servlet.http.*; import org.apache.struts.action.*; import ca.bc.gov.mof.sil.webade.db.DataBean; import ca.bc.gov.mof.sil.webade.db.PackageMap; import ca.bc.gov.mof.sil.webade.db.event.SearchRequest; import ca.bc.gov.mof.sil.webade.db.event.SearchResponse; import ca.bc.gov.mof.sil.webade.db.StoreException; import ca.bc.gov.mof.sil.struts.SearchForm; import ca.bc.gov.mof.sil.webade.db.ui.UserMessages; import ca.bc.gov.mof.sil.webade.db.ui.UserMessage; import ca.bc.gov.mof.sil.webade.db.util.Trace; import ca.bc.gov.mof.spar.db.SparExtStore; import ca.bc.gov.mof.spar.web.frame.SparForm; import ca.bc.gov.mof.spar.web.frame.SparAction; import ca.bc.gov.mof.spar.web.frame.SparUser; import ca.bc.gov.mof.spar.web.form.Spr001aParentTreeContribForm; import ca.bc.gov.mof.spar.data.beans.Spr001SeedlotRegBean; import ca.bc.gov.mof.spar.data.beans.Spr001aParentTreeContribBean; import ca.bc.gov.mof.spar.data.beans.Spr001aParentTreeContribResultArray; import ca.bc.gov.mof.spar.data.beans.Spr001aParentTreeContribResultArrayElement; import ca.bc.gov.mof.spar.data.beans.GetOrchardSearchBean; public class Spr001aParentTreeContribAction extends SparAction { private static final Trace trace = new Trace( Spr001aParentTreeContribAction.class ); public Spr001aParentTreeContribAction(){} public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException { // Basic declarations needed for action classes. HttpSession session = request.getSession(); ActionErrors errors = new ActionErrors(); UserMessages warnings = new UserMessages(); SparForm sparForm = (SparForm) form; String action = sparForm.getUserAction().trim(); String userId = sparForm.getUser().getName(); sparForm.setUserAction(""); // Needed to process sub-searches SearchResponse searchResponse = SearchResponse.get(request.getSession()); SearchResponse.remove(request.getSession()); SearchRequest searchRequest = SearchRequest.get(request.getSession()); SearchRequest.remove(request.getSession()); if (searchRequest != null) { ((SearchForm) form).setSearchRequest(searchRequest); } // End of sub-search Spr001aParentTreeContribForm formBean = (Spr001aParentTreeContribForm) form; try { // To process returns from sub-searches if (searchResponse != null && searchResponse.getOk()) { if (searchResponse.getSearcher().equals("/getOrchardSearch")) { GetOrchardSearchBean searchResult = (GetOrchardSearchBean) searchResponse.getResults(); if (formBean.getSearchField().equalsIgnoreCase("dataBean.p_orchard_id")) { if (!searchResult.getOrchard_id().equals("") && searchResult.getOrchard_id() != null) { formBean.getDataBean().setP_orchard_id(searchResult.getOrchard_id()); formBean.getDataBean().setP_orchard_name(searchResult.getOrchard_name()); } } else if (formBean.getSearchField().equalsIgnoreCase("dataBean.p_secondary_orchard_id")) { if (!searchResult.getOrchard_id().equals("") && searchResult.getOrchard_id() != null) { formBean.getDataBean().setP_secondary_orchard_id(searchResult.getOrchard_id()); formBean.getDataBean().setP_secondary_orchard_name(searchResult.getOrchard_name()); } } } } // temporary call to get... else if (action.equalsIgnoreCase("")) { if (searchRequest != null) { formBean.clear(); formBean.setBackForward(searchRequest.getRequestor()); // Copy the key parameters over Spr001SeedlotRegBean dataBean = (Spr001SeedlotRegBean) searchRequest.getSearchState()[0]; formBean.getDataBean().setP_seedlot_number(dataBean.getP_seedlot_number()); } else { formBean.setBackForward(""); } handleGet(mapping, formBean, request, response, errors, warnings); } else if (action.equalsIgnoreCase("Go") || action.equalsIgnoreCase("BackToPT") || action.equalsIgnoreCase("SaveBackToPT")) { handleGet(mapping, formBean, request, response, errors, warnings); } else if (action.equalsIgnoreCase("Save")) { handleSave(mapping, formBean, request, response, errors, warnings); } else if (action.equalsIgnoreCase("searchOrchard")) { formBean.setSearchField("dataBean.p_orchard_id"); return requestSearch("searchOrchard", (DataBean) (formBean.getDataBean()).clone(), session, "spr001aParentTreeContribAction", mapping); } else if (action.equalsIgnoreCase("searchAdditionalOrchard")) { formBean.setSearchField("dataBean.p_secondary_orchard_id"); return requestSearch("searchOrchard", (DataBean) (formBean.getDataBean()).clone(), session, "spr001aParentTreeContribAction", mapping); } else if (action.equalsIgnoreCase("Back")) { return new ActionForward(mapping.findForward("spr01SeedlotRegAction").getPath() + "?dataBean.p_seedlot_number=" + formBean.getDataBean().getP_seedlot_number() ); } else if (action.equalsIgnoreCase("Recalc")) { formBean.getDataBean().setP_get_latest_gq_ind("N"); handleRecalc(mapping, formBean, request, response, errors, warnings); } else if (action.equalsIgnoreCase("RecalcBV")) { formBean.getDataBean().setP_get_latest_gq_ind("Y"); handleRecalc(mapping, formBean, request, response, errors, warnings); if(errors.isEmpty()) { formBean.getDataBean().setP_save_smp_recalc_ind("Y"); } } else if (action.equalsIgnoreCase("CalcSmpMix")) { return requestSearch("spr001aSmpCalculationAction", (DataBean)formBean.getDataBean().clone(), session, "spr001aParentTreeContribAction" ,mapping); } else if (action.equalsIgnoreCase("Clear")) { handleGet(mapping, formBean, request, response, errors, warnings); } } catch (Exception e) { e.printStackTrace(); errors.add("ca.bc.gov.mof.sil.webade.db.exception.trace", createActionError(e)); } return checkErrors(mapping, formBean, errors, warnings, request); } /** * Retrieves records from a search. */ private void handleGet(ActionMapping mapping, Spr001aParentTreeContribForm formBean, HttpServletRequest request, HttpServletResponse response, ActionErrors errors, UserMessages messages) throws StoreException { Spr001aParentTreeContribBean dataBean = (Spr001aParentTreeContribBean) formBean.getBean(); String userid = formBean.getUser().getName(); dataBean.setP_error_message(""); dataBean.setP_action("GET"); dataBean.setP_update_userid(userid); dataBean.setP_roles_string(((SparUser)formBean.getUser()).getUser_roles()); dataBean.setP_user_org_unit_no(((SparUser) formBean.getUser()).getUser_org_unit()); dataBean.setP_user_type(((SparUser) formBean.getUser()).getUser_type()); dataBean.setP_user_client_number(((SparUser) formBean.getUser()).getUser_client()); dataBean.setP_user_client_locn_code(((SparUser) formBean.getUser()).getUser_client_locn()); dataBean.setP_result(new Spr001aParentTreeContribResultArray()); try { SparExtStore store = new SparExtStore("ca.bc.gov.mof", userid, getAction(mapping, request)); dataBean.setPackageMapping(PackageMap.instance().getMapping("ca.bc.gov.mof.spar.data.beans.Spr001aParentTreeContribBean")); dataBean = (Spr001aParentTreeContribBean) store.put(dataBean); // If spar.web.error.usr.database.bv_cv_contrib; was the only error message, set the databean anyway. super.parseToErrors(dataBean.getP_error_message(), errors); if (dataBean.getP_error_message().equals("") || dataBean.getP_error_message().equalsIgnoreCase("spar.web.error.usr.database.bv_cv_contrib;")) { formBean.setBean(dataBean); // Save the spu, orchard_id and secondary_orchard_id for use with change-detection logic in the JSP formBean.setOld_seed_plan_unit_id(dataBean.getP_seed_plan_unit_id()); formBean.setOld_orchard_id(dataBean.getP_orchard_id()); formBean.setOld_secondary_orchard_id(dataBean.getP_secondary_orchard_id()); // Check to see if no records found if (formBean.getDataBean().getP_result().size() == 0) { messages.addMessage(new UserMessage("spar.web.error.usr.noRecord", UserMessage.confirmation)); } } store.commit(); formBean.forceFormats(); } catch (Exception e) { e.printStackTrace(); errors.add("ca.bc.gov.mof.sil.webade.db.exception.trace", createActionError(e)); } } /** * This will save/update records */ private void handleSave(ActionMapping mapping, Spr001aParentTreeContribForm formBean, HttpServletRequest request, HttpServletResponse response, ActionErrors errors, UserMessages messages) throws StoreException { try { Spr001aParentTreeContribBean dataBean = (Spr001aParentTreeContribBean) formBean.getBean(); String userid = formBean.getUser().getName(); dataBean.setP_error_message(""); dataBean.setP_action("SAVE"); dataBean.setP_update_userid(userid); dataBean.setP_user_org_unit_no(((SparUser) formBean.getUser()).getUser_org_unit()); dataBean.setP_user_type(((SparUser) formBean.getUser()).getUser_type()); dataBean.setP_user_client_number(((SparUser) formBean.getUser()).getUser_client()); dataBean.setP_user_client_locn_code(((SparUser) formBean.getUser()).getUser_client_locn()); // Make a copy of the parent tree information from the data bean in case the save fails. // This is needed because the data bean that is sent to the package will have a collapsed array Spr001aParentTreeContribResultArray parentTreeInformation = dataBean.getP_result(); dataBean.setP_result(getParentTreeInformationForSave(parentTreeInformation)); SparExtStore store = new SparExtStore("ca.bc.gov.mof", userid, getAction(mapping, request)); dataBean.setPackageMapping(PackageMap.instance().getMapping("ca.bc.gov.mof.spar.data.beans.Spr001aParentTreeContribBean")); Spr001aParentTreeContribBean dataBeanResult = (Spr001aParentTreeContribBean) store.put(dataBean); if (!super.parseToErrors(dataBeanResult.getP_error_message(), errors)) { store.commit(); formBean.setBean(dataBeanResult); handleGet(mapping, formBean, request, response, errors, messages); messages.addMessage(new UserMessage("spar.web.warning.save.success", UserMessage.confirmation)); } else { // If there was a problem with the save, restore the parent tree // information records store.rollback(); dataBean.setP_result(parentTreeInformation); } } catch (Exception e) { e.printStackTrace(); errors.add("ca.bc.gov.mof.sil.webade.db.exception.trace", createActionError(e)); } } /** * Recalculates and refreshes the data. */ private void handleRecalc(ActionMapping mapping, Spr001aParentTreeContribForm formBean, HttpServletRequest request, HttpServletResponse response, ActionErrors errors, UserMessages messages) throws StoreException { Spr001aParentTreeContribBean dataBean = (Spr001aParentTreeContribBean) formBean.getBean(); String userid = formBean.getUser().getName(); dataBean.setP_error_message(""); dataBean.setP_action("RECALC"); dataBean.setP_update_userid(userid); dataBean.setP_roles_string(((SparUser)formBean.getUser()).getUser_roles()); dataBean.setP_user_org_unit_no(((SparUser) formBean.getUser()).getUser_org_unit()); dataBean.setP_user_type(((SparUser) formBean.getUser()).getUser_type()); dataBean.setP_user_client_number(((SparUser) formBean.getUser()).getUser_client()); dataBean.setP_user_client_locn_code(((SparUser) formBean.getUser()).getUser_client_locn()); try { SparExtStore store = new SparExtStore("ca.bc.gov.mof", userid, getAction(mapping, request)); dataBean.setPackageMapping(PackageMap.instance().getMapping("ca.bc.gov.mof.spar.data.beans.Spr001aParentTreeContribBean")); dataBean = (Spr001aParentTreeContribBean) store.put(dataBean); // If spar.web.error.usr.database.bv_cv_contrib; was the only error message, set the databean anyway. if (!super.parseToErrors(dataBean.getP_error_message(), errors)) { formBean.setBean(dataBean); // Check to see if no records found if (formBean.getDataBean().getP_result().size() == 0) { messages.addMessage(new UserMessage("spar.web.error.usr.noRecord", UserMessage.confirmation)); } } store.commit(); formBean.forceFormats(); } catch (Exception e) { e.printStackTrace(); errors.add("ca.bc.gov.mof.sil.webade.db.exception.trace", createActionError(e)); } } /** * Prepares the Parent Tree Information for the save. This method will * remove elements from the parent tree information array that is not to be * saved. * */ private Spr001aParentTreeContribResultArray getParentTreeInformationForSave(Spr001aParentTreeContribResultArray parentTreeInformation) { Spr001aParentTreeContribResultArray recordsToSave = new Spr001aParentTreeContribResultArray(); Spr001aParentTreeContribResultArrayElement element = null; Iterator iterator = parentTreeInformation.iterator(); while (iterator.hasNext()) { element = (Spr001aParentTreeContribResultArrayElement) iterator.next(); // Only add savable items to the save bean if (Spr001aParentTreeContribForm.parentTreeInformationSavable(element)) { recordsToSave.add(element); } } return recordsToSave; } }