blob: 7d6bf572f9f9d01c1d6741f940b697f58b0b5631 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 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.actions;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.team.core.TeamException;
import org.eclipse.team.core.synchronize.SyncInfo;
import org.eclipse.team.internal.ccvs.core.*;
import org.eclipse.team.internal.ccvs.ui.*;
import org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation;
import org.eclipse.ui.IWorkbenchPart;
public class IgnoreAction extends WorkspaceTraversalAction {
/**
* Define an operation that can be run in the background.
* We divide the ignores by provider to obtain project
* locks while modifying the .cvsignore files
*/
class IgnoreOperation extends RepositoryProviderOperation {
private final IgnoreResourcesDialog dialog;
public IgnoreOperation(IWorkbenchPart part, IResource[] resources, IgnoreResourcesDialog dialog) {
super(part, resources);
this.dialog = dialog;
}
@Override
protected String getTaskName(CVSTeamProvider provider) {
return NLS.bind(CVSUIMessages.IgnoreAction_0, new String[] { provider.getProject().getName() });
}
@Override
protected void execute(CVSTeamProvider provider, IResource[] resources, boolean recurse, IProgressMonitor monitor) throws CVSException, InterruptedException {
try {
monitor.beginTask(null, resources.length);
for (int i = 0; i < resources.length; i++) {
IResource resource = resources[i];
String pattern = dialog.getIgnorePatternFor(resource);
ICVSResource cvsResource = getCVSResourceFor(resource);
cvsResource.setIgnoredAs(pattern);
monitor.worked(1);
}
} catch (TeamException e) {
collectStatus(e.getStatus());
return;
} finally {
monitor.done();
}
collectStatus(Status.OK_STATUS);
}
@Override
protected String getTaskName() {
return CVSUIMessages.IgnoreAction_1;
}
@Override
public boolean consultModelsForMappings() {
return false;
}
}
@Override
protected void execute(final IAction action) throws InvocationTargetException, InterruptedException {
run((IRunnableWithProgress) monitor -> {
IResource[] resources = getSelectedResources();
IgnoreResourcesDialog dialog = new IgnoreResourcesDialog(getShell(), resources);
if (dialog.open() != Window.OK)
return;
new IgnoreOperation(getTargetPart(), resources, dialog).run();
// if (action != null) action.setEnabled(isEnabled());
}, false /* cancelable */, PROGRESS_BUSYCURSOR);
}
@Override
protected String getErrorTitle() {
return CVSUIMessages.IgnoreAction_ignore;
}
@Override
protected boolean isEnabledForManagedResources() {
return false;
}
@Override
protected boolean isEnabledForUnmanagedResources() {
return true;
}
@Override
protected boolean isEnabledForCVSResource(ICVSResource cvsResource) throws CVSException {
if (super.isEnabledForCVSResource(cvsResource)) {
// Perform an extra check against the subscriber to ensure there is no conflict
CVSWorkspaceSubscriber subscriber = CVSProviderPlugin.getPlugin().getCVSWorkspaceSubscriber();
IResource resource = cvsResource.getIResource();
if (resource == null) return false;
try {
SyncInfo info = subscriber.getSyncInfo(resource);
return ((info.getKind() & SyncInfo.DIRECTION_MASK) == SyncInfo.OUTGOING);
} catch (TeamException e) {
// Let the enablement happen
return true;
}
}
return false;
}
@Override
public String getId() {
return ICVSUIConstants.CMD_IGNORE;
}
}