blob: 3efb9d2654b41418406dbff859fb7d6a4e6b1869 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2018 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.team.internal.ccvs.ui.operations;
import java.lang.reflect.InvocationTargetException;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.runtime.*;
import org.eclipse.osgi.util.NLS;
import org.eclipse.team.internal.ccvs.core.*;
import org.eclipse.team.internal.ccvs.core.client.Command;
import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption;
import org.eclipse.team.internal.ccvs.core.client.RTag;
import org.eclipse.team.internal.ccvs.ui.CVSUIMessages;
import org.eclipse.team.internal.ccvs.ui.actions.TagAction;
import org.eclipse.team.internal.ccvs.ui.tags.TagSource;
import org.eclipse.ui.IWorkbenchPart;
public class TagInRepositoryOperation extends RemoteOperation implements ITagOperation {
private Set localOptions = new HashSet();
private CVSTag tag;
public TagInRepositoryOperation(IWorkbenchPart part, ICVSRemoteResource[] remoteResource) {
super(part, remoteResource);
}
@Override
public void execute(IProgressMonitor monitor) throws CVSException, InterruptedException {
ICVSRemoteResource[] resources = getRemoteResources();
monitor.beginTask(null, 1000 * resources.length);
for (int i = 0; i < resources.length; i++) {
IStatus status = resources[i].tag(getTag(), getLocalOptions(), SubMonitor.convert(monitor, 1000));
collectStatus(status);
}
if (!errorsOccurred()) {
try {
TagAction.broadcastTagChange(getCVSResources(), getTag());
} catch (InvocationTargetException e) {
throw CVSException.wrapException(e);
}
}
}
/**
* Override to dislay the number of tag operations that succeeded
*/
@Override
protected String getErrorMessage(IStatus[] problems, int operationCount) {
if(operationCount == 1) {
return CVSUIMessages.TagInRepositoryAction_tagProblemsMessage;
} else {
return NLS.bind(CVSUIMessages.TagInRepositoryAction_tagProblemsMessageMultiple, new String[] { Integer.toString(operationCount - problems.length), Integer.toString(problems.length) });
}
}
private LocalOption[] getLocalOptions() {
return (LocalOption[]) localOptions.toArray(new LocalOption[localOptions.size()]);
}
@Override
public CVSTag getTag() {
return tag;
}
@Override
public void setTag(CVSTag tag) {
this.tag = tag;
}
public void addLocalOption(LocalOption option) {
localOptions.add(option);
}
@Override
public void moveTag() {
addLocalOption(RTag.FORCE_REASSIGNMENT);
addLocalOption(RTag.CLEAR_FROM_REMOVED);
if (tag != null && tag.getType() == CVSTag.BRANCH) {
addLocalOption(RTag.FORCE_BRANCH_REASSIGNMENT);
}
}
@Override
public void doNotRecurse() {
addLocalOption(Command.DO_NOT_RECURSE);
}
@Override
protected String getTaskName() {
return CVSUIMessages.TagFromRepository_taskName;
}
@Override
public TagSource getTagSource() {
return TagSource.create(getCVSResources());
}
@Override
protected boolean isReportableError(IStatus status) {
return super.isReportableError(status)
|| status.getCode() == CVSStatus.TAG_ALREADY_EXISTS;
}
@Override
public boolean isEmpty() {
return getCVSResources().length == 0;
}
}