Example usage for org.apache.commons.beanutils PropertyUtils copyProperties

List of usage examples for org.apache.commons.beanutils PropertyUtils copyProperties

Introduction

In this page you can find the example usage for org.apache.commons.beanutils PropertyUtils copyProperties.

Prototype

public static void copyProperties(Object dest, Object orig)
        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException 

Source Link

Document

Copy property values from the "origin" bean to the "destination" bean for all cases where the property names are the same (even though the actual getter and setter methods might have been customized via BeanInfo classes).

For more details see PropertyUtilsBean.

Usage

From source file:us.mn.state.health.lims.common.daoimpl.GenericDAOImpl.java

/***
 *  get one entity, by the ID contained in the given Entity, filling in the given entity with the values.
 *//*from   w w w  .  j  a v a2 s. com*/
public void getData(Entity entity) throws LIMSRuntimeException {
    Entity tmpEntity = readEntity(entity.getId()); // PAH reused readEntity instead of doing the code again.
    if (tmpEntity != null) {
        try {
            PropertyUtils.copyProperties(entity, tmpEntity);
        } catch (Exception e) {
            throw createAndLogException("getData()", e);
        }
    } else {
        entity.setId(null);
    }
}

From source file:us.mn.state.health.lims.common.provider.query.SampleItemTestProvider.java

/**
 * Figure out if the given "test" (actually something of a test panel) Ask
 * the project form mapper//from   w  w w.j a va  2  s.  c  o  m
 *
 * @param sampleKey
 * @param projectFormName
 * @param sampleItemTypeTag
 * @param testTag
 * @return
 * @throws Exception
 */
private boolean wasTestSelected(String sampleKey, String projectFormName, String sampleItemType, String testTag)
        throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    ProjectData projectData = new ProjectData();
    Map<String, Boolean> miniForm = new HashMap<String, Boolean>();
    miniForm.put(sampleItemType + "Taken", Boolean.TRUE);
    miniForm.put(testTag, Boolean.TRUE);
    PropertyUtils.copyProperties(projectData, miniForm);

    List<Analysis> analysis = findAnalysis(sampleKey, projectFormName, projectData);
    return analysis.size() != 0;
}

From source file:us.mn.state.health.lims.county.action.CountyAction.java

protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new County.
    // If there is a parameter present, we should bring up an existing
    // County to edit.

    String id = request.getParameter(ID);

    String forward = "success";
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    request.setAttribute(PREVIOUS_DISABLED, "true");
    request.setAttribute(NEXT_DISABLED, "true");

    DynaActionForm dynaForm = (DynaActionForm) form;

    // initialize the form
    dynaForm.initialize(mapping);//from w  w  w.  ja  va 2  s  .c  o m

    County county = new County();
    //System.out.println("I am in CountyAction and this is id " + id);
    if ((id != null) && (!"0".equals(id))) { // this is an existing
        // county

        county.setId(id);
        CountyDAO countyDAO = new CountyDAOImpl();
        countyDAO.getData(county);

        // initialize sysUserId
        if (county.getRegion() != null) {
            county.setRegionId(county.getRegion().getId());
        }

        isNew = false; // this is to set correct page title
        // do we need to enable next or previous?
        //bugzilla 1427 pass in name not id
        List counties = countyDAO.getNextCountyRecord(county.getCounty());
        if (counties.size() > 0) {
            // enable next button
            request.setAttribute(NEXT_DISABLED, "false");
        }
        //bugzilla 1427 pass in name not id
        counties = countyDAO.getPreviousCountyRecord(county.getCounty());
        if (counties.size() > 0) {
            // enable next button
            request.setAttribute(PREVIOUS_DISABLED, "false");
        }
        // end of logic to enable next or previous button

    } else { // this is a new county

        isNew = true; // this is to set correct page title

    }

    if (county.getId() != null && !county.getId().equals("0")) {
        request.setAttribute(ID, county.getId());
    }

    // populate form from valueholder
    PropertyUtils.copyProperties(form, county);

    RegionDAO regionDAO = new RegionDAOImpl();

    List regions = regionDAO.getAllRegions();

    PropertyUtils.setProperty(form, "regions", regions);

    //System.out.println("I am in CountyAction this is forward " + forward);
    return mapping.findForward(forward);
}

From source file:us.mn.state.health.lims.county.action.CountyUpdateAction.java

protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new County.
    // If there is a parameter present, we should bring up an existing
    // County to edit.
    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    request.setAttribute(PREVIOUS_DISABLED, "false");
    request.setAttribute(NEXT_DISABLED, "false");

    String id = request.getParameter(ID);

    if (StringUtil.isNullorNill(id) || "0".equals(id)) {
        isNew = true;//from  w  w  w  . j  a v  a  2 s. c om
    } else {
        isNew = false;
    }

    BaseActionForm dynaForm = (BaseActionForm) form;

    // server-side validation (validation.xml)
    ActionMessages errors = dynaForm.validate(mapping, request);
    if (errors != null && errors.size() > 0) {
        saveErrors(request, errors);
        // since we forward to jsp - not Action we don't need to repopulate
        // the lists here
        return mapping.findForward(FWD_FAIL);
    }

    String start = (String) request.getParameter("startingRecNo");
    String direction = (String) request.getParameter("direction");

    County county = new County();
    //get sysUserId from login module
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());
    county.setSysUserId(sysUserId);
    org.hibernate.Transaction tx = HibernateUtil.getSession().beginTransaction();

    String regionId = (String) dynaForm.get("regionId");

    List regions = new ArrayList();
    if (dynaForm.get("regions") != null) {
        regions = (List) dynaForm.get("regions");
    } else {
        RegionDAO regionDAO = new RegionDAOImpl();
        regions = regionDAO.getAllRegions();
    }

    Region region = null;

    for (int i = 0; i < regions.size(); i++) {
        Region reg = (Region) regions.get(i);
        if (reg.getId().equals(regionId)) {
            region = reg;
            break;
        }
    }

    // populate valueholder from form
    PropertyUtils.copyProperties(county, dynaForm);

    // set the region
    county.setRegion(region);

    try {

        CountyDAO countyDAO = new CountyDAOImpl();

        if (!isNew) {
            // UPDATE
            countyDAO.updateData(county);
        } else {
            // INSERT
            countyDAO.insertData(county);
        }
        tx.commit();
    } catch (LIMSRuntimeException lre) {
        //bugzilla 2154
        LogEvent.logError("CountyUpdateAction", "performAction()", lre.toString());
        tx.rollback();
        errors = new ActionMessages();
        //bugzilla 1482
        java.util.Locale locale = (java.util.Locale) request.getSession()
                .getAttribute("org.apache.struts.action.LOCALE");
        ActionError error = null;
        if (lre.getException() instanceof org.hibernate.StaleObjectStateException) {
            // how can I get popup instead of struts error at the top of
            // page?
            // ActionMessages errors = dynaForm.validate(mapping, request);
            error = new ActionError("errors.OptimisticLockException", null, null);
        } else {
            // bugzilla 1482
            if (lre.getException() instanceof LIMSDuplicateRecordException) {
                String messageKey = "county.county";
                String msg = ResourceLocator.getInstance().getMessageResources().getMessage(locale, messageKey);
                error = new ActionError("errors.DuplicateRecord", msg, null);

            } else {
                error = new ActionError("errors.UpdateException", null, null);
            }
        }
        errors.add(ActionMessages.GLOBAL_MESSAGE, error);
        saveErrors(request, errors);
        request.setAttribute(Globals.ERROR_KEY, errors);
        //bugzilla 1485: allow change and try updating again (enable save button)
        //request.setAttribute(IActionConstants.ALLOW_EDITS_KEY, "false");
        // disable previous and next
        request.setAttribute(PREVIOUS_DISABLED, "true");
        request.setAttribute(NEXT_DISABLED, "true");
        forward = FWD_FAIL;

    } finally {
        HibernateUtil.closeSession();
    }
    if (forward.equals(FWD_FAIL))
        return mapping.findForward(forward);

    // initialize the form
    dynaForm.initialize(mapping);
    // repopulate the form from valueholder
    PropertyUtils.copyProperties(dynaForm, county);

    // need to repopulate in case of FWD_FAIL?
    PropertyUtils.setProperty(dynaForm, "regions", regions);

    if ("true".equalsIgnoreCase(request.getParameter("close"))) {
        forward = FWD_CLOSE;
    }

    if (county.getId() != null && !county.getId().equals("0")) {
        request.setAttribute(ID, county.getId());

    }
    //bugzilla 1400
    if (isNew)
        forward = FWD_SUCCESS_INSERT;
    //bugzilla 1467 added direction for redirect to NextPreviousAction
    return getForward(mapping.findForward(forward), id, start, direction);

}

From source file:us.mn.state.health.lims.county.daoimpl.CountyDAOImpl.java

public void getData(County county) throws LIMSRuntimeException {
    try {/* w  w w .j  a  v a  2s  . com*/
        County co = (County) HibernateUtil.getSession().get(County.class, county.getId());
        HibernateUtil.getSession().flush();
        HibernateUtil.getSession().clear();
        if (co != null) {
            PropertyUtils.copyProperties(county, co);
        } else {
            county.setId(null);
        }
    } catch (Exception e) {
        //bugzilla 2154
        LogEvent.logError("CountyDAOImpl", "getData()", e.toString());
        throw new LIMSRuntimeException("Error in County getData()", e);
    }
}

From source file:us.mn.state.health.lims.dictionary.action.DictionaryAction.java

protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new Dictionary.
    // If there is a parameter present, we should bring up an existing
    // Dictionary to edit.
    String id = request.getParameter(ID);

    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    //bugzilla 2062
    request.setAttribute(RECORD_FROZEN_EDIT_DISABLED_KEY, "false");
    request.setAttribute(PREVIOUS_DISABLED, "true");
    request.setAttribute(NEXT_DISABLED, "true");

    DynaActionForm dynaForm = (DynaActionForm) form;

    // initialize the form
    dynaForm.initialize(mapping);/*from  w ww. j a v a  2 s . c  o m*/

    Dictionary dictionary = new Dictionary();

    if ((id != null) && (!"0".equals(id))) { // this is an existing
        // dictionary

        dictionary.setId(id);
        DictionaryDAO dictionaryDAO = new DictionaryDAOImpl();
        dictionaryDAO.getData(dictionary);

        isNew = false; // this is to set correct page title

        // do we need to enable next or previous?
        List dictionarys = dictionaryDAO.getNextDictionaryRecord(dictionary.getId());
        if (dictionarys.size() > 0) {
            // enable next button
            request.setAttribute(NEXT_DISABLED, "false");
        }
        dictionarys = dictionaryDAO.getPreviousDictionaryRecord(dictionary.getId());
        if (dictionarys.size() > 0) {
            // enable next button
            request.setAttribute(PREVIOUS_DISABLED, "false");
        }
        // end of logic to enable next or previous button
    } else { // this is a new dictionary

        // default isActive to 'Y'
        dictionary.setIsActive(YES);
        isNew = true; // this is to set correct page title
    }

    if (dictionary.getId() != null && !dictionary.getId().equals("0")) {
        request.setAttribute(ID, dictionary.getId());
        // bugzilla 2062 initialize selectedDictionaryCategoryId
        if (dictionary.getDictionaryCategory() != null) {
            dictionary.setSelectedDictionaryCategoryId(dictionary.getDictionaryCategory().getId());
        }
    }

    // populate form from valueholder
    PropertyUtils.copyProperties(form, dictionary);

    DictionaryCategoryDAO dictCategorygDAO = new DictionaryCategoryDAOImpl();
    List dictCats = dictCategorygDAO.getAllDictionaryCategorys();

    PropertyUtils.setProperty(form, "categories", dictCats);

    return mapping.findForward(forward);
}

From source file:us.mn.state.health.lims.dictionary.action.DictionaryUpdateAction.java

protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new Dictionary.
    // If there is a parameter present, we should bring up an existing
    // Dictionary to edit.

    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    request.setAttribute(PREVIOUS_DISABLED, "false");
    request.setAttribute(NEXT_DISABLED, "false");

    String id = request.getParameter(ID);

    if (StringUtil.isNullorNill(id) || "0".equals(id)) {
        isNew = true;// w  ww  .  java  2 s  .c  om
    } else {
        isNew = false;
    }

    BaseActionForm dynaForm = (BaseActionForm) form;

    // server-side validation (validation.xml)
    ActionMessages errors = dynaForm.validate(mapping, request);
    if (errors != null && errors.size() > 0) {
        // System.out.println("Server side validation errors "
        // + errors.toString());
        saveErrors(request, errors);
        // since we forward to jsp - not Action we don't need to repopulate
        // the lists here
        return mapping.findForward(FWD_FAIL);
    }

    String start = (String) request.getParameter("startingRecNo");
    String direction = (String) request.getParameter("direction");

    // System.out.println("This is ID from request " + id);

    Dictionary dictionary = new Dictionary();
    //get sysUserId from login module
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());
    dictionary.setSysUserId(sysUserId);
    org.hibernate.Transaction tx = HibernateUtil.getSession().beginTransaction();

    // populate valueholder from form
    PropertyUtils.copyProperties(dictionary, dynaForm);

    //bugzilla 2062
    DictionaryDAO dictionaryDAO = new DictionaryDAOImpl();
    DictionaryCategoryDAO dictionaryCategoryDAO = new DictionaryCategoryDAOImpl();

    String selectedCategoryId = (String) dynaForm.get("selectedDictionaryCategoryId");
    //bugzilla 2108
    DictionaryCategory dictionaryCategory = null;
    if (!StringUtil.isNullorNill(selectedCategoryId)) {
        dictionaryCategory = new DictionaryCategory();
        dictionaryCategory.setId(selectedCategoryId);
        dictionaryCategoryDAO.getData(dictionaryCategory);
    }

    dictionary.setDictionaryCategory(dictionaryCategory);

    try {

        if (!isNew) {
            // UPDATE

            //bugzilla 2062
            boolean isDictionaryFrozenCheckRequired = false;

            //there is an exception to rule of checking whether dictionary record
            //is frozen (can no longer be updated): 
            //currenly if only isActive has changed and
            //the current value is 'Y'
            //OR
            //bugzilla 1847: also the local abbreviation can be deleted/updated/inserted at anytime
            String dirtyFormFields = (String) dynaForm.get("dirtyFormFields");
            String isActiveValue = (String) dynaForm.get("isActive");

            String[] dirtyFields = dirtyFormFields
                    .split(SystemConfiguration.getInstance().getDefaultIdSeparator(), -1);
            List listOfDirtyFields = new ArrayList();

            for (int i = 0; i < dirtyFields.length; i++) {
                String dirtyField = dirtyFields[i];
                if (!StringUtil.isNullorNill(dirtyField)) {
                    listOfDirtyFields.add(dirtyField);
                }
            }

            List listOfDirtyFieldsNoFrozenCheckRequired = new ArrayList();
            listOfDirtyFieldsNoFrozenCheckRequired.add("isActive");
            listOfDirtyFieldsNoFrozenCheckRequired.add("localAbbreviation");

            //bugzilla 1847 : added to exception for frozen check required
            // isActive changed to Y (no frozen check required) 
            //localAbbreviation has changed (no frozen check required)
            if (!listOfDirtyFields.isEmpty()) {
                for (int i = 0; i < listOfDirtyFields.size(); i++) {
                    String dirtyField = (String) listOfDirtyFields.get(i);
                    if (!listOfDirtyFieldsNoFrozenCheckRequired.contains(dirtyField)) {
                        isDictionaryFrozenCheckRequired = true;
                    } else {
                        //in case of isActive: need to make sure it changed to YES to be able
                        // to skip isFrozenCheck
                        if (dirtyField.equals("isActive") && !isActiveValue.equals(YES)) {
                            isDictionaryFrozenCheckRequired = true;
                        }
                    }
                }
            } else {
                isDictionaryFrozenCheckRequired = false;
            }

            dictionaryDAO.updateData(dictionary, isDictionaryFrozenCheckRequired);

        } else {
            // INSERT

            dictionaryDAO.insertData(dictionary);
        }
        tx.commit();
    } catch (LIMSRuntimeException lre) {
        //bugzilla 2154
        LogEvent.logError("DictionaryUpdateAction", "performAction()", lre.toString());
        tx.rollback();
        errors = new ActionMessages();
        //1482
        java.util.Locale locale = (java.util.Locale) request.getSession()
                .getAttribute("org.apache.struts.action.LOCALE");
        ActionError error = null;
        if (lre.getException() instanceof org.hibernate.StaleObjectStateException) {
            // how can I get popup instead of struts error at the top of
            // page?
            // ActionMessages errors = dynaForm.validate(mapping, request);
            error = new ActionError("errors.OptimisticLockException", null, null);

        } else {
            //bugzilla 1386
            if (lre.getException() instanceof LIMSDuplicateRecordException) {
                String messageKey = "dictionary.dictEntryByCategory";
                String msg = ResourceLocator.getInstance().getMessageResources().getMessage(locale, messageKey);
                error = new ActionError("errors.DuplicateRecord.activate", msg, null);

            } else if (lre.getException() instanceof LIMSFrozenRecordException) {
                String messageKey = "dictionary.dictEntry";
                String msg = ResourceLocator.getInstance().getMessageResources().getMessage(locale, messageKey);
                error = new ActionError("errors.FrozenRecord", msg, null);
                //Now disallow further edits RECORD_FROZEN_EDIT_DISABLED_KEY
                //in this case User needs to Exit and come back to refresh form
                //for further updates (this is to restore isDirty() functionality
                //that relies on defaultValues of form
                // --this is needed to determine whether frozen check is required
                request.setAttribute(RECORD_FROZEN_EDIT_DISABLED_KEY, "true");
            } else {
                error = new ActionError("errors.UpdateException", null, null);
            }
        }

        errors.add(ActionMessages.GLOBAL_MESSAGE, error);
        saveErrors(request, errors);
        request.setAttribute(Globals.ERROR_KEY, errors);
        //bugzilla 1485: allow change and try updating again (enable save button)
        //request.setAttribute(IActionConstants.ALLOW_EDITS_KEY, "false");
        // disable previous and next
        request.setAttribute(PREVIOUS_DISABLED, "true");
        request.setAttribute(NEXT_DISABLED, "true");
        forward = FWD_FAIL;

    } finally {
        HibernateUtil.closeSession();
    }
    if (forward.equals(FWD_FAIL))
        return mapping.findForward(forward);

    // initialize the form
    dynaForm.initialize(mapping);
    // repopulate the form from valueholder
    PropertyUtils.copyProperties(dynaForm, dictionary);

    if ("true".equalsIgnoreCase(request.getParameter("close"))) {
        forward = FWD_CLOSE;
    }

    if (dictionary.getId() != null && !dictionary.getId().equals("0")) {
        request.setAttribute(ID, dictionary.getId());

    }

    //bugzilla 1400
    if (isNew)
        forward = FWD_SUCCESS_INSERT;
    //bugzilla 1467 added direction for redirect to NextPreviousAction
    return getForward(mapping.findForward(forward), id, start, direction);

}

From source file:us.mn.state.health.lims.dictionary.daoimpl.DictionaryDAOImpl.java

public void getData(Dictionary dictionary) throws LIMSRuntimeException {
    try {/*from   w  w w  . j  a v a2  s .  co m*/
        Dictionary d = (Dictionary) HibernateUtil.getSession().get(Dictionary.class, dictionary.getId());
        HibernateUtil.getSession().flush();
        HibernateUtil.getSession().clear();
        if (d != null) {
            PropertyUtils.copyProperties(dictionary, d);
        } else {
            dictionary.setId(null);
        }
    } catch (Exception e) {
        // bugzilla 2154
        LogEvent.logError("DictionaryDAOImpl", "getData()", e.toString());
        throw new LIMSRuntimeException("Error in Dictionary getData()", e);
    }
}

From source file:us.mn.state.health.lims.dictionarycategory.action.DictionaryCategoryAction.java

protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new DictionaryCategory.
    // If there is a parameter present, we should bring up an existing
    // DictionaryCategory to edit.

    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;

    // initialize the form
    dynaForm.initialize(mapping);//  w  w w .ja v  a  2  s  . c  o m

    DictionaryCategory dictionaryCategory = new DictionaryCategory();
    //System.out.println("I am in DictionaryCategoryAction and this is id " + id);
    if ((id != null) && (!"0".equals(id))) { // this is an existing
        // dictionaryCategory

        dictionaryCategory.setId(id);
        DictionaryCategoryDAO dictionaryCategoryDAO = new DictionaryCategoryDAOImpl();
        dictionaryCategoryDAO.getData(dictionaryCategory);

        isNew = false; // this is to set correct page title

        // do we need to enable next or previous?
        List dictionaryCategorys = dictionaryCategoryDAO
                .getNextDictionaryCategoryRecord(dictionaryCategory.getId());
        if (dictionaryCategorys.size() > 0) {
            // enable next button
            request.setAttribute(NEXT_DISABLED, "false");
        }
        dictionaryCategorys = dictionaryCategoryDAO
                .getPreviousDictionaryCategoryRecord(dictionaryCategory.getId());
        if (dictionaryCategorys.size() > 0) {
            // enable next button
            request.setAttribute(PREVIOUS_DISABLED, "false");
        }
        // end of logic to enable next or previous button

    } else { // this is a new dictionaryCategory

        isNew = true; // this is to set correct page title

    }

    if (dictionaryCategory.getId() != null && !dictionaryCategory.getId().equals("0")) {
        request.setAttribute(ID, dictionaryCategory.getId());
    }

    // populate form from valueholder
    PropertyUtils.copyProperties(form, dictionaryCategory);

    //System.out.println("I am in DictionaryCategoryAction this is forward " + forward);
    return mapping.findForward(forward);
}

From source file:us.mn.state.health.lims.dictionarycategory.action.DictionaryCategoryUpdateAction.java

protected ActionForward performAction(ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response) throws Exception {
    // The first job is to determine if we are coming to this action with an
    // ID parameter in the request. If there is no parameter, we are
    // creating a new DictionaryCategory.
    // If there is a parameter present, we should bring up an existing
    // DictionaryCategory to edit.
    String forward = FWD_SUCCESS;
    request.setAttribute(ALLOW_EDITS_KEY, "true");
    request.setAttribute(PREVIOUS_DISABLED, "false");
    request.setAttribute(NEXT_DISABLED, "false");

    String id = request.getParameter(ID);

    if (StringUtil.isNullorNill(id) || "0".equals(id)) {
        isNew = true;/*from   w w w.  ja  v a2s . c  o m*/
    } else {
        isNew = false;
    }

    BaseActionForm dynaForm = (BaseActionForm) form;

    // server-side validation (validation.xml)
    ActionMessages errors = dynaForm.validate(mapping, request);
    if (errors != null && errors.size() > 0) {
        saveErrors(request, errors);
        // since we forward to jsp - not Action we don't need to repopulate
        // the lists here
        return mapping.findForward(FWD_FAIL);
    }

    String start = (String) request.getParameter("startingRecNo");
    String direction = (String) request.getParameter("direction");

    DictionaryCategory dictionaryCategory = new DictionaryCategory();
    //get sysUserId from login module
    UserSessionData usd = (UserSessionData) request.getSession().getAttribute(USER_SESSION_DATA);
    String sysUserId = String.valueOf(usd.getSystemUserId());
    dictionaryCategory.setSysUserId(sysUserId);
    org.hibernate.Transaction tx = HibernateUtil.getSession().beginTransaction();

    // populate valueholder from form
    PropertyUtils.copyProperties(dictionaryCategory, dynaForm);

    try {
        DictionaryCategoryDAO dictionaryCategoryDAO = new DictionaryCategoryDAOImpl();

        if (!isNew) {
            // UPDATE
            dictionaryCategoryDAO.updateData(dictionaryCategory);
        } else {
            // INSERT
            dictionaryCategoryDAO.insertData(dictionaryCategory);
        }
        tx.commit();
    } catch (LIMSRuntimeException lre) {
        //bugzilla 2154
        LogEvent.logError("DictionaryCategoryUpdateAction", "performAction()", lre.toString());
        tx.rollback();
        errors = new ActionMessages();
        ActionError error = null;
        if (lre.getException() instanceof org.hibernate.StaleObjectStateException) {
            // how can I get popup instead of struts error at the top of
            // page?
            // ActionMessages errors = dynaForm.validate(mapping, request);
            error = new ActionError("errors.OptimisticLockException", null, null);
        } else {
            //bugzilla 1386
            if (lre.getException() instanceof LIMSDuplicateRecordException) {
                java.util.Locale locale = (java.util.Locale) request.getSession()
                        .getAttribute("org.apache.struts.action.LOCALE");
                //bugzilla 2108 the error message was incorrect
                String messageKey = "dictionarycategory.categoryname";
                String msg = ResourceLocator.getInstance().getMessageResources().getMessage(locale, messageKey);
                error = new ActionError("errors.DuplicateRecord", msg, null);
            } else {
                error = new ActionError("errors.UpdateException", null, null);
            }
        }
        errors.add(ActionMessages.GLOBAL_MESSAGE, error);
        saveErrors(request, errors);
        request.setAttribute(Globals.ERROR_KEY, errors);
        //bugzilla 1485: allow change and try updating again (enable save button)
        //request.setAttribute(IActionConstants.ALLOW_EDITS_KEY, "false");
        request.setAttribute(PREVIOUS_DISABLED, "true");
        request.setAttribute(NEXT_DISABLED, "true");
        forward = FWD_FAIL;

    } finally {
        HibernateUtil.closeSession();
    }
    if (forward.equals(FWD_FAIL))
        return mapping.findForward(forward);

    // initialize the form
    dynaForm.initialize(mapping);
    // repopulate the form from valueholder
    PropertyUtils.copyProperties(dynaForm, dictionaryCategory);

    if ("true".equalsIgnoreCase(request.getParameter("close"))) {
        forward = FWD_CLOSE;
    }

    if (dictionaryCategory.getId() != null && !dictionaryCategory.getId().equals("0")) {
        request.setAttribute(ID, dictionaryCategory.getId());

    }
    //bugzilla 1400
    if (isNew)
        forward = FWD_SUCCESS_INSERT;
    //bugzilla 1467 added direction for redirect to NextPreviousAction
    return getForward(mapping.findForward(forward), id, start, direction);

}