/**
 *  Generated with Tigerstripe(tm) Tigerstripe Workbench Feature 2.2.0.v20070419-1556-GFEkmUll2-0111E.
 *
 *  Tigerstripe(tm) is a registered trademark of Tigerstripe, Inc.
 *
 *  Plugin  : Sun Microsystems Inc./SunJavaSpecificationPlugin(1.0) (1.0)
 *
 *  DO NOT EDIT THIS CODE WAS AUTOMATICALLY GENERATED
 *
 *  Generated from source Tigerstipe Artifact :
 *        javax.oss.cbe.Entity
 *
 *  Using template :
 *        templates/1.3/valueInterface.vm
 *
 * Copyright 2002-2007 The Members of the OSS through Java(TM) Initiative.
 * All rights reserved. Use is subject to license terms.
 */
package javax.oss.cbe;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.XmlType;

import ossj.common.cbe.EntityValueAdapter;

@XmlType
@XmlJavaTypeAdapter(value=EntityValueAdapter.class)

/**
 *  Public interface definition for EntityValue.
 *
 * This is the base from which all entity value interfaces are derived.
 * <p>
 * Entities are represented in the CBE package as managed entities
 * (according to the OSS through Java definition of managed entity).
 * <p>
 * <CODE>EntityValue</CODE> inherits from <CODE>ManagedEntityValue</CODE> all methods
 * for population, generic attribute access and serialization.
 * <p>
 *
 */
public interface EntityValue 
	extends javax.oss.cbe.CBEManagedEntityValue {

    /** VALUE_TYPE attribute name definition. */
    public static final String VALUE_TYPE = "javax.oss.cbe.EntityValue";
    
    /** attribute name definition for entityKey.*/
    public static final String ENTITY_KEY = "entityKey";


    /** attribute name definition for describingSpecificationKey. */
    public static final String DESCRIBING_SPECIFICATION_KEY = "describingSpecificationKey";

    /**
     * Deep copy of this object.
     *
     * @return The cloned object
     */
    public Object clone();


    /**
     *
     * Attribute getter for describingSpecificationKey.
     *
     *
     * Sets the specification key describing the entity instance.
     * Must be set to null if the entity instance is not compliant to a specification.
     *
     * @return the value of the describingSpecificationKey field.
     * @throws java.lang.IllegalStateException - if the attribute is not populated.
     *
     */
    public javax.oss.cbe.EntitySpecificationKey getDescribingSpecificationKey( )
        throws 
        java.lang.IllegalStateException;

    /**
     *
     * Attribute Type getter for describingSpecificationKey.
     *
     * 
     * @return the valid set of types for the describingSpecificationKey field.
     *
     */
    public String[] attributeTypeForDescribingSpecificationKey();

    /**
     * Attribute setter for describingSpecificationKey.
     *
     *
     * Sets the specification key describing the entity instance.
     * Must be set to null if the entity instance is not compliant to a specification.
     * @param value - the value to use to set the describingSpecificationKey attribute.
     * @throws java.lang.IllegalArgumentException
     *         Thrown to report that a bad argument was provided to the method.
     *
     */
    public void setDescribingSpecificationKey(javax.oss.cbe.EntitySpecificationKey value)
        throws
        java.lang.IllegalArgumentException;


    /**
     * Factory method for EntitySpecification.
     *
     * @param typeToMake - name of the type to be made
     * @return a new instance of EntitySpecification
     *
     * @throws java.lang.IllegalArgumentException - if the argument is invalid
     */
    public javax.oss.cbe.EntitySpecificationKey makeEntitySpecificationKey(String typeToMake)
        throws 
        java.lang.IllegalArgumentException;


    /**
     * Gets the key for this value object.
     *
     * @return the key for this value object
     * @throws java.lang.IllegalStateException if no key was populated in this
     *    value object.
     */
    public javax.oss.cbe.EntityKey getEntityKey()
        throws 
        java.lang.IllegalStateException;

    /**
     * Sets the key for this value object.
     *
     * @param key - the key to set on this value object.
     * @throws java.lang.IllegalArgumentException if the key is not a valid
     *    key for this value object.
     */
    public void setEntityKey(javax.oss.cbe.EntityKey key)
        throws 
        java.lang.IllegalArgumentException;

    /**
     * Factory method for EntityKey.
     *
     * @return a new instance of a blank EntityKey
     */
    public javax.oss.cbe.EntityKey makeEntityKey();


}