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 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.PropertyNameList.PropertyName; 020 import javax.wvcm.ResourceList; 021 import javax.wvcm.WvcmException; 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 import 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 */ 048 public 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 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 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 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 }