001    /*
002     * file CcTypeBase.java
003     *
004     * Licensed Materials - Property of IBM
005     * Restricted Materials of IBM 
006     *
007     *
008     * com.ibm.rational.wvcm.stp.cc.CcTypeBase
009     * 
010     * (C) Copyright IBM Corporation 2004, 2011.  All Rights Reserved. 
011     * Note to U.S. Government Users Restricted Rights:  Use, duplication or  
012     * disclosure restricted by GSA ADP  Schedule Contract with IBM Corp. 
013     */
014    
015    
016    package com.ibm.rational.wvcm.stp.cc;
017    
018    import static com.ibm.rational.wvcm.stpex.StpExBase.PROPERTY_NAMESPACE;
019    
020    import javax.wvcm.PropertyNameList.PropertyName;
021    import javax.wvcm.WvcmException;
022    
023    import com.ibm.rational.wvcm.stpex.StpExEnumeration;
024    import com.ibm.rational.wvcm.stpex.StpExEnumerationBase;
025    
026    /**
027     * <p>Base interface for all ClearCase "type" interfaces - branch type,
028     * label type, etc.  A type object controls certain aspects of the creation and
029     * behavior of instances of that type.  For instance, the name of a label
030     * instance is determined by it's label type.  Changing the name of a label type
031     * changes the names of all instances of that type.
032     * </p>
033     */
034    public interface CcTypeBase extends CcVobResource
035    {
036        /**
037         * Scope of a ClearCase type object.
038         * A type object's scope determines it's sphere of influence.  Scope is one of
039         * <bl>
040         * <li>None.  The scope of this type object is limited to instances in the
041         * VOB in which this type resides.
042         * </li>
043         * <li>Local.  This type object is a VOB-local instance of a global type.
044         * While it controls the behavior of instances in its local VOB, it is
045         * essentially a local copy of a global type. 
046         * </li>
047         * <li>Global.  This type object controls behavior of instances in all VOBs
048         * for which this type object's VOB serves as an "admin" VOB.  It uses
049         * "local" types as proxies in VOBs other than its own.
050         * </li>
051         * </bl>
052         * <p>
053         * For more information, see the ClearCase Administrator's Guide.
054         */
055        enum Scope implements StpExEnumeration 
056        {
057            /** This is a global type. */
058            GLOBAL,
059    
060            /** This is a local instance of a global type. */
061            LOCAL,
062    
063            /** This is neither a global type nor a local instance. */
064            NONE;
065        }
066    
067        /**
068         * The scope of this type object.
069         */
070        PropertyName<Scope> SCOPE =
071            new PropertyName<Scope>(PROPERTY_NAMESPACE, "vob-type-scope");
072    
073        /**
074         * Get the value of this proxy's {@link #SCOPE} property.
075         * @return this type object's scope
076         * @throws WvcmException if this proxy doesn't define a value for this property.
077         */
078        Scope getScope() throws WvcmException;
079    
080        /**
081         * Set the value of this proxy's {@link #SCOPE} property.
082         * This property can only be set at type creation time.
083         * @param scope The new scope
084         */
085        void setScope(Scope scope);
086    
087        /**
088         * Instance constraint of a ClearCase type object.
089         * A type object's instance constraint determines where the type may be applied. 
090         * Some metatypes do not support all (or any) instance constraints.
091         * Instance constraint is one of
092         * <bl>
093         * <li>None.  There are no special constraints on this metatype beyond the default behaviour
094         * for the type.
095         * </li>
096         * <li>Element.  Type instance may only occur once per element,
097         * </li>
098         * </li>
099         * <li>Branch.  Type instances may occur on multiple branches, but only once per branch,
100         * </li>
101         * </li>
102         * <li>Version.  Type instance may only be attached to versions, but may be attached to 
103         * as many versions as desired
104         * </li>
105         * </bl>
106         * <p>
107         * For more information, see the ClearCase Administrator's Guide.
108         */
109        enum InstanceConstraint implements StpExEnumeration 
110        {
111            /** Default constraint for this type. */
112            NONE,
113    
114            /** Once per element. */
115            ELEMENT,
116    
117            /** Once per branch. */
118            BRANCH,
119            
120            /** Versions only, as many as desired. */
121            VERSION;
122    
123            private InstanceConstraint() {}
124    
125            /**
126             * Returns the InstanceConstraint enumerator defined by the given Object
127             *
128             * @param   tag  The Object for which an enumerator is sought
129             *
130             * @return  An InstanceConstraint object that is based on the given Object. Will
131             *          be <b>null</b> if no such enumerator exists.
132             */
133    
134            public static InstanceConstraint byTag(Object tag)
135            {
136                return StpExEnumerationBase.getByTag(InstanceConstraint.class, tag);
137            }
138        }
139        
140        /**
141         * The instance constraint of this type object.
142         */
143        PropertyName<InstanceConstraint> INSTANCE_CONSTRAINT =
144            new PropertyName<InstanceConstraint>(PROPERTY_NAMESPACE, "vob-type-instance-constraint");
145    
146        /**
147         * Get the value of this proxy's {@link #INSTANCE_CONSTRAINT} property.
148         * @return this type object's instance constraint
149         * @throws WvcmException if this proxy doesn't define a value for this property.
150         */
151        InstanceConstraint getInstanceConstraint() throws WvcmException;
152    
153        /**
154         * Set the value of this proxy's {@link #INSTANCE_CONSTRAINT} property.
155         * This property can only be set at type creation time.
156         * @param constraint The new instance constraint
157         */
158        void setInstanceConstraint(InstanceConstraint constraint);
159    
160        /**
161         * Does this type object have shared mastership? If true, instances of this
162         * type can be created in any VOB replica in this type object's VOB family.
163         * Otherwise, instances of this type can only be created in the VOB replica
164         * that is the current master of this type object. For more information, see
165         * the ClearCase Administrator's Guide.
166         */
167        PropertyName<Boolean> HAS_SHARED_MASTERSHIP =
168            new PropertyName<Boolean>(PROPERTY_NAMESPACE, "has-shared-mastership"); //$NON-NLS-1$
169    
170        /**
171         * Get the value of this proxy's {@link #HAS_SHARED_MASTERSHIP} property.
172         * @return true if this type object has shared mastership, else false
173         * @throws WvcmException if this proxy doesn't define a value for this property.
174         */
175        boolean getHasSharedMastership() throws WvcmException;
176    
177        /**
178         * Set the value of this proxy's {@link #HAS_SHARED_MASTERSHIP} property.
179         * This property can only be set at type creation time.
180         * @param hasSharedMastership true if this type is to have shared mastership, else false
181         */
182        void setHasSharedMastership(boolean hasSharedMastership);
183        
184        /** Enum for the doCreateResource method */
185        enum TypeCreateFlag implements StpExEnumeration {
186    
187            /**
188             * Acquire eclipsing types
189             */
190            ACQUIRE("acquire");
191    
192            private String m_name;
193    
194            private TypeCreateFlag(String name) { m_name = name; }
195    
196            /* (non-Javadoc)
197             * @see java.lang.Object#toString()
198             */
199            public String toString() { return m_name; }
200        }
201    }