Package ar.com.AmberSoft.iEvenTask.services

Source Code of ar.com.AmberSoft.iEvenTask.services.Service

package ar.com.AmberSoft.iEvenTask.services;

import java.util.HashMap;
import java.util.Map;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.exception.ConstraintViolationException;

import ar.com.AmberSoft.iEvenTask.hibernate.HibernateUtil;
import ar.com.AmberSoft.iEvenTask.utils.AppAdmin;
import ar.com.AmberSoft.iEvenTask.utils.Tools;
import ar.com.AmberSoft.util.ParamsConst;

import com.extjs.gxt.ui.client.data.BaseStringFilterConfig;
import com.extjs.gxt.ui.client.widget.grid.filters.NumericFilter;

public abstract class Service {

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

  public static String FROM = " FROM ";
  public static String WHERE = " WHERE ";
  public static String AND = " AND ";
  public static String LIKE = " LIKE ";
  public static String QUESTION_SYMBOL = " ? ";
  public static String PORCENT = "%";
  public static String FILTERS = "filters";
  public static String ORDER_BY = " ORDER BY ";
  public static String SORT_FIELD = "sortField";
  public static String SORT_DIR = "sortDir";
  public static String SPACE = " ";
  public static String IS_NULL = " IS NULL ";
  public static String EQUAL = " = ";

  public static Map operatorOnWhere;

  private Session session;

  public Session getSession() {
    return session;
  }

  public Service() {
    if (Service.operatorOnWhere == null) {
      operatorOnWhere = new HashMap();
      operatorOnWhere.put(BaseStringFilterConfig.class.getName(), LIKE);
      operatorOnWhere.put(NumericFilter.class.getName(), EQUAL);
    }
    // Si no se esta emulando obtenemos una session de hibernate
    if (!AppAdmin.getInstance().getConfig().isEmulate()) {
      session = HibernateUtil.getSessionFactory().getCurrentSession();
    }

  }

  public Map execute(Map params) throws Exception {
    logger.info("Ejecutando " + this.getClass().getName());

    if (AppAdmin.getInstance().getConfig().isEmulate()) {
      return onEmulate(params);
    }

    Transaction transaction = null;
    if (isTransactionControl(params)) {
      transaction = getSession().beginTransaction();
    }
    Map result = null;
    try {
      result = onExecute(params);

      if (isTransactionControl(params)) {
        try {
          if (transaction.isActive()) {
            transaction.commit();
          }
        } catch (ConstraintViolationException e) {
          logger.error(Tools.getStackTrace(e));
         
          if ((transaction != null) && (transaction.isActive())) {
            transaction.rollback();
          }
         
          Map map = new HashMap();
          map.put(ParamsConst.ERROR, "ConstraintViolationException");
         
          return map;
        } catch (Throwable e) {
         
          logger.error(Tools.getStackTrace(e));
         
          if ((transaction != null) && (transaction.isActive())) {
            transaction.rollback();
          }
        }
      }
    } catch (Exception e) {
      logger.error(Tools.getStackTrace(e));
      if ((transaction != null) && (transaction.isActive())) {
        transaction.rollback();
      }
      throw e;
    }

    logger.info("Fin ejecucion " + this.getClass().getName());
    return result;
  }

  /**
   * Define si el mismo servicio maneja el control transaccional del acceso a
   * BD Por defecto lo maneja el mismo servicio
   *
   * @param params
   * @return
   */
  private Boolean isTransactionControl(Map params) {
    Boolean transactionControl = (Boolean) params
        .get(ParamsConst.TRANSACTION_CONTROL);
    if (transactionControl == null) {
      transactionControl = Boolean.TRUE;
    }
    return transactionControl;
  }

  /**
   * Ejecuta el servicio real
   *
   * @param params
   * @return
   */
  public abstract Map onExecute(Map paramsthrows Exception ;

  /**
   * Emula la ejecucion del servicio Solo se ejecuta con la emulacion activada
   *
   * @param params
   * @return
   */
  public abstract Map onEmulate(Map params);

  /**
   * Transforma un string en un integer
   *
   * @param value
   * @return
   */
  public static Integer stringToInteger(String value) {
    if ((value != null) && (!"".equals(value))) {
      return new Integer(value);
    }
    return null;
  }


}
TOP

Related Classes of ar.com.AmberSoft.iEvenTask.services.Service

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.