Package railo.runtime.orm.hibernate.event

Source Code of railo.runtime.orm.hibernate.event.InterceptorImpl

package railo.runtime.orm.hibernate.event;

import java.io.Serializable;

import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type;

import railo.runtime.Component;
import railo.runtime.exp.PageException;
import railo.runtime.orm.ORMUtil;
import railo.runtime.orm.hibernate.CommonUtil;
import railo.runtime.orm.hibernate.HibernateCaster;
import railo.runtime.type.Collection;
import railo.runtime.type.Struct;

public class InterceptorImpl extends EmptyInterceptor {

  private static final long serialVersionUID = 7992972603422833660L;

  private final AllEventListener listener;
  private final boolean hasPreInsert;
  private final boolean hasPreUpdate;

  public InterceptorImpl(AllEventListener listener) {
    this.listener=listener;
    if(listener!=null) {
      Component cfc = listener.getCFC();
      hasPreInsert=EventListener.hasEventType(cfc, CommonUtil.PRE_INSERT);
      hasPreUpdate=EventListener.hasEventType(cfc, CommonUtil.PRE_UPDATE);
    }
    else {
      hasPreInsert=false;
      hasPreUpdate=false;
    }
  }

  @Override
  public boolean onSave(Object entity, Serializable id, Object[] state,
      String[] propertyNames, Type[] types) {
   
    return on(entity, id, state, null, propertyNames, types, CommonUtil.PRE_INSERT, hasPreInsert);
    //return super.onSave(entity, id, state, propertyNames, types);
  }

  @Override
  public boolean onFlushDirty(Object entity, Serializable id,
      Object[] currentState, Object[] previousState,
      String[] propertyNames, Type[] types) {
    return on(entity, id, currentState, toStruct(propertyNames, previousState), propertyNames, types, CommonUtil.PRE_UPDATE, hasPreUpdate);
    //return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types);
  }
 

  private boolean on(Object entity, Serializable id,
      Object[] state, Struct data,
      String[] propertyNames, Type[] types, Collection.Key eventType, boolean hasMethod) {
   
    Component cfc = CommonUtil.toComponent(entity,null);
    if(cfc!=null && EventListener.hasEventType(cfc, eventType)){
      EventListener.invoke(eventType, cfc, data, null);
    }
    if(hasMethod)
      EventListener.invoke(eventType, listener.getCFC(), data, entity);
   
   
    boolean rtn=false;
    String prop;
    Object before,current;
    /* jira2049
    ORMSession session = null;
    try {
      session=ORMUtil.getSession(ThreadLocalPageContext.get());
    } catch (PageException pe) {}*/
   
        for(int i = 0; i < propertyNames.length; i++)  {
            prop = propertyNames[i];
            before = state[i];
            current = ORMUtil.getPropertyValue(/* jira2049 session,*/cfc, prop,null);
           
            if(before != current && (current == null || !CommonUtil.equalsComplexEL(before, current))) {
              try {
          state[i] = HibernateCaster.toSQL(types[i], current,null);
        } catch (PageException e) {
          state[i] = current;
        }
        rtn = true;
            }
        }
        return rtn; 
  }
 
   
 
 
 

    private static Struct toStruct(String propertyNames[], Object state[])  {
        Struct sct = CommonUtil.createStruct();
        if(state!=null && propertyNames!=null){
          for(int i = 0; i < propertyNames.length; i++) {
            sct.setEL(CommonUtil.createKey(propertyNames[i]), state[i]);
          }
      }
        return sct;
    }
}
TOP

Related Classes of railo.runtime.orm.hibernate.event.InterceptorImpl

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.