blob: 459bd067bb7c81574da9396c054b083e7d5e533e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2003 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.operations;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.team.internal.ccvs.core.CVSException;
import org.eclipse.team.internal.ccvs.core.CVSTag;
import org.eclipse.team.internal.ccvs.core.CVSTeamProvider;
import org.eclipse.team.internal.ccvs.core.client.Command;
import org.eclipse.team.internal.ccvs.core.client.Session;
import org.eclipse.team.internal.ccvs.core.client.Tag;
import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot;
import org.eclipse.team.internal.ccvs.ui.Policy;
public class TagOperation extends RepositoryProviderOperation implements ITagOperation {
private Set localOptions = new HashSet();
private CVSTag tag;
public TagOperation(Shell shell, IResource[] resources) {
super(shell, resources);
}
public CVSTag getTag() {
return tag;
}
public void setTag(CVSTag tag) {
this.tag = tag;
}
/* (non-Javadoc)
* @see org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation#execute(org.eclipse.team.internal.ccvs.core.CVSTeamProvider, org.eclipse.core.resources.IResource[], org.eclipse.core.runtime.IProgressMonitor)
*/
protected void execute(CVSTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws CVSException, InterruptedException {
collectStatus(tag(provider, resources, monitor));
}
/**
* Override to dislay the number of tag operations that succeeded
*/
protected String getErrorMessage(IStatus[] problems, int operationCount) {
// We accumulated 1 status per resource above.
MultiStatus combinedStatus;
if(operationCount == 1) {
return Policy.bind("TagAction.tagProblemsMessage"); //$NON-NLS-1$
} else {
return Policy.bind("TagAction.tagProblemsMessageMultiple", //$NON-NLS-1$
Integer.toString(operationCount - problems.length), Integer.toString(problems.length));
}
}
/**
* Tag the resources in the CVS repository with the given tag.
*
* The returned IStatus will be a status containing any errors or warnings.
* If the returned IStatus is a multi-status, the code indicates the severity.
* Possible codes are:
* CVSStatus.OK - Nothing to report
* CVSStatus.SERVER_ERROR - The server reported an error
* any other code - warning messages received from the server
*/
public IStatus tag(CVSTeamProvider provider, IResource[] resources, IProgressMonitor progress) throws CVSException {
LocalOption[] commandOptions = (LocalOption[])localOptions.toArray(new LocalOption[localOptions.size()]);
// Build the arguments list
String[] arguments = getStringArguments(resources);
// Execute the command
CVSWorkspaceRoot root = provider.getCVSWorkspaceRoot();
Session s = new Session(root.getRemoteLocation(), root.getLocalRoot());
progress.beginTask(null, 100);
try {
// Opening the session takes 20% of the time
s.open(Policy.subMonitorFor(progress, 20), true /* open for modification */);
return Command.TAG.execute(s,
Command.NO_GLOBAL_OPTIONS,
commandOptions,
tag,
arguments,
null,
Policy.subMonitorFor(progress, 80));
} finally {
s.close();
progress.done();
}
}
public void addLocalOption(LocalOption option) {
localOptions.add(option);
}
/* (non-Javadoc)
* @see org.eclipse.team.internal.ccvs.ui.operations.ITagOperation#moveTag()
*/
public void moveTag() {
addLocalOption(Tag.FORCE_REASSIGNMENT);
}
/* (non-Javadoc)
* @see org.eclipse.team.internal.ccvs.ui.operations.ITagOperation#recurse()
*/
public void recurse() {
addLocalOption(Command.DO_NOT_RECURSE);
}
protected String getTaskName() {
return Policy.bind("TagFromWorkspace.taskName"); //$NON-NLS-1$
}
}