View | Details | Raw Unified | Return to bug 160905 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/team/examples/pessimistic/PessimisticModificationValidator.java (-3 / +6 lines)
Lines 11-17 Link Here
11
package org.eclipse.team.examples.pessimistic;
11
package org.eclipse.team.examples.pessimistic;
12
 
12
 
13
import java.util.*;
13
import java.util.*;
14
14
import org.eclipse.core.resources.*;
15
import org.eclipse.core.resources.*;
16
import org.eclipse.core.resources.team.FileModificationValidationContext;
17
import org.eclipse.core.resources.team.FileModificationValidator;
15
import org.eclipse.core.runtime.*;
18
import org.eclipse.core.runtime.*;
16
import org.eclipse.jface.preference.IPreferenceStore;
19
import org.eclipse.jface.preference.IPreferenceStore;
17
import org.eclipse.jface.viewers.ILabelProvider;
20
import org.eclipse.jface.viewers.ILabelProvider;
Lines 31-37 Link Here
31
 * @see IFileModificationValidator
34
 * @see IFileModificationValidator
32
 */
35
 */
33
public class PessimisticModificationValidator
36
public class PessimisticModificationValidator
34
	implements IFileModificationValidator {
37
	extends FileModificationValidator {
35
	/*
38
	/*
36
	 * The provider for this validator
39
	 * The provider for this validator
37
	 */
40
	 */
Lines 44-50 Link Here
44
	/**
47
	/**
45
	 * @see IFileModificationValidator#validateEdit(IFile[], Object)
48
	 * @see IFileModificationValidator#validateEdit(IFile[], Object)
46
	 */
49
	 */
47
 	public IStatus validateEdit(IFile[] files, Object context) {
50
 	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
48
    	if (files.length == 0) { 
51
    	if (files.length == 0) { 
49
	        return new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
52
	        return new Status( IStatus.OK, getUid(), IStatus.OK, "OK", null);
50
	    } 
53
	    } 
Lines 79-85 Link Here
79
					return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "Fail Validate Edit Preference true", null);
82
					return new Status( IStatus.ERROR, getUid(), IStatus.ERROR, "Fail Validate Edit Preference true", null);
80
				}	 
83
				}	 
81
	            if(statusCode == IStatus.CANCEL) {
84
	            if(statusCode == IStatus.CANCEL) {
82
	            	return new Status( IStatus.CANCEL, getUid(), IStatus.ERROR, "Checkout cancelled by user", null);
85
	            	return new Status( IStatus.CANCEL, getUid(), IStatus.ERROR, "Checkout canceled by user", null);
83
	            }
86
	            }
84
            } else {
87
            } else {
85
            	if (isAutomaticCheckout()) {
88
            	if (isAutomaticCheckout()) {
(-)src/org/eclipse/team/examples/filesystem/FileModificationValidator.java (-8 / +7 lines)
Lines 14-21 Link Here
14
import java.util.Collection;
14
import java.util.Collection;
15
15
16
import org.eclipse.core.resources.IFile;
16
import org.eclipse.core.resources.IFile;
17
import org.eclipse.core.resources.IFileModificationValidator;
18
import org.eclipse.core.resources.IResource;
17
import org.eclipse.core.resources.IResource;
18
import org.eclipse.core.resources.team.FileModificationValidationContext;
19
import org.eclipse.core.runtime.IStatus;
19
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.Status;
20
import org.eclipse.core.runtime.Status;
21
import org.eclipse.team.core.RepositoryProvider;
21
import org.eclipse.team.core.RepositoryProvider;
Lines 23-33 Link Here
23
23
24
/**
24
/**
25
 * This class models a sentry that verifies whether resources are available for editing or overwriting.
25
 * This class models a sentry that verifies whether resources are available for editing or overwriting.
26
 * This has been made a separate clas for illustration purposes. It may have been more apporpriate
26
 * This has been made a separate class for illustration purposes. It may have been more appropriate
27
 * to have FileSystemProvider implement IFileModificationValidator itself since the interface
27
 * to have FileSystemProvider implement IFileModificationValidator itself since the interface
28
 * only has two methods and their implementation is straight forward.
28
 * only has two methods and their implementation is straight forward.
29
 */
29
 */
30
public final class FileModificationValidator implements IFileModificationValidator {
30
public final class FileModificationValidator extends org.eclipse.core.resources.team.FileModificationValidator {
31
	
31
	
32
	private FileSystemOperations operations;
32
	private FileSystemOperations operations;
33
33
Lines 39-45 Link Here
39
	}
39
	}
40
40
41
	/**
41
	/**
42
	 * This method will convert any exceptions thrown by the SimpleAccessOperations.chechout() to a Status.
42
	 * This method will convert any exceptions thrown by the SimpleAccessOperations.checkout() to a Status.
43
	 * @param resources the resources that are to be checked out
43
	 * @param resources the resources that are to be checked out
44
	 * @return IStatus a status indicator that reports whether the operation went smoothly or not.
44
	 * @return IStatus a status indicator that reports whether the operation went smoothly or not.
45
	 */
45
	 */
Lines 57-63 Link Here
57
	 * The idea is to prevent anyone from accidentally working on a file that they won't be able to check in changes to.
57
	 * The idea is to prevent anyone from accidentally working on a file that they won't be able to check in changes to.
58
	 * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(IFile[], Object)
58
	 * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(IFile[], Object)
59
	 */
59
	 */
60
	public IStatus validateEdit(IFile[] files, Object context) {
60
	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
61
		Collection toBeCheckedOut = new ArrayList();
61
		Collection toBeCheckedOut = new ArrayList();
62
62
63
		//Make a list of all the files that need to be checked out:
63
		//Make a list of all the files that need to be checked out:
Lines 72-86 Link Here
72
72
73
	/**
73
	/**
74
	 * This method will be called by the workbench before it tries to save a file.
74
	 * This method will be called by the workbench before it tries to save a file.
75
	 * It should not attempt to save any files that don't recieve an OK status here.
75
	 * It should not attempt to save any files that don't receive an OK status here.
76
	 * @see org.eclipse.core.resources.IFileModificationValidator#validateSave(IFile)
76
	 * @see org.eclipse.core.resources.IFileModificationValidator#validateSave(IFile)
77
	 */
77
	 */
78
	public IStatus validateSave(IFile file) {
78
	public IStatus validateSave(IFile file) {
79
		if (file.isReadOnly()) {
79
		if (file.isReadOnly()) {
80
			return checkout(new IResource[] { file });
80
			return checkout(new IResource[] { file });
81
		} else {
82
			return Status.OK_STATUS;
83
		}
81
		}
82
		return Status.OK_STATUS;
84
	}
83
	}
85
84
86
}
85
}
(-)plugin.xml (-1 / +1 lines)
Lines 269-275 Link Here
269
      <perspectiveExtension
269
      <perspectiveExtension
270
            targetID="org.eclipse.team.ui.TeamSynchronizingPerspective">
270
            targetID="org.eclipse.team.ui.TeamSynchronizingPerspective">
271
         <showInPart
271
         <showInPart
272
               id="org.eclipse.ui.views.ResourceNavigator">
272
               id="org.eclipse.ui.navigator.ProjectExplorer">
273
         </showInPart>
273
         </showInPart>
274
         <showInPart
274
         <showInPart
275
               id="org.eclipse.team.ui.GenericHistoryView">
275
               id="org.eclipse.team.ui.GenericHistoryView">
(-)src/org/eclipse/team/internal/ui/DefaultUIFileModificationValidator.java (-5 / +12 lines)
Lines 15-20 Link Here
15
15
16
import org.eclipse.core.resources.IFile;
16
import org.eclipse.core.resources.IFile;
17
import org.eclipse.core.resources.ResourceAttributes;
17
import org.eclipse.core.resources.ResourceAttributes;
18
import org.eclipse.core.resources.team.FileModificationValidationContext;
18
import org.eclipse.core.runtime.*;
19
import org.eclipse.core.runtime.*;
19
import org.eclipse.jface.dialogs.IDialogConstants;
20
import org.eclipse.jface.dialogs.IDialogConstants;
20
import org.eclipse.jface.dialogs.MessageDialog;
21
import org.eclipse.jface.dialogs.MessageDialog;
Lines 118-129 Link Here
118
    }
119
    }
119
    
120
    
120
    /* (non-Javadoc)
121
    /* (non-Javadoc)
121
     * @see org.eclipse.team.internal.core.DefaultFileModificationValidator#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object)
122
     * @see org.eclipse.team.internal.core.DefaultFileModificationValidator#validateEdit(org.eclipse.core.resources.IFile[], org.eclipse.core.resources.team.FileModificationValidationContext)
122
     */
123
     */
123
    public IStatus validateEdit(final IFile[] allFiles, Object context) {
124
    public IStatus validateEdit(final IFile[] allFiles, FileModificationValidationContext context) {
124
    	final IFile[] readOnlyFiles = getReadOnlyFiles(allFiles);
125
    	final IFile[] readOnlyFiles = getReadOnlyFiles(allFiles);
125
        if (readOnlyFiles.length > 0 && context != null && context instanceof Shell) {
126
        if (readOnlyFiles.length > 0 && context != null) {
126
            final Shell shell = (Shell)context;
127
            final Shell shell = getShell(context);
127
            final boolean[] ok = new boolean[] { false };
128
            final boolean[] ok = new boolean[] { false };
128
            if (readOnlyFiles.length == 1) {
129
            if (readOnlyFiles.length == 1) {
129
                shell.getDisplay().syncExec(new Runnable() {
130
                shell.getDisplay().syncExec(new Runnable() {
Lines 149-155 Link Here
149
        return getStatus(readOnlyFiles);
150
        return getStatus(readOnlyFiles);
150
    }
151
    }
151
    
152
    
152
    public IStatus validateSave(IFile file) {
153
    private Shell getShell(FileModificationValidationContext context) {
154
		if (context.getShell() != null)
155
			return (Shell)context.getShell();
156
		return Utils.getShell(null);
157
	}
158
159
	public IStatus validateSave(IFile file) {
153
    	if (file.isReadOnly() && isMakeWrittableWhenContextNotProvided()) {
160
    	if (file.isReadOnly() && isMakeWrittableWhenContextNotProvided()) {
154
    		IFile[] readOnlyFiles = new IFile[] { file };
161
    		IFile[] readOnlyFiles = new IFile[] { file };
155
    		setWritable(readOnlyFiles);
162
    		setWritable(readOnlyFiles);
(-)schema/defaultFileModificationValidator.exsd (-2 / +2 lines)
Lines 40-46 Link Here
40
                  
40
                  
41
               </documentation>
41
               </documentation>
42
               <appInfo>
42
               <appInfo>
43
                  <meta.attribute kind="java" basedOn="org.eclipse.core.resources.IFileModificationValidator"/>
43
                  <meta.attribute kind="java" basedOn="org.eclipse.core.resources.FileModificationValidator"/>
44
               </appInfo>
44
               </appInfo>
45
            </annotation>
45
            </annotation>
46
         </attribute>
46
         </attribute>
Lines 88-94 Link Here
88
         <meta.section type="copyright"/>
88
         <meta.section type="copyright"/>
89
      </appInfo>
89
      </appInfo>
90
      <documentation>
90
      <documentation>
91
         Copyright (c) 2004 IBM Corporation and others.
91
         Copyright (c) 2004 IBM Corporation and others.
92
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
92
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at &lt;a href=&quot;http://www.eclipse.org/legal/epl-v10.html&quot;&gt;http://www.eclipse.org/legal/epl-v10.html&lt;/a&gt;
93
      </documentation>
93
      </documentation>
94
   </annotation>
94
   </annotation>
(-)src/org/eclipse/team/internal/core/DefaultFileModificationValidator.java (-13 / +9 lines)
Lines 13-32 Link Here
13
import java.util.ArrayList;
13
import java.util.ArrayList;
14
import java.util.List;
14
import java.util.List;
15
15
16
import org.eclipse.core.resources.*;
16
import org.eclipse.core.resources.IFile;
17
import org.eclipse.core.resources.team.FileModificationValidationContext;
18
import org.eclipse.core.resources.team.FileModificationValidator;
17
import org.eclipse.core.runtime.*;
19
import org.eclipse.core.runtime.*;
18
import org.eclipse.osgi.util.NLS;
20
import org.eclipse.osgi.util.NLS;
19
import org.eclipse.team.core.ITeamStatus;
21
import org.eclipse.team.core.ITeamStatus;
20
import org.eclipse.team.core.TeamStatus;
22
import org.eclipse.team.core.TeamStatus;
21
23
22
public class DefaultFileModificationValidator implements IFileModificationValidator {
24
public class DefaultFileModificationValidator extends FileModificationValidator {
23
	
25
	
24
	/*
26
	/*
25
	 * A validator plugged in the the Team UI that will prompt
27
	 * A validator plugged in the the Team UI that will prompt
26
	 * the user to make read-only files writable. In the absence of
28
	 * the user to make read-only files writable. In the absence of
27
	 * this validator, edit/save fail on read-only files.
29
	 * this validator, edit/save fail on read-only files.
28
	 */
30
	 */
29
	private IFileModificationValidator uiValidator;
31
	private FileModificationValidator uiValidator;
30
32
31
	protected IStatus getDefaultStatus(IFile file) {
33
	protected IStatus getDefaultStatus(IFile file) {
32
		return 
34
		return 
Lines 35-44 Link Here
35
				: Status.OK_STATUS;
37
				: Status.OK_STATUS;
36
	}
38
	}
37
	
39
	
38
	/**
40
	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
39
	 * @see IFileModificationValidator#validateEdit(IFile[], Object)
40
	 */
41
	public IStatus validateEdit(IFile[] files, Object context) {
42
	    IFile[] readOnlyFiles = getReadOnly(files);
41
	    IFile[] readOnlyFiles = getReadOnly(files);
43
	    if (readOnlyFiles.length == 0)
42
	    if (readOnlyFiles.length == 0)
44
	        return Status.OK_STATUS;
43
	        return Status.OK_STATUS;
Lines 86-94 Link Here
86
        return (IFile[]) result.toArray(new IFile[result.size()]);
85
        return (IFile[]) result.toArray(new IFile[result.size()]);
87
    }
86
    }
88
87
89
    /**
90
	 * @see IFileModificationValidator#validateSave(IFile)
91
	 */
92
	public IStatus validateSave(IFile file) {
88
	public IStatus validateSave(IFile file) {
93
	    if (!file.isReadOnly())
89
	    if (!file.isReadOnly())
94
	        return Status.OK_STATUS;
90
	        return Status.OK_STATUS;
Lines 102-108 Link Here
102
		return getDefaultStatus(file);
98
		return getDefaultStatus(file);
103
	}
99
	}
104
	
100
	
105
    private IFileModificationValidator loadUIValidator() {
101
    private FileModificationValidator loadUIValidator() {
106
        IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.ID, TeamPlugin.DEFAULT_FILE_MODIFICATION_VALIDATOR_EXTENSION);
102
        IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(TeamPlugin.ID, TeamPlugin.DEFAULT_FILE_MODIFICATION_VALIDATOR_EXTENSION);
107
		if (extension != null) {
103
		if (extension != null) {
108
			IExtension[] extensions =  extension.getExtensions();
104
			IExtension[] extensions =  extension.getExtensions();
Lines 111-118 Link Here
111
				if (configElements.length > 0) {
107
				if (configElements.length > 0) {
112
					try {
108
					try {
113
                        Object o = configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
109
                        Object o = configElements[0].createExecutableExtension("class"); //$NON-NLS-1$
114
                        if (o instanceof IFileModificationValidator) {
110
                        if (o instanceof FileModificationValidator) {
115
                            return (IFileModificationValidator)o;
111
                            return (FileModificationValidator)o;
116
                        }
112
                        }
117
                    } catch (CoreException e) {
113
                    } catch (CoreException e) {
118
                        TeamPlugin.log(e);
114
                        TeamPlugin.log(e);
(-)src/org/eclipse/team/internal/core/FileModificationValidatorManager.java (-4 / +11 lines)
Lines 15-26 Link Here
15
15
16
import org.eclipse.core.resources.IFile;
16
import org.eclipse.core.resources.IFile;
17
import org.eclipse.core.resources.IFileModificationValidator;
17
import org.eclipse.core.resources.IFileModificationValidator;
18
import org.eclipse.core.resources.team.FileModificationValidationContext;
19
import org.eclipse.core.resources.team.FileModificationValidator;
18
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.IStatus;
19
import org.eclipse.core.runtime.MultiStatus;
21
import org.eclipse.core.runtime.MultiStatus;
20
import org.eclipse.team.core.RepositoryProvider;
22
import org.eclipse.team.core.RepositoryProvider;
21
23
22
public class FileModificationValidatorManager implements IFileModificationValidator {
24
public class FileModificationValidatorManager extends FileModificationValidator {
23
	private IFileModificationValidator defaultValidator;
25
	private FileModificationValidator defaultValidator;
24
	
26
	
25
	/*
27
	/*
26
	 * @see IFileModificationValidator#validateEdit(IFile[], Object)
28
	 * @see IFileModificationValidator#validateEdit(IFile[], Object)
Lines 28-34 Link Here
28
	 * Ask each provider once for its files.
30
	 * Ask each provider once for its files.
29
	 * Collect the resulting status' and return a MultiStatus.
31
	 * Collect the resulting status' and return a MultiStatus.
30
	 */
32
	 */
31
	public IStatus validateEdit(IFile[] files, Object context) {
33
	public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
32
		ArrayList returnStati = new ArrayList();
34
		ArrayList returnStati = new ArrayList();
33
		
35
		
34
		//map provider to the files under that provider's control
36
		//map provider to the files under that provider's control
Lines 63-68 Link Here
63
				if (v != null) validator = v;
65
				if (v != null) validator = v;
64
			}
66
			}
65
			
67
			
68
			//must null any reference to FileModificationValidationContext for backwards compatibility
69
			if (!(validator instanceof FileModificationValidator))
70
				if (context instanceof FileModificationValidationContext)
71
					context = null;
72
			
66
			IStatus status = validator.validateEdit(filesArray, context);
73
			IStatus status = validator.validateEdit(filesArray, context);
67
			if(!status.isOK())
74
			if(!status.isOK())
68
				allOK = false;
75
				allOK = false;
Lines 99-105 Link Here
99
		return validator.validateSave(file);
106
		return validator.validateSave(file);
100
	}
107
	}
101
	
108
	
102
	private synchronized IFileModificationValidator getDefaultValidator() {
109
	private synchronized FileModificationValidator getDefaultValidator() {
103
	    if (defaultValidator == null) {
110
	    if (defaultValidator == null) {
104
	        defaultValidator = new DefaultFileModificationValidator();
111
	        defaultValidator = new DefaultFileModificationValidator();
105
	    }
112
	    }
(-)src/org/eclipse/team/internal/ccvs/ui/FileModificationValidator.java (-11 / +15 lines)
Lines 17-22 Link Here
17
17
18
import org.eclipse.core.resources.IFile;
18
import org.eclipse.core.resources.IFile;
19
import org.eclipse.core.resources.IResource;
19
import org.eclipse.core.resources.IResource;
20
import org.eclipse.core.resources.team.FileModificationValidationContext;
20
import org.eclipse.core.runtime.*;
21
import org.eclipse.core.runtime.*;
21
import org.eclipse.core.runtime.jobs.ISchedulingRule;
22
import org.eclipse.core.runtime.jobs.ISchedulingRule;
22
import org.eclipse.core.runtime.jobs.Job;
23
import org.eclipse.core.runtime.jobs.Job;
Lines 30-56 Link Here
30
import org.eclipse.team.internal.ccvs.core.client.Command;
31
import org.eclipse.team.internal.ccvs.core.client.Command;
31
import org.eclipse.team.internal.ccvs.ui.actions.EditorsAction;
32
import org.eclipse.team.internal.ccvs.ui.actions.EditorsAction;
32
import org.eclipse.team.internal.ccvs.ui.operations.UpdateOperation;
33
import org.eclipse.team.internal.ccvs.ui.operations.UpdateOperation;
34
import org.eclipse.team.internal.ui.Utils;
33
import org.eclipse.ui.progress.IProgressConstants;
35
import org.eclipse.ui.progress.IProgressConstants;
34
36
35
/**
37
/**
36
 * IFileModificationValidator that is pluged into the CVS Repository Provider
38
 * IFileModificationValidator that is plugged into the CVS Repository Provider
37
 */
39
 */
38
public class FileModificationValidator extends CVSCoreFileModificationValidator {
40
public class FileModificationValidator extends CVSCoreFileModificationValidator {
39
	
41
	
40
	public FileModificationValidator() {
42
	public FileModificationValidator() {
41
	}
43
	}
42
	
44
	
43
	/* (non-Javadoc)
45
    /* (non-Javadoc)
44
     * @see org.eclipse.team.internal.ccvs.core.CVSCoreFileModificationValidator#edit(org.eclipse.core.resources.IFile[], java.lang.Object)
46
     * @see org.eclipse.team.internal.ccvs.core.CVSCoreFileModificationValidator#edit(org.eclipse.core.resources.IFile[], org.eclipse.core.resources.team.FileModificationValidationContext)
45
     */
47
     */
46
    protected IStatus edit(IFile[] readOnlyFiles, Object context) {
48
    protected IStatus edit(IFile[] readOnlyFiles, FileModificationValidationContext context) {
47
        return edit(readOnlyFiles, getShell(context));
49
        return edit(readOnlyFiles, getShell(context));
48
    }
50
    }
49
    
51
    
50
	private Shell getShell(Object context) {
52
	private Shell getShell(FileModificationValidationContext context) {
51
		if (context instanceof Shell)
53
		if (context == null)
52
			return (Shell)context;
54
			return null;
53
		return null;
55
		if (context.getShell() != null)
56
			return (Shell)context.getShell();
57
		return Utils.getShell(null);
54
	}
58
	}
55
59
56
	private IStatus getStatus(InvocationTargetException e) {
60
	private IStatus getStatus(InvocationTargetException e) {
Lines 142-148 Link Here
142
    }
146
    }
143
    
147
    
144
    private URL getOperationIcon() {
148
    private URL getOperationIcon() {
145
        return Platform.find(CVSUIPlugin.getPlugin().getBundle(), new Path(ICVSUIConstants.ICON_PATH + ICVSUIConstants.IMG_CVS_PERSPECTIVE));
149
        return FileLocator.find(CVSUIPlugin.getPlugin().getBundle(), new Path(ICVSUIConstants.ICON_PATH + ICVSUIConstants.IMG_CVS_PERSPECTIVE), null);
146
    }
150
    }
147
    
151
    
148
    private boolean isRunningInUIThread() {
152
    private boolean isRunningInUIThread() {
Lines 185-191 Link Here
185
    }
189
    }
186
190
187
	private boolean promptEdit(Shell shell) {
191
	private boolean promptEdit(Shell shell) {
188
		// Open the dialog using a sync exec (there are no guarentees that we
192
		// Open the dialog using a sync exec (there are no guarantees that we
189
		// were called from the UI thread
193
		// were called from the UI thread
190
		final boolean[] result = new boolean[] { false };
194
		final boolean[] result = new boolean[] { false };
191
		int flags = isRunningInUIThread() ? 0 : CVSUIPlugin.PERFORM_SYNC_EXEC;
195
		int flags = isRunningInUIThread() ? 0 : CVSUIPlugin.PERFORM_SYNC_EXEC;
Lines 198-204 Link Here
198
	}
202
	}
199
203
200
    private boolean promptUpdate(Shell shell) {
204
    private boolean promptUpdate(Shell shell) {
201
        // Open the dialog using a sync exec (there are no guarentees that we
205
        // Open the dialog using a sync exec (there are no guarantees that we
202
        // were called from the UI thread
206
        // were called from the UI thread
203
        final boolean[] result = new boolean[] { false };
207
        final boolean[] result = new boolean[] { false };
204
        int flags = isRunningInUIThread() ? 0 : CVSUIPlugin.PERFORM_SYNC_EXEC;
208
        int flags = isRunningInUIThread() ? 0 : CVSUIPlugin.PERFORM_SYNC_EXEC;
(-)src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java (-15 / +14 lines)
Lines 10-21 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.team.internal.ccvs.core;
11
package org.eclipse.team.internal.ccvs.core;
12
12
13
import java.util.ArrayList;
13
import java.util.*;
14
import java.util.HashSet;
15
import java.util.List;
16
import java.util.Set;
17
14
18
import org.eclipse.core.resources.*;
15
import org.eclipse.core.resources.*;
16
import org.eclipse.core.resources.team.FileModificationValidationContext;
17
import org.eclipse.core.resources.team.FileModificationValidator;
19
import org.eclipse.core.runtime.*;
18
import org.eclipse.core.runtime.*;
20
import org.eclipse.core.runtime.jobs.*;
19
import org.eclipse.core.runtime.jobs.*;
21
import org.eclipse.osgi.util.NLS;
20
import org.eclipse.osgi.util.NLS;
Lines 25-38 Link Here
25
/**
24
/**
26
 * Core validator that will load the UI validator only if a prompt is needed
25
 * Core validator that will load the UI validator only if a prompt is needed
27
 */
26
 */
28
public class CVSCoreFileModificationValidator implements ICVSFileModificationValidator {
27
public class CVSCoreFileModificationValidator extends FileModificationValidator implements ICVSFileModificationValidator {
29
    
28
    
30
    IFileModificationValidator uiValidator;
29
    FileModificationValidator uiValidator;
31
30
32
    /* (non-Javadoc)
31
    /* (non-Javadoc)
33
     * @see org.eclipse.core.resources.IFileModificationValidator#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object)
32
     * @see org.eclipse.core.resources.team.FileModificationValidator#validateEdit(org.eclipse.core.resources.IFile[], org.eclipse.core.resources.team.FileModificationValidationContext)
34
     */
33
     */
35
    public IStatus validateEdit(IFile[] files, Object context) {
34
    public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
36
	    IFile[] unmanagedReadOnlyFiles = getUnmanagedReadOnlyFiles(files);
35
	    IFile[] unmanagedReadOnlyFiles = getUnmanagedReadOnlyFiles(files);
37
	    if (unmanagedReadOnlyFiles.length > 0) {
36
	    if (unmanagedReadOnlyFiles.length > 0) {
38
	        IStatus status = setWritable(unmanagedReadOnlyFiles);
37
	        IStatus status = setWritable(unmanagedReadOnlyFiles);
Lines 55-61 Link Here
55
		    }
54
		    }
56
		    return Status.OK_STATUS;
55
		    return Status.OK_STATUS;
57
		}
56
		}
58
		return edit(new IFile[] {file}, (Object)null);
57
		return edit(new IFile[] {file}, (FileModificationValidationContext)null);
59
    }
58
    }
60
59
61
    /**
60
    /**
Lines 67-74 Link Here
67
     * @param context
66
     * @param context
68
     * @return
67
     * @return
69
     */
68
     */
70
    protected IStatus edit(IFile[] readOnlyFiles, Object context) {
69
    protected IStatus edit(IFile[] readOnlyFiles, FileModificationValidationContext context) {
71
        IFileModificationValidator override = getUIValidator();
70
        FileModificationValidator override = getUIValidator();
72
        if (override != null) {
71
        if (override != null) {
73
            return override.validateEdit(readOnlyFiles, context);
72
            return override.validateEdit(readOnlyFiles, context);
74
        } else {
73
        } else {
Lines 77-83 Link Here
77
        }
76
        }
78
    }
77
    }
79
78
80
    private IFileModificationValidator getUIValidator() {
79
    private FileModificationValidator getUIValidator() {
81
        synchronized(this) {
80
        synchronized(this) {
82
	        if (uiValidator == null) {
81
	        if (uiValidator == null) {
83
	            uiValidator = getPluggedInValidator();
82
	            uiValidator = getPluggedInValidator();
Lines 181-187 Link Here
181
		return (IFile[]) readOnlys.toArray(new IFile[readOnlys.size()]);
180
		return (IFile[]) readOnlys.toArray(new IFile[readOnlys.size()]);
182
    }
181
    }
183
    
182
    
184
	private static IFileModificationValidator getPluggedInValidator() {
183
	private static FileModificationValidator getPluggedInValidator() {
185
		IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(CVSProviderPlugin.ID, CVSProviderPlugin.PT_FILE_MODIFICATION_VALIDATOR).getExtensions();
184
		IExtension[] extensions = Platform.getExtensionRegistry().getExtensionPoint(CVSProviderPlugin.ID, CVSProviderPlugin.PT_FILE_MODIFICATION_VALIDATOR).getExtensions();
186
		if (extensions.length == 0)
185
		if (extensions.length == 0)
187
			return null;
186
			return null;
Lines 193-199 Link Here
193
		}
192
		}
194
		try {
193
		try {
195
			IConfigurationElement config = configs[0];
194
			IConfigurationElement config = configs[0];
196
			return (IFileModificationValidator) config.createExecutableExtension("run");//$NON-NLS-1$
195
			return (FileModificationValidator) config.createExecutableExtension("run");//$NON-NLS-1$
197
		} catch (CoreException ex) {
196
		} catch (CoreException ex) {
198
			CVSProviderPlugin.log(IStatus.ERROR, NLS.bind("The CVS file modification validator registered as ID {0} could not be instantiated", (new Object[] {extension.getUniqueIdentifier()})), ex);//$NON-NLS-1$
197
			CVSProviderPlugin.log(IStatus.ERROR, NLS.bind("The CVS file modification validator registered as ID {0} could not be instantiated", (new Object[] {extension.getUniqueIdentifier()})), ex);//$NON-NLS-1$
199
			return null;
198
			return null;
Lines 201-207 Link Here
201
	}
200
	}
202
    
201
    
203
    public ISchedulingRule validateEditRule(CVSResourceRuleFactory factory, IResource[] resources) {
202
    public ISchedulingRule validateEditRule(CVSResourceRuleFactory factory, IResource[] resources) {
204
        IFileModificationValidator override = getUIValidator();
203
        FileModificationValidator override = getUIValidator();
205
        if (override instanceof CVSCoreFileModificationValidator && override != this) {
204
        if (override instanceof CVSCoreFileModificationValidator && override != this) {
206
            CVSCoreFileModificationValidator ui = (CVSCoreFileModificationValidator) override;
205
            CVSCoreFileModificationValidator ui = (CVSCoreFileModificationValidator) override;
207
            return ui.validateEditRule(factory, resources);
206
            return ui.validateEditRule(factory, resources);
(-)src/org/eclipse/team/internal/ccvs/core/ICVSFileModificationValidator.java (-2 / +1 lines)
Lines 11-17 Link Here
11
package org.eclipse.team.internal.ccvs.core;
11
package org.eclipse.team.internal.ccvs.core;
12
12
13
import org.eclipse.core.resources.IFile;
13
import org.eclipse.core.resources.IFile;
14
import org.eclipse.core.resources.IFileModificationValidator;
15
import org.eclipse.core.runtime.IProgressMonitor;
14
import org.eclipse.core.runtime.IProgressMonitor;
16
import org.eclipse.core.runtime.IStatus;
15
import org.eclipse.core.runtime.IStatus;
17
16
Lines 23-29 Link Here
23
 * To enable and disable the creation of type comments go to
22
 * To enable and disable the creation of type comments go to
24
 * Window>Preferences>Java>Code Generation.
23
 * Window>Preferences>Java>Code Generation.
25
 */
24
 */
26
public interface ICVSFileModificationValidator extends IFileModificationValidator {
25
public interface ICVSFileModificationValidator {
27
	
26
	
28
	public IStatus validateMoveDelete(IFile[] files, IProgressMonitor monitor);
27
	public IStatus validateMoveDelete(IFile[] files, IProgressMonitor monitor);
29
28
(-)src/org/eclipse/team/tests/core/RepositoryProviderTests.java (-20 / +8 lines)
Lines 11-37 Link Here
11
package org.eclipse.team.tests.core;
11
package org.eclipse.team.tests.core;
12
12
13
import java.io.ByteArrayInputStream;
13
import java.io.ByteArrayInputStream;
14
import java.util.ArrayList;
14
import java.util.*;
15
import java.util.Arrays;
16
import java.util.List;
17
15
18
import junit.extensions.TestSetup;
16
import junit.extensions.TestSetup;
19
import junit.framework.Test;
17
import junit.framework.Test;
20
import junit.framework.TestSuite;
18
import junit.framework.TestSuite;
21
19
22
import org.eclipse.core.resources.IFile;
20
import org.eclipse.core.resources.*;
23
import org.eclipse.core.resources.IFileModificationValidator;
21
import org.eclipse.core.resources.team.*;
24
import org.eclipse.core.resources.IFolder;
22
import org.eclipse.core.runtime.*;
25
import org.eclipse.core.resources.IProject;
26
import org.eclipse.core.resources.IProjectDescription;
27
import org.eclipse.core.resources.IResource;
28
import org.eclipse.core.resources.IResourceStatus;
29
import org.eclipse.core.resources.ResourcesPlugin;
30
import org.eclipse.core.resources.team.IMoveDeleteHook;
31
import org.eclipse.core.resources.team.IResourceTree;
32
import org.eclipse.core.runtime.CoreException;
33
import org.eclipse.core.runtime.IProgressMonitor;
34
import org.eclipse.core.runtime.IStatus;
35
import org.eclipse.team.core.RepositoryProvider;
23
import org.eclipse.team.core.RepositoryProvider;
36
import org.eclipse.team.core.TeamException;
24
import org.eclipse.team.core.TeamException;
37
25
Lines 132-140 Link Here
132
		
120
		
133
		// test that validator gets called by team core dispatching
121
		// test that validator gets called by team core dispatching
134
		final boolean[] called = new boolean[] {false};
122
		final boolean[] called = new boolean[] {false};
135
		bicProvider.setModificationValidator(new IFileModificationValidator() {
123
		bicProvider.setModificationValidator(new FileModificationValidator() {
136
			// can't test validate edit here because it is only called from editors
124
			// can't test validate edit here because it is only called from editors
137
			public IStatus validateEdit(IFile[] files, Object context) {
125
			public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
138
				return null;
126
				return null;
139
			}
127
			}
140
			public IStatus validateSave(IFile file) {
128
			public IStatus validateSave(IFile file) {
Lines 149-157 Link Here
149
		
137
		
150
		// test that validator can veto a setContents
138
		// test that validator can veto a setContents
151
		called[0] = false;
139
		called[0] = false;
152
		bicProvider.setModificationValidator(new IFileModificationValidator() {
140
		bicProvider.setModificationValidator(new FileModificationValidator() {
153
			// can't test validate edit here because it is only called from editors
141
			// can't test validate edit here because it is only called from editors
154
			public IStatus validateEdit(IFile[] files, Object context) {
142
			public IStatus validateEdit(IFile[] files, FileModificationValidationContext context) {
155
				return null;
143
				return null;
156
			}
144
			}
157
			public IStatus validateSave(IFile file) {
145
			public IStatus validateSave(IFile file) {

Return to bug 160905