/**
* Copyright (C) 2015 Caratarse Auth Team <lucio.benfante@gmail.com>
*
* This file is part of Caratarse Auth Model.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.caratarse.auth.model.po;
import java.util.Date;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import org.caratarse.auth.model.util.DateTimeProviderHolder;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.FilterDefs;
/**
* A superclass for Caratarse-auth entities.
*
* @author <a href="mailto:lucio.benfante@gmail.com">Lucio Benfante</a>
*/
@FilterDefs({
@FilterDef(name = "limitByNotDeleted",
defaultCondition = "deleted is null")
})
@MappedSuperclass
public abstract class EntityBase extends org.lambico.po.hibernate.EntityBase implements LogicallyDeleted, Linkable {
/**
* The deleted timestamp for logically deleted objects.
*/
protected Date deleted;
public EntityBase() {
}
/**
* {@inheritDoc}
*/
@Override
public boolean checkDeleted() {
return deleted != null;
}
/**
* {@inheritDoc}
*/
@Override
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
public Date getDeleted() {
return deleted;
}
/**
* {@inheritDoc}
*/
@Override
public void setDeleted(Date deleted) {
this.deleted = deleted;
}
/**
* Logically delete this entity.
*/
public final void delete() {
this.deleted = DateTimeProviderHolder.getDateTimeProvider().getCurrent();
doRecursiveDelete();
}
/**
* Do logical deletion on the relationships of this object.
*
* The default implementation of this object is doing nothing. It should be overridden if
* necessary.
*/
protected void doRecursiveDelete() {}
}