From: Mikael P. <er...@us...> - 2011-03-11 11:37:39
|
Update of /cvsroot/eclipse-ccase/net.sourceforge.eclipseccase/src/net/sourceforge/eclipseccase In directory vz-cvs-4.sog:/tmp/cvs-serv20222/src/net/sourceforge/eclipseccase Modified Files: ClearCaseProvider.java Added Files: DialogMessageRunnable.java Log Message: Feature 3190171 - Add command in menu to request file mastership Index: ClearCaseProvider.java =================================================================== RCS file: /cvsroot/eclipse-ccase/net.sourceforge.eclipseccase/src/net/sourceforge/eclipseccase/ClearCaseProvider.java,v retrieving revision 1.31 retrieving revision 1.32 diff -C2 -d -r1.31 -r1.32 *** ClearCaseProvider.java 28 Feb 2011 14:24:25 -0000 1.31 --- ClearCaseProvider.java 11 Mar 2011 11:37:35 -0000 1.32 *************** *** 570,575 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not under source control!", new Object[] { source.getFullPath() .toString() }), null); --- 570,574 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not under source control!", new Object[] { source.getFullPath() .toString() }), null); *************** *** 586,591 **** if (ClearCasePreferences.isAutoCheckinParentAfterMoveAllowed()) { state = ClearCasePlugin.getEngine() ! .move( ! source.getLocation().toOSString(), destination.getLocation().toOSString(), getComment(), --- 585,589 ---- if (ClearCasePreferences.isAutoCheckinParentAfterMoveAllowed()) { state = ClearCasePlugin.getEngine() ! .move(source.getLocation().toOSString(), destination.getLocation().toOSString(), getComment(), *************** *** 772,794 **** File target = new File(cache.getSymbolicLinkTarget()); if (!target.isAbsolute()) { ! target = null != cache.getPath() ? new File(cache ! .getPath()).getParentFile() : null; if (null != target) { ! target = new File(target, cache ! .getSymbolicLinkTarget()); } } if (null != target && target.exists()) { ! IPath targetLocation = new Path(target ! .getAbsolutePath()); IResource[] resources = null; if (target.isDirectory()) { resources = ResourcesPlugin.getWorkspace() ! .getRoot().findContainersForLocation( ! targetLocation); } else { resources = ResourcesPlugin.getWorkspace() ! .getRoot().findFilesForLocation( ! targetLocation); } if (null != resources) { --- 770,792 ---- File target = new File(cache.getSymbolicLinkTarget()); if (!target.isAbsolute()) { ! target = null != cache.getPath() ? new File( ! cache.getPath()).getParentFile() : null; if (null != target) { ! target = new File(target, ! cache.getSymbolicLinkTarget()); } } if (null != target && target.exists()) { ! IPath targetLocation = new Path( ! target.getAbsolutePath()); IResource[] resources = null; if (target.isDirectory()) { resources = ResourcesPlugin.getWorkspace() ! .getRoot() ! .findContainersForLocation(targetLocation); } else { resources = ResourcesPlugin.getWorkspace() ! .getRoot() ! .findFilesForLocation(targetLocation); } if (null != resources) { *************** *** 798,803 **** .getClearCaseProvider(foundResource); if (null != provider) { ! StateCacheFactory.getInstance().get( ! foundResource).updateAsync(false); // after the target is updated, we must // update the --- 796,802 ---- .getClearCaseProvider(foundResource); if (null != provider) { ! StateCacheFactory.getInstance() ! .get(foundResource) ! .updateAsync(false); // after the target is updated, we must // update the *************** *** 834,839 **** TeamException.UNABLE, MessageFormat ! .format( ! "Resource \"{0}\" is already under source control!", new Object[] { resource .getFullPath().toString() }), --- 833,837 ---- TeamException.UNABLE, MessageFormat ! .format("Resource \"{0}\" is already under source control!", new Object[] { resource .getFullPath().toString() }), *************** *** 972,977 **** ClearCaseElementState state = ClearCasePlugin .getEngine() ! .add( ! resource.getLocation().toOSString(), false, getComment(), --- 970,974 ---- ClearCaseElementState state = ClearCasePlugin .getEngine() ! .add(resource.getLocation().toOSString(), false, getComment(), *************** *** 1102,1107 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1099,1103 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1158,1163 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1154,1158 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1167,1173 **** if (result.isOK()) { ClearCasePlugin.getEngine() ! .delete( ! new String[] { resource.getLocation() ! .toOSString() }, getComment(), ClearCase.RECURSIVE | ClearCase.KEEP, opListener); --- 1162,1167 ---- if (result.isOK()) { ClearCasePlugin.getEngine() ! .delete(new String[] { resource.getLocation() ! .toOSString() }, getComment(), ClearCase.RECURSIVE | ClearCase.KEEP, opListener); *************** *** 1193,1196 **** --- 1187,1191 ---- public IStatus visit(IResource resource, IProgressMonitor monitor) { try { + int returnCode = 1;// Used in messge dialog. monitor.beginTask("Checkin in " + resource.getFullPath(), 100); StateCache cache = getCache(resource); *************** *** 1206,1211 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1201,1205 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1241,1250 **** ID, TeamException.NOT_CHECKED_IN, ! MessageFormat ! .format( ! Messages ! .getString("ClearCasePlugin.error.checkin.identicalPredecessor"), ! new Object[] { cce ! .getElements() }), null); break; --- 1235,1241 ---- ID, TeamException.NOT_CHECKED_IN, ! MessageFormat.format( ! Messages.getString("ClearCasePlugin.error.checkin.identicalPredecessor"), ! new Object[] { cce.getElements() }), null); break; *************** *** 1254,1263 **** ID, TeamException.NOT_CHECKED_IN, ! MessageFormat ! .format( ! Messages ! .getString("ClearCasePlugin.error.checkin.elementHasCheckouts"), ! new Object[] { cce ! .getElements() }), null); break; --- 1245,1251 ---- ID, TeamException.NOT_CHECKED_IN, ! MessageFormat.format( ! Messages.getString("ClearCasePlugin.error.checkin.elementHasCheckouts"), ! new Object[] { cce.getElements() }), null); break; *************** *** 1269,1273 **** String latestVersion = resource.getLocation() .toOSString() ! + "@@" + branchName + "LATEST"; ClearCaseElementState myState = ClearCasePlugin --- 1257,1263 ---- String latestVersion = resource.getLocation() .toOSString() ! + "@@" ! + branchName ! + "LATEST"; ClearCaseElementState myState = ClearCasePlugin *************** *** 1277,1318 **** if (myState.isMerged()) { - // TODO: Shall we ask if you want to checkin - // merged file. ! PlatformUI.getWorkbench().getDisplay() ! .syncExec(new Runnable() { ! ! public void run() { ! Shell activeShell = PlatformUI ! .getWorkbench() ! .getDisplay() ! .getActiveShell(); ! MessageDialog checkoutQuestion = new MessageDialog( ! activeShell, ! "Checkin", ! null, ! "Do you want to checkin the merged result?", ! MessageDialog.QUESTION, ! new String[] { "Yes", ! "No", "Cancel" }, ! 0); ! int returncode = checkoutQuestion ! .open(); ! /* Yes=0 No=1 Cancel=2 */ ! if (returncode == 0) { ! // Yes continue checkin ! ClearCasePlugin ! .getEngine() ! .checkin( ! new String[] { targetElement ! .getPath() }, ! getComment(), ! ClearCase.PTIME, ! opListener); ! } - } - }); } else { --- 1267,1285 ---- if (myState.isMerged()) { ! returnCode = showMessageDialog("Checkin", ! "Do you want to checkin the merged result?"); ! if (returnCode == 0) { ! // Yes continue checkin ! ClearCasePlugin ! .getEngine() ! .checkin( ! new String[] { targetElement ! .getPath() }, ! getComment(), ! ClearCase.PTIME, opListener); ! } } else { *************** *** 1321,1331 **** ID, TeamException.CONFLICT, ! MessageFormat ! .format( ! Messages ! .getString("ClearCasePlugin.error.checkin.mergeLatestProblem"), ! new Object[] { cce ! .getElements() }), ! null); } --- 1288,1295 ---- ID, TeamException.CONFLICT, ! MessageFormat.format( ! Messages.getString("ClearCasePlugin.error.checkin.mergeLatestProblem"), ! new Object[] { cce ! .getElements() }), null); } *************** *** 1337,1346 **** ID, TeamException.NOT_CHECKED_IN, ! MessageFormat ! .format( ! Messages ! .getString("ClearCasePlugin.error.checkin.unknown"), ! new Object[] { cce ! .getElements() }), null); --- 1301,1307 ---- ID, TeamException.NOT_CHECKED_IN, ! MessageFormat.format( ! Messages.getString("ClearCasePlugin.error.checkin.unknown"), ! new Object[] { cce.getElements() }), null); *************** *** 1354,1362 **** updateState(resource, IResource.DEPTH_ZERO, new SubProgressMonitor(monitor, 10)); ! // if (!status.status) { ! // result = new Status(IStatus.ERROR, ID, ! // TeamException.UNABLE, "Checkin failed: " ! // + status.message, null); ! // } return result; } finally { --- 1315,1319 ---- updateState(resource, IResource.DEPTH_ZERO, new SubProgressMonitor(monitor, 10)); ! return result; } finally { *************** *** 1371,1377 **** final IProgressMonitor monitor) { try { ! monitor ! .beginTask("Checking out " + resource.getFullPath(), ! 100); StateCache cache = getCache(resource); final StateCache targetElement = getFinalTargetElement(cache); --- 1328,1333 ---- final IProgressMonitor monitor) { try { ! int returnCode = 1;// Used for message dialogs. ! monitor.beginTask("Checking out " + resource.getFullPath(), 100); StateCache cache = getCache(resource); final StateCache targetElement = getFinalTargetElement(cache); *************** *** 1385,1390 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1341,1345 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1429,1476 **** switch (cce.getErrorCode()) { case ClearCase.ERROR_ELEMENT_HAS_CHECKOUTS: ! // Ask if you wan't to check-out unreserved since we ! // only accepted ! // reserved checkouts. ! PlatformUI.getWorkbench().getDisplay().syncExec( ! new Runnable() { - public void run() { - Shell activeShell = PlatformUI - .getWorkbench() - .getDisplay() - .getActiveShell(); - MessageDialog checkoutQuestion = new MessageDialog( - activeShell, - "Checkout", - null, - "Resource already checked-out reserved.\nDo you want to check-out unreserved?", - MessageDialog.QUESTION, - new String[] { "Yes", "No", - "Cancel" }, 0); - int returncode = checkoutQuestion - .open(); - /* Yes=0 No=1 Cancel=2 */ - if (returncode == 0) { - // Yes continue checking out but - // unreserved. - ClearCasePlugin - .getEngine() - .checkout( - new String[] { targetElement - .getPath() }, - getComment(), - ClearCase.UNRESERVED - | ClearCase.PTIME, - opListener); - monitor.worked(40); - updateState(resource, - IResource.DEPTH_ZERO, - new SubProgressMonitor( - monitor, 10)); - } - } - }); break; default: result = new Status( --- 1384,1418 ---- switch (cce.getErrorCode()) { case ClearCase.ERROR_ELEMENT_HAS_CHECKOUTS: ! returnCode = showMessageDialog("Checkout", ! "Resource already checked-out reserved.\nDo you want to check-out unreserved?"); ! ! if (returnCode == 0) { ! // Yes continue checking out but ! // unreserved. ! ClearCasePlugin ! .getEngine() ! .checkout( ! new String[] { targetElement ! .getPath() }, ! getComment(), ! ClearCase.UNRESERVED ! | ClearCase.PTIME, ! opListener); ! monitor.worked(40); ! updateState(resource, IResource.DEPTH_ZERO, ! new SubProgressMonitor(monitor, 10)); ! } break; + case ClearCase.ERROR_BRANCH_IS_MASTERED_BY_REPLICA: + returnCode = showMessageDialog("Checkout", + "Resource could not be checked out since not your replica.\nDo you want change mastership?"); + changeMastershipSequence(returnCode, targetElement, + opListener); + monitor.worked(40); + updateState(resource, IResource.DEPTH_ZERO, + new SubProgressMonitor(monitor, 10)); + break; default: result = new Status( *************** *** 1478,1487 **** ID, TeamException.UNABLE, ! MessageFormat ! .format( ! Messages ! .getString("ClearCasePlugin.error.checkin.unknown"), ! new Object[] { cce ! .getElements() }), null); --- 1420,1426 ---- ID, TeamException.UNABLE, ! MessageFormat.format( ! Messages.getString("ClearCasePlugin.error.checkin.unknown"), ! new Object[] { cce.getElements() }), null); *************** *** 1522,1527 **** TeamException.NOT_AUTHORIZED, MessageFormat ! .format( ! "Resource \"{0}\" is not a Hijacked ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1461,1465 ---- TeamException.NOT_AUTHORIZED, MessageFormat ! .format("Resource \"{0}\" is not a Hijacked ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1542,1547 **** if (keep.exists()) { keep.renameTo(new File(resource.getLocation() ! .toOSString() ! + ".keep")); } } catch (Exception e) { --- 1480,1484 ---- if (keep.exists()) { keep.renameTo(new File(resource.getLocation() ! .toOSString() + ".keep")); } } catch (Exception e) { *************** *** 1588,1593 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1525,1529 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1612,1617 **** IProgressMonitor monitor) { try { ! monitor.beginTask("Changing checkout to unreserved " ! + resource.getFullPath(), 100); // Sanity check - can't update something that is not part of --- 1548,1554 ---- IProgressMonitor monitor) { try { ! monitor.beginTask( ! "Changing checkout to unreserved " ! + resource.getFullPath(), 100); // Sanity check - can't update something that is not part of *************** *** 1623,1628 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1560,1564 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1648,1653 **** IProgressMonitor monitor) { try { ! monitor.beginTask("Changing checkout to reserved " ! + resource.getFullPath(), 100); // Sanity check - can't update something that is not part of --- 1584,1590 ---- IProgressMonitor monitor) { try { ! monitor.beginTask( ! "Changing checkout to reserved " ! + resource.getFullPath(), 100); // Sanity check - can't update something that is not part of *************** *** 1659,1664 **** TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format( ! "Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), --- 1596,1600 ---- TeamException.NO_REMOTE_RESOURCE, MessageFormat ! .format("Resource \"{0}\" is not a ClearCase element!", new Object[] { resource .getFullPath().toString() }), *************** *** 1741,1746 **** throw new TeamException(new MultiStatus( multiStatus.getPlugin(), multiStatus.getCode(), ! multiStatus.getChildren(), message, multiStatus ! .getException())); } // Cause all the resource changes to be broadcast to listeners. --- 1677,1682 ---- throw new TeamException(new MultiStatus( multiStatus.getPlugin(), multiStatus.getCode(), ! multiStatus.getChildren(), message, ! multiStatus.getException())); } // Cause all the resource changes to be broadcast to listeners. *************** *** 1786,1791 **** // multi-status. MultiStatus multiStatus = new MultiStatus(status.getPlugin(), ! status.getCode(), status.getMessage(), status ! .getException()); // The next level will be one less than the current level... int childDepth = (depth == IResource.DEPTH_ONE) ? IResource.DEPTH_ZERO --- 1722,1727 ---- // multi-status. MultiStatus multiStatus = new MultiStatus(status.getPlugin(), ! status.getCode(), status.getMessage(), ! status.getException()); // The next level will be one less than the current level... int childDepth = (depth == IResource.DEPTH_ONE) ? IResource.DEPTH_ZERO *************** *** 2119,2121 **** --- 2055,2096 ---- } + /** + * Shows a message dialog where user can select: Yes=0 No=1 Cancel=2 + * + * @param operationType + * @param msg + * @return result + */ + private int showMessageDialog(String operationType, String msg) { + DialogMessageRunnable dm = new DialogMessageRunnable(operationType, msg); + PlatformUI.getWorkbench().getDisplay().syncExec(dm); + return dm.getResult(); + } + + /** + * Request mastership and then checkout sequence. + * + * @param returnCode + * @param targetElement + * @param opListener + */ + private void changeMastershipSequence(int returnCode, + StateCache targetElement, OperationListener opListener) { + if (returnCode == 0) { + // Request mastership + ClearCaseElementState[] cces = ClearCasePlugin + .getEngine() + .requestMastership(targetElement.getPath(), getComment(), 0); + if (cces[0].state == ClearCase.MASTERSHIP_CHANGED) { + // Now possible to checkout. + ClearCasePlugin.getEngine().checkout( + new String[] { targetElement.getPath() }, + getComment(), + getCheckoutType() | ClearCase.PTIME + | ClearCase.UNRESERVED | ClearCase.NMASTER, + opListener); + } + + } + } } --- NEW FILE: DialogMessageRunnable.java --- /******************************************************************************* * Copyright (c) 2002, 2004 eclipse-ccase.sourceforge.net. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Mikael Petterson - initial implementation *******************************************************************************/ package net.sourceforge.eclipseccase; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; /** * DialogMessageRunnable class was created so we could remove cluttered code * in ClearCaseProvider and have a generic MessageDialog. * We also needed to get a value from the answer. * * @author mike * */ public class DialogMessageRunnable implements Runnable { private String operationType; private String msg; private int returnCode = 1;//Default no. public DialogMessageRunnable(String operationType, String msg) { this.operationType = operationType; this.msg = msg; } public void run() { Shell activeShell = PlatformUI.getWorkbench().getDisplay() .getActiveShell(); MessageDialog checkoutQuestion = new MessageDialog(activeShell, operationType, null, msg, MessageDialog.QUESTION, new String[] { "Yes", "No", "Cancel" }, 0); returnCode = checkoutQuestion.open(); } // A getter method to provide the result of the thread. public int getResult() { return returnCode; } } |