/** * 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) The Minnesota Department of Health. All Rights Reserved. * * Contributor(s): CIRG, University of Washington, Seattle WA. */ package us.mn.state.health.lims.siteinformation.action; import org.apache.commons.beanutils.PropertyUtils; import org.apache.commons.validator.GenericValidator; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.DynaActionForm; import us.mn.state.health.lims.common.action.BaseAction; import us.mn.state.health.lims.common.services.LocalizationService; import us.mn.state.health.lims.common.util.StringUtil; import us.mn.state.health.lims.dictionary.daoimpl.DictionaryDAOImpl; import us.mn.state.health.lims.dictionary.valueholder.Dictionary; import us.mn.state.health.lims.localization.valueholder.Localization; import us.mn.state.health.lims.sample.daoimpl.SampleDAOImpl; import us.mn.state.health.lims.sample.valueholder.Sample; import us.mn.state.health.lims.siteinformation.dao.SiteInformationDAO; import us.mn.state.health.lims.siteinformation.daoimpl.SiteInformationDAOImpl; import us.mn.state.health.lims.siteinformation.valueholder.SiteInformation; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; public class SiteInformationAction extends BaseAction { private boolean isNew = false; private String addKey = null; private String editKey = null; private static final String ACCESSION_NUMBER_PREFIX = "Accession number prefix"; protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String id = request.getParameter(ID); String forward = FWD_SUCCESS; request.setAttribute(ALLOW_EDITS_KEY, "true"); request.setAttribute(PREVIOUS_DISABLED, TRUE); request.setAttribute(NEXT_DISABLED, TRUE); DynaActionForm dynaForm = (DynaActionForm) form; dynaForm.initialize(mapping); isNew = id == null || "0".equals(id); if (!isNew) { SiteInformationDAO siteInformationDAO = new SiteInformationDAOImpl(); SiteInformation siteInformation = new SiteInformation(); siteInformation.setId(id); siteInformationDAO.getData(siteInformation); request.setAttribute(ID, siteInformation.getId()); PropertyUtils.setProperty(dynaForm, "paramName", siteInformation.getName()); PropertyUtils.setProperty(dynaForm, "description", getInstruction( siteInformation ) ); PropertyUtils.setProperty(dynaForm, "value", siteInformation.getValue()); setLocalizationValues( dynaForm, siteInformation); PropertyUtils.setProperty(dynaForm, "encrypted", siteInformation.isEncrypted()); PropertyUtils.setProperty(dynaForm, "valueType", siteInformation.getValueType()); PropertyUtils.setProperty(dynaForm, "editable", isEditable(siteInformation)); PropertyUtils.setProperty(dynaForm, "tag", siteInformation.getTag()); if( "dictionary".equals(siteInformation.getValueType())){ List<String> dictionaryValues = new ArrayList<String>(); List<Dictionary> dictionaries = new DictionaryDAOImpl().getDictionaryEntriesByCategoryId(siteInformation.getDictionaryCategoryId()); for( Dictionary dictionary : dictionaries){ dictionaryValues.add(dictionary.getDictEntry()); } PropertyUtils.setProperty(dynaForm, "dictionaryValues", dictionaryValues); } String domainName = ((DynaActionForm)form).getString("siteInfoDomainName"); if( "SiteInformation".equals(domainName) ){ addKey = "siteInformation.add.title"; editKey = "siteInformation.edit.title"; }else if( "ResultConfiguration".equals(domainName)){ addKey = "resultConfiguration.add.title"; editKey = "resultConfiguration.edit.title"; } } return mapping.findForward(forward); } private String getInstruction( SiteInformation siteInformation ){ String instruction = StringUtil.getMessageForKey( siteInformation.getInstructionKey() ); if( GenericValidator.isBlankOrNull( instruction ) ){ instruction = StringUtil.getMessageForKey( siteInformation.getDescriptionKey() ); } return GenericValidator.isBlankOrNull( instruction ) ? siteInformation.getDescription() : instruction; } private void setLocalizationValues( DynaActionForm dynaForm, SiteInformation siteInformation ) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException{ if( "localization".equals( siteInformation.getTag() )){ LocalizationService localizationService = new LocalizationService( siteInformation.getValue() ); Localization localization = localizationService.getLocalization(); PropertyUtils.setProperty(dynaForm, "englishValue", localization.getEnglish()); PropertyUtils.setProperty(dynaForm, "frenchValue", localization.getFrench()); } } private Boolean isEditable(SiteInformation siteInformation){ if(ACCESSION_NUMBER_PREFIX.endsWith(siteInformation.getName())){ return new SampleDAOImpl().getTotalCount("Sample", Sample.class) == 0; } return Boolean.TRUE; } protected String getPageTitleKey() { return isNew ? addKey : editKey; } protected String getPageSubtitleKey() { return isNew ? addKey : editKey; } }