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
014package com.ibm.rational.wvcm.stp.cc;
015
016import static com.ibm.rational.wvcm.stpex.StpExBase.PROPERTY_NAMESPACE;
017
018import javax.wvcm.PropertyNameList.PropertyName;
019import javax.wvcm.WvcmException;
020
021import 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 */
044public 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}