/**
* Copyright 2011 Intuit Inc. All Rights Reserved
*/
package com.intuit.tank.project;
/*
* #%L
* Intuit Tank data model
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
* #L%
*/
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.PrePersist;
import javax.persistence.PreUpdate;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.apache.commons.lang3.builder.ToStringBuilder;
/**
* BaseEntity base class for hibernate entities.
*
* @author dangleton
*
*/
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
public static final String PROPERTY_ID = "id";
public static final String PROPERTY_CREATE = "created";
public static final String PROPERTY_MODIFIED = "modified";
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
@Column(name = "created", nullable = false, updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date created;
@Column(name = "modified", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date modified;
@Transient
private Date forceCreateDate;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
*
* @param id
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the create
*/
public Date getCreated() {
return created;
}
/**
* @return the modified
*/
public Date getModified() {
return modified;
}
/**
* sets the created and modified dates to now. Called on PrePersist event
*/
@PrePersist
public void initializeDates() {
if (forceCreateDate != null) {
this.created = forceCreateDate;
} else {
this.created = new Date();
}
this.modified = new Date();
}
/**
* updates the modified date to now. Called on preUpdate event.
*/
@PreUpdate
public void updateModified() {
this.modified = new Date();
}
/**
* @param creater
* the create to set
*/
public void setCreated(Date creater) {
this.created = creater;
}
/**
* @param modified
* the modified to set
*/
public void setModified(Date modified) {
this.modified = modified;
}
/**
* @{inheritDoc
*/
public String reflectionToString() {
return ToStringBuilder.reflectionToString(this);
}
/**
* Test use only. Hack to set the create date to some other time than now.
*
* @param forceCreateDate
*/
public void setForceCreateDate(Date forceCreateDate) {
this.forceCreateDate = forceCreateDate;
}
}