diff options
Diffstat (limited to 'bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java')
-rw-r--r-- | bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java | 240 |
1 files changed, 0 insertions, 240 deletions
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 deleted file mode 100644 index 2c01c8616..000000000 --- a/bundles/org.eclipse.team.cvs.core/src/org/eclipse/team/internal/ccvs/core/CVSCoreFileModificationValidator.java +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************************* - * 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 Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.team.internal.ccvs.core; - -import java.util.*; - -import org.eclipse.core.resources.*; -import org.eclipse.core.runtime.*; -import org.eclipse.core.runtime.jobs.*; -import org.eclipse.osgi.util.NLS; -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) { - IFileModificationValidator override = getUIValidator(); - if (override != null) { - return override.validateEdit(readOnlyFiles, context); - } else { - performEdit(readOnlyFiles); - return Status.OK_STATUS; - } - } - - private IFileModificationValidator getUIValidator() { - synchronized(this) { - if (uiValidator == null) { - uiValidator = getPluggedInValidator(); - } - } - return uiValidator; - } - - /** - * @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; - - performEdit(readOnlyFiles); - return Status.OK_STATUS; - } - - /* - * Perform the headless edit check in the background. - * The user will be notified of any errors that occurred. - */ - protected void performEdit(final IFile[] readOnlyFiles) { - setWritable(readOnlyFiles); - Job job = new Job(CVSMessages.CVSCoreFileModificationValidator_editJob) { - protected IStatus run(IProgressMonitor monitor) { - try { - performEdit(readOnlyFiles, monitor); - } catch (CVSException e) { - return e.getStatus(); - } - return Status.OK_STATUS; - } - }; - scheduleEditJob(job); - } - - protected void scheduleEditJob(Job job) { - job.schedule(); - } - - 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 */, true /* notify for writtable files */, 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, NLS.bind("The CVS file modification validator is missing from extension {0}", (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, NLS.bind("The CVS file modification validator registered as ID {0} could not be instantiated", (new Object[] {extension.getUniqueIdentifier()})), ex);//$NON-NLS-1$ - return null; - } - } - - public ISchedulingRule validateEditRule(CVSResourceRuleFactory factory, IResource[] resources) { - IFileModificationValidator override = getUIValidator(); - if (override instanceof CVSCoreFileModificationValidator && override != this) { - CVSCoreFileModificationValidator ui = (CVSCoreFileModificationValidator) override; - return ui.validateEditRule(factory, resources); - } - return internalValidateEditRule(factory, resources); - } - - protected final ISchedulingRule internalValidateEditRule(CVSResourceRuleFactory factory, IResource[] resources) { - if (resources.length == 0) - return null; - //optimize rule for single file - if (resources.length == 1) - return isReadOnly(resources[0]) ? factory.getParent(resources[0]) : null; - //need a lock on the parents of all read-only files - HashSet rules = new HashSet(); - for (int i = 0; i < resources.length; i++) - if (isReadOnly(resources[i])) - rules.add(factory.getParent(resources[i])); - return createSchedulingRule(rules); - } - - protected ISchedulingRule createSchedulingRule(Set rules) { - if (rules.isEmpty()) - return null; - if (rules.size() == 1) - return (ISchedulingRule) rules.iterator().next(); - ISchedulingRule[] ruleArray = (ISchedulingRule[]) rules - .toArray(new ISchedulingRule[rules.size()]); - return new MultiRule(ruleArray); - } - - protected final boolean isReadOnly(IResource resource) { - ResourceAttributes a = resource.getResourceAttributes(); - if (a != null) { - return a.isReadOnly(); - } - return false; - } -} |