Package it.eng.spagobi.tools.importexport

Source Code of it.eng.spagobi.tools.importexport.ImportUtilities

/**

SpagoBI - The Business Intelligence Free Platform

Copyright (C) 2005-2008 Engineering Ingegneria Informatica S.p.A.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

**/
package it.eng.spagobi.tools.importexport;


import it.eng.spago.base.SessionContainer;
import it.eng.spago.base.SourceBean;
import it.eng.spago.configuration.ConfigSingleton;
import it.eng.spago.error.EMFErrorSeverity;
import it.eng.spago.error.EMFUserError;
import it.eng.spago.security.IEngUserProfile;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiObjPar;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiObjTemplates;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiObjects;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiSnapshots;
import it.eng.spagobi.analiticalmodel.document.metadata.SbiSubObjects;
import it.eng.spagobi.analiticalmodel.functionalitytree.metadata.SbiFuncRole;
import it.eng.spagobi.analiticalmodel.functionalitytree.metadata.SbiFuncRoleId;
import it.eng.spagobi.analiticalmodel.functionalitytree.metadata.SbiFunctions;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiObjParuse;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiParameters;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiParuse;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiParuseCk;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiParuseCkId;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiParuseDet;
import it.eng.spagobi.behaviouralmodel.analyticaldriver.metadata.SbiParuseDetId;
import it.eng.spagobi.behaviouralmodel.check.metadata.SbiChecks;
import it.eng.spagobi.behaviouralmodel.lov.bo.QueryDetail;
import it.eng.spagobi.behaviouralmodel.lov.metadata.SbiLov;
import it.eng.spagobi.commons.dao.DAOFactory;
import it.eng.spagobi.commons.metadata.SbiBinContents;
import it.eng.spagobi.commons.metadata.SbiCommonInfo;
import it.eng.spagobi.commons.metadata.SbiDomains;
import it.eng.spagobi.commons.metadata.SbiExtRoles;
import it.eng.spagobi.commons.utilities.GeneralUtilities;
import it.eng.spagobi.engines.config.metadata.SbiEngines;
import it.eng.spagobi.kpi.alarm.metadata.SbiAlarm;
import it.eng.spagobi.kpi.alarm.metadata.SbiAlarmContact;
import it.eng.spagobi.kpi.config.bo.KpiRel;
import it.eng.spagobi.kpi.config.metadata.SbiKpi;
import it.eng.spagobi.kpi.config.metadata.SbiKpiInstPeriod;
import it.eng.spagobi.kpi.config.metadata.SbiKpiInstance;
import it.eng.spagobi.kpi.config.metadata.SbiKpiPeriodicity;
import it.eng.spagobi.kpi.config.metadata.SbiKpiRel;
import it.eng.spagobi.kpi.model.metadata.SbiKpiModel;
import it.eng.spagobi.kpi.model.metadata.SbiKpiModelInst;
import it.eng.spagobi.kpi.model.metadata.SbiKpiModelResources;
import it.eng.spagobi.kpi.model.metadata.SbiResources;
import it.eng.spagobi.kpi.ou.metadata.SbiOrgUnitGrant;
import it.eng.spagobi.kpi.ou.metadata.SbiOrgUnitGrantNodes;
import it.eng.spagobi.kpi.ou.metadata.SbiOrgUnitGrantNodesId;
import it.eng.spagobi.kpi.ou.metadata.SbiOrgUnitHierarchies;
import it.eng.spagobi.kpi.ou.metadata.SbiOrgUnitNodes;
import it.eng.spagobi.kpi.threshold.metadata.SbiThreshold;
import it.eng.spagobi.kpi.threshold.metadata.SbiThresholdValue;
import it.eng.spagobi.tools.dataset.metadata.SbiDataSetConfig;
import it.eng.spagobi.tools.dataset.metadata.SbiDataSetHistory;
import it.eng.spagobi.tools.dataset.metadata.SbiFileDataSet;
import it.eng.spagobi.tools.dataset.metadata.SbiJClassDataSet;
import it.eng.spagobi.tools.dataset.metadata.SbiQueryDataSet;
import it.eng.spagobi.tools.dataset.metadata.SbiScriptDataSet;
import it.eng.spagobi.tools.dataset.metadata.SbiWSDataSet;
import it.eng.spagobi.tools.datasource.metadata.SbiDataSource;
import it.eng.spagobi.tools.objmetadata.metadata.SbiObjMetacontents;
import it.eng.spagobi.tools.objmetadata.metadata.SbiObjMetadata;
import it.eng.spagobi.tools.udp.metadata.SbiUdp;
import it.eng.spagobi.tools.udp.metadata.SbiUdpValue;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.commons.collections.set.CompositeSet.SetMutator;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.safehaus.uuid.UUID;
import org.safehaus.uuid.UUIDGenerator;

public class ImportUtilities {

  static private Logger logger = Logger.getLogger(ImportUtilities.class);

  public static final int MAX_DEFAULT_IMPORT_FILE_SIZE = 5242880;

  /**
   * Decompress the export compress file.
   *
   * @param pathImpTmpFolder The path of the import directory
   * @param pathArchiveFile The path of the exported archive
   *
   * @throws EMFUserError the EMF user error
   */
  public static void decompressArchive(String pathImpTmpFolder, String pathArchiveFile) throws EMFUserError {
    logger.debug("IN");
    File tmpFolder = new File(pathImpTmpFolder);
    tmpFolder.mkdirs();
    int BUFFER = 2048;
    FileInputStream fis = null;
    ZipInputStream zis = null;
    try {
      fis = new FileInputStream(pathArchiveFile);
      zis = new ZipInputStream(new BufferedInputStream(fis));
      ZipEntry entry;
      while((entry = zis.getNextEntry()) != null) {
        BufferedOutputStream dest = null;
        FileOutputStream fos = null;
        try {
          int count;
          byte data[] = new byte[BUFFER];
          String entryName = entry.getName();
          int indexofdp = entryName.indexOf(":\\");
          if(indexofdp!=-1) {
            int indexlastslash = entryName.lastIndexOf("\\");
            entryName = entryName.substring(0, indexofdp - 2) + entryName.substring(indexlastslash);
          }
          File entryFile = new File(pathImpTmpFolder+ "/" + entryName);
          File entryFileFolder = entryFile.getParentFile();
          entryFileFolder.mkdirs();
          fos = new FileOutputStream(pathImpTmpFolder+ "/" + entryName);
          dest = new BufferedOutputStream(fos, BUFFER);
          while ((count = zis.read(data, 0, BUFFER)) != -1) {
            dest.write(data, 0, count);
          }
          dest.flush();
        } finally {
          if (dest != null) dest.close();
          if (fos != null) fos.close();
        }
      }
    } catch (EOFException eofe) {
      logger.warn("Error during the decompression of the exported file " , eofe);
    } catch (Exception e) {
      logger.warn("Error during the decompression of the exported file " , e);
      throw new EMFUserError(EMFErrorSeverity.ERROR, "100", "component_impexp_messages");
    } finally {
      if (zis != null || fis != null) {
        try {
          if (zis != null) zis.close();
          if (fis != null) fis.close();
        } catch (IOException e) {
          logger.error("Error closing stream", e);
        }
      }
      logger.debug("OUT");
    }
  }



  /**
   * Creates an Hibernate session factory for the exported database.
   *
   * @param pathDBFolder The path of the folder which contains the exported database
   *
   * @return The Hibernate session factory
   *
   * @throws EMFUserError the EMF user error
   */
  public static SessionFactory getHibSessionExportDB(String pathDBFolder) throws EMFUserError {
    logger.debug("IN");
    Configuration conf = new Configuration();
    String resource = "it/eng/spagobi/tools/importexport/metadata/hibernate.cfg.hsql.export.xml";
    conf = conf.configure(resource);
    String hsqlJdbcString = "jdbc:hsqldb:file:" + pathDBFolder + "/metadata;shutdown=true";
    conf.setProperty("hibernate.connection.url",hsqlJdbcString);
    SessionFactory sessionFactory = conf.buildSessionFactory();
    logger.debug("IN");
    return sessionFactory;
  }


  /**
   * Creates a new hibernate role object.
   *
   * @param role old hibernate role object
   *
   * @return the new hibernate role object
   */
  public static SbiExtRoles makeNewSbiExtRole(SbiExtRoles role){
    logger.debug("IN");
    SbiExtRoles newRole = new SbiExtRoles();
    newRole.setCode(role.getCode());
    newRole.setDescr(role.getDescr());
    newRole.setName(role.getName());
    //newRole.setRoleType(role.getRoleType());
    //newRole.setRoleTypeCode(role.getRoleTypeCode());
    newRole.setSbiParuseDets(new HashSet());
    newRole.setSbiFuncRoles(new HashSet());
    newRole.setIsAbleToSaveIntoPersonalFolder(role.getIsAbleToSaveIntoPersonalFolder());
    newRole.setIsAbleToSaveRememberMe(role.getIsAbleToSaveRememberMe());
    newRole.setIsAbleToSeeMetadata(role.getIsAbleToSeeMetadata());
    newRole.setIsAbleToSeeNotes(role.getIsAbleToSeeNotes());
    newRole.setIsAbleToSeeSnapshots(role.getIsAbleToSeeSnapshots());
    newRole.setIsAbleToSeeSubobjects(role.getIsAbleToSeeSubobjects());
    newRole.setIsAbleToSeeViewpoints(role.getIsAbleToSeeViewpoints());
    newRole.setIsAbleToSendMail(role.getIsAbleToSendMail());
    newRole.setIsAbleToBuildQbeQuery(role.getIsAbleToBuildQbeQuery());
    logger.debug("OUT");
    return newRole;
  }

  /**
   * Creates a new hibernate role object.
   *
   * @param role old hibernate role object
   * @param id the id
   *
   * @return the new hibernate role object
   */
  public static SbiExtRoles makeNewSbiExtRole(SbiExtRoles role, Integer id){
    logger.debug("IN");
    SbiExtRoles newRole = makeNewSbiExtRole(role);
    newRole.setExtRoleId(id);
    logger.debug("OUT");
    return newRole;
  }


  /**
   * Creates a new hibernate engine object.
   *
   * @param engine old hibernate engine object
   *
   * @return the new hibernate engine object
   */
  public static SbiEngines makeNewSbiEngine(SbiEngines engine){
    logger.debug("IN");
    SbiEngines newEng = new SbiEngines();
    newEng.setDescr(engine.getDescr());
    newEng.setDriverNm(engine.getDriverNm());
    newEng.setEncrypt(engine.getEncrypt());
    newEng.setLabel(engine.getLabel());
    newEng.setMainUrl(engine.getMainUrl());
    newEng.setName(engine.getName());
    newEng.setObjUplDir(engine.getObjUplDir());
    newEng.setObjUseDir(engine.getObjUseDir());
    newEng.setSecnUrl(engine.getSecnUrl());
    newEng.setClassNm(engine.getClassNm());
    newEng.setUseDataSet(engine.getUseDataSet());
    newEng.setUseDataSource(engine.getUseDataSource());
    logger.debug("OUT");
    return newEng;
  }

  /**
   * Make new data source.
   *
   * @param ds the ds
   *
   * @return the sbi data source
   */
  public static SbiDataSource makeNewSbiDataSource(SbiDataSource ds){
    logger.debug("IN");
    SbiDataSource newDS = new SbiDataSource();
    newDS.setDescr(ds.getDescr());
    newDS.setLabel(ds.getLabel());
    newDS.setJndi(ds.getJndi());
    newDS.setDriver(ds.getDriver());
    newDS.setPwd(ds.getPwd());
    newDS.setUrl_connection(ds.getUrl_connection());
    newDS.setUser(ds.getUser());
    newDS.setMultiSchema((ds.getMultiSchema()!=null) ? ds.getMultiSchema() : Boolean.valueOf(false) );
    newDS.setSchemaAttribute(ds.getSchemaAttribute());
    logger.debug("OUT");
    return newDS;
 

  public static SbiDataSource modifyExistingSbiDataSource(
      SbiDataSource dataSource, Session sessionCurrDB,
      Integer existingDatasourceId) {
    logger.debug("IN");
    SbiDataSource existingDatasource = null;
    try {
      existingDatasource = (SbiDataSource) sessionCurrDB.load(SbiDataSource.class, existingDatasourceId);
      existingDatasource.setDescr(dataSource.getDescr());
      existingDatasource.setDialect(dataSource.getDialect());
      existingDatasource.setDialectDescr(dataSource.getDialectDescr());
      existingDatasource.setDriver(dataSource.getDriver());
      existingDatasource.setJndi(dataSource.getJndi());
      existingDatasource.setLabel(dataSource.getLabel());
      existingDatasource.setPwd(dataSource.getPwd());
      existingDatasource.setUrl_connection(dataSource.getUrl_connection());
      existingDatasource.setUser(dataSource.getUser());
      existingDatasource.setMultiSchema((dataSource.getMultiSchema()!=null) ? dataSource.getMultiSchema() : Boolean.valueOf(false));
      existingDatasource.setSchemaAttribute(dataSource.getSchemaAttribute());
    } finally {
      logger.debug("OUT");
    }
    return existingDatasource;
  }



  /**
   * Creates a new hibernate engine object.
   *
   * @param engine old hibernate engine object
   * @param id the id
   *
   * @return the new hibernate engine object
   */
  public static SbiEngines makeNewSbiEngine(SbiEngines engine, Integer id){
    logger.debug("IN");
    SbiEngines newEng = makeNewSbiEngine(engine);
    newEng.setEngineId(id);
    logger.debug("OUT");
    return newEng;
  }


  /**
   * Creates a new hibernate functionality object.
   *
   * @param funct the funct
   *
   * @return the new hibernate functionality object
   */
  public static SbiFunctions makeNewSbiFunction(SbiFunctions funct){
    logger.debug("IN");
    SbiFunctions newFunct = new SbiFunctions();
    newFunct.setCode(funct.getCode());
    newFunct.setDescr(funct.getDescr());
    newFunct.setFunctType(funct.getFunctType());
    newFunct.setFunctTypeCd(funct.getFunctTypeCd());
    newFunct.setName(funct.getName());
    newFunct.setParentFunct(funct.getParentFunct());
    newFunct.setPath(funct.getPath());
    logger.debug("OUT");
    return newFunct;
  }

  /**
   * Creates a new hibernate functionality object.
   *
   * @param funct the funct
   * @param id the id
   *
   * @return the new hibernate functionality object
   */
  public static SbiFunctions makeNewSbiFunction(SbiFunctions funct, Integer id){
    logger.debug("IN");
    SbiFunctions newFunct = makeNewSbiFunction(funct);
    newFunct.setFunctId(id);
    logger.debug("OUT");
    return newFunct;
  }


  /**
   * Creates a new hibernate lov object.
   *
   * @param lov old hibernate lov object
   *
   * @return the new hibernate lov object
   */
  public static SbiLov makeNewSbiLov(SbiLov lov,
      HashMap<String, String> dsExportUser){
    logger.debug("IN");
    SbiLov newlov = new SbiLov();
    newlov.setDefaultVal(lov.getDefaultVal());
    newlov.setDescr(lov.getDescr());
    newlov.setInputType(lov.getInputType());
    newlov.setInputTypeCd(lov.getInputTypeCd());
    newlov.setLabel(lov.getLabel());
    newlov.setLovProvider(lov.getLovProvider());
    newlov.setName(lov.getName());
    newlov.setProfileAttr(lov.getProfileAttr());

    try {
      // if user has associated another datasource then set the associated one, else put the same
      QueryDetail queryDetail=new QueryDetail(lov.getLovProvider());
      String dataSource=queryDetail.getDataSource();
      if(dsExportUser!=null && dsExportUser.get(dataSource)!=null){
        String newDs=dsExportUser.get(dataSource);
        queryDetail.setDataSource(newDs);
      } else {
        queryDetail.setDataSource(dataSource);
      }
      newlov.setLovProvider(queryDetail.toXML());       
    }
    catch (Exception e) {
      logger.error("error in reading the xml of lov provider; transcribe the original by default ");   
    }
    if(newlov.getLovProvider() == null){
      newlov.setLovProvider(lov.getLovProvider());
    }

    logger.debug("OUT");
    return newlov;
  }

  /**
   * Creates a new hibernate lov object.
   *
   * @param lov old hibernate lov object
   * @param id the id
   *
   * @return the new hibernate lov object
   */
  public static SbiLov makeNewSbiLov(SbiLov lov, Integer id, Map user){
    logger.debug("IN");
    SbiLov newlov = makeNewSbiLov(lov, null);
    newlov.setLovId(id);
    logger.debug("OUT");
    return newlov;
  }


  /**
   * Creates a new hibernate check object.
   *
   * @param check old hibernate check object
   *
   * @return the new hibernate check object
   */
  public static SbiChecks makeNewSbiCheck(SbiChecks check){
    logger.debug("IN");
    SbiChecks newck = new SbiChecks();
    newck.setCheckType(check.getCheckType());
    newck.setDescr(check.getDescr());
    newck.setLabel(check.getLabel());
    newck.setName(check.getName());
    newck.setValue1(check.getValue1());
    newck.setValue2(check.getValue2());
    newck.setValueTypeCd(check.getValueTypeCd());
    logger.debug("OUT");
    return newck;
  }

  /**
   * Creates a new hibernate check object.
   *
   * @param check old hibernate check object
   * @param id the id
   *
   * @return the new hibernate check object
   */
  public static SbiChecks makeNewSbiCheck(SbiChecks check, Integer id){
    logger.debug("IN");
    SbiChecks newCk = makeNewSbiCheck(check);
    newCk.setCheckId(id);
    logger.debug("OUT");
    return newCk;
  }


  /**
   * Creates a new hibernate parameter object.
   *
   * @param param the param
   *
   * @return the new hibernate parameter object
   */
  public static SbiParameters makeNewSbiParameter(SbiParameters param){
    logger.debug("IN");
    SbiParameters newPar = new SbiParameters();
    newPar.setDescr(param.getDescr());
    newPar.setLabel(param.getLabel());
    newPar.setLength(param.getLength());
    newPar.setMask(param.getMask());
    newPar.setName(param.getName());
    newPar.setParameterType(param.getParameterType());
    newPar.setParameterTypeCode(param.getParameterTypeCode());
    newPar.setSbiObjPars(new HashSet());
    newPar.setSbiParuses(new HashSet());
    newPar.setFunctionalFlag(param.getFunctionalFlag());
    newPar.setTemporalFlag(param.getTemporalFlag());
    logger.debug("OUT");
    return newPar;
  }

  /**
   * Creates a new hibernate parameter object.
   *
   * @param param the param
   * @param id the id
   *
   * @return the new hibernate parameter object
   */
  public static SbiParameters makeNewSbiParameter(SbiParameters param, Integer id){
    logger.debug("IN");
    SbiParameters newPar = makeNewSbiParameter(param);
    newPar.setParId(id);
    logger.debug("OUT");
    return newPar;
  }

  /**
   * Creates a new hibernate parameter use object.
   *
   * @param paruse the paruse
   *
   * @return the new hibernate parameter use object
   */
  public static SbiParuse makeNewSbiParuse(SbiParuse paruse){
    logger.debug("IN");
    SbiParuse newParuse = new SbiParuse();
    newParuse.setDescr(paruse.getDescr());
    newParuse.setLabel(paruse.getLabel());
    newParuse.setName(paruse.getName());
    newParuse.setSbiLov(paruse.getSbiLov());
    newParuse.setSbiParameters(paruse.getSbiParameters());
    newParuse.setSbiParuseCks(new HashSet());
    newParuse.setSbiParuseDets(new HashSet());
    newParuse.setManualInput(paruse.getManualInput());
    newParuse.setSelectionType(paruse.getSelectionType());
    newParuse.setMultivalue(paruse.getMultivalue());
    logger.debug("OUT");
    return newParuse;
  }


  /**
   * Creates a new hibernate parameter use object.
   *
   * @param paruse the paruse
   * @param id the id
   *
   * @return the new hibernate parameter use object
   */
  public static SbiParuse makeNewSbiParuse(SbiParuse paruse, Integer id){
    logger.debug("IN");
    SbiParuse newParuse = makeNewSbiParuse(paruse);
    newParuse.setUseId(id);
    logger.debug("OUT");
    return newParuse;
  }

  /**
   * Creates a new hibernate biobject.
   *
   * @param obj old hibernate biobject
   *
   * @return the new hibernate biobject
   */
  public static SbiObjects makeNewSbiObject(SbiObjects obj){
    logger.debug("IN");
    SbiObjects newObj = new SbiObjects();
    newObj.setDescr(obj.getDescr());
    newObj.setEncrypt(obj.getEncrypt());
    newObj.setExecMode(obj.getExecMode());
    newObj.setExecModeCode(obj.getExecModeCode());
    newObj.setLabel(obj.getLabel());
    newObj.setName(obj.getName());
    newObj.setObjectType(obj.getObjectType());
    //newObj.setObjectTypeCode(obj.getObjectTypeCode());
    newObj.setPath(obj.getPath());
    newObj.setRelName(obj.getRelName());
    //newObj.setSbiEngines(obj.getSbiEngines());
    newObj.setSbiObjPars(new HashSet());
    newObj.setSbiObjFuncs(new HashSet());
    newObj.setSbiObjStates(new HashSet());
    newObj.setSchedFl(obj.getSchedFl());
    newObj.setState(obj.getState());
    newObj.setStateCode(obj.getStateCode());
    newObj.setStateConsideration(obj.getStateConsideration());
    newObj.setStateConsiderationCode(obj.getStateConsiderationCode());
    newObj.setVisible(obj.getVisible());
    newObj.setProfiledVisibility(obj.getProfiledVisibility());
    newObj.setUuid(obj.getUuid());
    newObj.setCreationDate(obj.getCreationDate());
    newObj.setCreationUser(obj.getCreationUser());
    newObj.setRefreshSeconds(obj.getRefreshSeconds());
    //newObj.setDataSource(obj.getDataSource());
    logger.debug("OUT");
    return newObj;
  }

  /**
   * Make new sbi snapshots.
   *
   * @param obj the obj
   *
   * @return the sbi snapshots
   */
  public static SbiSnapshots makeNewSbiSnapshots(SbiSnapshots obj){
    logger.debug("IN");
    SbiSnapshots newObj = new SbiSnapshots();
    newObj.setCreationDate(obj.getCreationDate());
    newObj.setDescription(obj.getDescription());
    newObj.setName(obj.getName());
    logger.debug("OUT");
    return newObj;
  }

  /**
   * Make new sbi sub objects.
   *
   * @param obj the obj
   *
   * @return the sbi sub objects
   */
  public static SbiSubObjects makeNewSbiSubObjects(SbiSubObjects obj){
    logger.debug("IN");
    SbiSubObjects newObj = new SbiSubObjects();
    newObj.setCreationDate(obj.getCreationDate());
    newObj.setDescription(obj.getDescription());
    newObj.setIsPublic(obj.getIsPublic());
    newObj.setLastChangeDate(obj.getLastChangeDate());
    newObj.setName(obj.getName());
    newObj.setOwner(obj.getOwner());
    logger.debug("OUT");
    return newObj;
 

  /**
   * Make new sbi obj templates.
   *
   * @param obj the obj
   *
   * @return the sbi obj templates
   */
  public static SbiObjTemplates makeNewSbiObjTemplates(SbiObjTemplates obj){
    logger.debug("IN");
    SbiObjTemplates newObj = new SbiObjTemplates();
    newObj.setActive(obj.getActive());
    newObj.setCreationDate(obj.getCreationDate());
    newObj.setCreationUser(obj.getCreationUser());
    newObj.setName(obj.getName());
    newObj.setProg(obj.getProg());
    newObj.setDimension(obj.getDimension());
    logger.debug("OUT");
    return newObj;
  }

  /**
   * Make new sbi bin contents.
   *
   * @param obj the obj
   *
   * @return the sbi bin contents
   */
  public static SbiBinContents makeNewSbiBinContents(SbiBinContents obj){
    logger.debug("IN");
    SbiBinContents newObj = new SbiBinContents();
    newObj.setContent(obj.getContent());
    logger.debug("OUT");
    return newObj;
 

  /**
   * Creates a new hibernate biobject.
   *
   * @param obj old hibernate biobject
   * @param id the id
   *
   * @return the new hibernate biobject
   */
  public static SbiObjects makeNewSbiObject(SbiObjects obj, Integer id){
    logger.debug("IN");
    SbiObjects newObj = makeNewSbiObject(obj);
    newObj.setBiobjId(id);
    logger.debug("OUT");
    return newObj;
  }

  /**
   * Load an existing biobject and make modifications as per the exported biobject in input
   * (existing associations with functionalities are maintained, while existing associations
   * with parameters are deleted).
   *
   * @param exportedObj the exported obj
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing biobject modified as per the exported biobject in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiObjects modifyExistingSbiObject(SbiObjects exportedObj, Session sessionCurrDB,
      Integer existingId) throws EMFUserError {
    logger.debug("IN");
    SbiObjects existingObj = null;
    try {
      // update document
      existingObj = (SbiObjects) sessionCurrDB.load(SbiObjects.class, existingId);
      existingObj.setName(exportedObj.getName());
      existingObj.setDescr(exportedObj.getDescr());
      existingObj.setLabel(exportedObj.getLabel());
      existingObj.setExecModeCode(exportedObj.getExecModeCode());
      existingObj.setObjectTypeCode(exportedObj.getObjectTypeCode());
      existingObj.setPath(exportedObj.getPath());
      existingObj.setRelName(exportedObj.getRelName());
      existingObj.setStateConsiderationCode(exportedObj.getStateConsiderationCode());
      existingObj.setUuid(exportedObj.getUuid());
      existingObj.setEncrypt(exportedObj.getEncrypt());
      existingObj.setSbiEngines(exportedObj.getSbiEngines());
      existingObj.setSchedFl(exportedObj.getSchedFl());
      existingObj.setSbiObjStates(new HashSet());
      existingObj.setVisible(exportedObj.getVisible());
      existingObj.setProfiledVisibility(exportedObj.getProfiledVisibility());
      existingObj.setRefreshSeconds(exportedObj.getRefreshSeconds());

      // deletes existing associations between object and parameters
      Set objPars = existingObj.getSbiObjPars();
      Iterator objParsIt = objPars.iterator();
      while (objParsIt.hasNext()) {
        SbiObjPar objPar = (SbiObjPar) objParsIt.next();
        // for each biobjectparameter deletes all its dependencies, if any
        Query query = sessionCurrDB.createQuery(" from SbiObjParuse where id.sbiObjPar.objParId = " + objPar.getObjParId());
        List dependencies = query.list();
        if (dependencies != null && !dependencies.isEmpty()) {
          Iterator it = dependencies.iterator();
          while (it.hasNext()) {
            SbiObjParuse aSbiObjParuse = (SbiObjParuse) it.next();
            sessionCurrDB.delete(aSbiObjParuse);
          }
        }
        sessionCurrDB.delete(objPar);
      }
    } finally {
      logger.debug("OUT");
    }
    return existingObj;
  }

  /**
   * Load an existing parameter and make modifications as per the exported parameter in input
   * (existing associations with biobjects are maintained, while parameter uses are deleted).
   *
   * @param exportedParameter the exported parameter
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing parameter modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiParameters modifyExistingSbiParameter(SbiParameters exportedParameter, Session sessionCurrDB,
      Integer existingId) throws EMFUserError {
    logger.debug("IN");
    SbiParameters existingPar = null;
    try {
      // update parameter
      existingPar = (SbiParameters) sessionCurrDB.load(SbiParameters.class, existingId);
      existingPar.setDescr(exportedParameter.getDescr());
      existingPar.setLabel(exportedParameter.getLabel());
      existingPar.setLength(exportedParameter.getLength());
      existingPar.setMask(exportedParameter.getMask());
      existingPar.setName(exportedParameter.getName());
      existingPar.setSbiParuses(new HashSet());
      existingPar.setFunctionalFlag(exportedParameter.getFunctionalFlag());
      existingPar.setTemporalFlag(exportedParameter.getTemporalFlag());
      // deletes existing associations between object and parameters
      Set paruses = existingPar.getSbiParuses();
      Iterator parusesIt = paruses.iterator();
      while (parusesIt.hasNext()) {
        SbiParuse paruse = (SbiParuse) parusesIt.next();
        sessionCurrDB.delete(paruse);
      }
    } finally {
      logger.debug("OUT");
    }
    return existingPar;
  }

  /**
   * Creates a new hibernate biobject parameter object.
   *
   * @param objpar the objpar
   *
   * @return the sbi obj par
   */
  public static SbiObjPar makeNewSbiObjpar(SbiObjPar objpar){
    logger.debug("IN");
    SbiObjPar newObjPar = new SbiObjPar();
    newObjPar.setLabel(objpar.getLabel());
    newObjPar.setModFl(objpar.getModFl());
    newObjPar.setMultFl(objpar.getMultFl());
    newObjPar.setParurlNm(objpar.getParurlNm());
    newObjPar.setPriority(objpar.getPriority());
    newObjPar.setProg(objpar.getProg());
    newObjPar.setReqFl(objpar.getReqFl());
    newObjPar.setSbiObject(objpar.getSbiObject());
    newObjPar.setSbiParameter(objpar.getSbiParameter());
    newObjPar.setViewFl(objpar.getViewFl());
    logger.debug("OUT");
    return newObjPar;
  }

  /**
   * Creates a new hibernate biobject parameter object.
   *
   * @param objpar the objpar
   * @param id the id
   *
   * @return the sbi obj par
   */
  public static SbiObjPar makeNewSbiObjpar(SbiObjPar objpar, Integer id){
    logger.debug("IN");
    SbiObjPar newObjPar = makeNewSbiObjpar(objpar);
    newObjPar.setObjParId(id);
    logger.debug("OUT");
    return newObjPar;
  }


  /**
   * Set into the biobject to the engine/object type/object state/datasource
   * the entities associated with the exported biobject.
   *
   * @param obj the obj
   * @param exportedObj the exported obj
   * @param sessionCurrDB the session curr db
   * @param importer the importer
   * @param metaAss the meta ass
   *
   * @throws EMFUserError the EMF user error
   */
  public static void associateWithExistingEntities(SbiObjects obj,
      SbiObjects exportedObj, Session sessionCurrDB,
      ImporterMetadata importer, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    try {
      // reading exist engine
      SbiEngines engine = getAssociatedSbiEngine(exportedObj, sessionCurrDB, metaAss);
      obj.setSbiEngines(engine);
      // reading exist object type
      SbiDomains existDom = getAssociatedBIObjectType(exportedObj, sessionCurrDB, importer);
      if (existDom != null) {
        obj.setObjectType(existDom);
        obj.setObjectTypeCode(existDom.getValueCd());
      }
      // reading exist state
      SbiDomains existDomSt = getAssociatedBIObjectState(exportedObj, sessionCurrDB, importer);
      if (existDomSt != null) {
        obj.setState(existDomSt);
        obj.setStateCode(existDomSt.getValueCd());
      }
      // reading exist datasource
      SbiDataSource localDS = getAssociatedSbiDataSource(exportedObj, sessionCurrDB, metaAss);
      if (localDS != null) obj.setDataSource(localDS);
      // reading exist datasset
      SbiDataSetConfig localDataSet = getAssociatedSbiDataSet(exportedObj, sessionCurrDB, metaAss);
      if (localDataSet != null) obj.setDataSet(localDataSet);
    } finally {
      logger.debug("OUT");
    }
  }


  private static SbiDataSource getAssociatedSbiDataSource(
      SbiObjects exportedObj, Session sessionCurrDB,
      MetadataAssociations metaAss) {
    logger.debug("IN");
    SbiDataSource expDs = exportedObj.getDataSource();
    if (expDs != null) {
      Integer existingDsId = (Integer) metaAss.getDataSourceIDAssociation().get(new Integer(expDs.getDsId()));
      //      if (label == null) {
      //      // exist a DataSource Association, read a new DataSource
      //      // from the DB
      //      label = expDs.getLabel();
      //      }
      //      Criterion labelCriterrion = Expression.eq("label", label);
      //      Criteria criteria = sessionCurrDB.createCriteria(SbiDataSource.class);
      //      criteria.add(labelCriterrion);
      //      SbiDataSource localDS = (SbiDataSource) criteria.uniqueResult();
      SbiDataSource localDS = (SbiDataSource) sessionCurrDB.load(SbiDataSource.class, existingDsId);
      logger.debug("OUT");
      return localDS;
    } else {
      logger.debug("OUT");
      return null;
    }

  }

  private static SbiDataSetConfig getAssociatedSbiDataSet(
      SbiObjects exportedObj, Session sessionCurrDB,
      MetadataAssociations metaAss) {
    logger.debug("IN");
    SbiDataSetConfig expDataset = exportedObj.getDataSet();
    if (expDataset != null) {
      Integer existingDatasetId = (Integer) metaAss.getDataSetIDAssociation().get(new Integer(expDataset.getDsId()));
      SbiDataSetConfig localDS = (SbiDataSetConfig) sessionCurrDB.load(SbiDataSetConfig.class, existingDatasetId);
      logger.debug("OUT");
      return localDS;
    } else {
      logger.debug("OUT");
      return null;
    }

  }

  private static SbiDomains getAssociatedBIObjectState(
      SbiObjects exportedObj, Session sessionCurrDB,
      ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    String stateCd = exportedObj.getStateCode();
    Map unique = new HashMap();
    unique.put("valuecd", stateCd);
    unique.put("domaincd", "STATE");
    SbiDomains existDomSt = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
    logger.debug("OUT");
    return existDomSt;
  }


  private static SbiDomains getAssociatedBIObjectType(SbiObjects exportedObj,
      Session sessionCurrDB, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    String typeCd = exportedObj.getObjectTypeCode();
    Map unique = new HashMap();
    unique.put("valuecd", typeCd);
    unique.put("domaincd", "BIOBJ_TYPE");
    SbiDomains existDom = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
    logger.debug("OUT");
    return existDom;
  }


  private static SbiDomains getAssociatedDomainForKpiString domainCode, String typeDomain, Session sessionCurrDB, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    Map unique = new HashMap();
    unique.put("valuecd", domainCode);
    //could be STATE, KPI_CHART, MODALITY ecc
    unique.put("domaincd", typeDomain);
    SbiDomains existDomSt = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
    logger.debug("OUT");
    return existDomSt;
  }


  private static SbiEngines getAssociatedSbiEngine(SbiObjects exportedObj,
      Session sessionCurrDB, MetadataAssociations metaAss) {
    logger.debug("IN");
    SbiEngines existingEngine = null;
    SbiEngines engine = exportedObj.getSbiEngines();
    Integer expEngId = engine.getEngineId();
    Map assEngs = metaAss.getEngineIDAssociation();
    Integer existingId = (Integer) assEngs.get(expEngId);
    if (existingId != null) {
      existingEngine = (SbiEngines) sessionCurrDB.load(SbiEngines.class, existingId);
    }
    logger.debug("OUT");
    return existingEngine;
  }

  private static SbiDataSource getAssociatedSbiDataSource(SbiQueryDataSet exportedDataset,
      Session sessionCurrDB, MetadataAssociations metaAss) {
    logger.debug("IN");
    SbiDataSource existingDs = null;
    SbiDataSource exportedDs = exportedDataset.getDataSource();
    if (exportedDs != null) {
      Integer exportedDsId = new Integer(exportedDs.getDsId());
      Map assDatasources = metaAss.getDataSourceIDAssociation();
      Integer existingDsID = (Integer) assDatasources.get(exportedDsId);
      existingDs = (SbiDataSource) sessionCurrDB.load(SbiDataSource.class, existingDsID);
    }
    logger.debug("OUT");
    return existingDs;
  }





  /**
   * Set into the parameter to the parameter type
   * domain associated with the exported parameter.
   *
   * @param parameter the parameter
   * @param exportedParameter the exported parameter
   * @param sessionCurrDB the session curr db
   * @param importer the importer
   * @param metaAss the meta ass
   *
   * @throws EMFUserError the EMF user error
   */
  public static void associateWithExistingEntities(
      SbiParameters parameter, SbiParameters exportedParameter,
      Session sessionCurrDB, ImporterMetadata importer,
      MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    try {
      // reading existing parameter type
      SbiDomains existDom = getAssociatedParameterType(exportedParameter, sessionCurrDB, metaAss, importer);
      if (existDom != null) {
        parameter.setParameterType(existDom);
        parameter.setParameterTypeCode(existDom.getValueCd());
      }
    } finally {
      logger.debug("OUT");
    }

  }





  /**
   * Make new data set.
   *
   * @param dataProxy the ds
   *
   * @return the sbi data set
   */
  public static SbiDataSetConfig makeNewSbiDataSet(SbiDataSetConfig dataset, SessionContainer session){
    logger.debug("IN");
    SbiDataSetConfig newDsConfig = new SbiDataSetConfig();

    newDsConfig.setLabel(dataset.getLabel());
    newDsConfig.setName(dataset.getName());
    newDsConfig.setDescription(dataset.getDescription());
    SbiCommonInfo i = new SbiCommonInfo();
    IEngUserProfile profile = (IEngUserProfile)session.getPermanentContainer().getAttribute(IEngUserProfile.ENG_USER_PROFILE);
    String userid = "biadmin";
    if(profile!=null){
      userid =(String) profile.getUserUniqueIdentifier();
    }
    i.setTimeIn(new Date());
    i.setUserIn(userid);
    i.setSbiVersionIn(SbiCommonInfo.SBI_VERSION);
    newDsConfig.setCommonInfo(i);

    logger.debug("OUT");
    return newDsConfig;
 






  /**
   * Load an existing dataset and make modifications as per the exported dataset in input
   * For what concern the history keep track of the previous one and insert the new one
   *
   * @param exportedDataset the exported dataset
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing dataset modified as per the exported dataset in input
   *
   * @throws EMFUserError    */
  public static SbiDataSetConfig modifyExistingSbiDataSet(SbiDataSetConfig exportedDataset,
      Session sessionCurrDB, Integer existingId, Session sessionExpDB, SessionContainer session) {
    logger.debug("IN");
    SbiDataSetConfig existingDataset = null;
    try {
      existingDataset = (SbiDataSetConfig) sessionCurrDB.load(SbiDataSetConfig.class, existingId);
      existingDataset.setLabel(exportedDataset.getLabel());
      existingDataset.setName(exportedDataset.getName());     
      existingDataset.setDescription(exportedDataset.getDescription());
      existingDataset.setLabel(exportedDataset.getLabel());
      existingDataset.setName(exportedDataset.getName());     
      existingDataset.setDescription(exportedDataset.getDescription());
      SbiCommonInfo i = new SbiCommonInfo();
      IEngUserProfile profile = (IEngUserProfile)session.getPermanentContainer().getAttribute(IEngUserProfile.ENG_USER_PROFILE);
      String userid = "biadmin";
      if(profile!=null){
        userid =(String) profile.getUserUniqueIdentifier();
      }
      i.setTimeIn(new Date());
      i.setUserIn(userid);
      i.setSbiVersionIn(SbiCommonInfo.SBI_VERSION);
      existingDataset.setCommonInfo(i);


      // Make precedent active inactive, new one will be active
      Query hibQueryPreActive = sessionCurrDB.createQuery("from SbiDataSetHistory h where h.active = ? and h.sbiDsConfig = ?" );
      hibQueryPreActive.setBoolean(0, true);
      hibQueryPreActive.setInteger(1, existingId)
      SbiDataSetHistory  preActive = (SbiDataSetHistory)hibQueryPreActive.uniqueResult();
      preActive.setActive(false);
      sessionCurrDB.update(preActive);

      //      // finally save the new exported history
      //      // insert new Active dataset: in the export DB there is only one for each datasetConfig
      //      Query hibQuery = sessionExpDB.createQuery(" from SbiDataSetHistory where dsId = '" + exportedDataset.getDsId() + "'");
      //      SbiDataSetHistory dsHistory = (SbiDataSetHistory)hibQuery.uniqueResult();
      //
      //
      //      // create a copy for current dataset (cannot modify the one retieved frome export DB
      //      SbiDataSetHistory dsnewHistory = DAOFactory.getDataSetDAO().copyDataSetHistory(dsHistory );
      //
      //      dsnewHistory.setDsId(existingDataset);
      //      sessionCurrDB.save(dsnewHistory);

    }
    catch (Exception e) {
      logger.error("Error in modifying exported dataset "+exportedDataset.getLabel(), e);
    }
    finally {
      logger.debug("OUT");
    }
    return existingDataset;
  }


  // insert


  /**
   * associate the new History
   * associated with the exported dataset.
   *
   * @param dataset the dataset
   * @param exportedDataset the exported dataset
   * @param sessionCurrDB the session curr db
   * @param importer the importer
   * @param metaAss the meta ass
   *
   * @throws EMFUserError the EMF user error
   */


  public static void associateNewSbiDataSethistory(SbiDataSetConfig dataset,
      SbiDataSetConfig exportedDataset, Session sessionCurrDB, Session sessionExpDB,
      ImporterMetadata importer, MetadataAssociations metaAss, SessionContainer session) {
    logger.debug("IN");
    try {
      // save the new exported history
      // insert new Active dataset: in the export DB there is only one for each datasetConfig
      Query hibQuery = sessionExpDB.createQuery(" from SbiDataSetHistory where sbiDsConfig = '" + exportedDataset.getDsId() + "'");
      SbiDataSetHistory dsHistory = (SbiDataSetHistory)hibQuery.uniqueResult();

      // create a copy for current dataset (cannot modify the one retieved frome export DB
      SbiDataSetHistory dsnewHistory = DAOFactory.getDataSetDAO().copyDataSetHistory(dsHistory );

      dsnewHistory.setSbiDsConfig(dataset);

      // associate data source
      if (dsHistory instanceof SbiQueryDataSet) {
        SbiQueryDataSet queryDataSet = (SbiQueryDataSet) dsHistory;
        SbiDataSource ds = getAssociatedSbiDataSource(queryDataSet, sessionCurrDB, metaAss);
        if (ds != null) {
          ((SbiQueryDataSet) dsnewHistory).setDataSource(ds);
        }
      }

      SbiDomains transformer = getAssociatedTransfomerType(exportedDataset, sessionCurrDB, metaAss, importer);
      if (transformer != null) {
        dsnewHistory.setTransformer(transformer);

      }
      SbiCommonInfo i = new SbiCommonInfo();
      IEngUserProfile profile = (IEngUserProfile)session.getPermanentContainer().getAttribute(IEngUserProfile.ENG_USER_PROFILE);
      String userid = "biadmin";
      if(profile!=null){
        userid =(String) profile.getUserUniqueIdentifier();
      }
     
      dsnewHistory.setUserIn(userid);
      dsnewHistory.setTimeIn(new Date());
      dsnewHistory.setSbiVersionIn(SbiCommonInfo.SBI_VERSION);

      sessionCurrDB.save(dsnewHistory);

    } catch (EMFUserError e) {
      logger.error("EMF user Error",e);
      e.printStackTrace();
    }
    finally {
      logger.debug("OUT");
    }
  }








  /**
   * Load an existing lov and make modifications as per the exported lov in input
   * (existing associations with parameters are maintained).
   *
   * @param exportedLov the exported lov
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing lov modified as per the exported lov in input
   *
   * @throws EMFUserError    */
  public static SbiLov modifyExistingSbiLov(SbiLov exportedLov,
      Session sessionCurrDB, Integer existingId, HashMap<String, String> dsExportUser) {
    logger.debug("IN");
    SbiLov existingLov = null;
    try {
      existingLov = (SbiLov) sessionCurrDB.load(SbiLov.class, existingId);
      existingLov.setDefaultVal(exportedLov.getDefaultVal());
      existingLov.setDescr(exportedLov.getDescr());
      existingLov.setLabel(exportedLov.getLabel());

      try {
        // if user has associated another datasource then set the associated one, else put the same
        QueryDetail queryDetail=new QueryDetail(exportedLov.getLovProvider());
        String dataSource=queryDetail.getDataSource();
        if(dsExportUser!=null && dsExportUser.get(dataSource)!=null){
          String newDs=dsExportUser.get(dataSource);
          queryDetail.setDataSource(newDs);
        } else {
          queryDetail.setDataSource(dataSource);
        }

        existingLov.setLovProvider(queryDetail.toXML());       
      }
      catch (Exception e) {
        logger.error("error in reading the xml of lov provider; transcribe the original by default ");   
        existingLov.setLovProvider(exportedLov.getLovProvider());
      }

      existingLov.setName(exportedLov.getName());
      existingLov.setProfileAttr(exportedLov.getProfileAttr());
    } finally {
      logger.debug("OUT");
    }
    return existingLov;
  }


  /**
   * Set into the lov the lov type domain
   * associated with the exported lov.
   *
   * @param lov the lov
   * @param exportedLov the exported lov
   * @param sessionCurrDB the session curr db
   * @param importer the importer
   * @param metaAss the meta ass
   *
   * @throws EMFUserError the EMF user error
   */
  public static void associateWithExistingEntities(SbiLov lov,
      SbiLov exportedLov, Session sessionCurrDB,
      ImporterMetadata importer, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    try {
      // reading existing lov type
      SbiDomains existDom = getAssociatedLovType(exportedLov, sessionCurrDB, metaAss, importer);
      if (existDom != null) {
        lov.setInputType(existDom);
        lov.setInputTypeCd(existDom.getValueCd());
      }
    } finally {
      logger.debug("OUT");
    }
  }

  /**
   * Set into the datasource the dialect type domain
   * associated with the exported datasource.
   *
   * @param datasource the datasource
   * @param exportedDatasource the exported lov
   * @param sessionCurrDB the session curr db
   * @param importer the importer
   * @param metaAss the meta ass
   *
   * @throws EMFUserError the EMF user error
   */
  public static void associateWithExistingEntities(SbiDataSource datasource,
      SbiDataSource exportedDatasource, Session sessionCurrDB,
      ImporterMetadata importer, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    try {
      // reading existing lov type
      SbiDomains dialect = getAssociatedDialect(exportedDatasource, sessionCurrDB, metaAss, importer);
      if (dialect != null) {
        datasource.setDialect(dialect);
        datasource.setDialectDescr(dialect.getValueDs());
      }
    } finally {
      logger.debug("OUT");
    }
  }



  private static SbiDomains getAssociatedTransfomerType(SbiDataSetConfig exportedDataset,
      Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    //TODO mettere a posto con nuove tabelle dataset
    /*SbiDomains transformer = exportedDataset.getTransformer();
    if (transformer == null) {
      logger.debug("Transformer not set for exported dataset [" + exportedDataset.getLabel() + "]");
      return null;
    }
    String typeCd = transformer.getValueCd();
    Map unique = new HashMap();
    unique.put("valuecd", typeCd);
    unique.put("domaincd", "TRANSFORMER_TYPE");
    SbiDomains existDom = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
     */
    logger.debug("OUT");
    return null;
  }

  private static SbiDomains getAssociatedParameterType(SbiParameters exportedParameter,
      Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    String typeCd = exportedParameter.getParameterTypeCode();
    Map unique = new HashMap();
    unique.put("valuecd", typeCd);
    unique.put("domaincd", "PAR_TYPE");
    SbiDomains existDom = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
    logger.debug("OUT");
    return existDom;
  }

  private static SbiDomains getAssociatedDialect(SbiDataSource exportedDatasource,
      Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    String valueCd = exportedDatasource.getDialect().getValueCd();
    Map unique = new HashMap();
    unique.put("valuecd", valueCd);
    unique.put("domaincd", "DIALECT_HIB");
    SbiDomains existDom = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
    logger.debug("OUT");
    return existDom;
  }

  private static SbiDomains getAssociatedLovType(SbiLov exportedLov,
      Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    String inpTypeCd = exportedLov.getInputTypeCd();
    Map unique = new HashMap();
    unique.put("valuecd", inpTypeCd);
    unique.put("domaincd", "INPUT_TYPE");
    SbiDomains existDom = (SbiDomains) importer.checkExistence(unique, sessionCurrDB, new SbiDomains());
    logger.debug("OUT");
    return existDom;
  }

  public static SbiParuseDet makeNewSbiParuseDet(SbiParuseDet parusedet, Integer newParuseid, Integer newRoleid) {
    logger.debug("IN");
    SbiParuseDetId parusedetid = parusedet.getId();
    SbiParuseDetId newParusedetid = new SbiParuseDetId();
    if (newParuseid != null) {
      SbiParuse sbiparuse = parusedetid.getSbiParuse();
      SbiParuse newParuse = ImportUtilities.makeNewSbiParuse(sbiparuse, newParuseid);
      newParusedetid.setSbiParuse(newParuse);
    }
    if (newRoleid != null) {
      SbiExtRoles sbirole = parusedetid.getSbiExtRoles();
      SbiExtRoles newRole = ImportUtilities.makeNewSbiExtRole(sbirole, newRoleid);
      newParusedetid.setSbiExtRoles(newRole);
    }
    SbiParuseDet newParuseDet = new SbiParuseDet();
    newParuseDet.setId(newParusedetid);
    newParuseDet.setDefaultVal(parusedet.getDefaultVal());
    newParuseDet.setHiddenFl(parusedet.getHiddenFl());
    newParuseDet.setProg(parusedet.getProg());
    logger.debug("OUT");
    return newParuseDet;
  }



  public static SbiParuseCk makeNewSbiParuseCk(SbiParuseCk paruseck,
      Integer newParuseid, Integer newCheckid) {
    logger.debug("IN");
    // build a new id for the SbiParuseCheck
    SbiParuseCkId parusecheckid = paruseck.getId();
    SbiParuseCkId newParusecheckid = new SbiParuseCkId();
    if (newParuseid != null) {
      SbiParuse sbiparuse = parusecheckid.getSbiParuse();
      SbiParuse newParuse = ImportUtilities.makeNewSbiParuse(sbiparuse, newParuseid);
      newParusecheckid.setSbiParuse(newParuse);
    }
    if (newCheckid != null) {
      SbiChecks sbicheck = parusecheckid.getSbiChecks();
      SbiChecks newCheck = ImportUtilities.makeNewSbiCheck(sbicheck, newCheckid);
      newParusecheckid.setSbiChecks(newCheck);
    }
    SbiParuseCk newParuseck = new SbiParuseCk();
    newParuseck.setId(newParusecheckid);
    newParuseck.setProg(paruseck.getProg());
    logger.debug("OUT");
    return newParuseck;
  }



  public static SbiFuncRole makeNewSbiFunctRole(SbiFuncRole functrole,
      Integer newFunctid, Integer newRoleid) {
    logger.debug("IN");
    SbiFuncRoleId functroleid = functrole.getId();
    SbiFuncRoleId newFunctroleid = new SbiFuncRoleId();
    if (newFunctid != null) {
      SbiFunctions sbifunct = functroleid.getFunction();
      SbiFunctions newFunct = ImportUtilities.makeNewSbiFunction(sbifunct, newFunctid);
      newFunctroleid.setFunction(newFunct);
    }
    if (newRoleid != null) {
      SbiExtRoles sbirole = functroleid.getRole();
      SbiExtRoles newRole = ImportUtilities.makeNewSbiExtRole(sbirole, newRoleid);
      newFunctroleid.setRole(newRole);
    }
    SbiFuncRole newFunctRole = new SbiFuncRole();
    newFunctRole.setId(newFunctroleid);
    logger.debug("OUT");
    return newFunctRole;
  }


  public static int getImportFileMaxSize() {
    logger.debug("IN");
    int toReturn = MAX_DEFAULT_IMPORT_FILE_SIZE;
    try {
      ConfigSingleton serverConfig = ConfigSingleton.getInstance();
      SourceBean maxSizeSB = (SourceBean) serverConfig.getAttribute("IMPORTEXPORT.IMPORT_FILE_MAX_SIZE");
      if (maxSizeSB != null) {
        String maxSizeStr = (String) maxSizeSB.getCharacters();
        logger.debug("Configuration found for max import file size: " + maxSizeStr);
        Integer maxSizeInt = new Integer(maxSizeStr);
        toReturn = maxSizeInt.intValue();
      } else {
        logger.debug("No configuration found for max import file size");
      }
    } catch (Exception e) {
      logger.error("Error while retrieving max import file size", e);
      logger.debug("Considering default value " + MAX_DEFAULT_IMPORT_FILE_SIZE);
      toReturn = MAX_DEFAULT_IMPORT_FILE_SIZE;
    }
    logger.debug("OUT: max size = " + toReturn);
    return toReturn;
  }

  public static String getImportTempFolderPath() {
    logger.debug("IN");
    String toReturn = null;
    try {
      ConfigSingleton conf = ConfigSingleton.getInstance();
      SourceBean importerSB = (SourceBean) conf.getAttribute("IMPORTEXPORT.IMPORTER");
      toReturn = (String) importerSB.getAttribute("tmpFolder");
      toReturn = GeneralUtilities.checkForSystemProperty(toReturn);
      if (!toReturn.startsWith("/") && toReturn.charAt(1) != ':') {
        String root = ConfigSingleton.getRootPath();
        toReturn = root + "/" + toReturn;
      }
    } catch (Exception e) {
      logger.error("Error while retrieving export temporary folder path", e);
    } finally {
      logger.debug("OUT: export temporary folder path = " + toReturn);
    }
    return toReturn;
  }

  public static IImportManager getImportManagerInstance() throws Exception {
    logger.debug("IN");
    IImportManager toReturn = null;
    try {
      ConfigSingleton conf = ConfigSingleton.getInstance();
      SourceBean importerSB = (SourceBean) conf.getAttribute("IMPORTEXPORT.IMPORTER");
      // instance the importer class
      String impClassName = (String) importerSB.getAttribute("class");
      Class impClass = Class.forName(impClassName);
      toReturn = (IImportManager) impClass.newInstance();
    } catch (Exception e) {
      logger.error("Error while instantiating import manager", e);
      throw e;
    } finally {
      logger.debug("OUT");
    }
    return toReturn;
  }



  /**
   * Creates a new hibernate kpi object.
   *
   * @param kpi kpi
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpi makeNewSbiKpi(SbiKpi kpi,Session sessionCurrDB, MetadataAssociations metaAss){
    logger.debug("IN");
    SbiKpi newKpi = new SbiKpi();
    try{
      newKpi.setDescription(kpi.getDescription());
      newKpi.setCode(kpi.getCode());
      newKpi.setName(kpi.getName());
      newKpi.setSbiKpiDocumentses(kpi.getSbiKpiDocumentses());
      newKpi.setFlgIsFather(kpi.getFlgIsFather());
      newKpi.setMetric(kpi.getMetric());
      newKpi.setWeight(kpi.getWeight());
      newKpi.setInputAttributes(kpi.getInputAttributes());
      newKpi.setInterpretation(kpi.getInterpretation());
      newKpi.setModelReference(kpi.getModelReference());
      newKpi.setTargetAudience(kpi.getTargetAudience());

      // associations
      entitiesAssociationsSbiKpi(kpi, newKpi, sessionCurrDB, metaAss);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new kpi "+newKpi.getCode());     
    }
    finally{

    }
    return newKpi;
  }


  /**
   * Load an existing kpi and make modifications as per the exported kpi in input
   *
   * @param exportedKpi the exported Kpi
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpi modifyExistingSbiKpi(SbiKpi exportedKpi, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    SbiKpi existingKpi = null;
    try {
      // update th Value
      existingKpi = (SbiKpi) sessionCurrDB.load(SbiKpi.class, existingId);
      existingKpi.setCode(exportedKpi.getCode());
      existingKpi.setDescription(exportedKpi.getDescription());
      existingKpi.setSbiKpiDocumentses(exportedKpi.getSbiKpiDocumentses());
      existingKpi.setFlgIsFather(exportedKpi.getFlgIsFather());
      existingKpi.setInputAttributes(exportedKpi.getInputAttributes());
      existingKpi.setInterpretation(exportedKpi.getInterpretation());
      existingKpi.setMetric(exportedKpi.getMetric());
      existingKpi.setModelReference(exportedKpi.getModelReference());
      existingKpi.setName(exportedKpi.getName());
      existingKpi.setTargetAudience(exportedKpi.getTargetAudience());

      // overwrite existging entities (maybe create a function speciic for domains, maybe not)
      entitiesAssociationsSbiKpi(exportedKpi, existingKpi, sessionCurrDB, metaAss);

    }

    finally {
      logger.debug("OUT");
    }
    return existingKpi;
  }


  /**
   * For Kpi search new Ids
   *
   * @param exportedKpi the exported Kpi
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiKpi(SbiKpi exportedKpi, SbiKpi existingKpi, Session sessionCurrDB,
      MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");

    // Kpi Type
    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedKpi.getSbiDomainsByKpiType()!=null){
      Integer oldKpiTypeId=exportedKpi.getSbiDomainsByKpiType().getValueId();
      Integer newKpiTypeId=(Integer)domainIdAss.get(oldKpiTypeId);
      if(newKpiTypeId==null) {
        logger.error("could not find domain "+exportedKpi.getSbiDomainsByKpiType().getDomainNm());
        existingKpi.setSbiDomainsByKpiType(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiKpiType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newKpiTypeId);
        existingKpi.setSbiDomainsByKpiType(newSbiKpiType);
      }
    }
    else{
      existingKpi.setSbiDomainsByKpiType(null);
    }

    // Measure Type
    if(exportedKpi.getSbiDomainsByMeasureType()!=null){
      Integer oldMeasureTypeId=exportedKpi.getSbiDomainsByMeasureType().getValueId();
      Integer newMeasureTypeId=(Integer)domainIdAss.get(oldMeasureTypeId);
      if(newMeasureTypeId==null) {
        logger.error("could not find domain "+exportedKpi.getSbiDomainsByMeasureType().getDomainNm());
        existingKpi.setSbiDomainsByMeasureType(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiMeasureType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newMeasureTypeId);
        existingKpi.setSbiDomainsByMeasureType(newSbiMeasureType);
      }
    }
    else{
      existingKpi.setSbiDomainsByMeasureType(null);
    }

    // Metric Scale type
    if(exportedKpi.getSbiDomainsByMetricScaleType()!=null){
      Integer oldScaleTypeId=exportedKpi.getSbiDomainsByMetricScaleType().getValueId();
      Integer newScaleTypeId=(Integer)domainIdAss.get(oldScaleTypeId);
      if(newScaleTypeId==null) {
        logger.error("could not find domain "+exportedKpi.getSbiDomainsByMetricScaleType().getDomainNm());
        existingKpi.setSbiDomainsByMetricScaleType(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiScaleType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newScaleTypeId);
        existingKpi.setSbiDomainsByMetricScaleType(newSbiScaleType);
      }
    }
    else{
      existingKpi.setSbiDomainsByMetricScaleType(null);
    }

    // dataset
    Map datasetIdAss=metaAss.getDataSetIDAssociation();
    if(exportedKpi.getSbiDataSet()!=null){
      Integer oldDataSetId=exportedKpi.getSbiDataSet().getDsId();
      Integer newDataSetId=(Integer)datasetIdAss.get(oldDataSetId);
      if(newDataSetId==null) {
        logger.error("could not find dataset "+exportedKpi.getSbiDataSet().getLabel());
        existingKpi.setSbiDataSet(null);
      }
      else{
        SbiDataSetConfig newSbiDataset = (SbiDataSetConfig) sessionCurrDB.load(SbiDataSetConfig.class, newDataSetId);
        existingKpi.setSbiDataSet(newSbiDataset);
      }
    }
    else{
      existingKpi.setSbiDataSet(null);
    }

    // threshold
    Map thresholdIdAss=metaAss.getTresholdIDAssociation();
    if(exportedKpi.getSbiThreshold()!=null){
      Integer oldThId=exportedKpi.getSbiThreshold().getThresholdId();
      Integer newThId=(Integer)thresholdIdAss.get(oldThId);
      if(newThId==null) {
        logger.error("could not find threshold "+exportedKpi.getSbiThreshold().getCode());
        existingKpi.setSbiThreshold(null);
      }
      else{
        SbiThreshold newSbiThreshold = (SbiThreshold) sessionCurrDB.load(SbiThreshold.class, newThId);
        existingKpi.setSbiThreshold(newSbiThreshold);
      }
    }
    else{
      existingKpi.setSbiThreshold(null);
    }


  }






  /**
   * Creates a new hibernate kpi instance object.
   *
   * @param SbiKpiInstance kpiInst
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiInstance makeNewSbiKpiInstance(SbiKpiInstance kpiInst,Session sessionCurrDB, MetadataAssociations metaAss){
    logger.debug("IN");
    SbiKpiInstance newKpiInst = new SbiKpiInstance();
    try{
      newKpiInst.setBeginDt(kpiInst.getBeginDt());
      newKpiInst.setTarget(kpiInst.getTarget());
      newKpiInst.setWeight(kpiInst.getWeight());

      // associations
      entitiesAssociationsSbiKpiInstance(kpiInst, newKpiInst, sessionCurrDB, metaAss);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new kpi instance with id "+newKpiInst.getIdKpiInstance());     
    }
    finally{

    }
    return newKpiInst;
  }


  /**
   * Load an existing kpi instance and make modifications as per the exported kpi instance in input
   *
   * @param exportedKpiInst the exported Kpi Instance
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiInstance modifyExistingSbiKpiInstance(SbiKpiInstance exportedKpiInst, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    SbiKpiInstance existingKpiInst = null;
    try {
      // update th Value
      existingKpiInst = (SbiKpiInstance) sessionCurrDB.load(SbiKpiInstance.class, existingId);
      existingKpiInst.setBeginDt(exportedKpiInst.getBeginDt());
      existingKpiInst.setTarget(exportedKpiInst.getTarget());
      existingKpiInst.setWeight(exportedKpiInst.getWeight());

      // overwrite existging entities (maybe create a function speciic for domains, maybe not)
      entitiesAssociationsSbiKpiInstance(exportedKpiInst, existingKpiInst, sessionCurrDB, metaAss);

    }

    finally {
      logger.debug("OUT");
    }
    return existingKpiInst;
  }


  /**
   * For Kpi Instamce search new Ids
   *
   * @param exportedKpiInstance the exported Kpi Instance
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi Instance modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiKpiInstance(SbiKpiInstance exportedKpiInst, SbiKpiInstance existingKpiInst, Session sessionCurrDB,
      MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");

    // Kpi Type
    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedKpiInst.getChartType()!=null){
      Integer oldChartTypeId=exportedKpiInst.getChartType().getValueId();
      Integer newChartTypeId=(Integer)domainIdAss.get(oldChartTypeId);
      if(newChartTypeId==null) {
        logger.error("could not find domain "+exportedKpiInst.getChartType().getDomainNm());
        existingKpiInst.setChartType(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiChartType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newChartTypeId);
        existingKpiInst.setChartType(newSbiChartType);
      }
    }
    else{
      existingKpiInst.setChartType(null);
    }


    //    add Kpi

    Map kpiIdAss=metaAss.getKpiIDAssociation();
    if(exportedKpiInst.getSbiKpi()!=null){
      Integer oldKpiId=exportedKpiInst.getSbiKpi().getKpiId();
      Integer newKpiId=(Integer)kpiIdAss.get(oldKpiId);
      if(newKpiId==null) {
        logger.error("could not find kpi between association"+exportedKpiInst.getSbiKpi().getName());
      }
      else{
        // I must get the new SbiDomains object
        SbiKpi newSbiKpi = (SbiKpi) sessionCurrDB.load(SbiKpi.class, newKpiId);
        existingKpiInst.setSbiKpi(newSbiKpi);
      }
    }

    //    add Threshold

    Map thIdAss=metaAss.getTresholdIDAssociation();
    if(exportedKpiInst.getSbiThreshold()!=null){
      Integer oldThId=exportedKpiInst.getSbiThreshold().getThresholdId();
      Integer newThId=(Integer)thIdAss.get(oldThId);
      if(newThId==null) {
        logger.error("could not find Threshold between association"+exportedKpiInst.getSbiThreshold().getName());
        existingKpiInst.setSbiThreshold(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiThreshold newSbiThreshold = (SbiThreshold) sessionCurrDB.load(SbiThreshold.class, newThId);
        existingKpiInst.setSbiThreshold(newSbiThreshold);
      }
    }
    else{
      existingKpiInst.setSbiThreshold(null);
    }
  }






  /**
   * Creates a new hibernate th value object.
   *
   * @param ThreasholdValue thValue
   *
   * @return the new hibernate parameter object
   */
  public static SbiThresholdValue makeNewSbiThresholdValue(SbiThresholdValue thresholdValue,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiThresholdValue newThValue = new SbiThresholdValue();
    try{
      newThValue.setLabel(thresholdValue.getLabel());
      newThValue.setColour(thresholdValue.getColour());
      newThValue.setMaxValue(thresholdValue.getMaxValue());
      newThValue.setMinValue(thresholdValue.getMinValue());
      newThValue.setPosition(thresholdValue.getPosition());
      newThValue.setMaxClosed(thresholdValue.getMaxClosed());
      newThValue.setMinClosed(thresholdValue.getMinClosed());
      newThValue.setThValue(thresholdValue.getThValue());

      // associations
      entitiesAssociationsSbiThresholdValues(thresholdValue, newThValue, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new kpi "+thresholdValue.getLabel());     
    }
    finally{

    }
    return newThValue;
  }

  /**
   * Load an existing threshold Values and make modifications as per the exported thValue in input
   *
   * @param exportedThValue the exported Th value
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Threshold Value modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiThresholdValue modifyExistingSbiThresholdValue(SbiThresholdValue exportedThValue, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiThresholdValue existingThValue = null;
    try {
      // update th Value
      existingThValue = (SbiThresholdValue) sessionCurrDB.load(SbiThresholdValue.class, existingId);
      existingThValue.setLabel(exportedThValue.getLabel());
      existingThValue.setColour(exportedThValue.getColour());
      existingThValue.setMaxValue(exportedThValue.getMaxValue());
      existingThValue.setMinValue(exportedThValue.getMinValue());
      existingThValue.setPosition(exportedThValue.getPosition());
      existingThValue.setMaxClosed(exportedThValue.getMaxClosed());
      existingThValue.setMinClosed(exportedThValue.getMinClosed());
      existingThValue.setThValue(exportedThValue.getThValue());

      // associations
      entitiesAssociationsSbiThresholdValues(exportedThValue, existingThValue, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingThValue;
  }


  /**
   * For ThresholdValues search new Ids
   *
   * @param exportedKpi the exported Kpi
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiThresholdValues(SbiThresholdValue exportedThValue, SbiThresholdValue existingThvalue,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedThValue.getSeverity()!=null){
      Integer oldSeverityId=exportedThValue.getSeverity().getValueId();
      Integer newSeverityId=(Integer)domainIdAss.get(oldSeverityId);
      if(newSeverityId==null) {
        logger.error("could not find domain between association"+exportedThValue.getSeverity());
        existingThvalue.setSeverity(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiSeverity = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newSeverityId);
        existingThvalue.setSeverity(newSbiSeverity);
      }
    }
    else{
      existingThvalue.setSeverity(null);
    }

    //    add Threshold

    Map thresholdIdAss=metaAss.getTresholdIDAssociation();
    if(exportedThValue.getSbiThreshold()!=null){
      Integer oldThresholdId=exportedThValue.getSbiThreshold().getThresholdId();
      Integer newThresholdId=(Integer)thresholdIdAss.get(oldThresholdId);
      if(newThresholdId==null) {
        logger.error("could not find threshold between association"+exportedThValue.getSbiThreshold().getName());
      }
      else{
        // I must get the new SbiDomains object
        SbiThreshold newSbiThreshold = (SbiThreshold) sessionCurrDB.load(SbiThreshold.class, newThresholdId);
        existingThvalue.setSbiThreshold(newSbiThreshold);
      }
    }
    // TODO sbi alarm,   

  }






























  /**
   * Creates a new hibernate th object.
   *
   * @param Threashold thresdold
   *
   * @return the new hibernate parameter object
   */
  public static SbiThreshold makeNewSbiThreshold(SbiThreshold threshold,Session sessionCurrDB, MetadataAssociations metaAss){
    logger.debug("IN");
    SbiThreshold newTh = new SbiThreshold();
    try{
      newTh.setCode(threshold.getCode());
      newTh.setDescription(threshold.getDescription());
      newTh.setName(threshold.getName());

      // associations
      entitiesAssociationsSbiThreshold(threshold, newTh, sessionCurrDB, metaAss);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new kpi "+threshold.getCode());     
    }
    finally{

    }
    return newTh;
  }

  /**
   * Load an existing threshold  and make modifications as per the exported thValue in input
   *
   * @param exportedThValue the exported Th
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Threshold modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiThreshold modifyExistingSbiThreshold(SbiThreshold exportedTh, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    SbiThreshold existingTh = null;
    try {
      // update th Value
      existingTh = (SbiThreshold) sessionCurrDB.load(SbiThreshold.class, existingId);
      existingTh.setCode(exportedTh.getCode());
      existingTh.setName(exportedTh.getName());

      // associations
      entitiesAssociationsSbiThreshold(exportedTh, existingTh, sessionCurrDB, metaAss);
    }

    finally {
      logger.debug("OUT");
    }
    return existingTh;
  }


  /**
   * For Threshold search new Ids
   *
   * @param exportedKpi the exported Kpi
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiThreshold(SbiThreshold exportedTh, SbiThreshold existingTh,Session sessionCurrDB,
      MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities
    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedTh.getThresholdType()!=null){
      Integer oldThresholdTypeId=exportedTh.getThresholdType().getValueId();
      Integer newThresholdTypeId=(Integer)domainIdAss.get(oldThresholdTypeId);
      if(newThresholdTypeId==null) {
        logger.error("could not find domain "+exportedTh.getThresholdType().getValueCd());
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiThresholdType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newThresholdTypeId);
        existingTh.setThresholdType(newSbiThresholdType);
      }
    }

    // TODO ThresholdValue

  }








  /**
   * Creates a new hibernate model object.
   *
   * @param Model model
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiModel makeNewSbiModel(SbiKpiModel model,Session sessionCurrDB, MetadataAssociations metaAss){
    logger.debug("IN");
    SbiKpiModel newMod = new SbiKpiModel();
    try{
      newMod.setKpiModelLabel(model.getKpiModelLabel());
      newMod.setKpiModelCd(model.getKpiModelCd());
      newMod.setKpiModelDesc(model.getKpiModelDesc());
      newMod.setKpiModelNm(model.getKpiModelNm());

      // if label is null means we are coming from a version < 2.4 (transformator has changed so). Then assign a new unique label
      if(newMod.getKpiModelLabel() == null){
        UUIDGenerator uuidGen  = UUIDGenerator.getInstance();
        UUID uuid = uuidGen.generateTimeBasedUUID();
        newMod.setKpiModelLabel(uuid.toString());
      }

      // associations
      entitiesAssociationsSbiModel(model, newMod, sessionCurrDB, metaAss);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new model "+model.getKpiModelCd());     
    }
    finally{

    }
    return newMod;
  }

  /**
   * Load an existing Model and make modifications
   *
   * @param exportedModel the exported Model
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Model modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiModel modifyExistingSbiModel(SbiKpiModel exportedMod, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    SbiKpiModel existingMod = null;
    try {
      // update th Value
      existingMod = (SbiKpiModel) sessionCurrDB.load(SbiKpiModel.class, existingId);
      existingMod.setKpiModelLabel(exportedMod.getKpiModelLabel());
      existingMod.setKpiModelCd(exportedMod.getKpiModelCd());


      existingMod.setKpiModelNm(exportedMod.getKpiModelNm());
      existingMod.setKpiModelDesc(exportedMod.getKpiModelDesc());

      // associations
      entitiesAssociationsSbiModel(exportedMod, existingMod, sessionCurrDB, metaAss);
    }

    finally {
      logger.debug("OUT");
    }
    return existingMod;
  }


  /**
   * For Model search new Ids
   *
   * @param exportedModel the exported Model
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Model modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiModel(SbiKpiModel exportedMod, SbiKpiModel existingMod,Session sessionCurrDB,
      MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities
    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedMod.getModelType()!=null){
      Integer oldModelTypeId=exportedMod.getModelType().getValueId();
      Integer newModelTypeId=(Integer)domainIdAss.get(oldModelTypeId);
      if(newModelTypeId==null) {
        logger.error("could not find domain "+exportedMod.getModelType().getValueCd());
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiModelType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newModelTypeId);
        existingMod.setModelType(newSbiModelType);
      }
    }

    // Parent
    Map modelIdAss=metaAss.getModelIDAssociation();
    if(exportedMod.getSbiKpiModel()!=null){
      Integer oldParentId=exportedMod.getSbiKpiModel().getKpiModelId();
      Integer newParentId=(Integer)modelIdAss.get(oldParentId);
      if(newParentId==null) {
        logger.error("could not find parent "+exportedMod.getSbiKpiModel().getKpiModelCd());
        existingMod.setSbiKpiModel(null);
      }
      else{
        SbiKpiModel newSbiParent = (SbiKpiModel) sessionCurrDB.load(SbiKpiModel.class, newParentId);
        existingMod.setSbiKpiModel(newSbiParent);
      }
    }
    else{
      existingMod.setSbiKpiModel(null);
    }

    // add Kpi
    Map kpiIdAss=metaAss.getKpiIDAssociation();
    if(exportedMod.getSbiKpi()!=null){
      Integer oldKpiId=exportedMod.getSbiKpi().getKpiId();
      Integer newKpiId=(Integer)kpiIdAss.get(oldKpiId);
      if(newKpiId==null) {
        logger.error("could not find Kpi between association"+exportedMod.getSbiKpi().getKpiId());
        existingMod.setSbiKpi(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiKpi newSbiKpi = (SbiKpi) sessionCurrDB.load(SbiKpi.class, newKpiId);
        existingMod.setSbiKpi(newSbiKpi);
      }
    }
    else{
      existingMod.setSbiKpi(null);
    }

  }




  /**
   * Creates a new hibernate model instance object.
   *
   * @param ModelInst model instance
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiModelInst makeNewSbiModelInstance(SbiKpiModelInst modelInst,Session sessionCurrDB, MetadataAssociations metaAss){
    logger.debug("IN");
    SbiKpiModelInst newModInst = new SbiKpiModelInst();
    try{
      newModInst.setDescription(modelInst.getDescription());
      newModInst.setEndDate(modelInst.getEndDate());
      newModInst.setLabel(modelInst.getLabel());
      newModInst.setName(modelInst.getName());
      newModInst.setStartDate(modelInst.getStartDate());
      newModInst.setModelUUID(modelInst.getModelUUID());

      // associations
      entitiesAssociationsSbiModelInstance(modelInst, newModInst, sessionCurrDB, metaAss);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new model "+modelInst.getLabel());     
    }
    finally{

    }
    return newModInst;
  }

  /**
   * Load an existing Model Inst and make modifications
   *
   * @param exportedModelInst the exported Model Instance
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Model INSTANCE modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiModelInst modifyExistingSbiModelInstance(SbiKpiModelInst exportedModInst, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    SbiKpiModelInst existingModInst = null;
    try {
      // update th Value
      existingModInst = (SbiKpiModelInst) sessionCurrDB.load(SbiKpiModelInst.class, existingId);
      existingModInst.setDescription(exportedModInst.getDescription());
      existingModInst.setEndDate(exportedModInst.getEndDate());
      existingModInst.setLabel(exportedModInst.getLabel());
      existingModInst.setName(exportedModInst.getName());
      existingModInst.setStartDate(exportedModInst.getStartDate());
      existingModInst.setModelUUID(exportedModInst.getModelUUID());

      // associations
      entitiesAssociationsSbiModelInstance(exportedModInst, existingModInst, sessionCurrDB, metaAss);
    }

    finally {
      logger.debug("OUT");
    }
    return existingModInst;
  }


  /**
   * For Model Instance search new Ids
   *
   * @param exportedModelInst the exported Model Instance
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Model Instance modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiModelInstance(SbiKpiModelInst exportedModInst, SbiKpiModelInst existingModInst,Session sessionCurrDB,
      MetadataAssociations metaAss) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    // add Model
    Map modelIdAss=metaAss.getModelIDAssociation();
    if(exportedModInst.getSbiKpiModel()!=null){
      Integer oldModelId=exportedModInst.getSbiKpiModel().getKpiModelId();
      Integer newModelId=(Integer)modelIdAss.get(oldModelId);
      if(newModelId==null) {
        logger.error("could not find model between association"+exportedModInst.getSbiKpiModel().getKpiModelId());
        existingModInst.setSbiKpiModel(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiKpiModel newSbiModel = (SbiKpiModel) sessionCurrDB.load(SbiKpiModel.class, newModelId);
        existingModInst.setSbiKpiModel(newSbiModel);
      }
    }
    else{
      existingModInst.setSbiKpiModel(null);
    }

    // add Kpi Instance
    Map kpiInstIdAss=metaAss.getKpiInstanceIDAssociation();
    if(exportedModInst.getSbiKpiInstance()!=null){
      Integer oldKpiInstId=exportedModInst.getSbiKpiInstance().getIdKpiInstance();
      Integer newKpiInstId=(Integer)kpiInstIdAss.get(oldKpiInstId);
      if(newKpiInstId==null) {
        logger.error("could not find Kpi iNts between association"+exportedModInst.getSbiKpiInstance().getIdKpiInstance());
        existingModInst.setSbiKpiInstance(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiKpiInstance newSbiKpiInst= (SbiKpiInstance) sessionCurrDB.load(SbiKpiInstance.class, newKpiInstId);
        existingModInst.setSbiKpiInstance(newSbiKpiInst);
      }
    }
    else{
      existingModInst.setSbiKpiInstance(null);
    }

    // Parent
    Map modelInstIdAss=metaAss.getModelInstanceIDAssociation();
    if(exportedModInst.getSbiKpiModelInst()!=null){
      Integer oldParentId=exportedModInst.getSbiKpiModelInst().getKpiModelInst();
      Integer newParentId=(Integer)modelInstIdAss.get(oldParentId);
      if(newParentId==null) {
        logger.error("could not find parent with id "+exportedModInst.getSbiKpiModelInst().getKpiModelInst());
        existingModInst.setSbiKpiModelInst(null);
      }
      else{
        SbiKpiModelInst newSbiParent = (SbiKpiModelInst) sessionCurrDB.load(SbiKpiModelInst.class, newParentId);
        existingModInst.setSbiKpiModelInst(newSbiParent);
      }
    }
    else{
      existingModInst.setSbiKpiModelInst(null);
    }


  }


  /**
   * Creates a new hibernate SbiResource object.
   *
   * @param Resource resource
   *
   * @return the new hibernate parameter object
   */
  public static SbiResources makeNewSbiResources(SbiResources resource,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiResources newResource = new SbiResources();
    try{
      newResource.setResourceName(resource.getResourceName());
      newResource.setResourceCode(resource.getResourceCode());
      newResource.setResourceDescr(resource.getResourceDescr());
      newResource.setColumnName(resource.getColumnName());
      newResource.setTableName(resource.getTableName());

      // associations
      entitiesAssociationsSbiResources(resource, newResource, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new kpi "+resource.getResourceName());     
    }
    finally{

    }
    return newResource;
  }

  /**
   * Load an existing resource and make modifications as per the exported resource in input
   *
   * @param exportedResource the exported resource
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Threshold Value modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiResources modifyExistingSbiResources(SbiResources exportedRes, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiResources existingRes = null;
    try {
      // update th Value
      existingRes = (SbiResources) sessionCurrDB.load(SbiResources.class, existingId);
      existingRes.setResourceCode(exportedRes.getResourceCode());
      existingRes.setResourceName(exportedRes.getResourceName());
      existingRes.setResourceDescr(exportedRes.getResourceDescr());
      existingRes.setTableName(exportedRes.getTableName());
      existingRes.setColumnName(exportedRes.getColumnName());

      // associations
      entitiesAssociationsSbiResources(exportedRes, existingRes, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingRes;
  }


  /**
   * For Resources search new Ids
   *
   * @param exportedRes the exported Resource
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Resource modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiResources(SbiResources exportedRes, SbiResources existingResources,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedRes.getType()!=null){
      Integer oldTypeId=exportedRes.getType().getValueId();
      Integer newTypeId=(Integer)domainIdAss.get(oldTypeId);
      if(newTypeId==null) {
        logger.error("could not find domain between association"+exportedRes.getType());
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiType = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newTypeId);
        existingResources.setType(newSbiType);
      }
    }

  }



  /**
   * Creates a new hibernate th value object.
   *
   * @param Model Resource modRes
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiModelResources makeNewSbiModelResource(SbiKpiModelResources modRes,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiKpiModelResources newModResource = new SbiKpiModelResources();
    try{
      // associations
      entitiesAssociationsSbiModelResources(modRes, newModResource, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new kpi, previous id was  "+ modRes.getKpiModelResourcesId());     
    }
    finally{

    }
    return newModResource;
  }

  /**
   * Load an existing Model resource and make modifications as per the exported Model resource in input
   *
   * @param exported mOdel Resource the exported resource
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Threshold Value modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiModelResources modifyExistingSbiModelResources(SbiKpiModelResources exportedModRes, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiKpiModelResources existingModRes = null;
    try {
      // update th Value
      existingModRes = (SbiKpiModelResources) sessionCurrDB.load(SbiKpiModelResources.class, existingId);

      // associations
      entitiesAssociationsSbiModelResources(exportedModRes, existingModRes, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingModRes;
  }


  /**
   * For Model Resources search new Ids
   *
   * @param exported Model Res the exported Resource
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Model Resource modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiModelResources(SbiKpiModelResources exportedModRes, SbiKpiModelResources existingModResources,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");

    // Map resource
    Map resourceIdAss=metaAss.getResourcesIDAssociation();
    if(exportedModRes.getSbiResources()!=null){
      Integer oldTypeId=exportedModRes.getSbiResources().getResourceId();
      Integer newTypeId=(Integer)resourceIdAss.get(oldTypeId);
      if(newTypeId==null) {
        logger.error("could not find resource between association"+exportedModRes.getSbiResources().getResourceName());
      }
      else{
        // I must get the new SbiDomains object
        SbiResources newSbiType = (SbiResources) sessionCurrDB.load(SbiResources.class, newTypeId);
        existingModResources.setSbiResources(newSbiType);
      }
    }

    // Model instance
    Map modelInstIdAss=metaAss.getModelInstanceIDAssociation();
    if(exportedModRes.getSbiKpiModelInst()!=null){
      Integer oldTypeId=exportedModRes.getSbiKpiModelInst().getKpiModelInst();
      Integer newTypeId=(Integer)modelInstIdAss.get(oldTypeId);
      if(newTypeId==null) {
        logger.error("could not find model instance between association"+exportedModRes.getSbiKpiModelInst().getLabel());
      }
      else{
        // I must get the new SbiDomains object
        SbiKpiModelInst newSbiType = (SbiKpiModelInst) sessionCurrDB.load(SbiKpiModelInst.class, newTypeId);
        existingModResources.setSbiKpiModelInst(newSbiType);
      }
    }


  }







  /**
   * Creates a new hibernate th value object.
   *
   * @param Periodicity per
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiPeriodicity makeNewSbiPeriodicity(SbiKpiPeriodicity periodicity,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiKpiPeriodicity newPer = new SbiKpiPeriodicity();
    try{
      newPer.setDays(periodicity.getDays());
      newPer.setChronString(periodicity.getChronString());
      newPer.setHours(periodicity.getHours());
      newPer.setMinutes(periodicity.getMinutes());
      newPer.setMonths(periodicity.getMonths());
      newPer.setName(periodicity.getName());

      // associations
      entitiesAssociationsSbiPeriodicity(periodicity, newPer, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new kpi "+periodicity.getName());     
    }
    finally{

    }
    return newPer;
  }

  /**
   * Load an existing resource and make modifications as per the exported periodicity in input
   *
   * @param exportedPeriodicity the exported periodicity
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Periodicity modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiPeriodicity modifyExistingSbiPeriodicity(SbiKpiPeriodicity exportedPer, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiKpiPeriodicity existingPer = null;
    try {
      // update th Value
      existingPer = (SbiKpiPeriodicity) sessionCurrDB.load(SbiKpiPeriodicity.class, existingId);
      existingPer.setName(exportedPer.getName());
      existingPer.setChronString(exportedPer.getChronString());
      existingPer.setDays(exportedPer.getDays());
      existingPer.setHours(exportedPer.getHours());
      existingPer.setMonths(exportedPer.getMonths());
      existingPer.setMinutes(exportedPer.getMinutes());

      // associations
      entitiesAssociationsSbiPeriodicity(exportedPer, existingPer, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingPer;
  }


  /**
   * For Periodicity search new Ids
   *
   * @param exportedRes the exported Periodicity
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Periodicity modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiPeriodicity(SbiKpiPeriodicity exportedPer, SbiKpiPeriodicity existingPer,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities
    logger.debug("OUT");

  }




  /**
   * Creates a new hibernate th value object.
   *
   * @param KpiInstPeriod kpiInstPeriod
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiInstPeriod makeNewSbiKpiInstPeriod(SbiKpiInstPeriod kpiInstPeriod,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiKpiInstPeriod newKpiInstPeriod = new SbiKpiInstPeriod();
    try{
      newKpiInstPeriod.setDefault_(kpiInstPeriod.isDefault_());

      // associations
      entitiesAssociationsSbiKpiInstPeriod(kpiInstPeriod, newKpiInstPeriod, sessionCurrDB, metaAss, importer);

    }
    catch (Exception e) {
      logger.error("Error in creating new kpiInstPeriod, previous id was  "+ kpiInstPeriod.getKpiInstPeriodId());     
    }
    finally{

    }
    logger.debug("OUT");
    return newKpiInstPeriod;
  }

  /**
   * Load an existing KpiInstPeriod and make modifications as per the exported KpiInstPeriod in input
   *
   * @param exported mKpiInstPeriod the exported resource
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing KpiInstPeriod modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiInstPeriod modifyExistingSbiKpiInstPeriod(SbiKpiInstPeriod exportedKpiInstPeriod, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiKpiInstPeriod existingKpiInstPeriod = null;
    try {
      // update th Value
      existingKpiInstPeriod = (SbiKpiInstPeriod) sessionCurrDB.load(SbiKpiInstPeriod.class, existingId);
      existingKpiInstPeriod.setDefault_(exportedKpiInstPeriod.isDefault_());

      // associations
      entitiesAssociationsSbiKpiInstPeriod(exportedKpiInstPeriod, existingKpiInstPeriod, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingKpiInstPeriod;
  }


  /**
   * For KpiInstPeriod search new Ids
   *
   * @param exported KpiInstPeriod the exported KpiInstPeriod
   * @param sessionCurrDB the session curr db
   *
   * @return the existing KpiInstPeriod modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiKpiInstPeriod(SbiKpiInstPeriod exportedKpiInstPeriod, SbiKpiInstPeriod existingKpiInstPeriod,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");

    // Map priodicity
    Map periodicityIdAss=metaAss.getPeriodicityIDAssociation();
    if(exportedKpiInstPeriod.getSbiKpiPeriodicity()!=null){
      Integer oldPerId=exportedKpiInstPeriod.getSbiKpiPeriodicity().getIdKpiPeriodicity();
      Integer newPerId=(Integer)periodicityIdAss.get(oldPerId);
      if(newPerId==null) {
        logger.error("could not find periodicity associated to kpiInstPeriod: "+exportedKpiInstPeriod.getSbiKpiPeriodicity().getIdKpiPeriodicity());
      }
      else{
        // I must get the new SbiDomains object
        SbiKpiPeriodicity newSbiPeriodicity= (SbiKpiPeriodicity) sessionCurrDB.load(SbiKpiPeriodicity.class, newPerId);
        existingKpiInstPeriod.setSbiKpiPeriodicity(newSbiPeriodicity);
      }
    }

    // Kpi Instance
    Map kpiInstIdAss=metaAss.getKpiInstanceIDAssociation();
    if(exportedKpiInstPeriod.getSbiKpiInstance()!=null){
      Integer oldTypeId=exportedKpiInstPeriod.getSbiKpiInstance().getIdKpiInstance();
      Integer newTypeId=(Integer)kpiInstIdAss.get(oldTypeId);
      if(newTypeId==null) {
        logger.error("could not find kpi instance associater to kpiInstPeriod with previous id "+exportedKpiInstPeriod.getSbiKpiInstance().getIdKpiInstance());
      }
      else{
        // I must get the new SbiDomains object
        SbiKpiInstance newSbiType = (SbiKpiInstance) sessionCurrDB.load(SbiKpiInstance.class, newTypeId);
        existingKpiInstPeriod.setSbiKpiInstance(newSbiType);
      }
    }


  }






  /**
   * Creates a new hibernate SbiAlarm object.
   *
   * @param Alarm alarm
   *
   * @return the new hibernate parameter object
   */
  public static SbiAlarm makeNewSbiAlarms(SbiAlarm alarm,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiAlarm newAlarm = new SbiAlarm();
    try{
      newAlarm.setName(alarm.getName());
      newAlarm.setLabel(alarm.getLabel());
      newAlarm.setDescr(alarm.getDescr());
      newAlarm.setText(alarm.getText());
      newAlarm.setUrl(alarm.getUrl());
      newAlarm.setSingleEvent(alarm.isSingleEvent());
      newAlarm.setAutoDisabled(alarm.getAutoDisabled());

      // associations
      entitiesAssociationsSbiAlarms(alarm, newAlarm, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new alarm "+alarm.getLabel());     
    }
    finally{

    }
    return newAlarm;
  }

  /**
   * Load an existing Alarm and make modifications as per the exported Alarm in input
   *
   * @param exportedAlarm the exported Alarm
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Alarm modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiAlarm modifyExistingSbiAlarms(SbiAlarm exportedAlarm, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiAlarm existingAlarm = null;
    try {
      // update Alarm
      existingAlarm = (SbiAlarm) sessionCurrDB.load(SbiAlarm.class, existingId);
      existingAlarm.setName(exportedAlarm.getName());
      existingAlarm.setLabel(exportedAlarm.getLabel());
      existingAlarm.setDescr(exportedAlarm.getDescr());
      existingAlarm.setText(exportedAlarm.getText());
      existingAlarm.setUrl(exportedAlarm.getUrl());
      existingAlarm.setSingleEvent(exportedAlarm.isSingleEvent());
      existingAlarm.setAutoDisabled(exportedAlarm.getAutoDisabled());

      // associations
      entitiesAssociationsSbiAlarms(exportedAlarm, existingAlarm, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingAlarm;
  }


  /**
   * For Alarm search new Ids
   *
   * @param exportedAlarm the exported Alarm
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Alarm modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiAlarms(SbiAlarm exportedAlarm, SbiAlarm existingAlarm,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedAlarm.getModality()!=null){
      Integer oldModalityId=exportedAlarm.getModality().getValueId();
      Integer newModalityId=(Integer)domainIdAss.get(oldModalityId);
      if(newModalityId==null) {
        logger.error("could not find domain between association"+exportedAlarm.getModality());
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiModality = (SbiDomains) sessionCurrDB.load(SbiDomains.class, newModalityId);
        existingAlarm.setModality(newSbiModality);
      }
    }


    // Map Kpi Instance
    Map kpiInstanceIdAss=metaAss.getKpiInstanceIDAssociation();
    if(exportedAlarm.getSbiKpiInstance()!=null){
      Integer oldKpiInstId=exportedAlarm.getSbiKpiInstance().getIdKpiInstance();
      Integer newKpiInstId=(Integer)kpiInstanceIdAss.get(oldKpiInstId);
      if(newKpiInstId==null) {
        logger.error("could not find kpi instance associated to current alarm: "+exportedAlarm.getSbiKpiInstance().getIdKpiInstance());
      }
      else{
        // I must get the new SbiDomains object
        SbiKpiInstance newSbiKpiInstance= (SbiKpiInstance) sessionCurrDB.load(SbiKpiInstance.class, newKpiInstId);
        existingAlarm.setSbiKpiInstance(newSbiKpiInstance);
      }
    }

    // Threshold Value
    Map thValueIdAss=metaAss.getTresholdValueIDAssociation();
    if(exportedAlarm.getSbiThresholdValue()!=null){
      Integer oldThValueId=exportedAlarm.getSbiThresholdValue().getIdThresholdValue();
      Integer newThValueId=(Integer)thValueIdAss.get(oldThValueId);
      if(newThValueId==null) {
        logger.error("could not find ThValue associater to Alarm; with label "+exportedAlarm.getSbiThresholdValue().getLabel());
      }
      else{
        // I must get the new SbiDomains object
        SbiThresholdValue newSbiThValue = (SbiThresholdValue) sessionCurrDB.load(SbiThresholdValue.class, newThValueId);
        existingAlarm.setSbiThresholdValue(newSbiThValue);
      }
    } 

    // fill the set of AlarmContacts

    Set<SbiAlarmContact> setContactsExported=exportedAlarm.getSbiAlarmContacts();

    // recover the Contacts already present
    Set<SbiAlarmContact> setContactsToImport=existingAlarm.getSbiAlarmContacts();

    // I want a Array to fill with Id already present just to check not to insert again an already present association
    Vector<Integer> idsAlready=new Vector<Integer>();
    for (Iterator iterator = setContactsToImport.iterator(); iterator.hasNext();) {
      SbiAlarmContact sbiAlarmContact = (SbiAlarmContact) iterator.next();
      Integer id=sbiAlarmContact.getId();
      idsAlready.add(id);
    }


    for (Iterator iterator = setContactsExported.iterator(); iterator.hasNext();) {
      SbiAlarmContact sbiAlarmContact = (SbiAlarmContact) iterator.next();
      Integer oldId=sbiAlarmContact.getId();
      Map<Integer, Integer> alarmContactAssociation=metaAss.getAlarmContactIDAssociation();
      Integer newId=alarmContactAssociation.get(oldId);
      //load
      if(newId==null){
        newId=oldId;
      }

      // check id not already present
      if(!idsAlready.contains(newId)){
        SbiAlarmContact newSbiAlarmContact = (SbiAlarmContact) sessionCurrDB.load(SbiAlarmContact.class, newId);
        setContactsToImport.add(newSbiAlarmContact);
        idsAlready.add(newId);
      }


    }
    existingAlarm.setSbiAlarmContacts(setContactsToImport);
  }







  /**
   * Creates a new hibernate SbiAlarmContact object.
   *
   * @param AlarmContact alarmContact
   *
   * @return the new hibernate parameter object
   */
  public static SbiAlarmContact makeNewSbiAlarmContacts(SbiAlarmContact alarmContact,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiAlarmContact newAlarmContact = new SbiAlarmContact();
    try{
      newAlarmContact.setName(alarmContact.getName());
      newAlarmContact.setEmail(alarmContact.getEmail());
      newAlarmContact.setMobile(alarmContact.getMobile());
      newAlarmContact.setResources(alarmContact.getResources());


      // associations
      entitiesAssociationsSbiAlarmContacts(alarmContact, newAlarmContact, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new alarm Contact "+alarmContact.getName());     
    }
    finally{

    }
    return newAlarmContact;
  }

  /**
   * Load an existing Alarm Contact and make modifications as per the exported Alarm Contact in input
   *
   * @param exportedAlarm the exported Alarm Contact
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Alarm Contactmodified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiAlarmContact modifyExistingSbiAlarmContacts(SbiAlarmContact exportedAlarmContact, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiAlarmContact existingAlarmContact = null;
    try {
      // update Alarm
      existingAlarmContact = (SbiAlarmContact) sessionCurrDB.load(SbiAlarmContact.class, existingId);
      existingAlarmContact.setName(exportedAlarmContact.getName());
      existingAlarmContact.setEmail(exportedAlarmContact.getEmail());
      existingAlarmContact.setMobile(exportedAlarmContact.getMobile());
      existingAlarmContact.setResources(exportedAlarmContact.getResources());

      // associations
      entitiesAssociationsSbiAlarmContacts(exportedAlarmContact, existingAlarmContact, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingAlarmContact;
  }


  /**
   * For Alarm Contacts search new Ids
   *
   * @param exportedAlarm the exported Alarm Contacts
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Alarm Contacts modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiAlarmContacts(SbiAlarmContact exportedAlarm, SbiAlarmContact existingAlarm,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    logger.debug("OUT");
 







  /**
   * Creates a new hibernate kpi model attr object.
   *
   * @param SbiKpiModelAttr kpiModelAttr
   *
   * @return the new hibernate parameter object
   */
  // TODO cambiare con i nuovi UDP VAlues
  /*public static SbiKpiModelAttr makeNewSbiKpiModelAttr(SbiKpiModelAttr kpiModelAttr,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiKpiModelAttr newKpiModelAttr = new SbiKpiModelAttr();
    try{
      newKpiModelAttr.setKpiModelAttrCd( kpiModelAttr.getKpiModelAttrCd() );
      newKpiModelAttr.setKpiModelAttrNm( kpiModelAttr.getKpiModelAttrNm() );
      newKpiModelAttr.setKpiModelAttrDescr( kpiModelAttr.getKpiModelAttrDescr() );

      // associations
      entitiesAssociationsSbiKpiModelAttr(kpiModelAttr, newKpiModelAttr, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new Model Attr with label "+newKpiModelAttr.getKpiModelAttrCd());     
    }
    finally{

    }
    return newKpiModelAttr;
  }*/


  /**
   * Load an existing kpiModelAttr and make modifications as per the exported kpiModelAttr in input
   *
   * @param exportedKpiModelAttr the exported KpiModelAttr
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  // TODO cambiare con i nuovi UDP VAlues
  /*public static SbiKpiModelAttr modifyExistingSbiKpiModelAttr(SbiKpiModelAttr exportedKpiModelAttr, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiKpiModelAttr existingKpiModelAttr = null;
    try {
      // update th Value
      existingKpiModelAttr = (SbiKpiModelAttr) sessionCurrDB.load(SbiKpiModelAttr.class, existingId);
      existingKpiModelAttr.setKpiModelAttrCd(exportedKpiModelAttr.getKpiModelAttrCd());
      existingKpiModelAttr.setKpiModelAttrNm(exportedKpiModelAttr.getKpiModelAttrNm());
      existingKpiModelAttr.setKpiModelAttrDescr(exportedKpiModelAttr.getKpiModelAttrDescr());

      // overwrite existging entities (maybe create a function speciic for domains, maybe not)
      entitiesAssociationsSbiKpiModelAttr(exportedKpiModelAttr, existingKpiModelAttr, sessionCurrDB, metaAss, importer);

    }

    finally {
      logger.debug("OUT");
    }
    return existingKpiModelAttr;
  }*/

  /**
   * For KpiModelAttr search new Ids
   *
   * @param exportedKpi the exported Kpi
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  // TODO cambiare con i nuovi UDP VAlues
  /*public static void entitiesAssociationsSbiKpiModelAttr(SbiKpiModelAttr exportedKpiModelAttr, SbiKpiModelAttr existingKpiModelAttr,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedKpiModelAttr.getSbiDomains()!=null){
      Integer oldDomainId=exportedKpiModelAttr.getSbiDomains().getValueId();
      Integer newDomainId=(Integer)domainIdAss.get(oldDomainId);
      if(newDomainId==null) {
        logger.error("could not find domain between association"+exportedKpiModelAttr.getSbiDomains().getValueCd());
        existingKpiModelAttr.setSbiDomains(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiDomain= (SbiDomains) sessionCurrDB.load(SbiDomains.class, newDomainId);
        existingKpiModelAttr.setSbiDomains(newSbiDomain);
      }
    }
    else{
      existingKpiModelAttr.setSbiDomains(null);
    }
  }*/




  /**
   * Creates a new hibernate kpi model attr val object.
   *
   * @param SbiKpiModelAttr kpiModelAttrVal
   *
   * @return the new hibernate parameter object
   */
  // TODO cambiare con i nuovi UDP VAlues
  /*public static SbiKpiModelAttrVal makeNewSbiKpiModelAttrVal(SbiKpiModelAttrVal kpiModelAttrVal,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiKpiModelAttrVal newKpiModelAttrVal = new SbiKpiModelAttrVal();
    try{
      newKpiModelAttrVal.setValue( kpiModelAttrVal.getValue() );

      // associations
      entitiesAssociationsSbiKpiModelAttrVal(kpiModelAttrVal, newKpiModelAttrVal, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new Model Attr Val referring to model "+newKpiModelAttrVal.getSbiKpiModel().getKpiModelNm()+" an to attribute "+newKpiModelAttrVal.getSbiKpiModelAttr().getKpiModelAttrNm());     
    }
    finally{

    }
    return newKpiModelAttrVal;
  }*/


  /**
   * Load an existing kpiModelAttrVal and make modifications as per the exported kpiModelAttr in input
   *
   * @param exportedKpiModelAttrVal the exported KpiModelAttrVal
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @throws EMFUserError the EMF user error
   */
  // TODO cambiare con i nuovi UDP VAlues
  /*public static SbiKpiModelAttrVal modifyExistingSbiKpiModelAttrVal(SbiKpiModelAttrVal exportedKpiModelAttrVal, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiKpiModelAttrVal existingKpiModelAttrVal = null;
    try {
      // update th Value
      existingKpiModelAttrVal = (SbiKpiModelAttrVal) sessionCurrDB.load(SbiKpiModelAttrVal.class, existingId);
      existingKpiModelAttrVal.setSbiKpiModel(exportedKpiModelAttrVal.getSbiKpiModel());
      existingKpiModelAttrVal.setSbiKpiModelAttr(exportedKpiModelAttrVal.getSbiKpiModelAttr());

      // overwrite existging entities (maybe create a function speciic for domains, maybe not)
      entitiesAssociationsSbiKpiModelAttrVal(exportedKpiModelAttrVal, existingKpiModelAttrVal, sessionCurrDB, metaAss, importer);

    }

    finally {
      logger.debug("OUT");
    }
    return existingKpiModelAttrVal;
  }*/



  /**
   * KpiModelAttrVal association entities search new Ids
   *
   * @param exportedKpiMdelAtrVal the exported KpiModelATtrVal
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  // TODO cambiare con i nuovi UDP VAlues
  /*public static void entitiesAssociationsSbiKpiModelAttrVal(SbiKpiModelAttrVal exportedKpiModelAttrVal, SbiKpiModelAttrVal existingKpiModelAttrVal,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    // set the model
    Map modelIdAss=metaAss.getModelIDAssociation();
    if(exportedKpiModelAttrVal.getSbiKpiModel()!=null){
      Integer oldModelId=exportedKpiModelAttrVal.getSbiKpiModel().getKpiModelId();
      Integer newModelId=(Integer)modelIdAss.get(oldModelId);
      if(newModelId==null) {
        logger.error("could not find model associated with mdeol with label "+exportedKpiModelAttrVal.getSbiKpiModel().getKpiModelLabel());
        existingKpiModelAttrVal.setSbiKpiModel(null);
      }
      else{
        // I must get the new
        SbiKpiModel newSbiKpiModel= (SbiKpiModel) sessionCurrDB.load(SbiKpiModel.class, newModelId);
        existingKpiModelAttrVal.setSbiKpiModel(newSbiKpiModel);
      }
    }
    else{
      existingKpiModelAttrVal.setSbiKpiModel(null);
    }


    // set the model attr
    Map modelAttrIdAss=metaAss.getSbiKpiModelAttrIDAssociation();
    if(exportedKpiModelAttrVal.getSbiKpiModelAttr()!=null){
      Integer oldModelAttrId=exportedKpiModelAttrVal.getSbiKpiModelAttr().getKpiModelAttrId();
      Integer newModelAttrId=(Integer)modelAttrIdAss.get(oldModelAttrId);
      if(newModelAttrId==null) {
        logger.error("could not find model Attr associated with model Attrwith label "+exportedKpiModelAttrVal.getSbiKpiModelAttr().getKpiModelAttrCd());
        existingKpiModelAttrVal.setSbiKpiModelAttr(null);
      }
      else{
        // I must get the new
        SbiKpiModelAttr newSbiKpiModelAttr= (SbiKpiModelAttr) sessionCurrDB.load(SbiKpiModelAttr.class, newModelAttrId);
        existingKpiModelAttrVal.setSbiKpiModelAttr(newSbiKpiModelAttr);
      }
    }
    else{
      existingKpiModelAttrVal.setSbiKpiModelAttr(null);
    }

  }*/



























  /**
   * Creates a new hibernate ObjMetadata.
   *
   * @param ObjMetadata objMetadata
   *
   * @return the new hibernate parameter object
   */
  public static SbiObjMetadata makeNewSbiObjMetadata(SbiObjMetadata objMetadata,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiObjMetadata newObjMetadata = new SbiObjMetadata();
    try{
      newObjMetadata.setLabel(objMetadata.getLabel());
      newObjMetadata.setName(objMetadata.getName());
      newObjMetadata.setDescription(objMetadata.getDescription());
      newObjMetadata.setCreationDate(objMetadata.getCreationDate());

      // associations
      entitiesAssociationsSbiObjMetadata(objMetadata, newObjMetadata, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error inc reating new ObjMetadata with label "+newObjMetadata.getLabel());     
    }
    finally{

    }
    return newObjMetadata;
  }


  /**
   * Load an existing ObjMetadata and make modifications as per the exported ObjMetadata in input
   *
   * @param ObjMetadata objMetadata
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing ObjMetadata modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiObjMetadata modifyExistingSbiObjMetadata(SbiObjMetadata exportedObjMetadata, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiObjMetadata existingObjMetadata = null;
    try {
      existingObjMetadata= (SbiObjMetadata) sessionCurrDB.load(SbiObjMetadata.class, existingId);

      existingObjMetadata.setName(exportedObjMetadata.getName());
      existingObjMetadata.setDescription(exportedObjMetadata.getDescription());
      existingObjMetadata.setCreationDate(exportedObjMetadata.getCreationDate());

      // overwrite existging entities (maybe create a function speciic for domains, maybe not)
      entitiesAssociationsSbiObjMetadata(exportedObjMetadata, existingObjMetadata, sessionCurrDB, metaAss, importer);

    }

    finally {
      logger.debug("OUT");
    }
    return existingObjMetadata;
  }



  /**
   * For ObjMetadata search new Ids
   *
   * @param exported metadata ObjMetadata
   * @param sessionCurrDB the session curr db
   *
   * @return the existing Kpi modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiObjMetadata(SbiObjMetadata exportedObjMetadata, SbiObjMetadata existingObjMetadata,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    // overwrite existging entities

    Map domainIdAss=metaAss.getDomainIDAssociation();
    if(exportedObjMetadata.getDataType() != null){
      Integer oldDomainId=exportedObjMetadata.getDataType().getValueId();
      Integer newDomainId=(Integer)domainIdAss.get(oldDomainId);
      if(newDomainId==null) {
        logger.error("could not find domain between association"+exportedObjMetadata.getDataType().getValueCd());
        existingObjMetadata.setDataType(null);
      }
      else{
        // I must get the new SbiDomains object
        SbiDomains newSbiDomain= (SbiDomains) sessionCurrDB.load(SbiDomains.class, newDomainId);
        existingObjMetadata.setDataType(newSbiDomain);
      }
    }
    else{
      existingObjMetadata.setDataType(null);
    }
  }



  /**
   * Creates a new hibernate SbiObjMetacontent object.
   *
   * @param SbiObjectMetacontent metcontent
   *
   * @return the new hibernate parameter object
   */
  public static SbiObjMetacontents makeNewSbiObjMetacontent(SbiObjMetacontents metacontents,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiObjMetacontents newMetacontents = new SbiObjMetacontents();
    try{
      newMetacontents.setCreationDate(metacontents.getCreationDate());
      newMetacontents.setLastChangeDate(metacontents.getLastChangeDate());
      // associations
      entitiesAssociationsSbiObjMetacontents(metacontents, newMetacontents, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new metacontent with exported id " + metacontents.getObjMetacontentId());     
    }
    finally{

    }
    return newMetacontents;
  }

  /**
   * Load an existing ObjMetacontents and make modifications as per the exported ObjMetacontents in input
   *
   * @param exportedObjMetacontents the exported ObjMetacontents
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing ObjMetacontents modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiObjMetacontents modifyExistingSbiObjMetacontents(SbiObjMetacontents exportedMetacontents, Session sessionCurrDB,
      Integer existingId, MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN");
    SbiObjMetacontents existingMetacontents = null;
    try {
      // update Alarm
      existingMetacontents= (SbiObjMetacontents) sessionCurrDB.load(SbiObjMetacontents.class, existingId);

      existingMetacontents.setCreationDate(exportedMetacontents.getCreationDate());
      existingMetacontents.setLastChangeDate(exportedMetacontents.getLastChangeDate());

      // associations
      entitiesAssociationsSbiObjMetacontents(exportedMetacontents, existingMetacontents, sessionCurrDB, metaAss, importer);
    }

    finally {
      logger.debug("OUT");
    }
    return existingMetacontents;
  }


  /**
   * For SBiObjMetacontents search new Ids
   *
   * @param exportedMetacontent the exported SbiObjMetacontent
   * @param sessionCurrDB the session curr db
   *
   * @return the existing ObjMetacontent modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiObjMetacontents(SbiObjMetacontents exportedMetacontents, SbiObjMetacontents existingMetacontents,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN")

    // overwrite existging entities

    // Obj Metadata
    Map metadataIdAss=metaAss.getObjMetadataIDAssociation();
    if(exportedMetacontents.getObjmetaId()!=null){
      Integer oldMetaId=exportedMetacontents.getObjmetaId();
      Integer newMetaId=(Integer)metadataIdAss.get(oldMetaId);
      if(newMetaId==null) {
        logger.error("could not find association with metadata with id " + exportedMetacontents.getObjmetaId());
      }
      else{
        existingMetacontents.setObjmetaId(newMetaId);
      }
    }

    // SbiObject
    Map objectIdAss=metaAss.getBIobjIDAssociation();
    if(exportedMetacontents.getSbiObjects()!=null){
      Integer oldObjId=exportedMetacontents.getSbiObjects().getBiobjId();
      Integer newObjId=(Integer)objectIdAss.get(oldObjId);
      if(newObjId==null) {
        logger.error("could not find object associated "+exportedMetacontents.getSbiObjects().getLabel());
      }
      else{
        SbiObjects newSbiObjects = (SbiObjects) sessionCurrDB.load(SbiObjects.class, newObjId);
        existingMetacontents.setSbiObjects(newSbiObjects);
      }
    }

    // SbiSubobject (if present)
    Map subObjectIdAss=metaAss.getObjSubObjectIDAssociation();
    if(exportedMetacontents.getSbiSubObjects()!=null){
      Integer oldSubObjId=exportedMetacontents.getSbiSubObjects().getSubObjId();
      Integer newSubObjId=(Integer)subObjectIdAss.get(oldSubObjId);
      if(newSubObjId==null) {
        logger.error("could not find subobject associated "+exportedMetacontents.getSbiSubObjects().getName());
      }
      else{
        SbiSubObjects newSbiSubObjects = (SbiSubObjects) sessionCurrDB.load(SbiSubObjects.class, newSubObjId);
        existingMetacontents.setSbiSubObjects(newSbiSubObjects);
      }
    }

    // Binary contents will be always inserted as new
    logger.debug("Insert the binary content associated");
    SbiBinContents exportedBinContent = exportedMetacontents.getSbiBinContents();
    SbiBinContents newBinContents = new SbiBinContents();
    newBinContents.setContent(exportedBinContent.getContent());
    sessionCurrDB.save(newBinContents);
    existingMetacontents.setSbiBinContents(newBinContents);

    logger.debug("OUT");
  }
  /**
   * Creates a new hibernate SbiKpiRel object.
   *
   * @param SbiKpiRel relation
   *
   * @return the new hibernate parameter object
   */
  public static SbiKpiRel makeNewSbiKpiRel(SbiKpiRel kpirel,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiKpiRel newSbiKpiRel = new SbiKpiRel();
    try{
      newSbiKpiRel.setParameter(kpirel.getParameter());

      // associations
      entitiesAssociationsSbiKpiRel(kpirel, newSbiKpiRel, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new kpi relation with exported id " + newSbiKpiRel.getKpiRelId());     
    }
    return newSbiKpiRel;
  }

  /**
   * For SbiKpiRel search new Ids
   *
   * @param exportedKpiRel the exported SbiKpiRel
   * @param sessionCurrDB the session curr db
   *
   * @return the existing KPIREL modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiKpiRel(SbiKpiRel exportedKpiRel, SbiKpiRel existingKpiRel,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN")

    // overwrite existing entities

    // kpi child
    Map kpiAss = metaAss.getKpiIDAssociation();
    if(exportedKpiRel.getSbiKpiByKpiChildId()!=null){
      Integer oldKpiId=exportedKpiRel.getSbiKpiByKpiChildId().getKpiId();
      Integer newKpiId=(Integer)kpiAss.get(oldKpiId);
      if(newKpiId==null) {
        logger.error("could not find association with kpi child with id " + exportedKpiRel.getSbiKpiByKpiChildId().getName());
        existingKpiRel.setSbiKpiByKpiChildId(null);
      }
      else{
        SbiKpi newSbiKpi = (SbiKpi) sessionCurrDB.load(SbiKpi.class, newKpiId);
        existingKpiRel.setSbiKpiByKpiChildId(newSbiKpi);
      }
    }
    // kpi father

    if(exportedKpiRel.getSbiKpiByKpiFatherId()!=null){
      Integer oldKpiId=exportedKpiRel.getSbiKpiByKpiFatherId().getKpiId();
      Integer newKpiId=(Integer)kpiAss.get(oldKpiId);
      if(newKpiId==null) {
        logger.error("could not find association with kpi father  with id " + exportedKpiRel.getSbiKpiByKpiFatherId().getName());
        existingKpiRel.setSbiKpiByKpiFatherId(null);
      }
      else{
        SbiKpi newSbiKpi = (SbiKpi) sessionCurrDB.load(SbiKpi.class, newKpiId);
        existingKpiRel.setSbiKpiByKpiFatherId(newSbiKpi);
      }
    }

    logger.debug("OUT");
  }

  /**
   * Creates a new hibernate SbiUdp udp object.
   *
   * @param SbiUdp udp
   *
   * @return the new hibernate parameter object
   */
  public static SbiUdp makeNewSbiUdp(SbiUdp udp,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiUdp newUdp = new SbiUdp();
    try{
      newUdp.setDescription(udp.getDescription());
      newUdp.setIsMultivalue(udp.isIsMultivalue());
      newUdp.setLabel(udp.getLabel());
      newUdp.setName(udp.getName());

      // associations
      entitiesAssociationsSbiUdp(udp, newUdp, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new udp with exported id " + newUdp.getUdpId());     
    }
    return newUdp;
  }
  /**
   * For SbiUdp search new Ids
   *
   * @param exportedSbiUdp the exported SbiUdp
   * @param sessionCurrDB the session curr db
   *
   * @return the existing SbiUdp modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiUdp(SbiUdp exportedSbiUdp, SbiUdp existingSbiUdp,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN")

    // overwrite existing entities
    // type id
    Map doaminAss = metaAss.getDomainIDAssociation();
    //original value of exported object != null
    if(exportedSbiUdp.getTypeId()!=null){
      Integer oldTypeId = exportedSbiUdp.getTypeId();
      Integer newTypeId=(Integer)doaminAss.get(oldTypeId);
      if(newTypeId==null) {
        logger.error("could not find association with domain type id with id " + exportedSbiUdp.getTypeId());
        existingSbiUdp.setTypeId(null);
      }
      else{
        existingSbiUdp.setTypeId(newTypeId);
      }
    }
    // family id
    if(exportedSbiUdp.getFamilyId()!=null){
      Integer oldFamilyId = exportedSbiUdp.getFamilyId();
      Integer newFamilyId=(Integer)doaminAss.get(oldFamilyId);
      if(newFamilyId==null) {
        logger.error("could not find association with domain Family Id with id " + exportedSbiUdp.getFamilyId());
        existingSbiUdp.setFamilyId(null);
      }
      else{
        existingSbiUdp.setFamilyId(newFamilyId);
      }
    }

    logger.debug("OUT");
  }

  /**
   * Load an existing Udp and make modifications as per the exported udp in input
   *
   * @param exportedUdp the exported SbiUdp
   * @param sessionCurrDB the session curr db
   * @param existingUdpid the existing id
   *
   * @return the existing Udp modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiUdp modifyExistingUdp(SbiUdp exportedUdp, Session sessionCurrDB, Integer existingUdpId) throws EMFUserError {
    logger.debug("IN");
    SbiUdp existingSbiUdp = null;
    try {
      existingSbiUdp = (SbiUdp) sessionCurrDB.load(SbiUdp.class, existingUdpId);

      existingSbiUdp.setDescription(exportedUdp.getDescription());
      existingSbiUdp.setIsMultivalue(exportedUdp.isIsMultivalue());
      existingSbiUdp.setLabel(exportedUdp.getLabel());
      existingSbiUdp.setName(exportedUdp.getName());


    }

    finally {
      logger.debug("OUT");
    }
    return existingSbiUdp;
  }
  /**
   * Load an existing Kpi Relation and make modifications as per the exported udp in input
   *
   * @param exportedKpiRel the exported SbiKpiRel
   * @param sessionCurrDB the session curr db
   * @param existingKpiRelId the existing id
   *
   * @return the existing SbiKpiRel modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiKpiRel modifyExistingKpiRel(SbiKpiRel exportedKpiRel, Session sessionCurrDB, Integer existingKpiRelId) throws EMFUserError {
    logger.debug("IN");
    SbiKpiRel existingKpiRel = null;
    try {
      existingKpiRel = (SbiKpiRel) sessionCurrDB.load(KpiRel.class, existingKpiRelId);
      existingKpiRel.setParameter(exportedKpiRel.getParameter());

    }

    finally {
      logger.debug("OUT");
    }
    return existingKpiRel;
  }
  /**
   * Creates a new hibernate SbiUdpValue udp value object.
   *
   * @param SbiUdpValue udp value
   *
   * @return the new hibernate parameter object
   */
  public static SbiUdpValue makeNewSbiUdpValue(SbiUdpValue udpValue ,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiUdpValue newUdpValue = new SbiUdpValue();
    try{
      newUdpValue.setBeginTs(udpValue.getBeginTs());
      newUdpValue.setEndTs(udpValue.getEndTs());
      newUdpValue.setFamily(udpValue.getFamily());
      newUdpValue.setLabel(udpValue.getLabel());
      newUdpValue.setName(udpValue.getName());
      newUdpValue.setProg(udpValue.getProg());
      newUdpValue.setFamily(udpValue.getFamily());
      newUdpValue.setValue(udpValue.getValue());
      // associations
      entitiesAssociationsSbiUdpValue(udpValue, newUdpValue, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new udp value with exported id " + newUdpValue.getUdpValueId());     
    }
    return newUdpValue;
  }
  /**
   * For SbiUdpValue search new Ids
   *
   * @param exportedSbiUdpValue the exported SbiUdpValue
   * @param sessionCurrDB the session curr db
   *
   * @return the existing SbiUdpValue modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsSbiUdpValue(SbiUdpValue exportedSbiUdpValue, SbiUdpValue existingSbiUdpValue,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN")

    // overwrite existing entities

    // udp id
    Map udpAss = metaAss.getUdpAssociation();   
    //original value of exported object != null
    if(exportedSbiUdpValue.getSbiUdp()!=null){
      Integer oldUdpId = exportedSbiUdpValue.getSbiUdp().getUdpId();
      Integer newUdpId=(Integer)udpAss.get(oldUdpId);
      if(newUdpId==null) {
        logger.error("could not find association with udp id with id " + oldUdpId);
        existingSbiUdpValue.setSbiUdp(null);
      }
      else{
        SbiUdp newSbiUdp = (SbiUdp) sessionCurrDB.load(SbiUdp.class, newUdpId);
        existingSbiUdpValue.setSbiUdp(newSbiUdp);
      }
    }
    //checks family
    if(exportedSbiUdpValue.getFamily() != null && exportedSbiUdpValue.getFamily().equalsIgnoreCase("Kpi")){
      // reference id
      Map kpiAss = metaAss.getKpiIDAssociation();
      if(exportedSbiUdpValue.getReferenceId()!=null){
        Integer oldReferenceId = exportedSbiUdpValue.getReferenceId();
        Integer newReferenceId=(Integer)kpiAss.get(oldReferenceId);
        if(newReferenceId==null) {
          logger.error("could not find association with domain kpi reference Id with id " + exportedSbiUdpValue.getReferenceId());
          existingSbiUdpValue.setReferenceId(null);
        }
        else{
          existingSbiUdpValue.setReferenceId(newReferenceId);
        }
      }
    }else if(exportedSbiUdpValue.getFamily() != null && exportedSbiUdpValue.getFamily().equalsIgnoreCase("Model")){
      // reference id
      Map modelAss = metaAss.getModelIDAssociation();
      if(exportedSbiUdpValue.getReferenceId()!=null){
        Integer oldReferenceId = exportedSbiUdpValue.getReferenceId();
        Integer newReferenceId=(Integer)modelAss.get(oldReferenceId);
        if(newReferenceId==null) {
          logger.error("could not find association with domain model reference Id with id " + exportedSbiUdpValue.getReferenceId());
          existingSbiUdpValue.setReferenceId(null);
        }
        else{
          existingSbiUdpValue.setReferenceId(newReferenceId);
        }
      }
    }

    logger.debug("OUT");
  }

  /**
   * Load an existing Udp value and make modifications as per the exported udp in input
   *
   * @param exportedUdp the exported SbiUdp
   * @param sessionCurrDB the session curr db
   * @param existingUdpid the existing id
   *
   * @return the existing SbiUdpValue modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiUdpValue modifyExistingSbiUdpValue(SbiUdpValue exportedUdpValue, Session sessionCurrDB, Integer existingUdpValueId) throws EMFUserError {
    logger.debug("IN");
    SbiUdpValue existingSbiUdpValue = null;
    try {
      existingSbiUdpValue = (SbiUdpValue) sessionCurrDB.load(SbiUdpValue.class, existingUdpValueId);
      existingSbiUdpValue.setBeginTs(exportedUdpValue.getBeginTs());
      existingSbiUdpValue.setEndTs(exportedUdpValue.getEndTs());
      existingSbiUdpValue.setFamily(exportedUdpValue.getFamily());
      existingSbiUdpValue.setLabel(exportedUdpValue.getLabel());
      existingSbiUdpValue.setName(exportedUdpValue.getName());
      existingSbiUdpValue.setProg(exportedUdpValue.getProg());
      existingSbiUdpValue.setFamily(exportedUdpValue.getFamily());
      existingSbiUdpValue.setValue(exportedUdpValue.getValue());
    }

    finally {
      logger.debug("OUT");
    }
    return existingSbiUdpValue;
  }
  /**
   * Creates a new hibernate SbiOrgUnitGrant grant object.
   *
   * @param SbiOrgUnitGrant grant
   *
   * @return the new hibernate parameter object
   */
  public static SbiOrgUnitGrant makeNewOuGrant(SbiOrgUnitGrant grant ,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiOrgUnitGrant newGrant = new SbiOrgUnitGrant();
    try{
      newGrant.setDescription(grant.getDescription());
      newGrant.setEndDate(grant.getEndDate());
      newGrant.setLabel(grant.getLabel());
      newGrant.setName(grant.getName());
      newGrant.setStartDate(grant.getStartDate());
      newGrant.setIsAvailable(true);
      // associations
      entitiesAssociationsOuGrant(grant, newGrant, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new grant with exported id " + grant.getId());     
    }
    return newGrant;
  }
  /**
   * For SbiOrgUnitGrant search new Ids
   *
   * @param exportedSbiUdpValue the exported SbiOrgUnitGrant
   * @param sessionCurrDB the session curr db
   *
   * @return the existing SbiOrgUnitGrant modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsOuGrant(SbiOrgUnitGrant exportedGrant, SbiOrgUnitGrant existingGrant,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN")
    // model instance id
    Map modInstAss = metaAss.getModelInstanceIDAssociation();
    //original value of exported object != null
    if(exportedGrant.getSbiKpiModelInst()!=null){
      Integer oldMiId = exportedGrant.getSbiKpiModelInst().getKpiModelInst();
      Integer newMiId=(Integer)modInstAss.get(oldMiId);
      if(newMiId==null) {
        logger.error("could not find association with modelinstance id with id " + oldMiId);       
      }
      else{
        SbiKpiModelInst newSbiMi = (SbiKpiModelInst) sessionCurrDB.load(SbiKpiModelInst.class, newMiId);
        existingGrant.setSbiKpiModelInst(newSbiMi);
      }
    }
    // hierarchy id
    Map ouHierAss = metaAss.getOuHierarchiesAssociation();
    //original value of exported object != null
    if(exportedGrant.getSbiOrgUnitHierarchies()!=null){
      Integer oldHierId = exportedGrant.getSbiOrgUnitHierarchies().getId();
      Integer newHierId=(Integer)ouHierAss.get(oldHierId);
      if(newHierId==null) {
        logger.error("could not find association with ou hierarchy id with id " + oldHierId);       
      }
      else{
        SbiOrgUnitHierarchies newSbiHier = (SbiOrgUnitHierarchies) sessionCurrDB.load(SbiOrgUnitHierarchies.class, newHierId);
        existingGrant.setSbiOrgUnitHierarchies(newSbiHier);
      }
    }

    logger.debug("OUT");
  }
  /**
   * Load an existing grant and make modifications as per the exported grant in input
   *
   * @param exportedGrant the exported grant
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing grant modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiOrgUnitGrant modifyExistingOuGrant(SbiOrgUnitGrant exportedGrant, Session sessionCurrDB,
      Integer existingId) throws EMFUserError {
    logger.debug("IN");
    SbiOrgUnitGrant existingGrant = null;
    try {
      // update Grant
      existingGrant = (SbiOrgUnitGrant) sessionCurrDB.load(SbiOrgUnitGrant.class, existingId);
      existingGrant.setDescription(exportedGrant.getDescription());
      existingGrant.setEndDate(exportedGrant.getEndDate());
      existingGrant.setLabel(exportedGrant.getLabel());
      existingGrant.setName(exportedGrant.getName());
      existingGrant.setStartDate(exportedGrant.getStartDate());
      existingGrant.setIsAvailable(true);
    }

    finally {
      logger.debug("OUT");
    }
    return existingGrant;
  }
  /**
   * Creates a new hibernate SbiOrgUnitGrantNodes grant node object.
   *
   * @param SbiOrgUnitGrantNodes grant node
   *
   * @return the new hibernate parameter object
   */
  public static SbiOrgUnitGrantNodes makeNewOuGrantNode(SbiOrgUnitGrantNodes grantNode ,Session sessionCurrDB, MetadataAssociations metaAss, ImporterMetadata importer){
    logger.debug("IN");
    SbiOrgUnitGrantNodes newGrantNode = new SbiOrgUnitGrantNodes();
    try{
      SbiOrgUnitGrantNodesId id = new SbiOrgUnitGrantNodesId();
      // associations
      entitiesAssociationsOuGrantNode(id, grantNode, newGrantNode, sessionCurrDB, metaAss, importer);

      logger.debug("OUT");
    }
    catch (Exception e) {
      logger.error("Error in creating new grant node with exported grant id " + grantNode.getId().getGrantId());     
    }
    return newGrantNode;
  }
  /**
   * For SbiOrgUnitGrantNodes search new Ids
   *
   * @param exportedGrantNode the exported SbiOrgUnitGrantNodes
   * @param sessionCurrDB the session curr db
   *
   * @return the existing SbiOrgUnitGrantNodes modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static void entitiesAssociationsOuGrantNode(SbiOrgUnitGrantNodesId id, SbiOrgUnitGrantNodes exportedGrantNode, SbiOrgUnitGrantNodes existingGrantNode,Session sessionCurrDB,
      MetadataAssociations metaAss, ImporterMetadata importer) throws EMFUserError {
    logger.debug("IN")

    // model instance id
    Map modInstAss = metaAss.getModelInstanceIDAssociation();
    //original value of exported object != null
    if(exportedGrantNode.getSbiKpiModelInst()!=null){
      Integer oldMiId = exportedGrantNode.getSbiKpiModelInst().getKpiModelInst();
      Integer newMiId=(Integer)modInstAss.get(oldMiId);
      if(newMiId==null) {
        logger.error("could not find association with modelinstance id with id " + oldMiId);       
      }
      else{
        SbiKpiModelInst newSbiMi = (SbiKpiModelInst) sessionCurrDB.load(SbiKpiModelInst.class, newMiId);
        exportedGrantNode.setSbiKpiModelInst(newSbiMi);
        id.setKpiModelInstNodeId(newSbiMi.getKpiModelInst());
      }
    }
    // grant id
    Map grantAss = metaAss.getOuGrantAssociation();
    //original value of exported object != null
    if(exportedGrantNode.getSbiOrgUnitGrant()!=null){
      Integer oldGrantId = exportedGrantNode.getSbiOrgUnitGrant().getId();
      Integer newGrantId=(Integer)grantAss.get(oldGrantId);
      if(newGrantId==null) {
        logger.error("could not find association with grant id with id " + oldGrantId);       
      }
      else{
        SbiOrgUnitGrant newSbiGrant = (SbiOrgUnitGrant) sessionCurrDB.load(SbiOrgUnitGrant.class, newGrantId);
        exportedGrantNode.setSbiOrgUnitGrant(newSbiGrant);
        id.setGrantId(newSbiGrant.getId());
      }
    }
    // node id
    Map nodeAss = metaAss.getOuNodeAssociation();
    //original value of exported object != null
    if(exportedGrantNode.getSbiOrgUnitNodes()!=null){
      Integer oldNodeId = exportedGrantNode.getSbiOrgUnitNodes().getNodeId();
      Integer newNodeId=(Integer)nodeAss.get(oldNodeId);
      if(newNodeId==null) {
        logger.error("could not find association with node id with id " + oldNodeId);       
      }
      else{
        SbiOrgUnitNodes newSbiNode = (SbiOrgUnitNodes) sessionCurrDB.load(SbiOrgUnitNodes.class, newNodeId);
        exportedGrantNode.setSbiOrgUnitNodes(newSbiNode);
        id.setNodeId(newSbiNode.getNodeId());
      }
    }
    existingGrantNode.setId(id);
    logger.debug("OUT");
  }
  /**
   * Load an existing grant node and make modifications as per the exported grant node in input
   *
   * @param exportedGrantNode the exported grant node
   * @param sessionCurrDB the session curr db
   * @param existingId the existing id
   *
   * @return the existing grant modified as per the exported parameter in input
   *
   * @throws EMFUserError the EMF user error
   */
  public static SbiOrgUnitGrantNodes modifyExistingOuGrantNode(SbiOrgUnitGrantNodes exportedGrantNode, Session sessionCurrDB,
      SbiOrgUnitGrantNodesId existingId) throws EMFUserError {
    logger.debug("IN");
    SbiOrgUnitGrantNodes existingGrantNode = null;
    try {
      // update Grant node
      existingGrantNode = (SbiOrgUnitGrantNodes) sessionCurrDB.load(SbiOrgUnitGrantNodes.class, existingId);

    }

    finally {
      logger.debug("OUT");
    }
    return existingGrantNode;
  }
}









TOP

Related Classes of it.eng.spagobi.tools.importexport.ImportUtilities

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.