it.eng.spagobi.analiticalmodel.document.service.DetailBIObjectModule.java Source code

Java tutorial

Introduction

Here is the source code for it.eng.spagobi.analiticalmodel.document.service.DetailBIObjectModule.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.analiticalmodel.document.service;

import it.eng.spago.base.RequestContainer;
import it.eng.spago.base.ResponseContainer;
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.dispatching.module.AbstractModule;
import it.eng.spago.error.EMFErrorCategory;
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.analiticalmodel.document.bo.BIObject;
import it.eng.spagobi.analiticalmodel.document.bo.ObjTemplate;
import it.eng.spagobi.analiticalmodel.document.dao.IBIObjectDAO;
import it.eng.spagobi.analiticalmodel.document.utils.DetBIObjModHelper;
import it.eng.spagobi.analiticalmodel.functionalitytree.bo.LowFunctionality;
import it.eng.spagobi.analiticalmodel.functionalitytree.service.TreeObjectsModule;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.bo.BIObjectParameter;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.bo.Parameter;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.dao.IBIObjectParameterDAO;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.dao.IObjParuseDAO;
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.services.AbstractBasicCheckListModule;
import it.eng.spagobi.commons.utilities.AuditLogUtilities;
import it.eng.spagobi.commons.utilities.ChannelUtilities;
import it.eng.spagobi.commons.utilities.ObjectsAccessVerifier;
import it.eng.spagobi.commons.utilities.SessionMonitor;
import it.eng.spagobi.commons.utilities.indexing.LuceneIndexer;

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

import org.apache.commons.validator.GenericValidator;
import org.apache.log4j.Logger;

/**
 * @author Antonella Giachino (antonella.giachino@eng.it)
 *
 */

/**
 * Implements a module which  handles all BI objects management: 
 * has methods for BI Objects 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.
 */

public class DetailBIObjectModule extends AbstractHttpModule {
    static private Logger logger = Logger.getLogger(DetailBIObjectModule.class);
    public final static String MODULE_PAGE = "DetailBIObjectPage";
    public final static String NAME_ATTR_OBJECT = "BIObjects";
    public final static String NAME_ATTR_LIST_OBJ_TYPES = "types";
    public final static String NAME_ATTR_LIST_ENGINES = "engines";
    public final static String NAME_ATTR_LIST_STATES = "states";
    public final static String NAME_ATTR_OBJECT_PAR = "OBJECT_PAR";
    public final static String NAME_ATTR_LIST_DS = "datasource";
    public final static String NAME_ATTR_LIST_LANGUAGES = "languages";
    public final static String NAME_ATTR_LIST_DATASET = "datasets";
    public final static String LOADING_PARS_DC = "loadingParsDC";

    //private String actor = null;
    private EMFErrorHandler errorHandler = null;
    private IEngUserProfile profile;
    private String initialPath = null;
    private DetBIObjModHelper helper = null;
    private IBIObjectDAO biobjDAO = null;
    SessionContainer session = null;

    /* (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 {
        // RECOVER REQUEST CONTAINER, SESSION CONTAINER, USER PROFILE AND ERROR HANDLER
        RequestContainer requestContainer = this.getRequestContainer();
        ResponseContainer responseContainer = this.getResponseContainer();
        session = requestContainer.getSessionContainer();
        SessionContainer permanentSession = session.getPermanentContainer();
        profile = (IEngUserProfile) permanentSession.getAttribute(IEngUserProfile.ENG_USER_PROFILE);
        biobjDAO = DAOFactory.getBIObjectDAO();
        biobjDAO.setUserProfile(profile);
        errorHandler = getErrorHandler();

        // CREATE THE HELPER
        helper = new DetBIObjModHelper(requestContainer, responseContainer, request, response);

        // GET THE EXECUTION MODALITY AND THE INITIAL PATH  
        String modality = (String) ChannelUtilities.getPreferenceValue(this.getRequestContainer(),
                BIObjectsModule.MODALITY, "");
        initialPath = null;
        if (modality != null && modality.equalsIgnoreCase(BIObjectsModule.FILTER_TREE)) {
            initialPath = (String) ChannelUtilities.getPreferenceValue(this.getRequestContainer(),
                    TreeObjectsModule.PATH_SUBTREE, "");
        }
        // GET MESSAGE FROM REQUEST   
        String message = (String) request.getAttribute("MESSAGEDET");
        logger.debug(" MESSAGEDET = " + message);

        // get attribute from session
        String moduleName = (String) session.getAttribute("RETURN_FROM_MODULE");
        if (moduleName != null) { // TODO clear session with a proper method of returning module
            if (moduleName.equalsIgnoreCase("ListLookupParametersModule")) {
                String returnState = (String) session.getAttribute("RETURN_STATUS");
                if (returnState.equalsIgnoreCase("SELECT"))
                    lookupReturnHandler(request, response);
                else if (returnState.equalsIgnoreCase("DELETE")) {
                    logger.debug("Return to list from DELETE parameter");
                    return;
                } else
                    lookupReturnBackHandler(request, response);
                session.delAttribute("RETURN_STATUS");
                session.delAttribute("RETURN_FROM_MODULE");
                return; // force refresh
                // TODO force refresh in a standard way with a generic methods
            } else if (moduleName.equalsIgnoreCase("CheckLinksModule")) {
                SessionMonitor.printSession(session);
                AbstractBasicCheckListModule.clearSession(session, moduleName);
                SessionMonitor.printSession(session);
            } else if (moduleName.equalsIgnoreCase("ListObjParuseModule")) {
                lookupReturnBackHandler(request, response);
                session.delAttribute("RETURN_FROM_MODULE");
                return;
            }
        }

        // these attributes, if defined, represent events triggered by one 
        // of the submit buttons present in the main form 
        boolean parametersLookupButtonClicked = request.getAttribute("loadParametersLookup") != null;
        boolean linksLookupButtonClicked = request.getAttribute("loadLinksLookup") != null;
        boolean dependenciesButtonClicked = request.getAttribute("goToDependenciesPage") != null;

        try {
            if (message == null) {
                EMFUserError userError = new EMFUserError(EMFErrorSeverity.ERROR, 101);
                logger.debug("The message parameter is null");
                throw userError;
            }

            // check for events first...
            if (parametersLookupButtonClicked) {
                logger.debug("loadParametersLookup != null");
                startParametersLookupHandler(request, message, response);
            } else if (linksLookupButtonClicked) {
                logger.debug("editSubreorts != null");
                startLinksLookupHandler(request, message, response);
            } else if (dependenciesButtonClicked) {
                logger.debug("goToDependenciesPage != null");
                startDependenciesLookupHandler(request, message, response);
            } // ...then check for other service request types          
            else if (message.trim().equalsIgnoreCase(ObjectsTreeConstants.DETAIL_SELECT)) {
                getDetailObject(request, response);
            } else if (message.trim().equalsIgnoreCase(ObjectsTreeConstants.DETAIL_MOD)) {
                modBIObject(request, ObjectsTreeConstants.DETAIL_MOD, response);
            } else if (message.trim().equalsIgnoreCase(ObjectsTreeConstants.DETAIL_NEW)) {
                newBIObject(request, response);
            } else if (message.trim().equalsIgnoreCase(ObjectsTreeConstants.DETAIL_INS)) {
                modBIObject(request, ObjectsTreeConstants.DETAIL_INS, response);
            } else if (message.trim().equalsIgnoreCase(ObjectsTreeConstants.DETAIL_DEL)) {
                //delDetailObject(request, ObjectsTreeConstants.DETAIL_DEL, response);
                delDetailObject(request, ObjectsTreeConstants.DETAIL_DEL, response, profile);
            } else if (message.trim().equalsIgnoreCase(SpagoBIConstants.ERASE_VERSION)) {
                eraseVersion(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;
        }
    }

    private void setLoopbackContext(SourceBean request, String message) throws EMFUserError {
        BIObject obj = null;
        try {
            obj = helper.recoverBIObjectDetails(message);
        } catch (Exception e) {
            logger.error("Exception", e);
        }
        BIObjectParameter biObjPar = helper.recoverBIObjectParameterDetails(obj.getId());
        session.setAttribute("LookupBIObject", obj);
        session.setAttribute("LookupBIObjectParameter", biObjPar);
        session.setAttribute("modality", message);
        session.setAttribute("modalityBkp", message);
    }

    private void delateLoopbackContext() {
        session.delAttribute("LookupBIObject");
        session.delAttribute("LookupBIObjectParameter");
        session.delAttribute("modality");
        session.delAttribute("modalityBkp");
    }

    private Integer getBIObjectIdFromLoopbackContext() {
        Integer id = null;
        BIObject obj = (BIObject) session.getAttribute("LookupBIObject");
        if (obj != null)
            id = obj.getId();
        return id;
    }

    private void startParametersLookupHandler(SourceBean request, String message, SourceBean response)
            throws EMFUserError, SourceBeanException {
        setLoopbackContext(request, message);
        response.setAttribute("parametersLookup", "true");
    }

    private void startLinksLookupHandler(SourceBean request, String message, SourceBean response)
            throws EMFUserError, SourceBeanException {
        modBIObject(request, ObjectsTreeConstants.DETAIL_MOD, response);
        String idStr = (String) request.getAttribute("id");
        session.setAttribute("SUBJECT_ID", idStr);
        response.setAttribute("linksLookup", "true");
    }

    private void startDependenciesLookupHandler(SourceBean request, String message, SourceBean response)
            throws Exception {
        //fillRequestContainer(request, errorHandler);
        BIObject obj = null;
        try {
            obj = helper.recoverBIObjectDetails(message);
        } catch (Exception e) {
            logger.error("Exception", e);
            // TODO manage exception 
        }

        BIObjectParameter biObjPar = helper.recoverBIObjectParameterDetails(obj.getId());
        String saveBIObjectParameter = (String) request.getAttribute("saveBIObjectParameter");
        if (saveBIObjectParameter != null && saveBIObjectParameter.equalsIgnoreCase("yes")) {
            // it is requested to save the visible BIObjectParameter
            ValidationCoordinator.validate("PAGE", "BIObjectParameterValidation", this);
            // If it's a new BIObjectParameter or if the Parameter was changed controls 
            // that the BIObjectParameter url name is not already in use
            urlNameControl(obj.getId(), biObjPar);
            verifyForDependencies(biObjPar);
            if (!errorHandler.isOKByCategory(EMFErrorCategory.VALIDATION_ERROR)) {
                helper.fillResponse(initialPath);
                prepareBIObjectDetailPage(response, obj, biObjPar, biObjPar.getId().toString(),
                        ObjectsTreeConstants.DETAIL_MOD, false, false);
                return;
            }
            IBIObjectParameterDAO dao = DAOFactory.getBIObjectParameterDAO();
            dao.setUserProfile(profile);
            dao.modifyBIObjectParameter(biObjPar);
        } else {
            biObjPar = DAOFactory.getBIObjectParameterDAO().loadForDetailByObjParId(biObjPar.getId());
        }
        // refresh of the initial_BIObjectParameter in session
        BIObjectParameter biObjParClone = DetBIObjModHelper.clone(biObjPar);
        session.setAttribute("initial_BIObjectParameter", biObjParClone);
        // set lookup objects
        session.setAttribute("LookupBIObject", obj);
        session.setAttribute("LookupBIObjectParameter", biObjPar);
        session.setAttribute("modality", message);
        session.setAttribute("modalityBkp", message);
        response.setAttribute("dependenciesLookup", "true");
    }

    private void lookupReturnBackHandler(SourceBean request, SourceBean response)
            throws SourceBeanException, EMFUserError {

        BIObject obj = (BIObject) session.getAttribute("LookupBIObject");
        BIObjectParameter biObjPar = (BIObjectParameter) session.getAttribute("LookupBIObjectParameter");
        String modality = (String) session.getAttribute("modality");
        if (modality == null)
            modality = (String) session.getAttribute("modalityBkp");

        session.delAttribute("LookupBIObject");
        session.delAttribute("LookupBIObjectParameter");
        session.delAttribute("modality");
        session.delAttribute("modalityBkp");
        helper.fillResponse(initialPath);
        prepareBIObjectDetailPage(response, obj, biObjPar, biObjPar.getId().toString(), modality, false, false);

    }

    private void lookupReturnHandler(SourceBean request, SourceBean response)
            throws EMFUserError, SourceBeanException {

        BIObject obj = (BIObject) session.getAttribute("LookupBIObject");
        logger.debug(" BIObject = " + obj);

        BIObjectParameter biObjPar = (BIObjectParameter) session.getAttribute("LookupBIObjectParameter");
        logger.debug(" BIObjectParameter = " + biObjPar);

        String modality = (String) session.getAttribute("modality");
        if (modality == null)
            modality = (String) session.getAttribute("modalityBkp");
        logger.debug(" modality = " + modality);

        String newParIdStr = (String) session.getAttribute("PAR_ID");
        Integer newParIdInt = Integer.valueOf(newParIdStr);
        Parameter newParameter = new Parameter();
        newParameter.setId(newParIdInt);
        biObjPar.setParameter(newParameter);
        biObjPar.setParID(newParIdInt);

        delateLoopbackContext();

        helper.fillResponse(initialPath);
        prepareBIObjectDetailPage(response, obj, biObjPar, biObjPar.getId().toString(), modality, false, false);
        session.delAttribute("PAR_ID");
    }

    /**
     * Gets the detail of a BI object  choosed by the user from the 
     * BI objects list. It reaches the key from the request and asks to the DB all detail
     * BI objects information, by calling the method <code>loadBIObjectForDetail</code>.
     *   
     * @param request The request Source Bean
     * @param response The response Source Bean
     * @throws Exception 
     */
    private void getDetailObject(SourceBean request, SourceBean response) throws Exception {
        HashMap<String, String> logParam = new HashMap();
        try {
            String idStr = (String) request.getAttribute(ObjectsTreeConstants.OBJECT_ID);
            Integer id = new Integer(idStr);
            BIObject obj = biobjDAO.loadBIObjectForDetail(id);

            if (obj == null) {
                logger.error("BIObject with id " + id + " cannot be retrieved.");
                EMFUserError error = new EMFUserError(EMFErrorSeverity.ERROR, 1040);
                errorHandler.addError(error);
                return;
            }
            Object selectedObjParIdObj = request.getAttribute("selected_obj_par_id");
            String selectedObjParIdStr = "";
            if (selectedObjParIdObj != null) {
                int selectedObjParId = DetBIObjModHelper.findBIObjParId(selectedObjParIdObj);
                selectedObjParIdStr = new Integer(selectedObjParId).toString();
            }
            helper.fillResponse(initialPath);
            prepareBIObjectDetailPage(response, obj, null, selectedObjParIdStr, ObjectsTreeConstants.DETAIL_MOD,
                    true, true);
        } catch (Exception ex) {
            logger.error("Cannot fill response container", ex);
            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY", logParam, "ERR");
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * Controls if there are some BIObjectParameter objects that depend by the BIObjectParameter object
     * at input, given its id.
     * 
     * @param objParFatherId The id of the BIObjectParameter object to check
     * @throws EMFUserError
     */
    public static EMFValidationError checkForDependancies(Integer objParFatherId) throws EMFUserError {
        EMFValidationError error = null;
        IObjParuseDAO objParuseDAO = DAOFactory.getObjParuseDAO();
        List objParametersCorrelated = objParuseDAO.getDependencies(objParFatherId);
        if (objParametersCorrelated != null && objParametersCorrelated.size() > 0) {
            HashMap params = new HashMap();
            params.put(AdmintoolsConstants.PAGE, DetailBIObjectModule.MODULE_PAGE);
            Vector v = new Vector();
            v.add(objParametersCorrelated.toString());
            error = new EMFValidationError(EMFErrorSeverity.ERROR, 1049, v, params);
        }
        return error;
    }

    /**
     * Before modifing a BIObjectParameter (not inserting), this method must be invoked in order to verify that the BIObjectParameter
     * stored into db (to be modified as per the BIObjectParameter in input) has dependencies associated; if it is the case,
     * verifies that the associated Parameter was not changed. In case of changed Parameter adds a EMFValidationError into the error handler.
     * 
     * @param objPar The BIObjectParameter to verify
     * @throws EMFUserError 
     */
    private void verifyForDependencies(BIObjectParameter objPar) throws EMFUserError {
        Integer objParId = objPar.getId();
        if (objParId == null || objParId.intValue() == -1) {
            // it means that the BIObjectParameter in input must be inserted, not modified
            return;
        }
        // Controls that, if the are some dependencies for the BIObjectParameter, the associated parameter was not changed
        IObjParuseDAO objParuseDAO = DAOFactory.getObjParuseDAO();
        List correlations = objParuseDAO.loadObjParuses(objParId);
        if (correlations != null && correlations.size() > 0) {
            IBIObjectParameterDAO objParDAO = DAOFactory.getBIObjectParameterDAO();
            BIObjectParameter initialObjPar = objParDAO.loadForDetailByObjParId(objParId);
            if (initialObjPar.getParID().intValue() != objPar.getParID().intValue()) {
                // the ParameterUse was changed to manual input or the lov id was changed
                HashMap params = new HashMap();
                params.put(AdmintoolsConstants.PAGE, "DetailBIObjectPage");
                Vector vector = new Vector();
                EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, 1061, vector, params);
                errorHandler.addError(error);
                return;
            }
        }
    }

    /**
     * Controls that the BIObjectParameter url name is not in use by another BIObjectParameter
     * 
     * @param objId The id of the document
     * @param biObjPar The BIObjectParameter to control before inserting/modifying
     */
    private void urlNameControl(Integer objId, BIObjectParameter biObjPar) {
        if (objId == null || objId.intValue() < 0 || biObjPar == null || biObjPar.getParameterUrlName() == null)
            return;
        try {
            IBIObjectParameterDAO objParDAO = DAOFactory.getBIObjectParameterDAO();
            List paruses = objParDAO.loadBIObjectParametersById(objId);
            Iterator it = paruses.iterator();
            while (it.hasNext()) {
                BIObjectParameter aBIObjectParameter = (BIObjectParameter) it.next();
                if (aBIObjectParameter.getParameterUrlName().equals(biObjPar.getParameterUrlName())
                        && !aBIObjectParameter.getId().equals(biObjPar.getId())) {
                    HashMap params = new HashMap();
                    params.put(AdmintoolsConstants.PAGE, DetailBIObjectModule.MODULE_PAGE);
                    EMFValidationError error = new EMFValidationError(EMFErrorSeverity.ERROR, 1046, new Vector(),
                            params);
                    errorHandler.addError(error);
                }
            }
        } catch (EMFUserError e) {
            logger.error("Error while url name control", e);
        }

    }

    private BIObjectParameter reloadBIObjectParameter(Integer objId, String objParUrlName)
            throws EMFInternalError, EMFUserError {
        if (objId == null || objId.intValue() < 0 || objParUrlName == null || objParUrlName.trim().equals(""))
            throw new EMFInternalError(EMFErrorSeverity.ERROR,
                    "Invalid input data for method reloadBIObjectParameter in DetailBIObjectModule");
        BIObjectParameter objPar = null;
        try {
            IBIObjectParameterDAO objParDAO = DAOFactory.getBIObjectParameterDAO();
            List paruses = objParDAO.loadBIObjectParametersById(objId);
            Iterator it = paruses.iterator();
            while (it.hasNext()) {
                BIObjectParameter aBIObjectParameter = (BIObjectParameter) it.next();
                if (aBIObjectParameter.getParameterUrlName().equals(objParUrlName)) {
                    objPar = aBIObjectParameter;
                    break;
                }
            }
        } catch (EMFUserError e) {
            logger.error("Cannot reload BIObjectParameter", e);
        }
        if (objPar == null) {
            logger.error("BIObjectParameter with url name '" + objParUrlName + "' not found.");
            objPar = DetBIObjModHelper.createNewBIObjectParameter(objId);
        }
        return objPar;
    }

    /**
     * Fills the response SourceBean with the elements that will be displayed in the BIObject detail page: 
     * the BIObject itself and the required BIObjectParameter.
     * 
     * @param response The response SourceBean to be filled
     * @param obj The BIObject to be displayed
     * @param biObjPar The BIObjectParameter to be displayed: if it is null the selectedObjParIdStr will be considered.
     * @param selectedObjParIdStr The id of the BIObjectParameter to be displayed.
     *          If it is blank or null the first BIObjectParameter will be diplayed but in case the BIObject 
     *          has no BIObjectParameter a new empty BIObjectParameter will be displayed.
     *          If it is "-1" a new empty BIObjectParameter will be displayed.
     * @param detail_mod The modality
     * @param initialBIObject Boolean: if true the BIObject to be visualized is the initial BIObject and 
     *          a clone will be put in session.
     * @param initialBIObjectParameter Boolean: if true the BIObjectParameter to be visualized is the initial BIObjectParameter and 
     *          a clone will be put in session.
     * @throws SourceBeanException
     * @throws EMFUserError
     */
    private void prepareBIObjectDetailPage(SourceBean response, BIObject obj, BIObjectParameter biObjPar,
            String selectedObjParIdStr, String detail_mod, boolean initialBIObject,
            boolean initialBIObjectParameter) throws SourceBeanException, EMFUserError {

        List biObjParams = DAOFactory.getBIObjectParameterDAO().loadBIObjectParametersById(obj.getId());
        obj.setBiObjectParameters(biObjParams);
        if (biObjPar == null) {
            if (selectedObjParIdStr == null || "".equals(selectedObjParIdStr)) {
                if (biObjParams == null || biObjParams.size() == 0) {
                    biObjPar = DetBIObjModHelper.createNewBIObjectParameter(obj.getId());
                    selectedObjParIdStr = "-1";
                } else {
                    biObjPar = (BIObjectParameter) biObjParams.get(0);
                    selectedObjParIdStr = biObjPar.getId().toString();
                }
            } else if ("-1".equals(selectedObjParIdStr)) {
                biObjPar = DetBIObjModHelper.createNewBIObjectParameter(obj.getId());
                selectedObjParIdStr = "-1";
            } else {
                int selectedObjParId = Integer.parseInt(selectedObjParIdStr);
                Iterator it = biObjParams.iterator();
                while (it.hasNext()) {
                    biObjPar = (BIObjectParameter) it.next();
                    if (biObjPar.getId().equals(new Integer(selectedObjParId)))
                        break;
                }
            }
        }

        response.setAttribute("selected_obj_par_id", selectedObjParIdStr);
        response.setAttribute(NAME_ATTR_OBJECT, obj);
        response.setAttribute(NAME_ATTR_OBJECT_PAR, biObjPar);

        response.setAttribute(ObjectsTreeConstants.MODALITY, detail_mod);

        if (initialBIObject) {
            BIObject objClone = DetBIObjModHelper.clone(obj);
            session.setAttribute("initial_BIObject", objClone);
        }

        if (initialBIObjectParameter) {
            BIObjectParameter biObjParClone = DetBIObjModHelper.clone(biObjPar);
            session.setAttribute("initial_BIObjectParameter", biObjParClone);
        }

    }

    /**
     * Deletes a BI Object choosed by user. If the folder id is specified, it deletes only the instance 
     * of the object in that folder. If the folder id is not specified: if the user is an administrator 
     * the object is deleted from all the folders, else it is deleted from the folder on which the user 
     * is a developer.
     * 
     * @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
     * @deprecated
     */
    /*
    private void delDetailObject(SourceBean request, String mod, SourceBean response)
       throws EMFUserError, SourceBeanException {
       BIObject obj = null;
       try {
     String idObjStr = (String) request.getAttribute(ObjectsTreeConstants.OBJECT_ID);
     Integer idObj = new Integer(idObjStr);
     IBIObjectDAO objdao = biobjDAO;
     obj = objdao.loadBIObjectById(idObj);
     String idFunctStr = (String) request.getAttribute(ObjectsTreeConstants.FUNCT_ID);
     if (idFunctStr != null) {
        Integer idFunct = new Integer(idFunctStr);
        if (SpagoBIConstants.ADMIN_ACTOR.equals(actor)) {
           // deletes the document from the specified folder, no matter the permissions
           objdao.eraseBIObject(obj, idFunct);
        } else {
           // deletes the document from the specified folder if the profile is a developer for that folder
           if (ObjectsAccessVerifier.canDev(obj.getStateCode(), idFunct, profile)) {
              objdao.eraseBIObject(obj, idFunct);
           }
        }
     } else {
        if (SpagoBIConstants.ADMIN_ACTOR.equals(actor)) {
           if (initialPath != null && !initialPath.trim().equals("")) {
              // in case of local administrator, deletes the document in the folders where he can admin
              List funcsId = obj.getFunctionalities();
              for (Iterator it = funcsId.iterator(); it.hasNext(); ) {
                 Integer idFunct = (Integer) it.next();
                 LowFunctionality folder = DAOFactory.getLowFunctionalityDAO().loadLowFunctionalityByID(idFunct, false);
                 String folderPath = folder.getPath();
                 if (folderPath.equalsIgnoreCase(initialPath) || folderPath.startsWith(initialPath + "/")) {
                    objdao.eraseBIObject(obj, idFunct);
                 }
              }
           } else {
              // deletes the document from all the folders, no matter the permissions
              objdao.eraseBIObject(obj, null);
           }
        } else {
           // deletes the document from all the folders on which the profile is a developer
           List funcsId = obj.getFunctionalities();
           for (Iterator it = funcsId.iterator(); it.hasNext(); ) {
              Integer idFunct = (Integer) it.next();
              if (ObjectsAccessVerifier.canDev(obj.getStateCode(), idFunct, profile)) {
                 objdao.eraseBIObject(obj, idFunct);
              }
           }
        }
     }
       } catch (Exception ex) {
     logger.error("Cannot erase object", ex  );
     throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
       }
       response.setAttribute("loopback", "true");
       response.setAttribute(SpagoBIConstants.ACTOR, actor);
    }
    */
    /**
     * Deletes a BI Object choosed by user. If the folder id is specified, it deletes only the instance 
     * of the object in that folder. If the folder id is not specified: if the user is an administrator 
     * the object is deleted from all the folders, else it is deleted from the folder on which the user 
     * is a developer.
     * 
     * @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 delDetailObject(SourceBean request, String mod, SourceBean response, IEngUserProfile profile)
            throws EMFUserError, SourceBeanException {
        BIObject obj = null;
        HashMap<String, String> logParam = new HashMap();

        try {
            String idObjStr = (String) request.getAttribute(ObjectsTreeConstants.OBJECT_ID);
            Integer idObj = new Integer(idObjStr);
            IBIObjectDAO objdao = biobjDAO;
            obj = objdao.loadBIObjectById(idObj);
            if (obj != null) {
                logParam.put("Document_name", obj.getName());
                logParam.put("Document_label", obj.getLabel());
                if (obj.getId() != null)
                    logParam.put("Document_id", obj.getId().toString());
            }
            String idFunctStr = (String) request.getAttribute(ObjectsTreeConstants.FUNCT_ID);
            if (idFunctStr != null) {
                Integer idFunct = new Integer(idFunctStr);
                if (profile.isAbleToExecuteAction(SpagoBIConstants.DOCUMENT_MANAGEMENT_ADMIN)) {
                    // deletes the document from the specified folder, no matter the permissions
                    objdao.eraseBIObject(obj, idFunct);
                } else {
                    // deletes the document from the specified folder if the profile is a developer for that folder
                    if (ObjectsAccessVerifier.canDev(obj.getStateCode(), idFunct, profile)) {
                        objdao.eraseBIObject(obj, idFunct);
                    }
                }
            } else {
                if (profile.isAbleToExecuteAction(SpagoBIConstants.DOCUMENT_MANAGEMENT_ADMIN)) {
                    if (initialPath != null && !initialPath.trim().equals("")) {
                        // in case of local administrator, deletes the document in the folders where he can admin
                        List funcsId = obj.getFunctionalities();
                        for (Iterator it = funcsId.iterator(); it.hasNext();) {
                            Integer idFunct = (Integer) it.next();
                            LowFunctionality folder = DAOFactory.getLowFunctionalityDAO()
                                    .loadLowFunctionalityByID(idFunct, false);
                            String folderPath = folder.getPath();
                            if (folderPath.equalsIgnoreCase(initialPath)
                                    || folderPath.startsWith(initialPath + "/")) {
                                objdao.eraseBIObject(obj, idFunct);
                            }
                        }
                    } else {
                        // deletes the document from all the folders, no matter the permissions
                        objdao.eraseBIObject(obj, null);
                    }
                } else {
                    // deletes the document from all the folders on which the profile is a developer
                    List funcsId = obj.getFunctionalities();
                    for (Iterator it = funcsId.iterator(); it.hasNext();) {
                        Integer idFunct = (Integer) it.next();
                        if (ObjectsAccessVerifier.canDev(obj.getStateCode(), idFunct, profile)) {
                            objdao.eraseBIObject(obj, idFunct);
                        }
                    }
                }
            }
            /*
            *deletes document from index
            **/
            LuceneIndexer.updateBiobjInIndex(obj, true);
        } catch (Exception ex) {
            logger.error("Cannot erase object", ex);
            try {
                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.DELETE", logParam, "ERR");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
        response.setAttribute("loopback", "true");

        try {
            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.DELETE", logParam, "OK");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * Instantiates a new <code>BIObject<code> object when a new BI object 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 newBIObject(SourceBean request, SourceBean response) throws EMFUserError {
        try {
            response.setAttribute(ObjectsTreeConstants.MODALITY, ObjectsTreeConstants.DETAIL_INS);
            BIObject obj = new BIObject();
            obj.setId(new Integer(0));
            obj.setEngine(null);
            obj.setDataSourceId(null);
            obj.setDataSetId(null);
            obj.setDescription("");
            obj.setLabel("");
            obj.setName("");
            obj.setEncrypt(new Integer(0));
            obj.setVisible(new Integer(1));
            obj.setRelName("");
            obj.setStateID(null);
            obj.setStateCode("");
            obj.setBiObjectTypeID(null);
            obj.setBiObjectTypeCode("");
            obj.setRefreshSeconds(new Integer(0));
            Domain state = DAOFactory.getDomainDAO().loadDomainByCodeAndValue("STATE", "DEV");
            obj.setStateCode(state.getValueCd());
            obj.setStateID(state.getValueId());
            List functionalitites = new ArrayList();
            obj.setFunctionalities(functionalitites);
            response.setAttribute(NAME_ATTR_OBJECT, obj);
            helper.fillResponse(initialPath);
        } catch (Exception ex) {
            logger.error("Cannot prepare page for the insertion", ex);
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * Erase version.
     * 
     * @param request the request
     * @param response the response
     * 
     * @throws EMFUserError the EMF user error
     */
    public void eraseVersion(SourceBean request, SourceBean response) throws EMFUserError {
        // get object' id and name version
        String tempIdStr = (String) request.getAttribute(SpagoBIConstants.TEMPLATE_ID);
        String objIdStr = (String) request.getAttribute(ObjectsTreeConstants.OBJECT_ID);
        try {
            Integer objId = new Integer(objIdStr);
            Integer tempId = new Integer(tempIdStr);
            DAOFactory.getObjTemplateDAO().deleteBIObjectTemplate(tempId);
            // populate response
            BIObject obj = biobjDAO.loadBIObjectForDetail(objId);
            helper.fillResponse(initialPath);
            prepareBIObjectDetailPage(response, obj, null, "", ObjectsTreeConstants.DETAIL_MOD, false, false);
        } catch (Exception e) {
            logger.error("Cannot erase version", e);
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }

    /**
     * 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_BIObject");
        session.delAttribute("initial_BIObjectParameter");
        session.delAttribute("modality");
        response.setAttribute("loopback", "true");
    }

    /**
     * Inserts/Modifies the detail of a BI Object according to the user request.
     * When a BI Object is modified, the <code>modifyBIObject</code> method is
     * called; when a new BI Object is added, the <code>insertBIObject</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 modBIObject(SourceBean request, String mod, SourceBean response)
            throws EMFUserError, SourceBeanException {
        HashMap<String, String> logParam = new HashMap();
        try {

            // build a biobject using data in request
            BIObject obj = helper.recoverBIObjectDetails(mod);

            if (obj != null) {
                logParam.put("Document_name", obj.getName());
                logParam.put("Document_Label", obj.getLabel());
                logParam.put("Creation_User", obj.getCreationUser());
                logParam.put("path", obj.getPath());
                logParam.put("tenant", obj.getTenant());
                logParam.put("state", obj.getStateCode());
                if (obj.getBiObjectTypeID() != null)
                    logParam.put("Object Type", obj.getBiObjectTypeID().toString());
                if (obj.getEngine() != null)
                    logParam.put("Engine", obj.getEngine().getName());
            }

            boolean flgReloadTemp = false;
            // define variable that contains the id of the parameter selected
            String selectedObjParIdStr = null;
            selectedObjParIdStr = "-1";

            //next attribute defines if load automatically all parameters for a document composition type or not.
            boolean loadParsDCClicked = request.getAttribute("loadParsDC") != null;

            // make a validation of the request data
            ValidationCoordinator.validate("PAGE", "BIObjectValidation", this);

            // build and ObjTemplate object using data into request
            ObjTemplate objTemp = helper.recoverBIObjTemplateDetails();
            if (objTemp != null) {
                objTemp.setBiobjId(obj.getId());
            }
            //if the template is not loaded check if default version is changed
            if (objTemp == null) {
                String strCurTempVer = (String) request.getAttribute("versionTemplate");
                if (strCurTempVer != null && !strCurTempVer.equals("")) {
                    Integer idCurTempVer = Integer.valueOf((strCurTempVer).trim());
                    if (idCurTempVer != null) {
                        objTemp = DAOFactory.getObjTemplateDAO().getBIObjectActiveTemplate(obj.getId());
                        if (objTemp.getId().compareTo(idCurTempVer) != 0) {
                            flgReloadTemp = true;
                            List lstTemplatesObj = DAOFactory.getObjTemplateDAO()
                                    .getBIObjectTemplateList(obj.getId());
                            for (int i = 0; i < lstTemplatesObj.size(); i++) {
                                objTemp = (ObjTemplate) lstTemplatesObj.get(i);
                                if (objTemp.getId().compareTo(idCurTempVer) == 0)
                                    break;
                            }
                        }
                    }
                }
            } else
                flgReloadTemp = true;

            // if there are some validation errors into the errorHandler return without write into DB 
            if (!errorHandler.isOKByCategory(EMFErrorCategory.VALIDATION_ERROR)) {
                helper.fillResponse(initialPath);
                prepareBIObjectDetailPage(response, obj, null, selectedObjParIdStr, mod, false, false);

                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_VALIDATION_ERROR",
                        logParam, "ERR");
                return;
            }

            // based on the modality do different tasks
            if (mod.equalsIgnoreCase(SpagoBIConstants.DETAIL_INS)) {
                //if data source value is not specified, it gets the default data source associated at the engine
                //            if (obj.getDataSourceId() == null){
                //               Engine engine = obj.getEngine();
                //               Integer dsId = engine.getDataSourceId();
                //               obj.setDataSourceId(dsId);
                //            }
                // inserts into DB the new BIObject
                if (objTemp == null) {
                    biobjDAO.insertBIObject(obj, loadParsDCClicked);
                } else {
                    biobjDAO.insertBIObject(obj, objTemp, loadParsDCClicked);
                }

                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.ADD", logParam, "OK");
            } else if (mod.equalsIgnoreCase(SpagoBIConstants.DETAIL_MOD)) {

                BIObjectParameter biObjPar = null;
                Object selectedObjParIdObj = request.getAttribute("selected_obj_par_id");
                Object deleteBIObjectParameter = request.getAttribute("deleteBIObjectParameter");
                if (selectedObjParIdObj != null) {

                    // it is requested to view another BIObjectParameter than the one visible
                    int selectedObjParId = helper.findBIObjParId(selectedObjParIdObj);
                    selectedObjParIdStr = new Integer(selectedObjParId).toString();
                    String saveBIObjectParameter = (String) request.getAttribute("saveBIObjectParameter");
                    if (saveBIObjectParameter != null && saveBIObjectParameter.equalsIgnoreCase("yes")) {
                        // it is requested to save the visible BIObjectParameter
                        ValidationCoordinator.validate("PAGE", "BIObjectParameterValidation", this);
                        biObjPar = helper.recoverBIObjectParameterDetails(obj.getId());
                        // If it's a new BIObjectParameter or if the Parameter was changed controls 
                        // that the BIObjectParameter url name is not already in use
                        urlNameControl(obj.getId(), biObjPar);
                        helper.fillResponse(initialPath);
                        verifyForDependencies(biObjPar);
                        // if there are some validation errors into the errorHandler does not write into DB
                        if (!errorHandler.isOKByCategory(EMFErrorCategory.VALIDATION_ERROR)) {
                            helper.fillResponse(initialPath);
                            prepareBIObjectDetailPage(response, obj, biObjPar, biObjPar.getId().toString(),
                                    ObjectsTreeConstants.DETAIL_MOD, false, false);

                            AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD",
                                    logParam, "OK");
                            return;
                        }
                        IBIObjectParameterDAO objParDAO = DAOFactory.getBIObjectParameterDAO();
                        objParDAO.setUserProfile(profile);
                        if (biObjPar.getId().intValue() == -1) {
                            // it is requested to insert a new BIObjectParameter
                            objParDAO.insertBIObjectParameter(biObjPar);
                        } else {
                            // it is requested to modify a BIObjectParameter
                            objParDAO.modifyBIObjectParameter(biObjPar);
                        }
                        prepareBIObjectDetailPage(response, obj, null, selectedObjParIdStr,
                                ObjectsTreeConstants.DETAIL_MOD, false, true);

                        logParam.put("Document_name", obj.getName());
                        AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD",
                                logParam, "OK");
                        return;
                    } else {
                        helper.fillResponse(initialPath);
                        prepareBIObjectDetailPage(response, obj, null, selectedObjParIdStr,
                                ObjectsTreeConstants.DETAIL_MOD, false, true);
                        // exits without writing into DB

                        logParam.put("Document_name", obj.getName());
                        AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD",
                                logParam, "OK");
                        return;
                    }

                } else if (deleteBIObjectParameter != null) {

                    // it is requested to delete the visible BIObjectParameter
                    int objParId = helper.findBIObjParId(deleteBIObjectParameter);
                    Integer objParIdInt = new Integer(objParId);
                    EMFValidationError error = checkForDependancies(objParIdInt);
                    if (error != null) {
                        errorHandler.addError(error);
                        AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD",
                                logParam, "KO");
                    }
                    helper.fillResponse(initialPath);
                    // if there are some validation errors into the errorHandler does not write into DB
                    if (!errorHandler.isOKByCategory(EMFErrorCategory.VALIDATION_ERROR)) {
                        helper.fillResponse(initialPath);
                        prepareBIObjectDetailPage(response, obj, biObjPar, biObjPar.getId().toString(),
                                ObjectsTreeConstants.DETAIL_MOD, false, false);
                        AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD",
                                logParam, "KO");
                        return;
                    }
                    // deletes the BIObjectParameter
                    IBIObjectParameterDAO objParDAO = DAOFactory.getBIObjectParameterDAO();
                    BIObjectParameter objPar = objParDAO.loadForDetailByObjParId(new Integer(objParId));
                    objParDAO.eraseBIObjectParameter(objPar, true);
                    selectedObjParIdStr = "";
                    prepareBIObjectDetailPage(response, obj, null, selectedObjParIdStr,
                            ObjectsTreeConstants.DETAIL_MOD, false, true);

                    logParam.put("Document_name", obj.getName());
                    AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD", logParam,
                            "OK");
                    return;

                } else {

                    // It is request to save the BIObject with also the visible BIObjectParameter
                    biObjPar = helper.recoverBIObjectParameterDetails(obj.getId());
                    // If a new BIParameter was visualized and no fields were inserted, the BIParameter is not validated and saved
                    boolean biParameterToBeSaved = true;
                    if ((obj.getBiObjectTypeCode().equalsIgnoreCase(SpagoBIConstants.DOCUMENT_COMPOSITE_TYPE)
                            && flgReloadTemp)
                            || (GenericValidator.isBlankOrNull(biObjPar.getLabel())
                                    && biObjPar.getId().intValue() == -1
                                    && GenericValidator.isBlankOrNull(biObjPar.getParameterUrlName())
                                    && biObjPar.getParID().intValue() == -1))
                        biParameterToBeSaved = false;
                    if (biParameterToBeSaved) {
                        ValidationCoordinator.validate("PAGE", "BIObjectParameterValidation", this);
                        // If it's a new BIObjectParameter or if the Parameter was changed controls 
                        // that the BIObjectParameter url name is not already in use
                        urlNameControl(obj.getId(), biObjPar);
                    }
                    ValidationCoordinator.validate("PAGE", "BIObjectValidation", this);
                    verifyForDependencies(biObjPar);
                    // if there are some validation errors into the errorHandler does not write into DB
                    if (!errorHandler.isOKByCategory(EMFErrorCategory.VALIDATION_ERROR)) {
                        helper.fillResponse(initialPath);
                        prepareBIObjectDetailPage(response, obj, biObjPar, biObjPar.getId().toString(),
                                ObjectsTreeConstants.DETAIL_MOD, false, false);

                        logParam.put("Document_name", obj.getName());
                        AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY_DETAIL_MOD",
                                logParam, "OK");
                        return;
                    }

                    // it is requested to modify the main values of the BIObject
                    if (objTemp == null) {
                        biobjDAO.modifyBIObject(obj, loadParsDCClicked);
                    } else {
                        biobjDAO.modifyBIObject(obj, objTemp, loadParsDCClicked);
                    }

                    // reloads the BIObject 
                    obj = biobjDAO.loadBIObjectForDetail(obj.getId());
                    // check if there's a parameter to save and in case save it
                    if (biParameterToBeSaved) {
                        IBIObjectParameterDAO objParDAO = DAOFactory.getBIObjectParameterDAO();
                        objParDAO.setUserProfile(profile);
                        if (biObjPar.getId().intValue() == -1) {
                            // it is requested to insert a new BIObjectParameter
                            objParDAO.insertBIObjectParameter(biObjPar);
                            // reload the BIObjectParameter with the given url name
                            biObjPar = reloadBIObjectParameter(obj.getId(), biObjPar.getParameterUrlName());
                        } else {
                            // it is requested to modify a BIObjectParameter
                            objParDAO.modifyBIObjectParameter(biObjPar);
                        }
                        selectedObjParIdStr = biObjPar.getId().toString();
                    } else
                        selectedObjParIdStr = "-1";
                }

                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.MODIFY", logParam, "OK");
            }

            // reloads the BIObject with the correct Id 
            obj = biobjDAO.loadBIObjectForDetail(obj.getId());

            /*
            *indexes biobject by modifying document in index
            **/
            LuceneIndexer.updateBiobjInIndex(obj, false);

            // based on the kind of back put different data into response
            Object saveAndGoBack = request.getAttribute("saveAndGoBack");
            if (saveAndGoBack != null) {
                // it is request to save the main BIObject details and to go back
                response.setAttribute("loopback", "true");
            } else {
                // it is requested to save and remain in the BIObject detail page
                response.setAttribute(ObjectsTreeConstants.OBJECT_ID, obj.getId().toString());
                response.setAttribute("selected_obj_par_id", selectedObjParIdStr);
                response.setAttribute("saveLoop", "true");
            }

        } catch (EMFUserError error) {
            logger.error("Cannot fill response container", error);
            try {
                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.ADD/MODIFY", logParam, "ERR");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            throw error;
        } catch (Exception ex) {
            logger.error("Cannot fill response container", ex);
            try {
                AuditLogUtilities.updateAudit(getHttpRequest(), profile, "DOCUMENT.ADD/MODIFY", logParam, "ERR");
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            throw new EMFUserError(EMFErrorSeverity.ERROR, 100);
        }
    }
}