Package it.eng.spagobi.kpi.model.dao

Source Code of it.eng.spagobi.kpi.model.dao.ModelInstanceDAOImpl

package it.eng.spagobi.kpi.model.dao;

import it.eng.spago.error.EMFErrorSeverity;
import it.eng.spago.error.EMFUserError;
import it.eng.spagobi.commons.dao.AbstractHibernateDAO;
import it.eng.spagobi.commons.dao.DAOFactory;
import it.eng.spagobi.commons.metadata.SbiDomains;
import it.eng.spagobi.kpi.config.bo.KpiInstPeriod;
import it.eng.spagobi.kpi.config.bo.KpiInstance;
import it.eng.spagobi.kpi.config.dao.IKpiInstanceDAO;
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.SbiKpiInstanceHistory;
import it.eng.spagobi.kpi.config.metadata.SbiKpiPeriodicity;
import it.eng.spagobi.kpi.config.metadata.SbiKpiValue;
import it.eng.spagobi.kpi.model.bo.Model;
import it.eng.spagobi.kpi.model.bo.ModelInstance;
import it.eng.spagobi.kpi.model.bo.ModelInstanceNode;
import it.eng.spagobi.kpi.model.bo.Resource;
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.threshold.metadata.SbiThreshold;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Order;
import org.hibernate.exception.ConstraintViolationException;

public class ModelInstanceDAOImpl extends AbstractHibernateDAO implements
IModelInstanceDAO {

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

  public static ModelInstanceNode toModelInstanceNode(
      SbiKpiModelInst hibSbiKpiModelInst)
  throws EMFUserError {

    logger.debug("IN");
    ModelInstanceNode toReturn = new ModelInstanceNode();

    String modelCode = "";

    if (hibSbiKpiModelInst.getSbiKpiModel() != null) {
      modelCode = hibSbiKpiModelInst.getSbiKpiModel().getKpiModelCd();
    }

    Integer id = hibSbiKpiModelInst.getKpiModelInst();
    logger.debug("SbiKpiModelInstanceNode id: "
        + (id != null ? id : "id null"));
    String descr = hibSbiKpiModelInst.getDescription();
    logger.debug("SbiKpiModelInstanceNode description: "
        + (descr != null ? descr : "Description null"));
    String name = hibSbiKpiModelInst.getName();
    logger.debug("SbiKpiModelInstanceNode name: "
        + (name != null ? name : "name null"));
    SbiKpiInstance kpiInst = hibSbiKpiModelInst.getSbiKpiInstance();

    IKpiInstanceDAO kpiInstDAO = DAOFactory.getKpiInstanceDAO();
    KpiInstance kpiInstanceAssociated = null;
    if (kpiInst != null) {
      kpiInstanceAssociated = kpiInstDAO.toKpiInstance(kpiInst);
    }

    Set resources = hibSbiKpiModelInst.getSbiKpiModelResourceses();
    List res = new ArrayList();
    if (!resources.isEmpty()) {
      Iterator i = resources.iterator();
      IModelResourceDAO resDAO = DAOFactory.getModelResourcesDAO();
      while (i.hasNext()) {
        SbiKpiModelResources dls = (SbiKpiModelResources) i.next();
        Resource r = resDAO.toResource(dls);
        logger.debug("SbiKpiModelInstanceNode resource name: "
            + (r.getName() != null ? r.getName()
                : "Resource name null"));
        res.add(r);
      }
    }
    // gets father id
    SbiKpiModelInst father = hibSbiKpiModelInst.getSbiKpiModelInst();
    Integer fatherId = null;
    Boolean isRoot = false;
    if (father != null) {
      fatherId = father.getKpiModelInst();
      logger
      .debug("SbiKpiModelInstanceNode fatherId: "
          + (fatherId != null ? fatherId.toString()
              : "fatherId null"));
    } else {
      isRoot = true;
    }

    // gets list of children id
    Set children = hibSbiKpiModelInst.getSbiKpiModelInsts();
    List childrenIds = new ArrayList();
    Iterator iCI = children.iterator();
    logger.debug("Started list of children");
    while (iCI.hasNext()) {
      SbiKpiModelInst skml = (SbiKpiModelInst) iCI.next();
      Integer childId = skml.getKpiModelInst();
      logger.debug("SbiKpiModelInstanceNode childrenId: "
          + (childId != null ? childId.toString() : "childId null"));
      childrenIds.add(childId);
    }

    // gets ModelNode referenced
    Integer reference = hibSbiKpiModelInst.getSbiKpiModel().getKpiModelId();
    logger
    .debug("SbiKpiModelInstanceNode modelNodeReference: "
        + (reference != null ? reference.toString()
            : "reference null"));

    toReturn.setModelInstanceNodeId(id);
    logger.debug("KpiModelInstanceNode id setted");
    toReturn.setDescr(descr);
    logger.debug("KpiModelInstanceNode description setted");
    toReturn.setName(name);
    logger.debug("KpiModelInstanceNode name setted");
    toReturn.setKpiInstanceAssociated(kpiInstanceAssociated);
    logger.debug("KpiModelInstanceNode kpiInstanceAssociated setted");
    toReturn.setResources(res);
    logger.debug("KpiModelInstanceNode resources setted");
    toReturn.setFatherId(fatherId);
    logger.debug("KpiModelInstanceNode fatherId setted");
    toReturn.setModelReference(reference);
    logger.debug("KpiModelInstanceNode ModelNode reference setted");
    toReturn.setIsRoot(isRoot);
    logger.debug("KpiModelInstanceNode isRoot setted");
    toReturn.setChildrenIds(childrenIds);
    logger.debug("KpiModelInstanceNode childrenIds setted");
    toReturn.setModelCode(modelCode);
    logger.debug("KpiModelInstanceNode childrenIds setted");

    toReturn.setModelInstaceReferenceLabel(hibSbiKpiModelInst
        .getModelUUID());
    logger.debug("OUT");
    return toReturn;
  }

  public ModelInstanceNode loadModelInstanceById(Integer id,
      Date requestedDate) throws EMFUserError {
    logger.debug("IN");
    ModelInstanceNode toReturn = null;
    Session aSession = null;
    Transaction tx = null;

    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      SbiKpiModelInst hibSbiKpiModelInst = (SbiKpiModelInst) aSession
      .get(SbiKpiModelInst.class, id);
      toReturn = toModelInstanceNode(hibSbiKpiModelInst);

    } catch (HibernateException he) {
      logger.error("Error while loading the Model Instance with id "
          + ((id == null) ? "" : id.toString()), he);

      if (tx != null)
        tx.rollback();
      logger.error(he);
      throw new EMFUserError(EMFErrorSeverity.ERROR, 10101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;
  }

  public ModelInstanceNode loadModelInstanceByLabel(String label,
      Date requestedDate) throws EMFUserError {
    logger.debug("IN");
    ModelInstanceNode toReturn = null;
    Session aSession = null;
    Transaction tx = null;

    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      Criterion nameCriterrion = Expression.eq("label", label);
      Criteria criteria = aSession.createCriteria(SbiKpiModelInst.class);
      criteria.add(nameCriterrion);
      SbiKpiModelInst hibSbiKpiModelInst = (SbiKpiModelInst) criteria
      .uniqueResult();
      if (hibSbiKpiModelInst == null)
        return null;
      toReturn = toModelInstanceNode(hibSbiKpiModelInst);

    } catch (HibernateException he) {
      logger.error("Error while loading the Model Instance with name "
          + ((label == null) ? "null" : label), he);

      if (tx != null)
        tx.rollback();
      logger.error(he);
      throw new EMFUserError(EMFErrorSeverity.ERROR, 10101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;
  }

  public List loadModelsInstanceRoot() throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    List toReturn = new ArrayList();
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      Criteria crit = aSession.createCriteria(SbiKpiModelInst.class);
      crit.add(Expression.isNull("sbiKpiModelInst"));
      List sbiKpiModelInstanceList = crit.list();
      for (Iterator iterator = sbiKpiModelInstanceList.iterator(); iterator
      .hasNext();) {
        SbiKpiModelInst sbiKpiModelInst = (SbiKpiModelInst) iterator
        .next();
        ModelInstance aModelInst = toModelInstanceWithoutChildren(
            sbiKpiModelInst, aSession);
        toReturn.add(aModelInst);
      }
    } catch (HibernateException he) {
      logException(he);

      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
      }
    }
    logger.debug("OUT");
    return toReturn;

  }

  public static ModelInstance toModelInstanceWithoutChildren(SbiKpiModelInst value,
      Session aSession) {
    logger.debug("IN");
    ModelInstance toReturn = new ModelInstance();

    String name = value.getName();
    String description = value.getDescription();
    String label = value.getLabel();
    Date startDate = value.getStartDate();
    Date endDate = value.getEndDate();
    Integer id = value.getKpiModelInst();
    SbiKpiModel sbiKpiModel = value.getSbiKpiModel();
    String modelUUID = value.getModelUUID();

    // insert Parent
    if (value.getSbiKpiModelInst() != null) {
      toReturn.setParentId(value.getSbiKpiModelInst().getKpiModelInst());
    }

    // load with Dao to get also domains
    try {
      SbiKpiModel sbiKpiModel2 = null;
      IModelDAO modelDao = (IModelDAO) DAOFactory.getModelDAO();
      Integer modelId = sbiKpiModel.getKpiModelId();
      // sbiKpiModel2=modelDao.l(modelId);

    } catch (EMFUserError e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    Model aModel = ModelDAOImpl.toModelWithoutChildren(sbiKpiModel,
        aSession);
    SbiKpiInstance sbiKpiInstance = value.getSbiKpiInstance();

    if (sbiKpiInstance != null) {
      // toKpiInstance
      KpiInstance aKpiInstance = new KpiInstance();
      aKpiInstance.setKpiInstanceId(sbiKpiInstance.getIdKpiInstance());
      aKpiInstance.setKpi(sbiKpiInstance.getSbiKpi().getKpiId());
      if (sbiKpiInstance.getSbiThreshold() != null) {
        aKpiInstance.setThresholdId(sbiKpiInstance.getSbiThreshold()
            .getThresholdId());
      }
      if (sbiKpiInstance.getChartType() != null) {
        aKpiInstance.setChartTypeId(sbiKpiInstance.getChartType()
            .getValueId());
      }
      // TODO
      if (sbiKpiInstance.getSbiKpiInstPeriods() != null
          && !(sbiKpiInstance.getSbiKpiInstPeriods().isEmpty())) {
        SbiKpiInstPeriod instPeriod = (SbiKpiInstPeriod) sbiKpiInstance
        .getSbiKpiInstPeriods().toArray()[0];

        aKpiInstance.setPeriodicityId(instPeriod.getSbiKpiPeriodicity()
            .getIdKpiPeriodicity());
      } //
      aKpiInstance.setWeight(sbiKpiInstance.getWeight());
      aKpiInstance.setTarget(sbiKpiInstance.getTarget());
      aKpiInstance.setD(sbiKpiInstance.getBeginDt());
      //
      toReturn.setKpiInstance(aKpiInstance);
    }

    toReturn.setId(id);
    toReturn.setName(name);
    toReturn.setDescription(description);
    toReturn.setLabel(label);
    toReturn.setStartDate(startDate);
    toReturn.setEndDate(endDate);
    toReturn.setModel(aModel);
    toReturn.setModelUUID(modelUUID);

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

  public ModelInstance loadModelInstanceWithoutChildrenById(Integer id)
  throws EMFUserError {
    logger.debug("IN");
    ModelInstance toReturn = null;
    Session aSession = null;
    Transaction tx = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      SbiKpiModelInst hibSbiKpiModelInstance = (SbiKpiModelInst) aSession
      .load(SbiKpiModelInst.class, id);
      toReturn = toModelInstanceWithoutChildren(hibSbiKpiModelInstance,
          aSession);

    } catch (HibernateException he) {
      logger.error("Error while loading the Model Instance with id "
          + ((id == null) ? "" : id.toString()), he);

      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;
  }

  public ModelInstance loadModelInstanceWithoutChildrenByLabel(String label)
  throws EMFUserError {
    logger.debug("IN");
    ModelInstance toReturn = null;
    Session aSession = null;
    Transaction tx = null;

    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      Criterion nameCriterrion = Expression.eq("label", label);
      Criteria criteria = aSession.createCriteria(SbiKpiModelInst.class);
      criteria.add(nameCriterrion);
      SbiKpiModelInst hibSbiKpiModelInst = (SbiKpiModelInst) criteria
      .uniqueResult();
      if (hibSbiKpiModelInst == null)
        return null;
      toReturn = toModelInstanceWithoutChildren(hibSbiKpiModelInst,
          aSession);

    } catch (HibernateException he) {
      logger.error("Error while loading the Model Instance with label "
          + ((label == null) ? "null" : label), he);

      if (tx != null)
        tx.rollback();
      logger.error(he);
      throw new EMFUserError(EMFErrorSeverity.ERROR, 10101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;
  }

  // ModelInstance toReturn = null;
  // Session aSession = null;
  // Transaction tx = null;
  // try {
  // aSession = getSession();
  // tx = aSession.beginTransaction();
  // SbiKpiModelInst hibSbiKpiModelInstance = (SbiKpiModelInst) aSession
  // .load(SbiKpiModelInst.class, label);
  // toReturn = toModelInstanceWithoutChildren(hibSbiKpiModelInstance,
  // aSession);

  // } catch (HibernateException he) {
  // logger.error("Error while loading the Model Instance with label "
  // + ((label == null) ? "" : label.toString()), he);

  // if (tx != null)
  // tx.rollback();

  // throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

  // } finally {
  // if (aSession != null) {
  // if (aSession.isOpen())
  // aSession.close();
  // logger.debug("OUT");
  // }
  // }
  // logger.debug("OUT");
  // return toReturn;
  // }

  public void modifyModelInstance(ModelInstance value) throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      Integer kpiModelInstanceId = value.getId();
      String kpiModelInstanceDesc = value.getDescription();
      String kpiModelInstanceNm = value.getName();
      String kpiModelInstanceLb = value.getLabel();
      Date kpiModelInstanceStartDate = value.getStartDate();
      Date kpiModelInDateEndDate = value.getEndDate();
      String modelUUID = value.getModelUUID();

      SbiKpiModelInst sbiKpiModelInst = (SbiKpiModelInst) aSession.load(
          SbiKpiModelInst.class, kpiModelInstanceId);
     
      sbiKpiModelInst.setDescription(kpiModelInstanceDesc);
      sbiKpiModelInst.setName(kpiModelInstanceNm);
      sbiKpiModelInst.setLabel(kpiModelInstanceLb);
      sbiKpiModelInst.setStartDate(kpiModelInstanceStartDate);
      sbiKpiModelInst.setEndDate(kpiModelInDateEndDate);
      sbiKpiModelInst.setModelUUID(modelUUID);

      SbiKpiInstance oldSbiKpiInstance = sbiKpiModelInst
      .getSbiKpiInstance();

      //default behaviour
      boolean newKpiInstanceHistory = true;
      boolean deleteOldHistory = false;
      boolean dontSaveKpiHistory = false;
      if(value.getKpiInstance() != null && !value.getKpiInstance().isSaveKpiHistory()){
        dontSaveKpiHistory = true;
      }

      // new kpiInstance is null
      if (value.getKpiInstance() == null) {
        newKpiInstanceHistory = false;
        deleteOldHistory = true;
      }

      if (value.getKpiInstance() != null
          && (!value.getKpiInstance().isSaveKpiHistory())) {
        newKpiInstanceHistory = false;
        dontSaveKpiHistory = true;
      }

      // old kpiInstance is null and new kpiInstance has a value
      if (oldSbiKpiInstance == null && value.getKpiInstance() != null) {
        newKpiInstanceHistory = false;
      }

      // old kpiId is different from new kpiId
      if (newKpiInstanceHistory
          && !(areBothNull(oldSbiKpiInstance.getSbiKpi(), value
              .getKpiInstance().getKpi()) || (oldSbiKpiInstance
                  .getSbiKpi() != null && areNullOrEquals(
                      oldSbiKpiInstance.getSbiKpi().getKpiId(), value
                      .getKpiInstance().getKpi())))) {
        newKpiInstanceHistory = false;
        deleteOldHistory = true;
        // create new sbiKpiInstance
      }

      // check if same value is changed
      if (newKpiInstanceHistory
          && !((areBothNull(oldSbiKpiInstance.getSbiThreshold(),
              value.getKpiInstance().getThresholdId()) || (oldSbiKpiInstance
                  .getSbiThreshold() != null && areNullOrEquals(
                      oldSbiKpiInstance.getSbiThreshold()
                      .getThresholdId(), value.getKpiInstance()
                      .getThresholdId())))
                      && (areBothNull(oldSbiKpiInstance.getChartType(),
                          value.getKpiInstance().getChartTypeId()) || (oldSbiKpiInstance
                              .getChartType() != null && areNullOrEquals(
                                  oldSbiKpiInstance.getChartType()
                                  .getValueId(), value
                                  .getKpiInstance().getChartTypeId())))
                                  /*
                                   * TODO && (areBothNull(oldSbiKpiInstance
                                   * .getSbiKpiPeriodicity(), value
                                   * .getKpiInstance().getPeriodicityId()) ||
                                   * (oldSbiKpiInstance .getSbiKpiPeriodicity() != null &&
                                   * areNullOrEquals( oldSbiKpiInstance.getSbiKpiPeriodicity()
                                   * .getIdKpiPeriodicity(), value .getKpiInstance()
                                   * .getPeriodicityId())))
                                   */
                                  && areNullOrEquals(oldSbiKpiInstance.getWeight(), value
                                      .getKpiInstance().getWeight()))) {
        // create new History
        Calendar now = Calendar.getInstance();
        SbiKpiInstanceHistory sbiKpiInstanceHistory = new SbiKpiInstanceHistory();
        sbiKpiInstanceHistory.setSbiKpiInstance(oldSbiKpiInstance);
        sbiKpiInstanceHistory.setSbiThreshold(oldSbiKpiInstance
            .getSbiThreshold());
        sbiKpiInstanceHistory.setSbiDomains(oldSbiKpiInstance
            .getChartType());
        sbiKpiInstanceHistory.setWeight(oldSbiKpiInstance.getWeight());
        sbiKpiInstanceHistory
        .setBeginDt(oldSbiKpiInstance.getBeginDt());
        sbiKpiInstanceHistory.setEndDt(now.getTime());
        updateSbiCommonInfo4Insert(sbiKpiInstanceHistory);
        aSession.save(sbiKpiInstanceHistory);
      }

      SbiKpiInstance kpiInstanceToCreate = null;



      if (value.getKpiInstance() != null) {
        if (newKpiInstanceHistory || dontSaveKpiHistory) {
          kpiInstanceToCreate = setSbiKpiInstanceFromModelInstance(
              aSession, value, oldSbiKpiInstance);
        } else {
          // create new kpiInstance
          kpiInstanceToCreate = new SbiKpiInstance();
          Calendar now = Calendar.getInstance();
          kpiInstanceToCreate.setBeginDt(now.getTime());
          kpiInstanceToCreate = setSbiKpiInstanceFromModelInstance(
              aSession, value, kpiInstanceToCreate);
        }
        updateSbiCommonInfo4Update(kpiInstanceToCreate);
        aSession.saveOrUpdate(kpiInstanceToCreate);
        sbiKpiModelInst.setSbiKpiInstance(kpiInstanceToCreate);
      } else {
        sbiKpiModelInst.setSbiKpiInstance(null);
      }
      updateSbiCommonInfo4Update(sbiKpiModelInst);
      aSession.update(sbiKpiModelInst);

      //adds or updates periodicity
      setSbiKpiPeriodicity(aSession, value, kpiInstanceToCreate, oldSbiKpiInstance);

      if (deleteOldHistory && oldSbiKpiInstance != null) {
        deleteKpiInstance(aSession, oldSbiKpiInstance
            .getIdKpiInstance());
      }

      //DAOFactory.getUdpDAOValue().insertOrUpdateRelatedUdpValues(value, sbiKpiModelInst, aSession, "MODEL");
     
      tx.commit();

    }

    catch (org.hibernate.exception.ConstraintViolationException ce) {
      if (tx != null && tx.isActive()) {
        tx.rollback();
      }
      logger.error("Impossible to modify a Model Instance Instance", ce);
      throw new EMFUserError(EMFErrorSeverity.WARNING, 101);

    }

    catch (HibernateException he) {
      logException(he);

      if (tx != null)
        tx.rollback();
     
      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
      }
    }
    logger.debug("OUT");
  }

  private SbiKpiInstance setSbiKpiInstanceFromModelInstance(Session aSession,
      ModelInstance value, SbiKpiInstance sbiKpiInstance) {
    if (sbiKpiInstance == null) {
      sbiKpiInstance = new SbiKpiInstance();
    }
    if (value.getKpiInstance().getD() != null) {
      sbiKpiInstance.setBeginDt(value.getKpiInstance().getD());
    } else {
      sbiKpiInstance.setBeginDt(new Date());
    }

    if (value.getKpiInstance().getKpi() != null) {
      sbiKpiInstance.setSbiKpi((SbiKpi) aSession.load(SbiKpi.class, value
          .getKpiInstance().getKpi()));
    } else {
      sbiKpiInstance.setSbiKpi(null);
    }
    if (value.getKpiInstance().getThresholdId() != null) {
      sbiKpiInstance.setSbiThreshold((SbiThreshold) aSession
          .load(SbiThreshold.class, value.getKpiInstance()
              .getThresholdId()));
    } else {
      sbiKpiInstance.setSbiThreshold(null);
    }

    if (value.getKpiInstance().getChartTypeId() != null) {
      sbiKpiInstance.setChartType((SbiDomains) aSession.load(
          SbiDomains.class, value.getKpiInstance().getChartTypeId()));
    } else {
      sbiKpiInstance.setChartType(null);
    }


    sbiKpiInstance.setWeight(value.getKpiInstance().getWeight());
    sbiKpiInstance.setTarget((value.getKpiInstance().getTarget()));
    return sbiKpiInstance;
  }
  private SbiKpiInstance setSbiKpiPeriodicity(Session aSession,
      ModelInstance value, SbiKpiInstance sbiKpiInstance, SbiKpiInstance oldSbiKpiInstance) {
    if (sbiKpiInstance != null) {

      if (value.getKpiInstance().getPeriodicityId() != null) {
        // AGGIUNTA O AGGIORNAMENTO RIGA
        // TODO

        SbiKpiPeriodicity sbiKpiPeriodicity = (SbiKpiPeriodicity) aSession
        .load(SbiKpiPeriodicity.class, value.getKpiInstance()
            .getPeriodicityId());

        Criteria critt = aSession.createCriteria(SbiKpiInstPeriod.class);
        critt.add(Expression.eq("sbiKpiInstance", sbiKpiInstance));
        List instPeriodsList = critt.list();


        if (instPeriodsList == null || instPeriodsList.isEmpty()) {
          SbiKpiInstPeriod toInsert = new SbiKpiInstPeriod();
          toInsert.setSbiKpiInstance(sbiKpiInstance);
          toInsert.setSbiKpiPeriodicity(sbiKpiPeriodicity);
          toInsert.setDefault_(true);

          aSession.save(toInsert);

        } else {
          ((SbiKpiInstPeriod) instPeriodsList.get(0))
          .setSbiKpiPeriodicity(sbiKpiPeriodicity);
          aSession.update(instPeriodsList.get(0));
        }

      } else {
        // RIMOZIONE DELLA RIGA DAL DB
        Set InstPeriods = sbiKpiInstance.getSbiKpiInstPeriods();
        for (Iterator iterator = InstPeriods.iterator(); iterator.hasNext();) {
          SbiKpiInstPeriod sbiKpiInstPeriod = (SbiKpiInstPeriod) iterator
          .next();
          aSession.delete(sbiKpiInstPeriod);
        }
        //
      }
    }else{
      if(oldSbiKpiInstance != null){
        //delete reference to old kpi instance
        Set InstPeriods = oldSbiKpiInstance.getSbiKpiInstPeriods();
        for (Iterator iterator = InstPeriods.iterator(); iterator.hasNext();) {
          SbiKpiInstPeriod sbiKpiInstPeriod = (SbiKpiInstPeriod) iterator
          .next();
          aSession.delete(sbiKpiInstPeriod);
        }
      }

    }
    return sbiKpiInstance;
  }
  private boolean areBothNull(Object a, Object b) {
    boolean toReturn = false;
    if (a == null && b == null)
      toReturn = true;
    return toReturn;
  }

  private boolean areNullOrEquals(Object a, Object b) {
    boolean toReturn = false;
    if (a == null && b == null)
      toReturn = true;
    else
      toReturn = false;

    if (!toReturn && a != null && b != null && a.equals(b))
      toReturn = true;
    return toReturn;
  }

  public Integer insertModelInstanceWithKpi(ModelInstance toCreate)
  throws EMFUserError {
    logger.debug("IN");
    Integer idToReturn;
    Session aSession = null;
    Transaction tx = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();

      Integer parentId = toCreate.getParentId();
      // set the sbiKpiModel
      SbiKpiModelInst sbiKpiModelInst = new SbiKpiModelInst();
      sbiKpiModelInst.setName(toCreate.getName());
      sbiKpiModelInst.setDescription(toCreate.getDescription());
      sbiKpiModelInst.setLabel(toCreate.getLabel());
      sbiKpiModelInst.setStartDate(toCreate.getStartDate());
      sbiKpiModelInst.setEndDate(toCreate.getEndDate());
      sbiKpiModelInst.setModelUUID(toCreate.getModelUUID());

      Model aModel = toCreate.getModel();
      if (aModel != null && aModel.getId() != null) {
        SbiKpiModel sbiKpiModel = (SbiKpiModel) aSession.load(
            SbiKpiModel.class, aModel.getId());
        sbiKpiModelInst.setSbiKpiModel(sbiKpiModel);

        // set the sbiKpiInstance
        KpiInstance kpiInst = toCreate.getKpiInstance();

        //if already present
        if(kpiInst != null){
          SbiKpiInstance sbiKpiInstance = new SbiKpiInstance();
          if(kpiInst.getKpi() != null){

            SbiKpi sbiKpi =  (SbiKpi) aSession.load(SbiKpi.class, kpiInst.getKpi());           
            sbiKpiInstance.setSbiKpi(sbiKpi);
            if(kpiInst.getThresholdId() != null){
              SbiThreshold sbiThr =  (SbiThreshold) aSession.load(SbiThreshold.class, kpiInst.getThresholdId());           
              sbiKpiInstance.setSbiThreshold(sbiThr);
            }
            sbiKpiInstance.setWeight(kpiInst.getWeight());

            sbiKpiInstance.setTarget(kpiInst.getTarget());           

            //if periodicity exists then set it
            if(kpiInst.getPeriodicityId() != null){
              Set periods = new HashSet<SbiKpiInstPeriod>();
              SbiKpiPeriodicity sbiPeriodicity =  (SbiKpiPeriodicity) aSession.load(SbiKpiPeriodicity.class, kpiInst.getPeriodicityId())
              if(sbiPeriodicity != null){
                periods.add(sbiPeriodicity);
                sbiKpiInstance.setSbiKpiInstPeriods(periods);
              }
            }
            if(kpiInst.getChartTypeId() != null){
              SbiDomains chartType =  (SbiDomains) aSession.load(SbiDomains.class, kpiInst.getChartTypeId())
              sbiKpiInstance.setChartType(chartType);
            }
            Calendar now = Calendar.getInstance();
            sbiKpiInstance.setBeginDt(now.getTime());
            updateSbiCommonInfo4Insert(sbiKpiInstance);
            aSession.save(sbiKpiInstance);
            sbiKpiModelInst.setSbiKpiInstance(sbiKpiInstance);
          }
        }
      }
      if (parentId != null) {
        SbiKpiModelInst sbiKpiModelInstParent = (SbiKpiModelInst) aSession
        .load(SbiKpiModelInst.class, parentId);
        sbiKpiModelInst.setSbiKpiModelInst(sbiKpiModelInstParent);
      }
      updateSbiCommonInfo4Insert(sbiKpiModelInst);
      idToReturn = (Integer) aSession.save(sbiKpiModelInst);

      tx.commit();

    } catch (HibernateException he) {
      logException(he);
      if (tx != null)
        tx.rollback();
      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
      }
    }
    logger.debug("OUT");
    return idToReturn;

  }

  public Integer insertModelInstance(ModelInstance toCreate)
  throws EMFUserError {
    logger.debug("IN");
    Integer idToReturn;
    Session aSession = null;
    Transaction tx = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();

      Integer parentId = toCreate.getParentId();
      // set the sbiKpiModel
      SbiKpiModelInst sbiKpiModelInst = new SbiKpiModelInst();
      sbiKpiModelInst.setName(toCreate.getName());
      sbiKpiModelInst.setDescription(toCreate.getDescription());
      sbiKpiModelInst.setLabel(toCreate.getLabel());
      sbiKpiModelInst.setStartDate(toCreate.getStartDate());
      sbiKpiModelInst.setEndDate(toCreate.getEndDate());
      sbiKpiModelInst.setModelUUID(toCreate.getModelUUID());

      Model aModel = toCreate.getModel();
      if (aModel != null && aModel.getId() != null) {
        SbiKpiModel sbiKpiModel = (SbiKpiModel) aSession.load(
            SbiKpiModel.class, aModel.getId());
        sbiKpiModelInst.setSbiKpiModel(sbiKpiModel);

        // set the sbiKpiInstance
        SbiKpi sbiKpi = sbiKpiModel.getSbiKpi();
        if (sbiKpi != null) {
          SbiKpiInstance sbiKpiInstance = new SbiKpiInstance();
          sbiKpiInstance.setSbiKpi(sbiKpi);
          sbiKpiInstance.setSbiThreshold(sbiKpi.getSbiThreshold());
          sbiKpiInstance.setWeight(sbiKpi.getWeight());
          Calendar now = Calendar.getInstance();
          sbiKpiInstance.setBeginDt(now.getTime());
          aSession.save(sbiKpiInstance);
          sbiKpiModelInst.setSbiKpiInstance(sbiKpiInstance);
        }

      }
      if (parentId != null) {
        SbiKpiModelInst sbiKpiModelInstParent = (SbiKpiModelInst) aSession
        .load(SbiKpiModelInst.class, parentId);
        sbiKpiModelInst.setSbiKpiModelInst(sbiKpiModelInstParent);
      }
      updateSbiCommonInfo4Insert(sbiKpiModelInst);
      idToReturn = (Integer) aSession.save(sbiKpiModelInst);

      // insert or update the udp values
      //DAOFactory.getUdpDAOValue().insertOrUpdateRelatedUdpValues(toCreate, sbiKpiModelInst, aSession, "MODEL");

      tx.commit();

    } catch (HibernateException he) {
      logException(he);
      if (tx != null)
        tx.rollback();
      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
      }
    }
    logger.debug("OUT");
    return idToReturn;

  }

  public ModelInstance loadModelInstanceWithChildrenById(Integer id)
  throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    ModelInstance toReturn = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      SbiKpiModelInst hibSbiKpiModelInst = (SbiKpiModelInst) aSession
      .load(SbiKpiModelInst.class, id);
      toReturn = toModelInstanceWithChildren(aSession,
          hibSbiKpiModelInst, null);
    } catch (HibernateException he) {
      logger.error("Error while loading the ModelInstance with id "
          + ((id == null) ? "" : id.toString()), he);

      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;

  }

  public ModelInstance loadModelInstanceWithChildrenByLabel(String label)
  throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    ModelInstance toReturn = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      SbiKpiModelInst hibSbiKpiModelInst = (SbiKpiModelInst) aSession
      .load(SbiKpiModelInst.class, label);
      toReturn = toModelInstanceWithChildren(aSession,
          hibSbiKpiModelInst, null);
    } catch (HibernateException he) {
      logger.error("Error while loading the ModelInstance with label "
          + ((label == null) ? "" : label.toString()), he);

      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;

  }

  private ModelInstance toModelInstanceWithChildren(Session session,
      SbiKpiModelInst value, Integer parentId) {
    logger.debug("IN");
    ModelInstance toReturn = new ModelInstance();
    String name = value.getName();
    String description = value.getDescription();
    String label = value.getLabel();
    Date startDate = value.getStartDate();
    Date endDate = value.getEndDate();
    Integer id = value.getKpiModelInst();
    SbiKpiModel sbiKpiModel = value.getSbiKpiModel();
    String modelUUID = value.getModelUUID();
    Model aModel = ModelDAOImpl
    .toModelWithoutChildren(sbiKpiModel, session);
    SbiKpiInstance sbiKpiInstance = value.getSbiKpiInstance();

    if (sbiKpiInstance != null) {
      // toKpiInstance
      KpiInstance aKpiInstance = new KpiInstance();
      aKpiInstance.setKpiInstanceId(sbiKpiInstance.getIdKpiInstance());
      aKpiInstance.setKpi(sbiKpiInstance.getSbiKpi().getKpiId());
      if (sbiKpiInstance.getSbiThreshold() != null) {
        aKpiInstance.setThresholdId(sbiKpiInstance.getSbiThreshold()
            .getThresholdId());
      }
      if (sbiKpiInstance.getChartType() != null) {
        aKpiInstance.setChartTypeId(sbiKpiInstance.getChartType()
            .getValueId());
      }
      // TODO
      if (sbiKpiInstance.getSbiKpiInstPeriods() != null
          && !(sbiKpiInstance.getSbiKpiInstPeriods().isEmpty())) {
        SbiKpiInstPeriod instPeriod = (SbiKpiInstPeriod) sbiKpiInstance
        .getSbiKpiInstPeriods().toArray()[0];

        aKpiInstance.setPeriodicityId(instPeriod.getSbiKpiPeriodicity()
            .getIdKpiPeriodicity());
      }
      aKpiInstance.setWeight(sbiKpiInstance.getWeight());
      aKpiInstance.setTarget(sbiKpiInstance.getTarget());
      aKpiInstance.setD(sbiKpiInstance.getBeginDt());
      //
      toReturn.setKpiInstance(aKpiInstance);
    }

    List childrenNodes = new ArrayList();

    Criteria critt = session.createCriteria(SbiKpiModelInst.class);
    critt.add(Expression.eq("sbiKpiModelInst", value));
    critt.createCriteria("sbiKpiModel").addOrder(Order.asc("kpiModelCd"));

    List children = critt.list();

    for (Iterator iterator = children.iterator(); iterator.hasNext();) {
      SbiKpiModelInst sbiKpichild = (SbiKpiModelInst) iterator.next();
      ModelInstance child = toModelInstanceWithChildren(session,
          sbiKpichild, id);
      childrenNodes.add(child);
    }

    toReturn.setId(id);
    toReturn.setName(name);
    toReturn.setDescription(description);
    toReturn.setLabel(label);
    toReturn.setStartDate(startDate);
    toReturn.setEndDate(endDate);
    toReturn.setChildrenNodes(childrenNodes);
    toReturn.setParentId(parentId);
    toReturn.setModel(aModel);
    toReturn.setModelUUID(modelUUID);

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

  public List getCandidateModelChildren(Integer parentId) throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    List toReturn = new ArrayList();
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      SbiKpiModelInst sbiKpiModelInst = (SbiKpiModelInst) aSession.load(
          SbiKpiModelInst.class, parentId);
      SbiKpiModel aModel = (SbiKpiModel) sbiKpiModelInst.getSbiKpiModel();

      // Load all Children
      if (aModel != null) {
        Set modelChildren = aModel.getSbiKpiModels();
        // Load all ModelInstance Children
        Set modelInstanceChildren = sbiKpiModelInst
        .getSbiKpiModelInsts();
        // Remove all Children just instantiated
        for (Iterator iterator = modelInstanceChildren.iterator(); iterator
        .hasNext();) {
          SbiKpiModelInst child = (SbiKpiModelInst) iterator.next();
          modelChildren.remove(child.getSbiKpiModel());
        }
        for (Iterator iterator = modelChildren.iterator(); iterator
        .hasNext();) {
          SbiKpiModel sbiKpiModelCandidate = (SbiKpiModel) iterator
          .next();
          Model modelCandidate = new Model();
          modelCandidate.setId(sbiKpiModelCandidate.getKpiModelId());
          modelCandidate
          .setName(sbiKpiModelCandidate.getKpiModelNm());
          toReturn.add(modelCandidate);
        }
      }

    } catch (HibernateException he) {
      logger.error(
          "Error while loading the model canidate children of the parent "
          + ((parentId == null) ? "" : parentId.toString()),
          he);

      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;

  }

  private void deleteKpiInstance(Session aSession, Integer kpiInstId)
  throws EMFUserError {
    SbiKpiInstance sbiKpiInst = (SbiKpiInstance) aSession.load(
        SbiKpiInstance.class, kpiInstId);

    // deleteKpiHistory(Integer sbiKpiInstance)
    Criteria critt = aSession.createCriteria(SbiKpiInstanceHistory.class);
    critt.add(Expression.eq("sbiKpiInstance", sbiKpiInst));
    List sbiKpiInstanceHistory = critt.list();

    for (Iterator iterator = sbiKpiInstanceHistory.iterator(); iterator
    .hasNext();) {
      SbiKpiInstanceHistory sbiKpiH = (SbiKpiInstanceHistory) iterator
      .next();

      aSession.delete(sbiKpiH);
    }

    deleteKpiValue(aSession, kpiInstId);

    aSession.delete(sbiKpiInst);
  }

  private void deleteKpiValue(Session aSession, Integer kpiInstId) {
    SbiKpiInstance sbiKpiInst = (SbiKpiInstance) aSession.load(
        SbiKpiInstance.class, kpiInstId);
    Criteria critt = aSession.createCriteria(SbiKpiValue.class);
    critt.add(Expression.eq("sbiKpiInstance", sbiKpiInst));
    List sbiKpiValueList = critt.list();

    for (Iterator iterator = sbiKpiValueList.iterator(); iterator.hasNext();) {
      SbiKpiValue sbiKpiValue = (SbiKpiValue) iterator.next();

      aSession.delete(sbiKpiValue);

    }
  }

  public void deleteKpiValue(Integer kpiInstId) throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      SbiKpiInstance sbiKpiInst = (SbiKpiInstance) aSession.load(
          SbiKpiInstance.class, kpiInstId);
      Criteria critt = aSession.createCriteria(SbiKpiValue.class);
      critt.add(Expression.eq("sbiKpiInstance", sbiKpiInst));
      List sbiKpiValueList = critt.list();

      for (Iterator iterator = sbiKpiValueList.iterator(); iterator
      .hasNext();) {
        SbiKpiValue sbiKpiValue = (SbiKpiValue) iterator.next();

        aSession.delete(sbiKpiValue);
      }
    } catch (HibernateException he) {
      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }

  }

  public boolean deleteModelInstance(Integer modelId) throws EMFUserError {
    Session aSession = getSession();
    Transaction tx = null;
    try {
      tx = aSession.beginTransaction();
      SbiKpiModelInst aModelInst = (SbiKpiModelInst) aSession.load(
          SbiKpiModelInst.class, modelId);
      recursiveStepDelete(aSession, aModelInst);
      deleteModelInstKpiInstResourceValue(aSession, aModelInst);

      tx.commit();

    } catch (ConstraintViolationException cve) {
      if (tx != null && tx.isActive()) {
        tx.rollback();
      }
      logger.error("Impossible to delete a Model Instance", cve);
      throw new EMFUserError(EMFErrorSeverity.WARNING, 10015);
    } catch (HibernateException e) {
      if (tx != null && tx.isActive()) {
        tx.rollback();
      }
      logger.error("Error while delete a Model ", e);
      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);
    } finally {
      aSession.close();
    }
    return true;
  }

  private void recursiveStepDelete(Session aSession,
      SbiKpiModelInst aModelInst) throws EMFUserError {
    Set children = aModelInst.getSbiKpiModelInsts();
    for (Iterator iterator = children.iterator(); iterator.hasNext();) {
      SbiKpiModelInst modelInstChild = (SbiKpiModelInst) iterator.next();
      recursiveStepDelete(aSession, modelInstChild);
      // delete Model Instance, Kpi Inst, History, Resource and Value
      deleteModelInstKpiInstResourceValue(aSession, modelInstChild);
    }
  }

  private void deleteModelInstKpiInstResourceValue(Session aSession,
      SbiKpiModelInst aModelInst) throws EMFUserError {
    // Delete associations between the model and resources
    DAOFactory.getModelResourcesDAO().removeAllModelResource(
        aModelInst.getKpiModelInst());
    // delete the model Inst
    aSession.delete(aModelInst);
    // Delete Kpi Instance Kpi Instance History Value
    if (aModelInst.getSbiKpiInstance() != null) {     
      //look up for periodicities
      List<KpiInstPeriod> instPeriods = DAOFactory.getKpiInstPeriodDAO().loadKpiInstPeriodId(aModelInst.getSbiKpiInstance()
          .getIdKpiInstance());
      if(instPeriods != null){
        for(int i=0; i<instPeriods.size(); i++){
          KpiInstPeriod instPer = instPeriods.get(i);
          SbiKpiInstPeriod sbiKpiInstPer = (SbiKpiInstPeriod)aSession.load(SbiKpiInstPeriod.class, instPer.getId());
          aSession.delete(sbiKpiInstPer);
        }
        aSession.flush();
      }
      deleteKpiInstance(aSession, aModelInst.getSbiKpiInstance()
          .getIdKpiInstance());
    }
  }

  public List loadModelsInstanceRoot(String fieldOrder, String typeOrder)
  throws EMFUserError {
    logger.debug("IN");
    Session aSession = null;
    Transaction tx = null;
    List toReturn = new ArrayList();
    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      Criteria crit = aSession.createCriteria(SbiKpiModelInst.class);
      crit.add(Expression.isNull("sbiKpiModelInst"));

      if (fieldOrder != null && typeOrder != null) {
        if (typeOrder.toUpperCase().trim().equals("ASC"))
          crit.addOrder(Order
              .asc(getModelInstanceProperty(fieldOrder)));
        if (typeOrder.toUpperCase().trim().equals("DESC"))
          crit.addOrder(Order
              .desc(getModelInstanceProperty(fieldOrder)));
      }

      List sbiKpiModelInstanceList = crit.list();
      for (Iterator iterator = sbiKpiModelInstanceList.iterator(); iterator
      .hasNext();) {
        SbiKpiModelInst sbiKpiModelInst = (SbiKpiModelInst) iterator
        .next();
        ModelInstance aModelInst = toModelInstanceWithoutChildren(
            sbiKpiModelInst, aSession);
        toReturn.add(aModelInst);
      }
    } catch (HibernateException he) {
      logException(he);

      if (tx != null)
        tx.rollback();

      throw new EMFUserError(EMFErrorSeverity.ERROR, 101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
      }
    }
    logger.debug("OUT");
    return toReturn;
  }

  private String getModelInstanceProperty(String property) {
    String toReturn = null;
    if (property != null && property.equals("NAME"))
      toReturn = "name";
    return toReturn;
  }

  /**
   * Returns the root of a model instance
   *
   * @param mi
   *            The model instance
   * @return
   * @throws EMFUserError
   */
  public ModelInstance loadModelInstanceRoot(ModelInstance mi)
  throws EMFUserError {
    logger.debug("IN");
    if (mi.getParentId() == null) {
      logger.debug("OUT");
      return mi;
    } else {
      ModelInstance miPar = loadModelInstanceWithoutChildrenById(mi
          .getParentId());
      logger.debug("Searching model instance parent.");
      return loadModelInstanceRoot(miPar);
    }
  }

  public Integer getExistentRootsByName(String name)
      throws EMFUserError {
    logger.debug("IN");
    Integer toReturn = null;
    Session aSession = null;
    Transaction tx = null;

    try {
      aSession = getSession();
      tx = aSession.beginTransaction();
      Criterion nameCriterrion = Expression.eq("name", name);
      Criteria criteria = aSession.createCriteria(SbiKpiModelInst.class);
      criteria.add(nameCriterrion);
      criteria.add(Expression.isNull("sbiKpiModelInst"));
      List<SbiKpiModelInst> hibSbiKpiModelInsts = (List<SbiKpiModelInst>) criteria.list();
      if (hibSbiKpiModelInsts != null){
        //looks up for progressive names
        nameCriterrion = Expression.like("name", name+"_%");
        criteria = aSession.createCriteria(SbiKpiModelInst.class);
        criteria.add(nameCriterrion);
        criteria.add(Expression.isNull("sbiKpiModelInst"));
        List<SbiKpiModelInst> progrMI = (List<SbiKpiModelInst>) criteria.list();
        if (progrMI != null && progrMI.size() != 0){
          toReturn =  progrMI.size();
        }else{
          toReturn = hibSbiKpiModelInsts.size();
        }
       
      }


    } catch (HibernateException he) {
      logger.error("Error while loading the Model Instance root with name "
          + ((name == null) ? "null" : name), he);

      if (tx != null)
        tx.rollback();
      logger.error(he);
      throw new EMFUserError(EMFErrorSeverity.ERROR, 10101);

    } finally {
      if (aSession != null) {
        if (aSession.isOpen())
          aSession.close();
        logger.debug("OUT");
      }
    }
    logger.debug("OUT");
    return toReturn;
  }

}
TOP

Related Classes of it.eng.spagobi.kpi.model.dao.ModelInstanceDAOImpl

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.