StateMetaData.java

package com.tradecloud.domain.configuration;

import com.tradecloud.common.base.PersistenceBase;

import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.MappedSuperclass;
import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import java.io.Serializable;

/**
 * Superclass for state meta-data.
 * <p>
 * The meta-data in this entity is used by the system to determine (for each client)
 * how each state is used (or not used).
 *
 * @see LineItemStateMetaData
 * @see OrderStateMetaData
 */
@MappedSuperclass
@XmlAccessorType(XmlAccessType.FIELD)
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class StateMetaData<X extends Enum<?>> extends PersistenceBase implements Serializable {

    private static final long serialVersionUID = 1L;

    @XmlAttribute
    @NotNull
    private boolean inUse;

    @XmlAttribute
    @NotNull
    private boolean editable;

    public StateMetaData() {
    }

    // Mostly for testing
    public StateMetaData(boolean inUse) {
        this.inUse = inUse;
    }

    public boolean isInUse() {
        return inUse;
    }

    public void setInUse(boolean inUse) {
        this.inUse = inUse;
    }

    public boolean isEditable() {
        return editable;
    }

    public void setEditable(boolean editable) {
        this.editable = editable;
    }

    public abstract X getState();

    public abstract void setState(X state);
}