Package com.google.code.lightssh.project.log.entity

Source Code of com.google.code.lightssh.project.log.entity.History

package com.google.code.lightssh.project.log.entity;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import com.google.code.lightssh.common.entity.Persistence;
import com.google.code.lightssh.common.entity.base.BaseModel;
import com.google.code.lightssh.common.util.IoSerialUtil;
import com.google.code.lightssh.common.util.ReflectionUtil;
import com.google.code.lightssh.project.log.entity.Field.FieldType;

/**
* 对象历史记录
* @see IoSerialUtil
* @author Aspen
*/
@Entity
@Table( name="T_LOG_HISTORY" )
public class History extends BaseModel{
 
  private static final long serialVersionUID = 1L;
 
  /**
   * 创建时间
   */
  @Column( name="CREATE_DATE")
  private Date createDate;
 
  /**
   * 原始值
   */
  @Column( name="ORIGINAL_OBJECT",columnDefinition="BLOB")
  private byte[] originalObject;
 
  /**
   * 新值
   */
  @Column( name="NEW_OBJECT",columnDefinition="BLOB")
  private byte[] newObject;
 
  /**
   * 访问日志
   */
  @ManyToOne(cascade=CascadeType.ALL)
  @JoinColumn(name="ACCESS_ID")
  private Access access;
   
  public History() {
    super();
  }
 
  public History(Access access,byte[] originalObject,byte[] newObject) {
    this.access = access;
    this.originalObject = originalObject;
    this.newObject = newObject;   
  }
 
  public History(Access access,Persistence<?> originalModel,Persistence<?> newModel) {
    this(access,IoSerialUtil.serialize(originalModel),IoSerialUtil.serialize(newModel));
  }
 
  public void preInsert( ){
    super.preInsert();
    if( access != null && access.getId()==null)
      access.preInsert();
  }


  /**
   * 是否创建
   */
  public boolean isCreated( ){
    return IoSerialUtil.deserialize(originalObject)==null
      && IoSerialUtil.deserialize(newObject)!= null;
  }
 
  /**
   * 是否删除
   */
  public boolean isDeleted( ){
    return IoSerialUtil.deserialize(originalObject)!=null
      && IoSerialUtil.deserialize(newObject)== null;
  }
 
  /**
   * 是否更新
   */
  public boolean isUpdated( ){
    return originalObject!=null && newObject!=null;
  }
 
  /**
   * 用于页面对比显示的对象属性
   * @return
   */
  public Collection<Field> toFileds( ){
    Serializable originalObj = IoSerialUtil.deserialize( getOriginalObject() );
    Serializable newObj = IoSerialUtil.deserialize( getNewObject() );
    if( originalObj == null && newObj == null )
      return null;
   
    Map<String,String> opMap = ReflectionUtil.propertiesByGetterAndSetter(originalObj);
    Map<String,String> npMap = ReflectionUtil.propertiesByGetterAndSetter(newObj);
   
    Map<String,String> allMap = new HashMap<String,String>();
    if( opMap != null )
      allMap.putAll( opMap );
    if( npMap != null )
      allMap.putAll( npMap );
   
    if( allMap.isEmpty() )
      return null;
   
    List<Field> fields = new ArrayList<Field>();
    for( String p:allMap.keySet() ){
      Object ov = null;
      if( originalObj != null && opMap.get(p) != null )
        ov = ReflectionUtil.reflectGetValue( originalObj ,p );
     
      Object nv = null;
      if( newObj != null && npMap.get(p) != null )
        nv = ReflectionUtil.reflectGetValue( newObj ,p );
     
      FieldType type = FieldType.NO_CHANGE;
      if( originalObj != null && newObj != null ){
        if( opMap.get(p) == null )
          type = FieldType.ADD_FIELD;
        if( npMap.get(p) == null )
          type = FieldType.REMOVE_FIELD;
      }
     
      Field field = new Field(type,p,null,ov,nv);
      fields.add( field );
    }
    return fields;
  }

  public Date getCreateDate() {
    return createDate;
  }

  public void setCreateDate(Date createDate) {
    this.createDate = createDate;
  }

  public byte[] getOriginalObject() {
    return originalObject;
  }

  public void setOriginalObject(byte[] originalObject) {
    this.originalObject = originalObject;
  }

  public byte[] getNewObject() {
    return newObject;
  }

  public void setNewObject(byte[] newObject) {
    this.newObject = newObject;
  }

  public Access getAccess() {
    return access;
  }

  public void setAccess(Access access) {
    this.access = access;
  }
 
 
}
TOP

Related Classes of com.google.code.lightssh.project.log.entity.History

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.