Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2004-11-30 19:38:15 +0000
committerMichael Valenta2004-11-30 19:38:15 +0000
commit174c6750c835bd9c436f74863ad3f78b7437e208 (patch)
tree4c4966bbadf683bf6859a76e9983d58f510bbdca
parent406fcbf9d92784dcdf6cf2bf1994db3d2b43618c (diff)
downloadeclipse.platform.team-174c6750c835bd9c436f74863ad3f78b7437e208.tar.gz
eclipse.platform.team-174c6750c835bd9c436f74863ad3f78b7437e208.tar.xz
eclipse.platform.team-174c6750c835bd9c436f74863ad3f78b7437e208.zip
[78365] Must Team Core load Team UI?
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java69
-rw-r--r--bundles/org.eclipse.team.core/src/org/eclipse/team/internal/core/FileModificationValidatorManager.java29
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java177
-rw-r--r--bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSTeamProvider.java83
-rw-r--r--bundles/org.eclipse.team.cvs.ui/src/org/eclipse/team/internal/ccvs/ui/FileModificationValidator.java124
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/DefaultUIFileModificationValidator.java26
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;
}
}

Back to the top