diff options
author | Michael Valenta | 2004-11-30 19:38:15 +0000 |
---|---|---|
committer | Michael Valenta | 2004-11-30 19:38:15 +0000 |
commit | 174c6750c835bd9c436f74863ad3f78b7437e208 (patch) | |
tree | 4c4966bbadf683bf6859a76e9983d58f510bbdca | |
parent | 406fcbf9d92784dcdf6cf2bf1994db3d2b43618c (diff) | |
download | eclipse.platform.team-174c6750c835bd9c436f74863ad3f78b7437e208.tar.gz eclipse.platform.team-174c6750c835bd9c436f74863ad3f78b7437e208.tar.xz eclipse.platform.team-174c6750c835bd9c436f74863ad3f78b7437e208.zip |
[78365] Must Team Core load Team UI?
6 files changed, 281 insertions, 227 deletions
diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java index f72c73f21..7979cb149 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java @@ -10,25 +10,48 @@ *******************************************************************************/ package org.eclipse.team.internal.core; +import java.util.ArrayList; +import java.util.List; + import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; -import org.eclipse.team.core.Team; public class DefaultFileModificationValidator implements IFileModificationValidator { - private static final Status OK = Team.OK_STATUS; + + /* + * A validator plugged in the the Team UI that will prompt + * the user to make read-only files writtable. In the absense of + * this validator, edit/save fail on read-only files. + */ + private IFileModificationValidator uiValidator; private IStatus getDefaultStatus(IFile file) { return file.isReadOnly() ? new Status(IStatus.ERROR, TeamPlugin.ID, IResourceStatus.READ_ONLY_LOCAL, Policy.bind("FileModificationValidator.fileIsReadOnly", file.getFullPath().toString()), null) //$NON-NLS-1$ - : OK; + : Status.OK_STATUS; } /** * @see IFileModificationValidator#validateEdit(IFile[], Object) */ public IStatus validateEdit(IFile[] files, Object context) { - if (files.length == 1) { + IFile[] readOnlyFiles = getReadOnly(files); + if (readOnlyFiles.length == 0) + return Status.OK_STATUS; + synchronized (this) { + if (uiValidator == null) + uiValidator = loadUIValidator(); + } + if (uiValidator != null) { + return uiValidator.validateEdit(files, context); + } + // There was no plugged in validator so fail gracefully + return getStatus(files); + } + + protected IStatus getStatus(IFile[] files) { + if (files.length == 1) { return getDefaultStatus(files[0]); } @@ -47,13 +70,45 @@ public class DefaultFileModificationValidator implements IFileModificationValida allOK ? "FileModificationValidator.ok" //$NON-NLS-1$ : "FileModificationValidator.someReadOnly" ), //$NON-NLS-1$ - null); - } + null); + } - /** + private IFile[] getReadOnly(IFile[] files) { + List result = new ArrayList(files.length); + for (int i = 0; i < files.length; i++) { + IFile file = files[i]; + if (file.isReadOnly()) { + result.add(file); + } + } + return (IFile[]) result.toArray(new IFile[result.size()]); + } + + /** * @see IFileModificationValidator#validateSave(IFile) */ public IStatus validateSave(IFile file) { return getDefaultStatus(file); } + + private IFileModificationValidator loadUIValidator() { + IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.ID, TeamPlugin.DEFAULT_FILE_MODIFICATION_VALIDATOR_EXTENSION); + if (extension != null) { + IExtension[] extensions = extension.getExtensions(); + if (extensions.length > 0) { + IConfigurationElement[] configElements = extensions[0].getConfigurationElements(); + if (configElements.length > 0) { + try { + Object o = configElements[0].createExecutableExtension("class"); //$NON-NLS-1$ + if (o instanceof IFileModificationValidator) { + return (IFileModificationValidator)o; + } + } catch (CoreException e) { + TeamPlugin.log(e); + } + } + } + } + return null; + } } diff --git a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/FileModificationValidatorManager.java b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/FileModificationValidatorManager.java index b211a8305..1db832230 100644 --- a/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/FileModificationValidatorManager.java +++ b/bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/FileModificationValidatorManager.java @@ -11,14 +11,10 @@ package org.eclipse.team.internal.core; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import java.util.*; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.team.core.RepositoryProvider; @@ -106,29 +102,8 @@ public class FileModificationValidatorManager implements IFileModificationValida private synchronized IFileModificationValidator getDefaultValidator() { if (defaultValidator == null) { - loadDefaultValidator(); + defaultValidator = new DefaultFileModificationValidator(); } return defaultValidator; } - - private void loadDefaultValidator() { - defaultValidator = new DefaultFileModificationValidator(); - IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.ID, TeamPlugin.DEFAULT_FILE_MODIFICATION_VALIDATOR_EXTENSION); - if (extension != null) { - IExtension[] extensions = extension.getExtensions(); - if (extensions.length > 0) { - IConfigurationElement[] configElements = extensions[0].getConfigurationElements(); - if (configElements.length > 0) { - try { - Object o = configElements[0].createExecutableExtension("class"); //$NON-NLS-1$ - if (o instanceof IFileModificationValidator) { - defaultValidator = (IFileModificationValidator)o; - } - } catch (CoreException e) { - TeamPlugin.log(e); - } - } - } - } - } } diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java new file mode 100644 index 000000000..b7dd96b7b --- /dev/null +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java @@ -0,0 +1,177 @@ +/******************************************************************************* + * Copyright (c) 2000, 2004 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.core; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.resources.*; +import org.eclipse.core.runtime.*; +import org.eclipse.team.core.RepositoryProvider; +import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; + +/** + * Core validator that will load the UI validator only if a prompt is needed + */ +public class CVSCoreFileModificationValidator implements ICVSFileModificationValidator { + + IFileModificationValidator uiValidator; + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object) + */ + public IStatus validateEdit(IFile[] files, Object context) { + IFile[] unmanagedReadOnlyFiles = getUnmanagedReadOnlyFiles(files); + if (unmanagedReadOnlyFiles.length > 0) { + IStatus status = setWritable(unmanagedReadOnlyFiles); + if (!status.isOK()) { + return status; + } + } + IFile[] readOnlyFiles = getManagedReadOnlyFiles(files); + if (readOnlyFiles.length == 0) return Status.OK_STATUS; + return edit(readOnlyFiles, context); + } + + /* (non-Javadoc) + * @see org.eclipse.core.resources.IFileModificationValidator#validateSave(org.eclipse.core.resources.IFile) + */ + public IStatus validateSave(IFile file) { + if (!needsCheckout(file)) { + if (file.isReadOnly()) { + setWritable(new IFile[] { file } ); + } + return Status.OK_STATUS; + } + return edit(new IFile[] {file}, (Object)null); + } + + /** + * Method for editing a set of files. Is overriden by the + * UI to prompt the user. Default behavior is to try and load the + * UI validator and, failing that, to edit without + * prompting. + * @param readOnlyFiles + * @param context + * @return + */ + protected IStatus edit(IFile[] readOnlyFiles, Object context) { + synchronized(this) { + if (uiValidator == null) { + uiValidator = getPluggedInValidator(); + } + } + if (uiValidator != null) { + return uiValidator.validateEdit(readOnlyFiles, context); + } else { + try { + performEdit(readOnlyFiles, new NullProgressMonitor()); + } catch (CVSException e) { + return e.getStatus(); + } + return Status.OK_STATUS; + } + } + /** + * @see org.eclipse.team.internal.ccvs.core.ICVSFileModificationValidator#validateMoveDelete(org.eclipse.core.resources.IFile[], org.eclipse.core.runtime.IProgressMonitor) + */ + public IStatus validateMoveDelete(IFile[] files, IProgressMonitor monitor) { + IFile[] readOnlyFiles = getManagedReadOnlyFiles(files); + if (readOnlyFiles.length == 0) return Status.OK_STATUS; + + try { + performEdit(readOnlyFiles, monitor); + return Status.OK_STATUS; + } catch (CVSException e) { + return e.getStatus(); + } + } + + protected CVSTeamProvider getProvider(IFile[] files) { + CVSTeamProvider provider = (CVSTeamProvider)RepositoryProvider.getProvider(files[0].getProject(), CVSProviderPlugin.getTypeId()); + return provider; + } + + protected void performEdit(IFile[] files, IProgressMonitor monitor) throws CVSException { + getProvider(files).edit(files, false /* recurse */, true /* notify server */, ICVSFile.NO_NOTIFICATION, monitor); + } + + private boolean needsCheckout(IFile file) { + try { + if (file.isReadOnly()) { + ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(file); + boolean managed = cvsFile.isManaged(); + return managed; + } + } catch (CVSException e) { + // Log the exception and assume we don't need a checkout + CVSProviderPlugin.log(e); + } + return false; + } + + protected IStatus setWritable(final IFile[] files) { + for (int i = 0; i < files.length; i++) { + IFile file = files[i]; + ResourceAttributes attributes = file.getResourceAttributes(); + if (attributes != null) { + attributes.setReadOnly(false); + } + try { + file.setResourceAttributes(attributes); + } catch (CoreException e) { + return CVSException.wrapException(e).getStatus(); + } + } + return Status.OK_STATUS; + } + + private IFile[] getManagedReadOnlyFiles(IFile[] files) { + List readOnlys = new ArrayList(); + for (int i = 0; i < files.length; i++) { + IFile iFile = files[i]; + if (needsCheckout(iFile)) { + readOnlys.add(iFile); + } + } + return (IFile[]) readOnlys.toArray(new IFile[readOnlys.size()]); + } + + protected IFile[] getUnmanagedReadOnlyFiles(IFile[] files) { + List readOnlys = new ArrayList(); + for (int i = 0; i < files.length; i++) { + IFile iFile = files[i]; + if (iFile.isReadOnly() && !needsCheckout(iFile)) { + readOnlys.add(iFile); + } + } + return (IFile[]) readOnlys.toArray(new IFile[readOnlys.size()]); + } + + private static IFileModificationValidator getPluggedInValidator() { + IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(CVSProviderPlugin.ID, CVSProviderPlugin.PT_FILE_MODIFICATION_VALIDATOR).getExtensions(); + if (extensions.length == 0) + return null; + IExtension extension = extensions[0]; + IConfigurationElement[] configs = extension.getConfigurationElements(); + if (configs.length == 0) { + CVSProviderPlugin.log(IStatus.ERROR, Policy.bind("CVSAdapter.noConfigurationElement", new Object[] {extension.getUniqueIdentifier()}), null);//$NON-NLS-1$ + return null; + } + try { + IConfigurationElement config = configs[0]; + return (IFileModificationValidator) config.createExecutableExtension("run");//$NON-NLS-1$ + } catch (CoreException ex) { + CVSProviderPlugin.log(IStatus.ERROR, Policy.bind("CVSAdapter.unableToInstantiate", new Object[] {extension.getUniqueIdentifier()}), ex);//$NON-NLS-1$ + return null; + } + } +} diff --git a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java index 6a00cdee4..2763a5ed5 100644 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java +++ b/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java @@ -10,67 +10,26 @@ *******************************************************************************/ package org.eclipse.team.internal.ccvs.core; -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import org.eclipse.core.resources.IContainer; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IFileModificationValidator; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IProjectNature; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceRuleFactory; -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; +import java.io.*; +import java.util.*; + +import org.eclipse.core.resources.*; import org.eclipse.core.resources.team.IMoveDeleteHook; import org.eclipse.core.resources.team.ResourceRuleFactory; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IConfigurationElement; -import org.eclipse.core.runtime.IExtension; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.NullProgressMonitor; -import org.eclipse.core.runtime.Path; -import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.QualifiedName; +import org.eclipse.core.runtime.*; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ccvs.core.client.Command; -import org.eclipse.team.internal.ccvs.core.client.Commit; -import org.eclipse.team.internal.ccvs.core.client.Diff; -import org.eclipse.team.internal.ccvs.core.client.Session; +import org.eclipse.team.internal.ccvs.core.client.*; import org.eclipse.team.internal.ccvs.core.client.Command.KSubstOption; import org.eclipse.team.internal.ccvs.core.client.Command.LocalOption; -import org.eclipse.team.internal.ccvs.core.client.listeners.AdminKSubstListener; -import org.eclipse.team.internal.ccvs.core.client.listeners.DiffListener; -import org.eclipse.team.internal.ccvs.core.client.listeners.EditorsListener; -import org.eclipse.team.internal.ccvs.core.client.listeners.ICommandOutputListener; +import org.eclipse.team.internal.ccvs.core.client.listeners.*; import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; import org.eclipse.team.internal.ccvs.core.resources.EclipseSynchronizer; -import org.eclipse.team.internal.ccvs.core.syncinfo.FolderSyncInfo; -import org.eclipse.team.internal.ccvs.core.syncinfo.MutableResourceSyncInfo; -import org.eclipse.team.internal.ccvs.core.syncinfo.ResourceSyncInfo; -import org.eclipse.team.internal.ccvs.core.util.Assert; -import org.eclipse.team.internal.ccvs.core.util.MoveDeleteHook; -import org.eclipse.team.internal.ccvs.core.util.ResourceStateChangeListeners; -import org.eclipse.team.internal.ccvs.core.util.SyncFileWriter; +import org.eclipse.team.internal.ccvs.core.syncinfo.*; +import org.eclipse.team.internal.ccvs.core.util.*; import org.eclipse.team.internal.core.streams.CRLFtoLFInputStream; import org.eclipse.team.internal.core.streams.LFtoCRLFInputStream; @@ -148,25 +107,6 @@ public class CVSTeamProvider extends RepositoryProvider { // property used to indicate whether the project is configured to use Watch/edit private final static QualifiedName WATCH_EDIT_PROP_KEY = new QualifiedName("org.eclipse.team.cvs.core", "watch_edit"); //$NON-NLS-1$ //$NON-NLS-2$ - - private static IFileModificationValidator getPluggedInValidator() { - IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(CVSProviderPlugin.ID, CVSProviderPlugin.PT_FILE_MODIFICATION_VALIDATOR).getExtensions(); - if (extensions.length == 0) - return null; - IExtension extension = extensions[0]; - IConfigurationElement[] configs = extension.getConfigurationElements(); - if (configs.length == 0) { - CVSProviderPlugin.log(IStatus.ERROR, Policy.bind("CVSAdapter.noConfigurationElement", new Object[] {extension.getUniqueIdentifier()}), null);//$NON-NLS-1$ - return null; - } - try { - IConfigurationElement config = configs[0]; - return (IFileModificationValidator) config.createExecutableExtension("run");//$NON-NLS-1$ - } catch (CoreException ex) { - CVSProviderPlugin.log(IStatus.ERROR, Policy.bind("CVSAdapter.unableToInstantiate", new Object[] {extension.getUniqueIdentifier()}), ex);//$NON-NLS-1$ - return null; - } - } /** * No-arg Constructor for IProjectNature conformance @@ -725,10 +665,7 @@ public class CVSTeamProvider extends RepositoryProvider { */ public IFileModificationValidator getFileModificationValidator() { if (CVSTeamProvider.fileModificationValidator == null) { - CVSTeamProvider.fileModificationValidator = CVSTeamProvider.getPluggedInValidator(); - if (CVSTeamProvider.fileModificationValidator == null) { - CVSTeamProvider.fileModificationValidator =super.getFileModificationValidator(); - } + CVSTeamProvider.fileModificationValidator = new CVSCoreFileModificationValidator(); } return CVSTeamProvider.fileModificationValidator; } diff --git a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/FileModificationValidator.java b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/FileModificationValidator.java index fe05babf1..45c3eabb4 100644 --- a/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/FileModificationValidator.java +++ b/bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/FileModificationValidator.java @@ -11,117 +11,33 @@ package org.eclipse.team.internal.ccvs.ui; import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ResourceAttributes; import org.eclipse.core.runtime.*; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; -import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; -import org.eclipse.team.internal.ccvs.core.*; -import org.eclipse.team.internal.ccvs.core.resources.CVSWorkspaceRoot; +import org.eclipse.team.internal.ccvs.core.CVSCoreFileModificationValidator; +import org.eclipse.team.internal.ccvs.core.CVSException; import org.eclipse.team.internal.ccvs.ui.actions.EditorsAction; /** * IFileModificationValidator that is pluged into the CVS Repository Provider */ -public class FileModificationValidator implements ICVSFileModificationValidator { - - public static final IStatus OK = new Status(IStatus.OK, CVSUIPlugin.ID, 0, Policy.bind("ok"), null); //$NON-NLS-1$ +public class FileModificationValidator extends CVSCoreFileModificationValidator { public FileModificationValidator() { } - /** - * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(org.eclipse.core.resources.IFile, java.lang.Object) - */ - public IStatus validateEdit(IFile[] files, Object context) { - IFile[] unmanagedReadOnlyFiles = getUnmanagedReadOnlyFiles(files); - if (unmanagedReadOnlyFiles.length > 0) { - IStatus status = setWritable(unmanagedReadOnlyFiles); - if (!status.isOK()) { - return status; - } - } - IFile[] readOnlyFiles = getManagedReadOnlyFiles(files); - if (readOnlyFiles.length == 0) return OK; - return edit(readOnlyFiles, getShell(context)); - } - - /** - * @see org.eclipse.core.resources.IFileModificationValidator#validateSave(org.eclipse.core.resources.IFile) - */ - public IStatus validateSave(IFile file) { - if (!needsCheckout(file)) { - if (file.isReadOnly()) { - setWritable(new IFile[] { file } ); - } - return OK; - } - return edit(new IFile[] {file}, (Shell)null); - } - - /** - * @see org.eclipse.team.internal.ccvs.core.ICVSFileModificationValidator#validateMoveDelete(org.eclipse.core.resources.IFile[], org.eclipse.core.runtime.IProgressMonitor) - */ - public IStatus validateMoveDelete(IFile[] files, IProgressMonitor monitor) { - IFile[] readOnlyFiles = getManagedReadOnlyFiles(files); - if (readOnlyFiles.length == 0) return OK; - - try { - edit(readOnlyFiles, monitor); - return OK; - } catch (CVSException e) { - return e.getStatus(); - } - } - - private IFile[] getUnmanagedReadOnlyFiles(IFile[] files) { - List readOnlys = new ArrayList(); - for (int i = 0; i < files.length; i++) { - IFile iFile = files[i]; - if (iFile.isReadOnly() && !needsCheckout(iFile)) { - readOnlys.add(iFile); - } - } - return (IFile[]) readOnlys.toArray(new IFile[readOnlys.size()]); + /* (non-Javadoc) + * @see org.eclipse.team.internal.ccvs.core.CVSCoreFileModificationValidator#edit(org.eclipse.core.resources.IFile[], java.lang.Object) + */ + protected IStatus edit(IFile[] readOnlyFiles, Object context) { + return edit(readOnlyFiles, getShell(context)); } - private IFile[] getManagedReadOnlyFiles(IFile[] files) { - List readOnlys = new ArrayList(); - for (int i = 0; i < files.length; i++) { - IFile iFile = files[i]; - if (needsCheckout(iFile)) { - readOnlys.add(iFile); - } - } - return (IFile[]) readOnlys.toArray(new IFile[readOnlys.size()]); - } - - private boolean needsCheckout(IFile file) { - try { - if (file.isReadOnly()) { - ICVSFile cvsFile = CVSWorkspaceRoot.getCVSFileFor(file); - boolean managed = cvsFile.isManaged(); - return managed; - } - } catch (CVSException e) { - // Log the exception and assume we don't need a checkout - CVSUIPlugin.log(e); - } - return false; - } - - private CVSTeamProvider getProvider(IFile[] files) { - CVSTeamProvider provider = (CVSTeamProvider)RepositoryProvider.getProvider(files[0].getProject(), CVSProviderPlugin.getTypeId()); - return provider; - } - private Shell getShell(Object context) { if (context instanceof Shell) return (Shell)context; @@ -152,7 +68,7 @@ public class FileModificationValidator implements ICVSFileModificationValidator IRunnableWithProgress editRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { - edit(files, monitor); + performEdit(files, monitor); } catch (CVSException e) { new InvocationTargetException(e); } @@ -179,26 +95,10 @@ public class FileModificationValidator implements ICVSFileModificationValidator return setWritable(files); } - return OK; + return Status.OK_STATUS; } - private IStatus setWritable(final IFile[] files) { - for (int i = 0; i < files.length; i++) { - IFile file = files[i]; - ResourceAttributes attributes = file.getResourceAttributes(); - if (attributes != null) { - attributes.setReadOnly(false); - } - try { - file.setResourceAttributes(attributes); - } catch (CoreException e) { - return CVSException.wrapException(e).getStatus(); - } - } - return Status.OK_STATUS; - } - private boolean isRunningInUIThread() { return Display.getCurrent() != null; } @@ -264,9 +164,5 @@ public class FileModificationValidator implements ICVSFileModificationValidator private boolean isAlwaysPrompt() { return ICVSUIConstants.PREF_EDIT_PROMPT_ALWAYS.equals(CVSUIPlugin.getPlugin().getPreferenceStore().getString(ICVSUIConstants.PREF_EDIT_PROMPT)); - } - - private void edit(IFile[] files, IProgressMonitor monitor) throws CVSException { - getProvider(files).edit(files, false /* recurse */, true /* notify server */, ICVSFile.NO_NOTIFICATION, monitor); } } diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DefaultUIFileModificationValidator.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DefaultUIFileModificationValidator.java index 712b8b010..1d293203e 100644 --- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DefaultUIFileModificationValidator.java +++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DefaultUIFileModificationValidator.java @@ -11,7 +11,8 @@ package org.eclipse.team.internal.ui; import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.resources.ResourceAttributes; +import org.eclipse.core.runtime.*; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; @@ -133,12 +134,25 @@ public class DefaultUIFileModificationValidator extends DefaultFileModificationV }); } if (ok[0]) { - for (int i = 0; i < files.length; i++) { - IFile file = files[i]; - file.setReadOnly(false); - }; + setWritable(files); }; } - return super.validateEdit(files, context); + return getStatus(files); + } + + protected IStatus setWritable(final IFile[] files) { + for (int i = 0; i < files.length; i++) { + IFile file = files[i]; + ResourceAttributes attributes = file.getResourceAttributes(); + if (attributes != null) { + attributes.setReadOnly(false); + } + try { + file.setResourceAttributes(attributes); + } catch (CoreException e) { + return e.getStatus(); + } + } + return Status.OK_STATUS; } } |