001    /*
002    * file CcProjectFolder.java
003    *
004    * Licensed Materials - Property of IBM
005    * Restricted Materials of IBM
006    * 
007    * com.ibm.rational.wvcm.stp.cc.CcProjectFolder
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    /**
024     * <p>A proxy for a ClearCase UCM project folder.
025     * </p>
026     * <p>Project folders are used to organize the projects in a project VOB. A project
027     * folder may contain both UCM projects and project subfolders.
028     * </p>
029     * <p>A project VOB has one distinguished <i>root folder</i>.
030     * </p>
031     * <p>
032     * For more project folder information, see the ClearCase "Guide to Developing Software with UCM"
033     * manual, and the cleartool man page "mkfolder".
034     * </p>
035     */
036    public interface CcProjectFolder extends CcVobResource {
037    
038        /**
039         * <p>
040         * Create a new UCM project folder at the location specified by this proxy. The
041         * location should be an object name selector specifying the folder's name
042         * and the repository (project VOB) in which to create it.
043         * </p>
044         * <p>
045         * Must specify the new project folder's parent folder by setting the
046         * folder's {@link #PARENT_FOLDER} property.
047         * </p>
048         */
049        CcProjectFolder doCreateCcProjectFolder(Feedback feedback) throws WvcmException;
050    
051        /** Is this the root folder of its project VOB? */
052        PropertyName<Boolean> IS_ROOT = new PropertyName<Boolean>(PROPERTY_NAMESPACE, "is-root");
053    
054        /**
055         * Get the value of this proxy's {@link #IS_ROOT} property.
056         * 
057         * @return true if this is the root project folder, else false.
058         * @throws WvcmException
059         *             if this proxy doesn't define a value for this property.
060         */
061        boolean getIsRoot() throws WvcmException;
062    
063        /** This folder's parent folder. Will be null if this is the root folder. */
064        PropertyName<CcProjectFolder> PARENT_FOLDER =
065            new PropertyName<CcProjectFolder>(PROPERTY_NAMESPACE,
066                                              "parent-folder");
067    
068        /**
069         * Get the value of this proxy's {@link #PARENT_FOLDER} property.
070         * 
071         * @return a client proxy for this folder's parent, or null if this is the
072         *         root folder
073         * @throws WvcmException
074         *             if this proxy doesn't define a value for this property.
075         */
076        CcProjectFolder getParentFolder() throws WvcmException;
077    
078        /**
079         * Set the value of this proxy's {@link #PARENT_FOLDER} property.
080         * @param parentFolder this folder's new parent folder; cannot be null.
081         */
082        void setParentFolder(CcProjectFolder parentFolder);
083    
084        /** This folder's subfolders. */
085        PropertyName<ResourceList<CcProjectFolder>> SUBFOLDER_LIST =
086            new PropertyName<ResourceList<CcProjectFolder>>(PROPERTY_NAMESPACE,
087                                                            "subfolder-list");
088    
089        /**
090         * Get the value of this proxy's {@link #SUBFOLDER_LIST}property.
091         * 
092         * @return a list of client proxies for this folder's subfolders
093         * @throws WvcmException
094         *             if this proxy doesn't define a value for this property.
095         */
096        ResourceList<CcProjectFolder> getSubfolderList() throws WvcmException;
097    
098        /** This folder's projects. */
099        PropertyName<ResourceList<CcProject>> PROJECT_LIST =
100            new PropertyName<ResourceList<CcProject>>(PROPERTY_NAMESPACE,
101                                                      "project-list");
102    
103        /**
104         * Get the value of this proxy's {@link #PROJECT_LIST} property.
105         * 
106         * @return a list of client proxies for this folder's projects
107         * @throws WvcmException
108         *             if this proxy doesn't define a value for this property.
109         */
110        ResourceList<CcProject> getProjectList() throws WvcmException;
111    }