001    /*
002     * file CcAttributeType.java
003     *
004     * Licensed Materials - Property of IBM
005     * Restricted Materials of IBM
006     *
007     * com.ibm.rational.wvcm.stp.cc.CcAttributeType
008     * 
009     * (C) Copyright IBM Corporation 2004, 2013.  All Rights Reserved. 
010     * Note to U.S. Government Users Restricted Rights:  Use, duplication or  
011     * disclosure restricted by GSA ADP  Schedule Contract with IBM Corp. 
012     */
013    
014    package com.ibm.rational.wvcm.stp.cc;
015    
016    import static com.ibm.rational.wvcm.stpex.StpExBase.PROPERTY_NAMESPACE;
017    
018    import javax.wvcm.PropertyNameList.PropertyName;
019    import javax.wvcm.WvcmException;
020    
021    import com.ibm.rational.wvcm.stpex.StpExEnumeration;
022    
023    
024    /**
025     * <p>A proxy for a ClearCase attribute type.
026     * </p>
027     * <p>The ClearCase attribute mechanism lets you associate arbitrary
028     * name/value pairs with particular ClearCase versions or elements.
029     * </p>
030     * <p>Attributes are typically used to customize and extend standard
031     * ClearCase functionality.  For example, to notify various people in your group
032     * when particular files are modified, you could store those peoples' email
033     * addresses in an "EmailList" attribute associated with each element of interest.
034     * Then associate a checkin "post-op" trigger with those
035     * elements that reads the attribute value and sends the notice.
036     * </p>
037     * <p>You can also use the cleartool "find" command to find elements and
038     * versions based on their attributes.
039     * </p>
040     * <p>For more attribute information, see the ClearCase "Guide to Managing Software Projects"
041     * manual, and the cleartool man pages "mkattype" and "find".
042     * </p>
043     */
044    public interface CcAttributeType extends CcTypeBase
045    {
046        /**
047         * Value type of a ClearCase attribute type.
048         * The value type determines helps constrain the legal values and format of an
049         * attribute instance.  
050         */
051        enum ValueType implements StpExEnumeration
052        {
053            /** Value is an integer. */
054            INTEGER,
055    
056            /** Value is floating-point. */
057            REAL,
058            
059            /** Value is a string. */
060            STRING,
061            
062            /** Value represents a time. */
063            TIME,
064            
065            /** Value is an opaque arbitrary byte sequences. */
066            OPAQUE;
067        }
068        
069        /**
070         * The default value for this attribute type.  It is aways provided in
071         * string form, regardless of its value type.  If no default value
072         * has been set, the property will be <code>null</code>. 
073         */
074        PropertyName<String> DEFAULT_VALUE =
075                new PropertyName<String>(PROPERTY_NAMESPACE, "default-value");
076        
077        /**
078         * Get the value of this proxy's {@link #DEFAULT_VALUE} property.
079         * @return this attribute type's default value, or <code>null</code> if not defined
080         */
081        String getDefaultValue() throws WvcmException;
082    
083        /**
084         * The value type of this attribute type
085         */
086        PropertyName<ValueType> VALUE_TYPE =
087                new PropertyName<ValueType>(PROPERTY_NAMESPACE, "value-type");
088    
089        /**
090         * Get the value of this proxy's {@link #VALUE_TYPE} property.
091         * @return this attribute type's value type
092         * @throws WvcmException if this proxy doesn't define a value for this property.
093         */
094        ValueType getValueType() throws WvcmException;
095    
096    
097    }