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* (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.Feedback;
019import javax.wvcm.PropertyNameList.PropertyName;
020import javax.wvcm.ResourceList;
021import javax.wvcm.WvcmException;
022
023import com.ibm.rational.wvcm.stp.cq.CqRecordType;
024import com.ibm.rational.wvcm.stp.cq.CqUserDb;
025import com.ibm.rational.wvcm.stpex.StpExEnumeration;
026
027import java.util.List;
028
029/**
030 * <p>A proxy for a ClearCase UCM project.
031 * </p>
032 * <p>A UCM project contains the configuration information needed to manage a
033 * significant development effort, such as a product release. A project contains
034 * one main shared <i>integration stream</i> and typically multiple per-user
035 * <i>development streams</i>.
036 * </p>
037 * <p>A UCM project may be <i>ClearQuest-enabled </i> by linking it to a particular
038 * ClearQuest database. In ClearQuest-enabled projects, all UCM activities are
039 * associated with ClearQuest entities in the ClearQuest database. ClearQuest
040 * provides richer activity management functionality than is available from
041 * ClearCase alone.
042 * </p>
043 * <p>
044 * For more project information, see the ClearCase "Guide to Developing Software with UCM"
045 * manual, and the cleartool man page "mkproject".
046 * </p>
047 */
048public interface CcProject extends CcVobResource {
049
050    /**
051     * A UCM project is "ClearQuest-enabled" if it is bound to a ClearQuest
052     * user database and participates in the ClearQuest/UCM integration.
053     */
054    enum ClearQuestEnabledState implements StpExEnumeration  {
055
056        /**
057         * This project is not ClearQuest-enabled.
058         */
059        NOT_ENABLED,
060
061        /**
062         * This project is ClearQuest-enabled.
063         */
064        ENABLED,
065
066        /**
067         * This project is ClearQuest-enabled, but the integration is
068         * temporarily suspended.
069         */
070        SUSPENDED;
071    }
072    
073    /** 
074     * Defines the baseline name template for a project. 
075     * The property specifies the tokens to be used in the baseline name and 
076     * it can include any of the following tokens separated by commas:
077     * <ul>
078     * <li>basename
079     * <li>project
080     * <li>stream
081     * <li>component
082     * <li>date
083     * <li>time
084     * <li>user
085     * <li>host
086     * </ul>
087     * When the baseline is created, UCM replaces commas with underscores in the baseline name.
088     */
089    PropertyName<String> BASELINE_NAMING_TEMPLATE =
090        new PropertyName<String>(PROPERTY_NAMESPACE, "baseline-naming-template");
091    
092    /**
093     * Get the value of this proxy's {@link #BASELINE_NAMING_TEMPLATE} property.
094     * @return a string containing this projects baseline naming template
095     * @throws WvcmException if this proxy doesn't define a value for this property.
096     */
097    String getBaselineNamingTemplate() throws WvcmException;
098
099    /**
100     * Set the template to be used when naming a newly created baseline.
101     * Specifying an empty string for a template will result in the default
102     * template being set (currently "basename").
103     * @param bl_template A string containing the desired naming template
104     */
105    void setBaselineNamingTemplate(String bl_template);
106    
107    /** This UCM project's integration stream. */
108    PropertyName<CcStream> INTEGRATION_STREAM =
109        new PropertyName<CcStream>(PROPERTY_NAMESPACE, "integration-stream");
110
111    /**
112     * Get the value of this proxy's {@link #INTEGRATION_STREAM} property.
113     * @return a client proxy for this project's integration stream,
114     *     or null if project doesn't have an integration stream
115     * @throws WvcmException if this proxy doesn't define a value for this property.
116     */
117    CcStream getIntegrationStream() throws WvcmException;
118
119    /** The list of streams in this UCM project. */
120    PropertyName<ResourceList<CcStream>> STREAM_LIST =
121        new PropertyName<ResourceList<CcStream>>(PROPERTY_NAMESPACE, "stream-list");
122
123    /**
124     * Get the value of this proxy's {@link #STREAM_LIST} property.
125     * @return list of project's streams as a ResourceList of UcmStream instances.
126     * @throws WvcmException if this proxy doesn't define a value for this property.
127     */
128    ResourceList<CcStream> getStreamList() throws WvcmException;
129         
130    /** The list of UCM policies enabled for this project. */
131    PropertyName<List<CcUcmPolicy>> ENABLED_POLICY_LIST =
132        new PropertyName<List<CcUcmPolicy>>(PROPERTY_NAMESPACE, "enabled-policy-list");
133           
134    /**
135     * Get the value of this proxy's {@link #ENABLED_POLICY_LIST} property.
136     * @return list of policies which have been enabled for this project.
137     * @throws WvcmException if this proxy doesn't define a value for this property.
138     */
139    List<CcUcmPolicy> getEnabledPolicyList() throws WvcmException;
140      
141    /**
142     * Set the value of this proxy's {@link #ENABLED_POLICY_LIST} property.
143     * @param enabledPolicyList List of policies to be enabled for this project.      
144     */
145    void setEnabledPolicyList(List<CcUcmPolicy> enabledPolicyList);
146
147    /** The list of UCM policies disabled for this project. */
148    PropertyName<List<CcUcmPolicy>> DISABLED_POLICY_LIST =
149        new PropertyName<List<CcUcmPolicy>>(PROPERTY_NAMESPACE, "disabled-policy-list");
150      
151    /**
152     * Get the value of this proxy's {@link #DISABLED_POLICY_LIST} property.
153     * @return list of policies which have been disabled for this project.
154     * @throws WvcmException if this proxy doesn't define a value for this property.
155     */
156    List<CcUcmPolicy> getDisabledPolicyList() throws WvcmException;
157       
158    /**
159     * Set the value of this proxy's {@link #DISABLED_POLICY_LIST} property.
160     * @param disabledPolicyList List of policies to be disabled for this project.      
161     */
162    void setDisabledPolicyList(List<CcUcmPolicy> disabledPolicyList);
163       
164    /** The list of UCM policies set per stream for this project. 
165     *  Not applicable for a single-stream UCM project. 
166     */
167    PropertyName<List<CcUcmPolicy>> PER_STREAM_POLICY_LIST =
168        new PropertyName<List<CcUcmPolicy>>(PROPERTY_NAMESPACE, "per-stream-policy-list");
169             
170    /**
171     * Get the value of this proxy's {@link #PER_STREAM_POLICY_LIST} property.
172     * @return list of policies which have been set per stream for this project.
173     * @throws WvcmException if this proxy doesn't define a value for this property.
174     */
175    List<CcUcmPolicy> getPerStreamPolicyList() throws WvcmException;
176        
177    /**
178     * Set the value of this proxy's {@link #PER_STREAM_POLICY_LIST} property.
179     * @param perStreamPolicyList List of policies to be set at stream level for this project
180     *          or an empty list to disable policies currently set per stream.  
181     */
182    void setPerStreamPolicyList(List<CcUcmPolicy> perStreamPolicyList);
183
184    /** The list of UCM enabled CQ record types in this UCM project. */
185    PropertyName<ResourceList<CqRecordType>> UCM_ENABLED_CQ_RECORD_TYPE_LIST =
186        new PropertyName<ResourceList<CqRecordType>>(PROPERTY_NAMESPACE, "ucm-enabled-cq-record-type-list");
187
188    /**
189     * Get the value of this proxy's {@link #UCM_ENABLED_CQ_RECORD_TYPE_LIST} property.
190     * @return list of project's ucm enabled cq record types as a ResourceList of CqRecordType instances.
191     * @throws WvcmException if this proxy doesn't define a value for this property.
192     */
193    ResourceList<CqRecordType> getUcmEnabledCqRecordTypeList() throws WvcmException;
194
195    /** The list of UCM components that can be modified in the UCM stream(s)
196     *  associated with this UCM project. 
197     */
198    PropertyName<ResourceList<CcComponent>> MODIFIABLE_COMPONENT_LIST =
199        new PropertyName<ResourceList<CcComponent>>(PROPERTY_NAMESPACE, "modifiable-component-list");
200
201    /**
202     * Get the value of this proxy's {@link #MODIFIABLE_COMPONENT_LIST} property.
203     * @return list of modifiable components as ResourceList of UcmComponent instances.
204     * @throws WvcmException if this proxy doesn't define a value for this property.
205     */
206    ResourceList<CcComponent> getModifiableComponentList() throws WvcmException;
207    
208    /**
209     * Set the value of this proxy's {@link #MODIFIABLE_COMPONENT_LIST} property,
210     * during project creation time.
211     * @param modCompList List of components to be added as modifiable components
212     * for the UCM stream(s) associated with the project being created. 
213     */
214    void setModifiableComponentList (ResourceList<CcComponent> modCompList); 
215         
216    
217    /**
218     * Set the value of this proxy's {@link #MODIFIABLE_COMPONENT_LIST} property.
219     * It modifies the list of UCM components for the UCM stream(s)associated with this project,
220     * by adding and removing the items from the specified lists.
221     * An intersection between the addition and removal lists is considered an error.
222     * @param addCompList List of components to be added to the list of UCM components
223     * associated with this project's streams.Items in this list which are already associated
224     * with the UCM stream(s) are ignored.
225     * @param delCompList List of components to be removed from the list of UCM components
226     * associated with this project's streams.Items in this list which are not associated
227     * with the UCM stream(s) are ignored.
228     */
229    void setModifiableComponentList (ResourceList<CcComponent> addCompList, 
230                                     ResourceList<CcComponent> delCompList);
231
232    /** Is this a single-stream UCM project? */
233    PropertyName<Boolean> IS_SINGLE_STREAM =
234        new PropertyName<Boolean>(PROPERTY_NAMESPACE, "is-single-stream");
235
236    /**
237     * Get the value of this proxy's {@link #IS_SINGLE_STREAM} property.
238     * @return true if this is a single-stream UCM project, else false.
239     * @throws WvcmException if this proxy doesn't define a value for this property.
240     */
241    boolean getIsSingleStream() throws WvcmException;
242
243    /**
244     * Set the value of this proxy's {@link #IS_SINGLE_STREAM} property. 
245     * This property can only be set at project creation time.
246     * @param isSingleStream true if the project should be single stream, false otherwise.
247     */
248    void setIsSingleStream(boolean isSingleStream);
249
250    /** Is this a ClearQuest-enabled UCM project? */
251    PropertyName<ClearQuestEnabledState> CLEARQUEST_ENABLED_STATE =
252        new PropertyName<ClearQuestEnabledState>(PROPERTY_NAMESPACE, "clearquest-enabled-state");
253
254    /**
255     * Get the value of this proxy's {@link #CLEARQUEST_ENABLED_STATE} property.
256     * @return ENABLED, NOT_ENABLED, or SUSPENDED depending on this project's state.
257     * @throws WvcmException if this proxy doesn't define a value for this property.
258     */
259    ClearQuestEnabledState getClearQuestEnabledState() throws WvcmException;
260
261    /** The ClearQuest user database this CQ-enabled UCM project is associated with. */
262    PropertyName<CqUserDb> CLEARQUEST_USER_DB =
263        new PropertyName<CqUserDb>(PROPERTY_NAMESPACE, "clearquest-user-db");
264
265    /**
266     * Get the value of this proxy's {@link #CLEARQUEST_USER_DB} property.
267     * @return a proxy for the CqUserDb associated with this CQ-enabled
268     * UCM project, or null if project is not CQ-enabled
269     * @throws WvcmException if this proxy doesn't define a value for this property.
270     */
271    CqUserDb getClearQuestUserDb() throws WvcmException;
272
273    /** The UCM folder in which this UCM project resides */
274    PropertyName<CcProjectFolder> PROJECT_FOLDER =
275        new PropertyName<CcProjectFolder>(PROPERTY_NAMESPACE, "project-folder");
276
277    /**
278     * Get the value of this proxy's {@link #PROJECT_FOLDER} property.
279     * @return A client proxy for the UCM folder that contains this UCM project.
280     * @throws WvcmException if this proxy doesn't define a value for this property.
281     */
282    CcProjectFolder getProjectFolder() throws WvcmException;
283
284    /**
285     * Set the parent UCM folder for this project
286     * @param folder client proxy for the parent project folder.
287     */
288    void setProjectFolder(CcProjectFolder folder);    
289
290    /** 
291     * A list of all streams in this UCM project that have posted deliveries
292     * in progress. A delivery is posted if the source stream is mastered
293     * at a different replica than the target stream at the time of the delivery.
294     */
295    PropertyName<ResourceList<CcStream>> POSTED_DELIVERY_LIST =
296        new PropertyName<ResourceList<CcStream>>(PROPERTY_NAMESPACE, "ccproject-posted-delivery-list");
297    
298    /**
299     * Get the value of this proxy's {@link #POSTED_DELIVERY_LIST} property.
300     * @return A list containing this project's posted deliveries.
301     * @throws WvcmException if this proxy doesn't define a value for this property.
302     */
303    ResourceList<CcStream> getPostedDeliveryList() throws WvcmException;
304    
305    /**
306     * Promotion level required by baselines to be recommended in the UCM Stream(s) 
307     * associated with this project.
308     */
309    PropertyName<String> REBASE_PROMOTION_LEVEL=
310        new PropertyName<String>(PROPERTY_NAMESPACE, "rebase-promotion-level");  
311    
312    /**
313     * Get the value of this proxy's {@link #REBASE_PROMOTION_LEVEL} property.
314     * @return a string containing the rebase promotion level of this project.
315     * @throws WvcmException if this proxy doesn't define a value for this property.
316     */
317    String getRebasePromotionLevel() throws WvcmException ;
318        
319    /**
320     * Set the value of this project's {@link #REBASE_PROMOTION_LEVEL} property.
321     * @param rebasePromotionLevel the rebase promotion level of this project.
322     */
323    void setRebasePromotionLevel (String  rebasePromotionLevel);        
324    
325    /**
326     * Create a new UCM project at the location specified by this proxy. The
327     * location should be an object name selector specifying the project's name
328     * and the repository (project VOB/project Folder) in which to create it.
329     */
330    CcProject doCreateCcProject(Feedback feedback) throws WvcmException;
331}