001 /* 002 * Licensed Materials - Property of IBM 003 * Restricted Materials of IBM 004 * 005 * com.ibm.rational.wvcm.stp.cc.CcMergeElement 006 * 007 * (C) Copyright IBM Corporation 2010, 2011. All Rights Reserved. 008 * Note to U.S. Government Users Restricted Rights: Use, duplication or 009 * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 010 */ 011 package com.ibm.rational.wvcm.stp.cc; 012 013 import javax.wvcm.Feedback; 014 import javax.wvcm.WvcmException; 015 016 import com.ibm.rational.wvcm.stp.cc.CcFile.CcCheckoutFlag; 017 018 /** 019 * An interface used to track the status of a Merge operation. This object 020 * is used by integration operations to maintain state through each phase of 021 * the operation. For example, from <code>CcView.doStartDeliver()</code> to 022 * <code>CcView.doCompleteDeliver()</code>. 023 */ 024 public interface CcMergeElement { 025 026 /** 027 * Enumerated states to determine if a merge is needed. 028 */ 029 enum MergeState { 030 UNKNOWN, 031 NEEDS_MERGE, 032 MERGE_NOT_NEEDED, 033 MERGED, 034 NO_MERGE, 035 NEEDS_NOAUTOMERGE, 036 MERGE_ERROR, 037 NEVER_MERGE 038 } 039 040 /** 041 * Before the merge stage, the MergeInterventionType will either be 042 * <code>TRIVIAL</code> or <code>NON_TRIVIAL</code>. After the merge stage, 043 * MergeInterventionType shows what type of merge was performed, 044 * <code>AUTOMATIC</code> or <code>MANUAL</code>. 045 */ 046 enum MergeInterventionType { 047 UNKNOWN, 048 /** 049 * No user intervention is required. 050 */ 051 TRIVIAL, 052 /** 053 * User intervention is required. 054 */ 055 NON_TRIVIAL, 056 /** 057 * No intervention during the merge. Decision was made automatically. 058 */ 059 AUTOMATIC, 060 /** 061 * There was user intervention during the merge. 062 */ 063 MANUAL 064 } 065 066 /** 067 * Retrieve whether a merge is needed or not 068 * 069 * @return MergeState describing the element merge 070 */ 071 public MergeState getMergeState(); 072 073 /** 074 * Retrieve the view relative pathname for this element 075 * 076 * @return String pathname to this object 077 */ 078 public String getViewRelativePathname() throws WvcmException; 079 080 /** 081 * Is this element a directory? 082 * 083 * @return true if the element is a directory 084 */ 085 public boolean getIsDirectory(); 086 087 /** 088 * Determine whether this element is visible to the current view. 089 * 090 * @return true if the element is visible 091 */ 092 public boolean getIsVisible(); 093 094 /** 095 * Determine the file type for this element. This is the file type 096 * used to determine which type manager to use for the merge handler. 097 * 098 * @return String of file type (ie. text-delta) 099 */ 100 public String getTypeManager(); 101 102 /** 103 * Provides an accessor to the underlying CcFile object for this 104 * MergeElement. Use this method to request properties. 105 * @param wantedProps props to be fetched 106 * 107 * @return a new proxy for the underlying CcFile 108 */ 109 public CcFile doReadProperties(Feedback wantedProps) throws WvcmException; 110 111 /** 112 * Returns the type of merge needed for this element. This 113 * will reveal if this element is marked as a USER merge or 114 * NEVER merge type. 115 * 116 * @return ElementMergeType 117 */ 118 public CcElementType.MergeType getElementMergeType(); 119 120 /** 121 * Returns the type of merge needed. 122 * <ul> 123 * <li>TRIVIAL - No intervention is needed.</li> 124 * <li>NON-TRIVIAL - User intervention is required.</li> 125 * <li>AUTOMATIC - No intervention during the merge. Decision was made 126 * automatically.</li> 127 * <li>MANUAL - There was user intervention during the merge.</li> 128 * </ul> 129 * @see MergeInterventionType 130 * 131 * @return MergeInterventionType describing the type of merge 132 */ 133 public MergeInterventionType getMergeInterventionType(); 134 135 /** 136 * Retrieve the from version contributor. 137 * 138 * @return String version extended pathname of the from version 139 */ 140 public String getFromVersionExtendedPathname(); 141 142 /** 143 * Retrieve the to version contributor. 144 * 145 * @return String version extended pathname of the to version 146 */ 147 public String getToVersionExtendedPathname(); 148 149 /** 150 * Retrieve the base version contributor. May be null. 151 * 152 * @return String version extended pathname of the base version 153 */ 154 public String getBaseVersionExtendedPathname(); 155 156 /** 157 * Get the provider proxy for the underlying CcFile for this element 158 * 159 * @return CcProvider proxy 160 */ 161 public CcProvider getProvider(); 162 163 /** 164 * Utility method to request the underlying CcFile object to be 165 * checked out for merge. 166 * 167 * @param coFlags Checkout flags 168 * @param feedback properties to be requested 169 * @return new proxy to the underlying file with requested properties 170 * @throws WvcmException 171 */ 172 public CcFile doCheckout(CcCheckoutFlag[] coFlags, Feedback feedback) throws WvcmException; 173 174 }