01: /*******************************************************************************
02: * Copyright (c) 2000, 2007 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.jdt.internal.corext.refactoring.changes;
11:
12: import org.eclipse.core.runtime.CoreException;
13: import org.eclipse.core.runtime.IProgressMonitor;
14: import org.eclipse.core.runtime.SubProgressMonitor;
15:
16: import org.eclipse.core.resources.IFile;
17: import org.eclipse.core.resources.IResource;
18:
19: import org.eclipse.core.filebuffers.FileBuffers;
20: import org.eclipse.core.filebuffers.ITextFileBuffer;
21: import org.eclipse.core.filebuffers.LocationKind;
22:
23: import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages;
24: import org.eclipse.jdt.internal.corext.refactoring.base.JDTChange;
25: import org.eclipse.ltk.core.refactoring.Change;
26:
27: abstract class AbstractDeleteChange extends JDTChange {
28:
29: protected abstract Change doDelete(IProgressMonitor pm)
30: throws CoreException;
31:
32: /* non java-doc
33: * @see IChange#perform(ChangeContext, IProgressMonitor)
34: */
35: public final Change perform(IProgressMonitor pm)
36: throws CoreException {
37: try {
38: pm
39: .beginTask(
40: RefactoringCoreMessages.AbstractDeleteChange_deleting,
41: 1);
42: Change undo = doDelete(pm);
43: return undo;
44: } finally {
45: pm.done();
46: }
47: }
48:
49: protected static void saveFileIfNeeded(IFile file,
50: IProgressMonitor pm) throws CoreException {
51: ITextFileBuffer buffer = FileBuffers.getTextFileBufferManager()
52: .getTextFileBuffer(file.getFullPath(),
53: LocationKind.IFILE);
54: if (buffer != null && buffer.isDirty()
55: && buffer.isStateValidated() && buffer.isSynchronized()) {
56: pm.beginTask("", 2); //$NON-NLS-1$
57: buffer.commit(new SubProgressMonitor(pm, 1), false);
58: file.refreshLocal(IResource.DEPTH_ONE,
59: new SubProgressMonitor(pm, 1));
60: pm.done();
61: } else {
62: pm.beginTask("", 1); //$NON-NLS-1$
63: pm.worked(1);
64: pm.done();
65: }
66: }
67: }
|