001/*
002 * file CcElementType.java
003 *
004 * Licensed Materials - Property of IBM
005 * Restricted Materials of IBM 
006 *
007 * com.ibm.rational.wvcm.stp.cc.CcElementType
008 *
009 * (C) Copyright IBM Corporation 2004, 2011.  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 */
013package com.ibm.rational.wvcm.stp.cc;
014
015import static com.ibm.rational.wvcm.stpex.StpExBase.PROPERTY_NAMESPACE;
016
017import javax.wvcm.PropertyNameList.PropertyName;
018import javax.wvcm.WvcmException;
019
020import com.ibm.rational.wvcm.stpex.StpExEnumeration;
021
022/**
023 * <p>
024 * A proxy for a ClearCase element type.
025 * </p>
026 * <p>
027 * The use of element types lets each class of elements be handled differently. 
028 * An element type is a class of file elements. Predefined element types, such as 
029 * <b>file</b> and <b>text_file</b>, are included. You can define your own element types. 
030 * When you create an element type for use in UCM projects, you can specify a mergetype 
031 * attribute, which determines how deliver and rebase operations handle merging of 
032 * files of that element type.
033 * </p>
034 * <p>
035 * For more information about elements and element types, see the ClearCase "Guide to Managing Software Projects"
036 * manual, and the cleartool man pages "mkeltype" and "mkelem".
037 * </p>
038 *
039 */
040public interface CcElementType extends CcTypeBase
041{
042    /**
043     * Merge type of an element type.<p>
044     * The merge type defines the behaviour when a merge is performed 
045     * via deliver, rebase or an explicit findmerge command.
046     * The four merge types are:
047     * <ul>
048     * <li> Auto (default): A findmerge operation attempts to merge elements of this type.
049     * <li> User: A findmerge operation performs trivial merges only. 
050     * Nontrivial merges must be performed manually.
051     * <li> Never: A findmerge operation ignores elements of this type. 
052     * The never attribute is useful for working with files such as 
053     * binary files or bitmap graphics images.
054     * <li> Copy: A findmerge operation attempts to merge elements of this type 
055     * automatically by copying the from-version to the to-version 
056     * (replacing the to-version with the from-version).
057     * </ul>
058     */
059    enum MergeType implements StpExEnumeration {
060        
061        /** Automatically perform merges */
062        AUTO,
063        
064        /** Automatically perform trivial merges, manual for non-trivial */
065        USER,
066        
067        /** Never merge */
068        NEVER,
069        
070        /** Copy version to merge */
071        COPY;
072    }
073    
074    /**
075     * The merge type of this element type.
076     */
077    PropertyName<MergeType> MERGE_TYPE =
078        new PropertyName<MergeType>(PROPERTY_NAMESPACE, "merge-type");
079    
080    /**
081     * Get the value of this proxy's {@link #MERGE_TYPE} property.
082     * @return this element type's merge type
083     * @throws WvcmException 
084     */
085    MergeType getMergeType() throws WvcmException;
086
087    /**
088     * The type manager of this element type.
089     */
090    PropertyName<String> TYPE_MANAGER =
091        new PropertyName<String>(PROPERTY_NAMESPACE, "type-manager");
092
093    
094    /**
095     * Get the value of this proxy's {@link #TYPE_MANAGER} property.
096     * @return this element type's type manager
097     * @throws WvcmException 
098     */
099    String getTypeManager() throws WvcmException;
100
101}