001    /*
002    * file CcProject.java
003    *
004    * Licensed Materials - Property of IBM
005    * Restricted Materials of IBM
006    * 
007    * com.ibm.rational.wvcm.stp.cc.CcProject
008    *
009    * © Copyright IBM Corporation 2004, 2008.  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.Feedback;
019    import javax.wvcm.ResourceList;
020    import javax.wvcm.WvcmException;
021    import javax.wvcm.PropertyNameList.PropertyName;
022    
023    import com.ibm.rational.wvcm.stp.cq.CqRecordType;
024    import com.ibm.rational.wvcm.stp.cq.CqUserDb;
025    import com.ibm.rational.wvcm.stpex.StpExEnumeration;
026    
027    /**
028     * <p>A proxy for a ClearCase UCM project.
029     * </p>
030     * <p>A UCM project contains the configuration information needed to manage a
031     * significant development effort, such as a product release. A project contains
032     * one main shared <i>integration stream</i> and typically multiple per-user
033     * <i>development streams</i>.
034     * </p>
035     * <p>A UCM project may be <i>ClearQuest-enabled </i> by linking it to a particular
036     * ClearQuest database. In ClearQuest-enabled projects, all UCM activities are
037     * associated with ClearQuest entities in the ClearQuest database. ClearQuest
038     * provides richer activity management functionality than is available from
039     * ClearCase alone.
040     * </p>
041     * <p>
042     * For more project information, see the ClearCase "Guide to Developing Software with UCM"
043     * manual, and the cleartool man page "mkproject".
044     * </p>
045     */
046    public interface CcProject extends CcVobResource {
047    
048        /**
049         * A UCM project is "ClearQuest-enabled" if it is bound to a ClearQuest
050         * user database and participates in the ClearQuest/UCM integration.
051         */
052        enum ClearQuestEnabledState implements StpExEnumeration  {
053    
054            /**
055             * This project is not ClearQuest-enabled.
056             */
057            NOT_ENABLED,
058    
059            /**
060             * This project is ClearQuest-enabled.
061             */
062            ENABLED,
063    
064            /**
065             * This project is ClearQuest-enabled, but the integration is
066             * temporarily suspended.
067             */
068            SUSPENDED;
069        }
070        
071        /** 
072         * Defines the baseline name template for a project. 
073         * The property specifies the tokens to be used in the baseline name and 
074         * it can include any of the following tokens separated by commas:
075         * <ul>
076         * <li>basename
077         * <li>project
078         * <li>stream
079         * <li>component
080         * <li>date
081         * <li>time
082         * <li>user
083         * <li>host
084         * </ul>
085         * When the baseline is created, UCM replaces commas with underscores in the baseline name.
086         */
087        PropertyName<String> BASELINE_NAMING_TEMPLATE =
088            new PropertyName<String>(PROPERTY_NAMESPACE, "baseline-naming-template");
089        
090        /**
091         * Get the value of this proxy's {@link #BASELINE_NAMING_TEMPLATE} property.
092         * @return a string containing this projects baseline naming template
093         * @throws WvcmException if this proxy doesn't define a value for this property.
094         */
095        String getBaselineNamingTemplate() throws WvcmException;
096    
097        /**
098         * Set the template to be used when naming a newly created baseline.
099         * Specifying an empty string for a template will result in the default
100         * template being set (currently "basename").
101         * @param bl_template A string containing the desired naming template
102         */
103        void setBaselineNamingTemplate(String bl_template);
104        
105        /** This UCM project's integration stream. */
106        PropertyName<CcStream> INTEGRATION_STREAM =
107            new PropertyName<CcStream>(PROPERTY_NAMESPACE, "integration-stream");
108    
109        /**
110         * Get the value of this proxy's {@link #INTEGRATION_STREAM} property.
111         * @return a client proxy for this project's integration stream,
112         *     or null if project doesn't have an integration stream
113         * @throws WvcmException if this proxy doesn't define a value for this property.
114         */
115        CcStream getIntegrationStream() throws WvcmException;
116    
117        /** The list of streams in this UCM project. */
118        PropertyName<ResourceList<CcStream>> STREAM_LIST =
119            new PropertyName<ResourceList<CcStream>>(PROPERTY_NAMESPACE, "stream-list");
120    
121        /**
122         * Get the value of this proxy's {@link #STREAM_LIST} property.
123         * @return list of project's streams as a ResourceList of UcmStream instances.
124         * @throws WvcmException if this proxy doesn't define a value for this property.
125         */
126        ResourceList<CcStream> getStreamList() throws WvcmException;
127    
128    
129        /** The list of UCM enabled CQ record types in this UCM project. */
130        PropertyName<ResourceList<CqRecordType>> UCM_ENABLED_CQ_RECORD_TYPE_LIST =
131            new PropertyName<ResourceList<CqRecordType>>(PROPERTY_NAMESPACE, "ucm-enabled-cq-record-type-list");
132    
133        /**
134         * Get the value of this proxy's {@link #UCM_ENABLED_CQ_RECORD_TYPE_LIST} property.
135         * @return list of project's ucm enabled cq record types as a ResourceList of CqRecordType instances.
136         * @throws WvcmException if this proxy doesn't define a value for this property.
137         */
138        ResourceList<CqRecordType> getUcmEnabledCqRecordTypeList() throws WvcmException;
139    
140        /** The list of UCM components that can be modified in the UCM stream(s)
141         * associated with this UCM project. */
142        PropertyName<ResourceList<CcComponent>> MODIFIABLE_COMPONENT_LIST =
143            new PropertyName<ResourceList<CcComponent>>(PROPERTY_NAMESPACE, "modifiable-component-list");
144    
145        /**
146         * Get the value of this proxy's {@link #MODIFIABLE_COMPONENT_LIST} property.
147         * @return list of modifiable components as ResourceList of UcmComponent instances.
148         * @throws WvcmException if this proxy doesn't define a value for this property.
149         */
150        ResourceList<CcComponent> getModifiableComponentList() throws WvcmException;
151    
152        /** Is this a single-stream UCM project? */
153        PropertyName<Boolean> IS_SINGLE_STREAM =
154            new PropertyName<Boolean>(PROPERTY_NAMESPACE, "is-single-stream");
155    
156        /**
157         * Get the value of this proxy's {@link #IS_SINGLE_STREAM} property.
158         * @return true if this is a single-stream UCM project, else false.
159         * @throws WvcmException if this proxy doesn't define a value for this property.
160         */
161        boolean getIsSingleStream() throws WvcmException;
162    
163        /**
164         * Set whether the project is single stream or not. 
165         * This property can only be set at project creation time.
166         * @param isSingleStream true if the project should be single stream, false otherwise.
167         */
168        void setIsSingleStream(boolean isSingleStream);
169    
170        /** Is this a ClearQuest-enabled UCM project? */
171        PropertyName<ClearQuestEnabledState> CLEARQUEST_ENABLED_STATE =
172            new PropertyName<ClearQuestEnabledState>(PROPERTY_NAMESPACE, "clearquest-enabled-state");
173    
174        /**
175         * Get the value of this proxy's {@link #CLEARQUEST_ENABLED_STATE} property.
176         * @return ENABLED, NOT_ENABLED, or SUSPENDED depending on this project's state.
177         * @throws WvcmException if this proxy doesn't define a value for this property.
178         */
179        ClearQuestEnabledState getClearQuestEnabledState() throws WvcmException;
180    
181        /** The ClearQuest user database this CQ-enabled UCM project is associated with. */
182        PropertyName<CqUserDb> CLEARQUEST_USER_DB =
183            new PropertyName<CqUserDb>(PROPERTY_NAMESPACE, "clearquest-user-db");
184    
185        /**
186         * Get the value of this proxy's {@link #CLEARQUEST_USER_DB} property.
187         * @return a proxy for the CqUserDb associated with this CQ-enabled
188         * UCM project, or null if project is not CQ-enabled
189         * @throws WvcmException if this proxy doesn't define a value for this property.
190         */
191        CqUserDb getClearQuestUserDb() throws WvcmException;
192    
193        /** The UCM folder in which this UCM project resides */
194        PropertyName<CcProjectFolder> PROJECT_FOLDER =
195            new PropertyName<CcProjectFolder>(PROPERTY_NAMESPACE, "project-folder");
196    
197        /**
198         * Get the value of this proxy's {@link #PROJECT_FOLDER} property.
199         * @return A client proxy for the UCM folder that contains this UCM project.
200         * @throws WvcmException if this proxy doesn't define a value for this property.
201         */
202        CcProjectFolder getProjectFolder() throws WvcmException;
203    
204        /**
205         * Set the parent folder for this project
206         * @param folder client proxy for the parent project folder.
207         */
208        void setProjectFolder(CcProjectFolder folder);
209    
210        /** 
211         * A list of all streams in this UCM project that have posted deliveries
212         * in progress. A delivery is posted if the source stream is mastered
213         * at a different replica than the target stream at the time of the delivery.
214         */
215        PropertyName<ResourceList<CcStream>> POSTED_DELIVERY_LIST =
216            new PropertyName<ResourceList<CcStream>>(PROPERTY_NAMESPACE, "ccproject-posted-delivery-list");
217        
218        /**
219         * Get the value of this proxy's {@link #POSTED_DELIVERY_LIST} property.
220         * @return A list containing this project's posted deliveries.
221         * @throws WvcmException if this proxy doesn't define a value for this property.
222         */
223        ResourceList<CcStream> getPostedDeliveryList() throws WvcmException;
224        
225        /**
226         * Create a new UCM project at the location specified by this proxy. The
227         * location should be an object name selector specifying the project's name
228         * and the repository (project VOB) in which to create it.
229         */
230        CcProject doCreateCcProject(Feedback feedback) throws WvcmException;
231    }