it.eng.spagobi.behaviouralmodel.analyticaldriver.service.DetailParameterModule.java Source code

Java tutorial

Introduction

Here is the source code for it.eng.spagobi.behaviouralmodel.analyticaldriver.service.DetailParameterModule.java

Source

/* SpagoBI, the Open Source Business Intelligence suite
    
 * Copyright (C) 2012 Engineering Ingegneria Informatica S.p.A. - SpagoBI Competency Center
 * This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0, without the "Incompatible With Secondary Licenses" notice. 
 * If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package it.eng.spagobi.behaviouralmodel.analyticaldriver.service;

import it.eng.spago.base.RequestContainer;
import it.eng.spago.base.SessionContainer;
import it.eng.spago.base.SourceBean;
import it.eng.spago.base.SourceBeanException;
import it.eng.spago.dispatching.module.AbstractHttpModule;
import it.eng.spago.error.EMFErrorHandler;
import it.eng.spago.error.EMFErrorSeverity;
import it.eng.spago.error.EMFInternalError;
import it.eng.spago.error.EMFUserError;
import it.eng.spago.security.IEngUserProfile;
import it.eng.spago.validation.EMFValidationError;
import it.eng.spago.validation.coordinator.ValidationCoordinator;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.bo.Parameter;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.bo.ParameterUse;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.dao.IObjParuseDAO;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.dao.IParameterDAO;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.dao.IParameterUseDAO;
import it.eng.spagobi.commons.bo.Domain;
import it.eng.spagobi.commons.constants.AdmintoolsConstants;
import it.eng.spagobi.commons.constants.ObjectsTreeConstants;
import it.eng.spagobi.commons.constants.SpagoBIConstants;
import it.eng.spagobi.commons.dao.DAOFactory;
import it.eng.spagobi.commons.utilities.AuditLogUtilities;
import it.eng.spagobi.commons.utilities.SpagoBITracer;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;

import org.apache.commons.validator.GenericValidator;

/**
 * Implements a module which  handles all parameters management: has methods for parameters load 
 * detail, modify/insertion and deleting operations. The <code>service</code> method has  a 
 * switch for all these operations, differentiated the ones from the others by a <code>message</code> String.
 * 
 * @author sulis
 */
public class DetailParameterModule extends AbstractHttpModule {

    private String modalita = "";
    public final static String MODULE_PAGE = "DetailParameterPage";

    EMFErrorHandler errorHandler = null;

    SessionContainer session = null;
    private IEngUserProfile profile;

    /* (non-Javadoc)
     * @see it.eng.spago.dispatching.module.AbstractModule#init(it.eng.spago.base.SourceBean)
     */
    public void init(SourceBean config) {
    }

    /**
     * Reads the operation asked by the user and calls the insertion, modify, detail and
     * deletion methods.
     * 
     * @param request The Source Bean containing all request parameters
     * @param response The Source Bean containing all response parameters
     * 
     * @throws exception If an exception occurs
     * @throws Exception the exception
     */
    public void service(SourceBean request, SourceBean response) throws Exception {

        String message = (String) request.getAttribute("MESSAGEDET");
        SpagoBITracer.debug(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "service",
                "begin of detail Parameter modify/visualization service with message =" + message);
        Object lovLookup = request.getAttribute("loadLovLookup");
        Object lovForDefaultLookup = request.getAttribute("loadLovForDefaultLookup");

        RequestContainer reqCont = RequestContainer.getRequestContainer();
        session = reqCont.getSessionContainer();
        errorHandler = getErrorHandler();
        SessionContainer permanentSession = session.getPermanentContainer();
        profile = (IEngUserProfile) permanentSession.getAttribute(IEngUserProfile.ENG_USER_PROFILE);

        try {
            if (message == null) {
                EMFUserError userError = new EMFUserError(EMFErrorSeverity.ERROR, 101);
                SpagoBITracer.debug(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "service",
                        "The message parameter is null");
                throw userError;
            }
            if (lovLookup != null) {
                lookupForLovLoadHandler(request, message, response, Boolean.FALSE);
            } else if (lovForDefaultLookup != null) {
                lookupForLovLoadHandler(request, message, response, Boolean.TRUE);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.DETAIL_SELECT)) {
                String id = (String) request.getAttribute("id");
                getDetailParameter(id, response);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.DETAIL_MOD)) {
                modDetailParameter(request, AdmintoolsConstants.DETAIL_MOD, response);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.DETAIL_NEW)) {
                newDetailParameter(request, response);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.DETAIL_INS)) {
                modDetailParameter(request, AdmintoolsConstants.DETAIL_INS, response);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.DETAIL_DEL)) {
                delDetailParameter(request, AdmintoolsConstants.DETAIL_DEL, response);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.RETURN_FROM_LOOKUP)) {
                lookupReturnHandler(request, response);
            } else if (message.trim().equalsIgnoreCase(AdmintoolsConstants.RETURN_BACK_FROM_LOOKUP)) {
                lookupReturnBackHandler(request, response);
            } else if (message.trim().equalsIgnoreCase("EXIT_FROM_DETAIL")) {
                exitFromDetail(request, response);
            }

        } catch (EMFUserError eex) {
            errorHandler.addError(eex);
            return;
        } catch (Exception ex) {
            EMFInternalError internalError = new EMFInternalError(EMFErrorSeverity.ERROR, ex);
            errorHandler.addError(internalError);
            return;
        }
    }

    /**
     * Gets the detail of a parameter choosed by the user from the 
     * parameters list. It reaches the key from the request and asks to the DB all detail
     * parameter information, by calling the method <code>loadForDetailByParameterID</code>.
     *   
     * @param key The choosed engine id key
     * @param response The response Source Bean
     * @throws EMFUserError If an exception occurs
     */

    private void getDetailParameter(String key, SourceBean response) throws EMFUserError {
        try {
            Object exitLovLookupLoopFlag = session.getAttribute("exitLovLookupLoop");
            if (exitLovLookupLoopFlag != null) {
                Parameter parameter = (Parameter) session.getAttribute("LookupParameter");
                ParameterUse paruse = (ParameterUse) session.getAttribute("LookupParuse");
                String modality = (String) session.getAttribute("modality");
                prepareParameterDetailPage(response, parameter, paruse, paruse.getUseID().toString(), modality,
                        false, false);
                session.delAttribute("LookupParameter");
                session.delAttribute("LookupParUse");
                session.delAttribute("modality");
                session.delAttribute("exitLovLookupLoop");
            } else {
                this.modalita = AdmintoolsConstants.DETAIL_MOD;
                Parameter parameter = DAOFactory.getParameterDAO().loadForDetailByParameterID(new Integer(key));
                prepareParameterDetailPage(response, parameter, null, "", modalita, true, true);
            }
        } catch (Exception ex) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "getDetailParameter",
                    "Cannot fill response container", ex);
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * Fills the response SourceBean with the elements that will be displayed in the Parameter detail page: 
     * the Parameter itself and the required ParameterUse.
     * 
     * @param response The response SourceBean to be filled
     * @param parameter The Parameter to be displayed
     * @param paruse The ParameterUse to be displayed: if it is null the selected_paruse_idStr will be considered.
     * @param selected_paruse_idStr The id of the ParameterUse to be displayed.
     *          If it is blank or null the first ParameterUse will be diplayed but in case the Parameter 
     *          has no ParameterUse a new empty ParameterUse will be displayed.
     *          If it is "-1" a new empty ParameterUse will be displayed.
     * @param initialParameter Boolean: if true the Parameter to be visualized is the initial Parameter and 
     *          a clone will be put in session.
     * @param initialParameterUse Boolean: if true the ParameterUse to be visualized is the initial ParameterUse and 
     *          a clone will be put in session.
     * @param detail_mod The modality
     * @throws EMFUserError
     * @throws SourceBeanException 
     */
    private void prepareParameterDetailPage(SourceBean response, Parameter parameter, ParameterUse paruse,
            String selected_paruse_idStr, String modality, boolean initialParameter, boolean initialParameterUse)
            throws EMFUserError, SourceBeanException {
        loadValuesDomain(response);
        loadSelectionTypesDomain(response);

        List paruses = DAOFactory.getParameterUseDAO().loadParametersUseByParId(parameter.getId());
        response.setAttribute("parusesList", paruses);
        if (paruse == null) {
            if (selected_paruse_idStr == null || "".equals(selected_paruse_idStr)) {
                if (paruses == null || paruses.size() == 0) {
                    paruse = createNewParameterUse(parameter.getId());
                    selected_paruse_idStr = "-1";
                } else {
                    paruse = (ParameterUse) paruses.get(0);
                    selected_paruse_idStr = paruse.getUseID().toString();
                }
            } else if ("-1".equals(selected_paruse_idStr)) {
                paruse = createNewParameterUse(parameter.getId());
                selected_paruse_idStr = "-1";
            } else {
                int selected_paruse_id = Integer.parseInt(selected_paruse_idStr);
                Iterator it = paruses.iterator();
                while (it.hasNext()) {
                    paruse = (ParameterUse) it.next();
                    if (paruse.getUseID().equals(new Integer(selected_paruse_id)))
                        break;
                }
            }
        }
        response.setAttribute("modality", modality);
        response.setAttribute("parametersObj", parameter);
        response.setAttribute("selected_paruse_id", selected_paruse_idStr);
        response.setAttribute("modalitiesObj", paruse);

        if (initialParameter) {
            Parameter parameterClone = clone(parameter);
            session.setAttribute("initial_Parameter", parameterClone);
        }

        if (initialParameterUse) {
            ParameterUse paruseClone = clone(paruse);
            session.setAttribute("initial_ParameterUse", paruseClone);
        }

    }

    private Parameter clone(Parameter parameter) {

        if (parameter == null)
            return null;

        Parameter parameterClone = new Parameter();
        parameterClone.setId(parameter.getId());
        parameterClone.setLabel(parameter.getLabel());
        parameterClone.setChecks(parameter.getChecks());
        parameterClone.setName(parameter.getName());
        parameterClone.setModality(parameter.getModality());
        parameterClone.setDescription(parameter.getDescription());
        parameterClone.setLength(parameter.getLength());
        parameterClone.setMask(parameter.getMask());
        parameterClone.setModalityValue(parameter.getModalityValue());
        parameterClone.setType(parameter.getType());
        parameterClone.setTypeId(parameter.getTypeId());
        parameterClone.setIsTemporal(parameter.isTemporal());
        parameterClone.setIsFunctional(parameter.isFunctional());

        return parameterClone;
    }

    private ParameterUse clone(ParameterUse paruse) {

        if (paruse == null)
            return null;

        ParameterUse paruseClone = new ParameterUse();
        paruseClone.setUseID(paruse.getUseID());
        paruseClone.setId(paruse.getId());
        paruseClone.setLabel(paruse.getLabel());
        paruseClone.setName(paruse.getName());
        paruseClone.setDescription(paruse.getDescription());
        if (paruse.getIdLov() == null) {
            paruse.setIdLov(Integer.valueOf("-1"));
        }
        paruseClone.setIdLov(paruse.getIdLov());
        paruseClone.setManualInput(paruse.getManualInput());

        List checks = paruse.getAssociatedChecks();
        List checksClone = new ArrayList();
        Iterator itChecks = checks.iterator();
        while (itChecks.hasNext())
            checksClone.add(itChecks.next());
        paruseClone.setAssociatedChecks(checksClone);

        List roles = paruse.getAssociatedRoles();
        List rolesClone = new ArrayList();
        Iterator itRoles = roles.iterator();
        while (itRoles.hasNext())
            rolesClone.add(itRoles.next());
        paruseClone.setAssociatedRoles(rolesClone);

        return paruseClone;
    }

    private ParameterUse createNewParameterUse(Integer parId) {
        ParameterUse paruse = new ParameterUse();
        paruse.setId(parId);
        paruse.setUseID(new Integer(-1));
        paruse.setIdLov(new Integer(-1));
        paruse.setName("");
        paruse.setDescription("");
        paruse.setLabel("");
        paruse.setManualInput(new Integer(0));
        paruse.setSelectionType("COMBOBOX");
        List listRoles = new ArrayList();
        paruse.setAssociatedRoles(listRoles);
        List listChecks = new ArrayList();
        paruse.setAssociatedChecks(listChecks);
        return paruse;
    }

    /**
     * Inserts/Modifies the detail of a parameter according to the user request. 
     * When a parameter is modified, the <code>modifyParameter</code> method is called; when a new
     * parameter is added, the <code>insertParameter</code>method is called. These two cases are 
     * differentiated by the <code>mod</code> String input value 
     * 
     * @param request The request information contained in a SourceBean Object
     * @param mod A request string used to differentiate insert/modify operations
     * @param response The response SourceBean 
     * @throws EMFUserError If an exception occurs
     * @throws SourceBeanException If a SourceBean exception occurs
     */
    private void modDetailParameter(SourceBean request, String mod, SourceBean response)
            throws EMFUserError, SourceBeanException {

        HashMap<String, String> logParam = new HashMap();

        try {

            Parameter parameter = recoverParameterDetails(request, mod);
            logParam.put("Parameter_name", parameter.getName());
            logParam.put("Parameter_type", parameter.getType());
            logParam.put("Parameter_label", parameter.getLabel());

            String selectedParuseIdStr = null;
            if (mod.equalsIgnoreCase(ObjectsTreeConstants.DETAIL_MOD)) {
                String paruseIdStr = (String) request.getAttribute("useId");
                Integer paruseIdInt = new Integer(paruseIdStr);
                ParameterUse paruse = recoverParameterUseDetails(request, parameter.getId(), paruseIdInt);
                ;
                Object selectedParuseIdObj = request.getAttribute("selected_paruse_id");
                Object deleteParameterUse = request.getAttribute("deleteParameterUse");

                if (selectedParuseIdObj != null) {
                    // it is requested to view another ParameterUse than the one visible
                    int selectedParuseId = findParuseId(selectedParuseIdObj);
                    selectedParuseIdStr = new Integer(selectedParuseId).toString();
                    String saveParameterUse = (String) request.getAttribute("saveParameterUse");
                    if (saveParameterUse != null && saveParameterUse.equalsIgnoreCase("yes")) {
                        // it is requested to save the visible ParameterUse
                        ValidationCoordinator.validate("PAGE", "ParameterUseValidation", this);
                        parameterUseLabelControl(paruse, mod);
                        verifyForDependencies(paruse);
                        // if there are some validation errors into the errorHandler does not write into DB
                        Collection errors = errorHandler.getErrors();
                        if (errors != null && errors.size() > 0) {
                            Iterator iterator = errors.iterator();
                            while (iterator.hasNext()) {
                                Object error = iterator.next();
                                if (error instanceof EMFValidationError) {
                                    AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.MODIFY",
                                            logParam, "KO");
                                    prepareParameterDetailPage(response, parameter, paruse, paruseIdStr,
                                            ObjectsTreeConstants.DETAIL_MOD, false, false);
                                    return;
                                }
                            }
                        }

                        IParameterUseDAO paruseDAO = DAOFactory.getParameterUseDAO();
                        SessionContainer permSess = getRequestContainer().getSessionContainer()
                                .getPermanentContainer();
                        IEngUserProfile profile = (IEngUserProfile) permSess
                                .getAttribute(IEngUserProfile.ENG_USER_PROFILE);
                        paruseDAO.setUserProfile(profile);
                        if (paruseIdInt.intValue() == -1) {
                            // it is requested to insert a new ParameterUse
                            paruseDAO.insertParameterUse(paruse);
                        } else {
                            // it is requested to modify a ParameterUse.
                            paruseDAO.modifyParameterUse(paruse);
                        }
                        prepareParameterDetailPage(response, parameter, null, selectedParuseIdStr,
                                ObjectsTreeConstants.DETAIL_MOD, false, true);
                        return;
                    } else {
                        prepareParameterDetailPage(response, parameter, null, selectedParuseIdStr,
                                ObjectsTreeConstants.DETAIL_MOD, false, true);
                        return;
                    }

                } else if (deleteParameterUse != null) {
                    // it is requested to delete the visible ParameterUse
                    int paruseId = findParuseId(deleteParameterUse);
                    checkForDependancies(new Integer(paruseId));
                    // if there are some errors into the errorHandler does not write into DB
                    Collection errors = errorHandler.getErrors();
                    if (errors != null && errors.size() > 0) {
                        Iterator iterator = errors.iterator();
                        while (iterator.hasNext()) {
                            Object error = iterator.next();
                            if (error instanceof EMFValidationError) {
                                prepareParameterDetailPage(response, parameter, paruse, paruseIdStr,
                                        ObjectsTreeConstants.DETAIL_MOD, false, false);

                                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.MODIFY", logParam,
                                        "KO");
                                return;
                            }
                        }
                    }

                    IParameterUseDAO paruseDAO = DAOFactory.getParameterUseDAO();
                    paruse = paruseDAO.loadByUseID(new Integer(paruseId));
                    paruseDAO.eraseParameterUse(paruse);
                    selectedParuseIdStr = "";
                    prepareParameterDetailPage(response, parameter, null, selectedParuseIdStr,
                            ObjectsTreeConstants.DETAIL_MOD, false, true);
                    return;

                } else {
                    // It is request to save the Parameter with also the visible ParameterUse
                    // If a new ParameterUse was visualized and no fields were inserted, the ParameterUse is not validated and saved
                    boolean paruseToBeSaved = true;
                    if (GenericValidator.isBlankOrNull(paruse.getLabel())
                            && GenericValidator.isBlankOrNull(paruse.getName())
                            && paruse.getUseID().intValue() == -1 && paruse.getIdLov().intValue() == -1
                            && paruse.getAssociatedChecks().size() == 0 && paruse.getAssociatedRoles().size() == 0)
                        paruseToBeSaved = false;
                    if (paruseToBeSaved) {
                        ValidationCoordinator.validate("PAGE", "ParameterUseValidation", this);
                        parameterUseLabelControl(paruse, mod);
                        verifyForDependencies(paruse);
                    }

                    ValidationCoordinator.validate("PAGE", "ParameterValidation", this);
                    parameterLabelControl(parameter, mod);

                    // if there are some validation errors into the errorHandler does not write into DB
                    Collection errors = errorHandler.getErrors();
                    if (errors != null && errors.size() > 0) {
                        Iterator iterator = errors.iterator();
                        while (iterator.hasNext()) {
                            Object error = iterator.next();
                            if (error instanceof EMFValidationError) {
                                prepareParameterDetailPage(response, parameter, paruse, paruseIdInt.toString(),
                                        ObjectsTreeConstants.DETAIL_MOD, false, false);

                                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.MODIFY", logParam,
                                        "KO");
                                return;
                            }
                        }
                    }

                    // it is requested to modify the Parameter
                    DAOFactory.getParameterDAO().modifyParameter(parameter);

                    if (paruseToBeSaved) {
                        IParameterUseDAO paruseDAO = DAOFactory.getParameterUseDAO();
                        SessionContainer permSess = getRequestContainer().getSessionContainer()
                                .getPermanentContainer();
                        IEngUserProfile profile = (IEngUserProfile) permSess
                                .getAttribute(IEngUserProfile.ENG_USER_PROFILE);
                        paruseDAO.setUserProfile(profile);
                        if (paruseIdInt.intValue() == -1) {
                            // it is requested to insert a new ParameterUse
                            paruseDAO.insertParameterUse(paruse);
                            // reload the paruse with the given label
                            paruse = reloadParuse(parameter.getId(), paruse.getLabel());
                        } else {
                            // it is requested to modify a ParameterUse
                            paruseDAO.modifyParameterUse(paruse);
                        }
                        selectedParuseIdStr = paruse.getUseID().toString();
                    } else
                        selectedParuseIdStr = "-1";
                }
                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.MODIFY", logParam, "OK");

                Object saveAndGoBack = request.getAttribute("saveAndGoBack");
                if (saveAndGoBack != null) {
                    // it is request to save the Parameter details and to go back
                    exitFromDetail(request, response);
                } else {
                    // it is requested to save and remain in the Parameter detail page
                    prepareParameterDetailPage(response, parameter, null, selectedParuseIdStr,
                            ObjectsTreeConstants.DETAIL_MOD, true, true);
                }

            } else {
                ValidationCoordinator.validate("PAGE", "ParameterValidation", this);
                parameterLabelControl(parameter, mod);
                // if there are some errors, exits without writing into DB
                selectedParuseIdStr = "-1";

                // if there are some validation errors into the errorHandler does not write into DB
                Collection errors = errorHandler.getErrors();
                if (errors != null && errors.size() > 0) {
                    Iterator iterator = errors.iterator();
                    while (iterator.hasNext()) {
                        Object error = iterator.next();
                        if (error instanceof EMFValidationError) {
                            prepareParameterDetailPage(response, parameter, null, selectedParuseIdStr,
                                    ObjectsTreeConstants.DETAIL_INS, false, false);

                            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.ADD", logParam, "KO");
                            return;
                        }
                    }
                }

                // inserts into DB the new Parameter
                SessionContainer permSess = getRequestContainer().getSessionContainer().getPermanentContainer();
                IEngUserProfile profile = (IEngUserProfile) permSess.getAttribute(IEngUserProfile.ENG_USER_PROFILE);
                IParameterDAO dao = DAOFactory.getParameterDAO();
                dao.setUserProfile(profile);
                dao.insertParameter(parameter);
                // reload the Parameter with the correct id
                parameter = reloadParameter(parameter.getLabel());

                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.ADD", logParam, "OK");

                Object saveAndGoBack = request.getAttribute("saveAndGoBack");
                if (saveAndGoBack != null) {
                    // it is request to save the Parameter details and to go back
                    exitFromDetail(request, response);
                } else {
                    // it is requested to save and remain in the Parameter detail page
                    response.setAttribute(SpagoBIConstants.PUBLISHER_NAME, "afterInsertionLoop");
                    response.setAttribute("id", parameter.getId().toString());
                }

            }

        } catch (Exception ex) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "modDetailParameter",
                    "Cannot fill response container", ex);
            HashMap params = new HashMap();
            params.put(AdmintoolsConstants.PAGE, ListParametersModule.MODULE_PAGE);
            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.ADD/MODIFY", null, "ERR");
            throw new EMFUserError(EMFErrorSeverity.ERROR, 1015, new Vector(), params);
        }

    }

    /**
     * Before modifing a ParameterUse (not inserting), this method must be invoked in order to verify that the ParameterUse
     * stored into db (to be modified as per the ParameterUse in input) has dependencies associated; if it is the case,
     * verifies that the associated Lov was not changed or that the selection type is not COMBOBOX.
     * In such cases adds the method a EMFValidationError into the error handler.
     * 
     * @param paruse The ParameterUse to verify
     * @throws EMFUserError 
     */
    private void verifyForDependencies(ParameterUse paruse) throws EMFUserError {
        Integer paruseIdInt = paruse.getUseID();
        if (paruseIdInt == null || paruseIdInt.intValue() == -1) {
            // it means that the ParameterUse in input must be inserted, not modified
            return;
        }
        IObjParuseDAO objParuseDAO = DAOFactory.getObjParuseDAO();
        IParameterUseDAO paruseDAO = DAOFactory.getParameterUseDAO();
        ParameterUse initialParuse = paruseDAO.loadByUseID(paruseIdInt);
        List documents = objParuseDAO.getDocumentLabelsListWithAssociatedDependencies(paruseIdInt);
        if (documents.size() > 0) {
            // there are some correlations 
            if (paruse.getManualInput().intValue() == 1
                    || paruse.getIdLov().intValue() != initialParuse.getIdLov().intValue()) {
                // the ParameterUse was changed to manual input or the lov id was changed
                HashMap params = new HashMap();
                params.put(AdmintoolsConstants.PAGE, "DetailParameterPage");
                Vector vector = new Vector();
                vector.add(documents.toString());
                EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "paruseLovId", "1060",
                        vector, params);
                errorHandler.addError(error);
            }
            //if (paruse.getManualInput().intValue() == 0 && "COMBOBOX".equalsIgnoreCase(paruse.getSelectionType())) {
            // the ParameterUse was associated to a ComboBox
            //   HashMap params = new HashMap();
            //   params.put(AdmintoolsConstants.PAGE, "DetailParameterPage");
            //   Vector vector = new Vector();
            //   vector.add(documents.toString());
            //   EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "paruseLovId", "1068", vector, params);
            //   errorHandler.addError(error);
            //}

        }
    }

    /**
     * Reload a ParameterUse from its Parameter id and its label.
     * 
     * @param parIdInt The Parameter id
     * @param label The ParameterUse label
     * @return The reloaded ParameterUse
     * @throws EMFInternalError 
     */
    private ParameterUse reloadParuse(Integer parIdInt, String label) throws EMFInternalError {
        if (parIdInt == null || parIdInt.intValue() < 0 || label == null || label.trim().equals(""))
            throw new EMFInternalError(EMFErrorSeverity.ERROR,
                    "Invalid input data for method relaodParuse in DetailParameterModule");
        ParameterUse paruse = null;
        try {
            IParameterUseDAO paruseDAO = DAOFactory.getParameterUseDAO();
            List paruses = paruseDAO.loadParametersUseByParId(parIdInt);
            Iterator it = paruses.iterator();
            while (it.hasNext()) {
                ParameterUse aParameterUse = (ParameterUse) it.next();
                if (aParameterUse.getLabel().equals(label)) {
                    paruse = aParameterUse;
                    break;
                }
            }
        } catch (EMFUserError e) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "relaodParuse",
                    "Cannot reload ParameterUse", e);
        }
        if (paruse == null) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "relaodParuse",
                    "ParameterUse with label '" + label + "' not found.");
            paruse = createNewParameterUse(parIdInt);
        }
        return paruse;
    }

    /**
     * Reload a Parameter from its label.
     * 
     * @param label The Parameter label
     * @return The reloaded Parameter
     * @throws EMFInternalError 
     */
    private Parameter reloadParameter(String label) throws EMFInternalError {
        if (label == null || label.trim().equals(""))
            throw new EMFInternalError(EMFErrorSeverity.ERROR,
                    "Invalid input data for method relaodParameter in DetailParameterModule");
        Parameter parameter = null;
        try {
            IParameterDAO parareterDAO = DAOFactory.getParameterDAO();
            List parameters = parareterDAO.loadAllParameters();
            Iterator it = parameters.iterator();
            while (it.hasNext()) {
                Parameter aParameter = (Parameter) it.next();
                if (aParameter.getLabel().equals(label)) {
                    parameter = aParameter;
                    break;
                }
            }
        } catch (EMFUserError e) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "reloadParameter",
                    "Cannot reload Parameter", e);
        }
        if (parameter == null) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "reloadParameter",
                    "Parameter with label '" + label + "' not found.");
            parameter = createNewParameter();
        }
        return parameter;
    }

    private ParameterUse recoverParameterUseDetails(SourceBean request, Integer parIdInt, Integer paruseIdInt)
            throws NumberFormatException, EMFUserError {

        ParameterUse paruse = new ParameterUse();
        paruse.setUseID(paruseIdInt);
        paruse.setId(parIdInt);

        List inRequestChecksList = request.getAttributeAsList("paruseCheckId");
        List toLoadInParUseCheckList = new ArrayList();
        String idTmpStr = null;
        for (int i = 0; i < inRequestChecksList.size(); i++) {
            idTmpStr = (String) inRequestChecksList.get(i);
            toLoadInParUseCheckList.add(DAOFactory.getChecksDAO().loadCheckByID(new Integer(idTmpStr)));
        }

        List inRequestRoleList = request.getAttributeAsList("paruseExtRoleId");
        List roles = new ArrayList();
        for (int i = 0; i < inRequestRoleList.size(); i++) {
            String idRoleStr = (String) inRequestRoleList.get(i);
            roles.add(DAOFactory.getRoleDAO().loadByID(new Integer(idRoleStr)));
        }

        String idLovStr = (String) request.getAttribute("paruseLovId");
        if (idLovStr == null || idLovStr.trim().equals(""))
            idLovStr = "-1";
        paruse.setIdLov(Integer.valueOf(idLovStr));

        String defaultMethod = (String) request.getAttribute("defaultMethod");
        if (defaultMethod == null || defaultMethod.trim().equalsIgnoreCase("none")) {
            paruse.setIdLovForDefault(-1);
            paruse.setDefaultFormula(null);
        } else if (defaultMethod.trim().equalsIgnoreCase("lov")) {
            String idLovForDefaultStr = (String) request.getAttribute("paruseLovForDefaultId");
            if (idLovForDefaultStr == null || idLovForDefaultStr.trim().equals(""))
                idLovForDefaultStr = "-1";
            paruse.setIdLovForDefault(Integer.valueOf(idLovForDefaultStr));
            paruse.setDefaultFormula(null);
        } else {
            paruse.setIdLovForDefault(-1);
            String formulaForDefault = (String) request.getAttribute("formulaForDefault");
            paruse.setDefaultFormula(formulaForDefault);
        }

        String description = (String) request.getAttribute("paruseDescription");
        String name = (String) request.getAttribute("paruseName");
        String label = (String) request.getAttribute("paruseLabel");
        String selectionType = (String) request.getAttribute("selectionType");
        String manInFlag = (String) request.getAttribute("valueSelection");
        String maximizerEnabledFlag = (String) request.getAttribute("maximizerEnabled");
        paruse.setName(name);
        paruse.setDescription(description);
        paruse.setLabel(label);

        if (manInFlag.equals("man_in")) {
            paruse.setManualInput(Integer.valueOf("1"));
            paruse.setSelectionType(null);
            paruse.setMultivalue(false);
            paruse.setMaximizerEnabled(Boolean.valueOf(maximizerEnabledFlag));
        } else {
            paruse.setManualInput(Integer.valueOf("0"));
            paruse.setSelectionType(selectionType);
            if (selectionType != null
                    && (selectionType.equalsIgnoreCase("LIST") || selectionType.equalsIgnoreCase("COMBOBOX")))
                paruse.setMultivalue(false);
            else
                paruse.setMultivalue(true);
            paruse.setMaximizerEnabled(false);
        }

        paruse.setAssociatedRoles(roles);
        paruse.setAssociatedChecks(toLoadInParUseCheckList);
        return paruse;
    }

    /**
     * Find paruse id.
     * 
     * @param paruseIdObj the paruse id obj
     * 
     * @return the int
     */
    public int findParuseId(Object paruseIdObj) {
        String paruseIdStr = "";
        if (paruseIdObj instanceof String) {
            paruseIdStr = (String) paruseIdObj;
        } else if (paruseIdObj instanceof List) {
            List paruseIdList = (List) paruseIdObj;
            Iterator it = paruseIdList.iterator();
            while (it.hasNext()) {
                Object item = it.next();
                if (item instanceof SourceBean)
                    continue;
                if (item instanceof String)
                    paruseIdStr = (String) item;
            }
        }
        int paruseId = Integer.parseInt(paruseIdStr);
        return paruseId;
    }

    private Parameter recoverParameterDetails(SourceBean request, String mod) {

        String idStr = (String) request.getAttribute("id");
        Integer id = new Integer(idStr);
        String description = (String) request.getAttribute("description");
        String lengthStr = (String) request.getAttribute("length");
        Integer length = new Integer(lengthStr);
        String label = (String) request.getAttribute("label");
        String mask = (String) request.getAttribute("mask");
        String modality = (String) request.getAttribute("modality");
        String name = (String) request.getAttribute("name");
        String isFunctional = (String) request.getAttribute("isFunctional");
        String isTemporal = (String) request.getAttribute("isTemporal");

        Parameter parameter = new Parameter();
        parameter.setId(id);
        parameter.setDescription(description);
        parameter.setLength(length);
        parameter.setLabel(label);
        if (modality != null) {
            StringTokenizer st;
            st = new StringTokenizer(modality, ",", false);
            String par_type_cd = st.nextToken();
            String par_type_id = st.nextToken();
            parameter.setType(par_type_cd);
            parameter.setTypeId(new Integer(par_type_id));
        }
        parameter.setMask(mask);
        parameter.setModality(modality);
        parameter.setName(name);
        if (isFunctional != null)
            parameter.setIsFunctional(true);
        else
            parameter.setIsFunctional(false);
        if (isTemporal != null)
            parameter.setIsTemporal(true);
        else
            parameter.setIsTemporal(false);
        return parameter;
    }

    /**
     * Deletes a parameter choosed by user from the parameters list.
     * 
     * @param request   The request SourceBean
     * @param mod   A request string used to differentiate delete operation
     * @param response   The response SourceBean
     * @throws EMFUserError   If an Exception occurs
     * @throws SourceBeanException If a SourceBean Exception occurs
     */

    private void delDetailParameter(SourceBean request, String mod, SourceBean response)
            throws EMFUserError, SourceBeanException {
        HashMap<String, String> logParam = new HashMap();

        try {
            IParameterDAO parDAO = DAOFactory.getParameterDAO();
            IParameterUseDAO parUseDAO = DAOFactory.getParameterUseDAO();
            String id = (String) request.getAttribute("id");
            //controls if the parameter has any object associated
            List objectsLabels = DAOFactory.getBIObjectParameterDAO()
                    .getDocumentLabelsListUsingParameter(new Integer(id));
            if (objectsLabels != null && objectsLabels.size() > 0) {
                HashMap params = new HashMap();
                params.put(AdmintoolsConstants.PAGE, ListParametersModule.MODULE_PAGE);
                Vector v = new Vector();
                v.add(objectsLabels.toString());
                EMFUserError error = new EMFUserError(EMFErrorSeverity.ERROR, 1017, v, params);
                errorHandler.addError(error);
                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.DELETE", logParam, "KO");
                return;
            }

            //controls if the parameter has any use associated
            boolean hasUse = DAOFactory.getParameterUseDAO().hasParUseModes(id);
            if (hasUse) {
                parUseDAO.eraseParameterUseByParId(Integer.valueOf(id));
            }
            //end of control

            Parameter parameter = parDAO.loadForDetailByParameterID(new Integer(id));
            logParam.put("Parameter_name", parameter.getName());
            logParam.put("Parameter_type", parameter.getType());
            parDAO.eraseParameter(parameter);

        } catch (Exception ex) {
            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.DELETE", logParam, "ERR");
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "delDetailParameter",
                    "Cannot fill response container", ex);
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
        response.setAttribute("loopback", "true");
        AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.DELETE", logParam, "OK");

    }

    /**
     * Instantiates a new <code>Parameter<code> object when a new parameter insertion is required, in order
     * to prepare the page for the insertion.
     * 
     * @param response The response SourceBean
     * @throws EMFUserError If an Exception occurred
     */

    private void newDetailParameter(SourceBean request, SourceBean response) throws EMFUserError {
        try {
            this.modalita = AdmintoolsConstants.DETAIL_INS;
            response.setAttribute("modality", modalita);
            Parameter parameter = createNewParameter();
            List list = DAOFactory.getDomainDAO().loadListDomainsByType("PAR_TYPE");
            response.setAttribute("listObj", list);
            if (list.size() > 0) {
                Domain domain = (Domain) list.get(0);
                parameter.setType(domain.getValueCd());
                parameter.setTypeId(domain.getValueId());
            }
            response.setAttribute("parametersObj", parameter);
        } catch (Exception ex) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "newDetailParameter",
                    "Cannot prepare page for the insertion", ex);
            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DRIVER.ADD", null, "ERR");
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * Create a new empty Parameter
     * 
     * @return the new Parameter
     */
    private Parameter createNewParameter() {
        Parameter parameter = new Parameter();
        parameter.setId(new Integer(-1));
        parameter.setDescription("");
        parameter.setLength(new Integer(0));
        parameter.setLabel("");
        parameter.setType("");
        parameter.setMask("");
        parameter.setTypeId(new Integer(0));
        parameter.setName("");
        parameter.setIsFunctional(true);
        parameter.setIsTemporal(false);
        return parameter;
    }

    /**
     * Loads all possible domain values which can be choosed for a parameter. Each of them
     * is stored in a list of <code>Domain</code> objects put into response.
     * When the isertion/modify parameters page is loaded, the user selects a domain value for the
     * parameter by the Data Selection CD Check Button.
     * 
     * @param response The response SourceBean
     * @throws EMFUserError If an Exception occurred
     */
    private void loadSelectionTypesDomain(SourceBean response) throws EMFUserError {
        try {
            List list = DAOFactory.getDomainDAO().loadListDomainsByType("SELECTION_TYPE");
            response.setAttribute("listSelType", list);
        } catch (Exception ex) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule",
                    "loadSelectionTypesDomain", "Cannot prepare page for the insertion", ex);
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * Loads all possible domain values which can be choosed for a parameter. Each of them
     * is stored in a list of <code>Domain</code> objects put into response.
     * When the isertion/modify parameters page is loaded, the user selects a domain value for the
     * parameter by the Data Selection CD Check Button.
     * 
     * @param response The response SourceBean
     * @throws EMFUserError If an Exception occurred
     */
    private void loadValuesDomain(SourceBean response) throws EMFUserError {
        try {
            List list = DAOFactory.getDomainDAO().loadListDomainsByType("PAR_TYPE");
            response.setAttribute("listObj", list);
        } catch (Exception ex) {
            SpagoBITracer.major(AdmintoolsConstants.NAME_MODULE, "DetailParameterModule", "loadValuesDomain",
                    "Cannot prepare page for the insertion", ex);
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * Controls if the name of the Parameter is already in use.
     * 
     * @param parameter The Parameter to check
     * @param operation Defines if the operation is of insertion or modify
     * @throws EMFUserError If any Exception occurred
     */
    private void parameterLabelControl(Parameter parameter, String operation) throws EMFUserError {
        String labelToCheck = parameter.getLabel();
        List allparameters = DAOFactory.getParameterDAO().loadAllParameters();
        if (operation.equalsIgnoreCase("INSERT")) {
            Iterator i = allparameters.iterator();
            while (i.hasNext()) {
                Parameter aParameter = (Parameter) i.next();
                String label = aParameter.getLabel();
                if (label.equals(labelToCheck)) {
                    HashMap params = new HashMap();
                    params.put(AdmintoolsConstants.PAGE, ListParametersModule.MODULE_PAGE);
                    EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "label", "1031",
                            new Vector(), params);
                    errorHandler.addError(error);
                }
            }
        } else {
            Integer currentId = parameter.getId();
            Iterator i = allparameters.iterator();
            while (i.hasNext()) {
                Parameter aParameter = (Parameter) i.next();
                String label = aParameter.getLabel();
                Integer id = aParameter.getId();
                if (label.equals(labelToCheck) && (!id.equals(currentId))) {
                    HashMap params = new HashMap();
                    params.put(AdmintoolsConstants.PAGE, ListParametersModule.MODULE_PAGE);
                    EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "label", "1031",
                            new Vector(), params);
                    errorHandler.addError(error);
                }
            }
        }
    }

    /**
     * Controls if the name of the ParameterUse is already in use.
     * 
     * @param paruse The paruse to check
     * @param operation Defines if the operation is of insertion or modify
     * @throws EMFUserError If any Exception occurred
     */
    private void parameterUseLabelControl(ParameterUse paruse, String operation) throws EMFUserError {

        Integer parId = paruse.getId();
        String labelToCheck = paruse.getLabel();
        List allParametersUse = DAOFactory.getParameterUseDAO().loadParametersUseByParId(parId);
        //cannot have two ParametersUse with the same label and the same par_id
        if (operation.equalsIgnoreCase("INSERT")) {
            Iterator i = allParametersUse.iterator();
            while (i.hasNext()) {
                ParameterUse aParameterUse = (ParameterUse) i.next();
                String label = aParameterUse.getLabel();
                if (label.equals(labelToCheck)) {
                    HashMap params = new HashMap();
                    params.put(AdmintoolsConstants.PAGE, ListParametersModule.MODULE_PAGE);
                    params.put(AdmintoolsConstants.ID_DOMAIN, parId);
                    EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "paruseLabel", "1025",
                            new Vector(), params);
                    errorHandler.addError(error);
                }
            }
        } else {
            Integer currentUseId = paruse.getUseID();
            Iterator i = allParametersUse.iterator();
            while (i.hasNext()) {
                ParameterUse aParameterUse = (ParameterUse) i.next();
                String label = aParameterUse.getLabel();
                Integer useId = aParameterUse.getUseID();

                if (label.equals(labelToCheck) && (!useId.equals(currentUseId))) {
                    HashMap params = new HashMap();
                    params.put(AdmintoolsConstants.PAGE, ListParametersModule.MODULE_PAGE);
                    params.put(AdmintoolsConstants.ID_DOMAIN, parId);
                    EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "paruseLabel", "1025",
                            new Vector(), params);
                    errorHandler.addError(error);
                }
            }
        }
    }

    private void lookupForLovLoadHandler(SourceBean request, String modality, SourceBean response,
            Boolean isForDefault) throws EMFUserError, SourceBeanException {

        RequestContainer requestContainer = this.getRequestContainer();
        SessionContainer session = requestContainer.getSessionContainer();
        Parameter parameter = recoverParameterDetails(request, modality);
        String paruseIdStr = (String) request.getAttribute("useId");
        ParameterUse paruse = recoverParameterUseDetails(request, parameter.getId(), new Integer(paruseIdStr));
        session.setAttribute("LookupParameter", parameter);
        session.setAttribute("LookupParuse", paruse);
        session.setAttribute("modality", modality);
        session.setAttribute("isForDefault", isForDefault);
        response.setAttribute("lookupLoopback", "true");

    }

    private void lookupReturnHandler(SourceBean request, SourceBean response)
            throws SourceBeanException, EMFUserError {
        ParameterUse paruse = (ParameterUse) session.getAttribute("LookupParuse");
        Boolean isForDefault = (Boolean) session.getAttribute("isForDefault");
        String selectedLovId = (String) request.getAttribute("ID");
        if (isForDefault) {
            paruse.setIdLovForDefault(Integer.valueOf(selectedLovId));
        } else {
            paruse.setIdLov(Integer.valueOf(selectedLovId));
        }
        session.delAttribute("isForDefault");
        session.setAttribute("exitLovLookupLoop", Boolean.TRUE);
        response.setAttribute(SpagoBIConstants.PUBLISHER_NAME, "exitLovLookupLoop");
    }

    private void lookupReturnBackHandler(SourceBean request, SourceBean response)
            throws SourceBeanException, EMFUserError {
        session.delAttribute("isForDefault");
        session.setAttribute("exitLovLookupLoop", Boolean.TRUE);
        response.setAttribute(SpagoBIConstants.PUBLISHER_NAME, "exitLovLookupLoop");
    }

    /**
     * Clean the SessionContainer from no more useful objects.
     * 
     * @param request The request SourceBean
     * @param response The response SourceBean
     * @throws SourceBeanException
     */
    private void exitFromDetail(SourceBean request, SourceBean response) throws SourceBeanException {
        session.delAttribute("initial_Parameter");
        session.delAttribute("initial_ParameterUse");
        session.delAttribute("isForDefault");
        response.setAttribute("loopback", "true");
    }

    /**
     * Controls if there are some BIObjectParameter objects that depend by the ParameterUse object
     * at input, given its id.
     * 
     * @param objParFatherId The id of the BIObjectParameter object to check
     * @throws EMFUserError
     */
    private void checkForDependancies(Integer paruseId) throws EMFUserError {

        IObjParuseDAO objParuseDAO = DAOFactory.getObjParuseDAO();
        List objectsLabels = objParuseDAO.getDocumentLabelsListWithAssociatedDependencies(paruseId);
        if (objectsLabels != null && objectsLabels.size() > 0) {
            HashMap params = new HashMap();
            params.put(AdmintoolsConstants.PAGE, DetailParameterModule.MODULE_PAGE);
            Vector v = new Vector();
            v.add(objectsLabels.toString());
            EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, "", "1057", v, params);
            errorHandler.addError(error);
        }

    }

}