/*******************************************************************************
* Copyright (c) 2007 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.core.resources.team;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.IStatus;
/**
* The file modification validator is a Team-related hook for pre-checking operations that modify
* the contents of files.
* <p>
* This class is used only in conjunction with the
* "org.eclipse.core.resources.fileModificationValidator" extension point. It is intended to be
* implemented only by the Eclipse Platform Team plug-in or by repository providers whose validator
* get invoked by Team.
* </p>
*
* @since 3.3
*/
public abstract class FileModificationValidator implements IFileModificationValidator {
/**
* Validates that the given files can be modified. The files must all exist in the workspace.
* The optional context object may be supplied if UI-based validation is required. If the
* context is <code>null</code>, the validator must attempt to perform the validation in a
* headless manner. The returned status is <code>IStatus.OK</code> if this validator believes
* the given file can be modified. Other return statuses indicate the reason why the individual
* files cannot be modified.
*
* @param files the files that are to be modified; these files must all exist in the workspace
* @param context the <code>org.eclipse.swt.widgets.Shell</code> that is to be used to parent
* any dialogs with the user, or <code>null</code> if there is no UI context
* (declared as an <code>Object</code> to avoid any direct references on the SWT
* component)
* @return a status object that is OK if things are fine, otherwise a status describing reasons
* why modifying the given files is not reasonable
* @see IWorkspace#validateEdit(IFile[], Object)
* @deprecated this method is part of the deprecated {@link IFileModificationValidator}
* interface. Clients should call
* {@link #validateEdit(IFile[], FileModificationValidationContext)} instead.
*/
public final IStatus validateEdit(IFile[] files, Object context) {
FileModificationValidationContext validationContext;
if (context == null)
validationContext= null;
else if (context instanceof FileModificationValidationContext)
validationContext= (FileModificationValidationContext)context;
else
validationContext= new FileModificationValidationContext(context);
return validateEdit(files, validationContext);
}
/**
* Validates that the given file can be saved. This method is called from
* <code>IFile#setContents</code> and <code>IFile#appendContents</code> before any attempt to
* write data to disk. The returned status is <code>IStatus.OK</code> if this validator believes
* the given file can be successfully saved. In all other cases the return value is a non-OK
* status. Note that a return value of <code>IStatus.OK</code> does not guarantee that the save
* will succeed.
*
* @param file the file that is to be modified; this file must exist in the workspace
* @return a status indicating whether or not it is reasonable to try writing to the given file;
* <code>IStatus.OK</code> indicates a save should be attempted.
*
* @see IFile#setContents(java.io.InputStream, int, org.eclipse.core.runtime.IProgressMonitor)
* @see IFile#appendContents(java.io.InputStream, int,
* org.eclipse.core.runtime.IProgressMonitor)
*/
public IStatus validateSave(IFile file) {
return validateEdit(new IFile[] { file }, (FileModificationValidationContext)null);
}
/**
* Validates that the given files can be modified. The files must all exist in the workspace.
* The optional context may be supplied if UI-based validation is required. If the context is
* <code>null</code>, the validator must attempt to perform the validation in a headless manner.
* The returned status is <code>IStatus.OK</code> if this validator believes the given file can
* be modified. Other return statuses indicate the reason why the individual files cannot be
* modified.
*
* @param files the files that are to be modified; these files must all exist in the workspace
* @param context the context to aid in UI-based validation or <code>null</code> if the
* validation must be headless
* @return a status object that is OK if things are fine, otherwise a status describing reasons
* why modifying the given files is not reasonable
* @see IWorkspace#validateEdit(IFile[], Object)
*/
public abstract IStatus validateEdit(IFile[] files, FileModificationValidationContext context);
}