All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.jboss.pressgang.ccms.wrapper.base.DBBaseEntityWrapper Maven / Gradle / Ivy

package org.jboss.pressgang.ccms.wrapper.base;

import java.util.Map;

import org.jboss.pressgang.ccms.model.base.AuditedEntity;
import org.jboss.pressgang.ccms.model.utils.EnversUtilities;
import org.jboss.pressgang.ccms.provider.DBProviderFactory;
import org.jboss.pressgang.ccms.wrapper.collection.CollectionWrapper;

public abstract class DBBaseEntityWrapper, U extends AuditedEntity> extends DBBaseWrapper implements
        EntityWrapper {

    private final boolean isRevision;
    private final Class clazz;
    private final Class wrapperClazz;

    protected DBBaseEntityWrapper(final DBProviderFactory providerFactory, boolean isRevision, Class clazz) {
        this(providerFactory, isRevision, null, clazz);
    }

    protected DBBaseEntityWrapper(final DBProviderFactory providerFactory, boolean isRevision, Class wrapperClazz, Class clazz) {
        super(providerFactory);
        this.isRevision = isRevision;
        this.clazz = clazz;
        this.wrapperClazz = wrapperClazz;
    }

    @Override
    public T clone(boolean deepCopy) {
        throw new UnsupportedOperationException("The clone method has no implementation.");
    }

    @Override
    public boolean isRevisionEntity() {
        return isRevision;
    }

    @Override
    public Integer getId() {
        return getEntity().getId();
    }

    @Override
    public Integer getRevision() {
        return getEntity().getRevision() == null ? EnversUtilities.getLatestRevision(getDatabaseProvider().getEntityManager(),
                getEntity()).intValue() : getEntity().getRevision().intValue();
    }

    @Override
    public CollectionWrapper getRevisions() {
        final Map entities = EnversUtilities.getRevisionEntities(getEntityManager(), getEntity());
        if (wrapperClazz != null) {
            return getWrapperFactory().createCollection(entities.values(), clazz, true, wrapperClazz);
        } else {
            return getWrapperFactory().createCollection(entities.values(), clazz, true);
        }
    }

    @Override
    public boolean equals(final Object o) {
        if (o instanceof DBBaseEntityWrapper && getEntity() != null) {
            return o == null ? false : getEntity().equals(((DBBaseEntityWrapper) o).getEntity());
        } else {
            return super.equals(o);
        }
    }

    @Override
    public int hashCode() {
        if (getEntity() != null) {
            return getEntity().hashCode();
        } else {
            return super.hashCode();
        }
    }
}