KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > ltk > internal > core > refactoring > SaveListener


1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.ltk.internal.core.refactoring;
12
13 import org.eclipse.core.runtime.CoreException;
14
15 import org.eclipse.core.resources.IFile;
16 import org.eclipse.core.resources.IResource;
17 import org.eclipse.core.resources.IResourceChangeEvent;
18 import org.eclipse.core.resources.IResourceChangeListener;
19 import org.eclipse.core.resources.IResourceDelta;
20 import org.eclipse.core.resources.IResourceDeltaVisitor;
21 import org.eclipse.core.resources.ResourcesPlugin;
22
23 import org.eclipse.ltk.core.refactoring.Change;
24 import org.eclipse.ltk.core.refactoring.IUndoManager;
25 import org.eclipse.ltk.core.refactoring.IUndoManagerListener;
26 import org.eclipse.ltk.core.refactoring.RefactoringCore;
27
28 public class SaveListener implements IResourceChangeListener, IUndoManagerListener {
29     
30     private class DeltaVisitor implements IResourceDeltaVisitor {
31         public boolean visit(IResourceDelta delta) {
32             IResource resource= delta.getResource();
33             if (resource.getType() == IResource.FILE && delta.getKind() == IResourceDelta.CHANGED &&
34                     (delta.getFlags() & IResourceDelta.CONTENT) != 0) {
35                 IFile file= (IFile)resource;
36                 ContentStamps.increment(file);
37             }
38             return true;
39         }
40     }
41     
42     private DeltaVisitor fVisitor= new DeltaVisitor();
43     private int fInChangeExecution;
44     
45     private static final SaveListener INSTANCE= new SaveListener();
46     
47     public static SaveListener getInstance() {
48         return INSTANCE;
49     }
50     
51     public void resourceChanged(IResourceChangeEvent event) {
52         try {
53             IResourceDelta delta= event.getDelta();
54             if (delta != null && fInChangeExecution == 0)
55                 delta.accept(fVisitor);
56         } catch (CoreException e) {
57             RefactoringCorePlugin.log(e);
58         }
59     }
60     
61     public void undoStackChanged(IUndoManager manager) {
62     }
63     public void redoStackChanged(IUndoManager manager) {
64     }
65     public void aboutToPerformChange(IUndoManager manager, Change change) {
66         fInChangeExecution++;
67     }
68     public void changePerformed(IUndoManager manager, Change change) {
69         fInChangeExecution--;
70     }
71     
72     public void startup() {
73         ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
74         RefactoringCore.getUndoManager().addListener(this);
75     }
76     
77     public void shutdown() {
78         ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
79         RefactoringCore.getUndoManager().removeListener(this);
80     }
81 }
82
Popular Tags