Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java388
1 files changed, 0 insertions, 388 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java b/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
deleted file mode 100644
index d37c1bda0..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.common/src/org/eclipse/jst/jsf/common/internal/resource/LifecycleListener.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2001, 2008 Oracle 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:
- * Oracle Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.jst.jsf.common.internal.resource;
-
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.IResourceChangeEvent;
-import org.eclipse.core.resources.IResourceChangeListener;
-import org.eclipse.core.resources.IResourceDelta;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.jst.jsf.common.internal.ITestTracker;
-import org.eclipse.jst.jsf.common.internal.ITestTracker.Event;
-import org.eclipse.jst.jsf.common.internal.resource.IResourceLifecycleListener.EventResult;
-import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.EventType;
-import org.eclipse.jst.jsf.common.internal.resource.ResourceLifecycleEvent.ReasonType;
-
-/**
- * Listens to resource changes and fires lifecycle events
- *
- * @author cbateman
- *
- */
-public class LifecycleListener extends ImmutableLifecycleListener implements
- IResourceChangeListener
-{
- private final static boolean ENABLE_TEST_TRACKING = false;
- private static long _seqId;
-
- private final CopyOnWriteArrayList<IResource> _resources;
- final CopyOnWriteArrayList<IResourceLifecycleListener> _listeners;
- private AtomicBoolean _isDisposed = new AtomicBoolean(
- false);
- private ITestTracker _testTracker; // ==
- // null;
- // initialized
- // by
- // setter
- // injection
-
- /**
- * Initialize an inactive lifecycle listener. A workspace listener will not
- * be installed by this constructor. The object created using this
- * constructor will not fire any events until addResource is called at least
- * once to add a target resource
- */
- public LifecycleListener()
- {
- _resources = new CopyOnWriteArrayList<IResource>();
- _listeners = new CopyOnWriteArrayList<IResourceLifecycleListener>();
- }
-
- /**
- * Create a new lifecycle listener for the res
- *
- * @param res
- */
- public LifecycleListener(final IResource res)
- {
- this();
- _resources.add(res);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
- }
-
- /**
- * @param resources
- */
- public LifecycleListener(final List<IResource> resources)
- {
- this();
- _resources.addAll(resources);
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
- }
-
- /**
- * @param testTracker
- */
- public final void setTestTracker(final ITestTracker testTracker)
- {
- _testTracker = testTracker;
- }
-
- /**
- * Adds listener to the list of objects registered to receive lifecycle
- * events for this resource. Only adds the listener if it is not already in
- * the list.
- *
- * Method is thread-safe and may block the caller
- *
- * Throws {@link IllegalStateException} if isDisposed() == true
- *
- * @param listener
- */
- public void addListener(final IResourceLifecycleListener listener)
- {
- if (isDisposed())
- {
- throw new IllegalStateException();
- }
- _listeners.addIfAbsent(listener);
- }
-
- /**
- * Removes listener from the list of registered listeners
- *
- * Method is thread-safe and may block the caller
- *
- * Throws {@link IllegalStateException} if isDisposed() == true
- *
- * @param listener
- */
- public void removeListener(final IResourceLifecycleListener listener)
- {
- if (isDisposed())
- {
- throw new IllegalStateException();
- }
- _listeners.remove(listener);
- }
-
- /**
- * @param res
- */
- public void addResource(final IResource res)
- {
- synchronized (_resources)
- {
- // don't add any resources if we've disposed before acquiring the
- // lock
- if (isDisposed())
- {
- return;
- }
-
- final int preSize = _resources.size();
- if (!_resources.contains(res))
- {
- _resources.add(res);
- }
-
- // if the size of the array was 0
- // and is now greater, make sure the listener is added
- if (preSize == 0 && _resources.size() > 0)
- {
- ResourcesPlugin.getWorkspace().addResourceChangeListener(this);
- }
- }
- }
-
- /**
- * If there are no longer resources being targeted, the resource change
- * listener will be removed.
- *
- * @param res
- */
- public void removeResource(final IResource res)
- {
- synchronized (_resources)
- {
- // don't bother with this stuff if we're disposed.
- if (isDisposed())
- {
- return;
- }
- _resources.remove(res);
-
- // if there are no longer target resources,
- // remove the workspace listener
- if (_resources.size() == 0)
- {
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(
- this);
- }
- }
- }
-
- /**
- * Release the resource change listener
- */
- public void dispose()
- {
- if (_isDisposed.compareAndSet(false, true))
- {
- // ensure that add/removeResource don't cause races to add or
- // remove the resource listener
- synchronized (_resources)
- {
- // remove first to minimize the chance that the listener will
- // be triggered during the remainder of dispose
- ResourcesPlugin.getWorkspace().removeResourceChangeListener(
- this);
- _resources.clear();
- }
- }
- }
-
- /**
- * @return true if the listener has been disposed
- */
- public boolean isDisposed()
- {
- return _isDisposed.get();
- }
-
- public void resourceChanged(final IResourceChangeEvent event)
- {
- final long seqId = _seqId++;
-
- if (ENABLE_TEST_TRACKING && _testTracker != null)
- {
- _testTracker.fireEvent(Event.START_TRACKING, seqId,
- "trackMethod_resourceChanged"); //$NON-NLS-1$
- }
-
- assert (!isDisposed());
-
- switch (event.getType())
- {
- case IResourceChangeEvent.PRE_CLOSE:
- {
- final IProject proj = (IProject) event.getResource();
-
- // must use iterator to ensure copy on write behaviour
- for (final IResource res : _resources)
- {
- if (proj == res || proj == res.getProject())
- {
- fireLifecycleEvent(new ResourceLifecycleEvent(res,
- EventType.RESOURCE_INACCESSIBLE,
- ReasonType.RESOURCE_PROJECT_CLOSED));
- }
- }
- }
- break;
-
- case IResourceChangeEvent.PRE_DELETE:
- {
- final IProject proj = (IProject) event.getResource();
-
- // must use iterator to ensure copy on write behaviour
- for (final IResource res : _resources)
- {
- // if the resource being tracked is the resource being
- // deleted,
- // then fire a resource delete event
- if (proj == res)
- {
- fireLifecycleEvent(new ResourceLifecycleEvent(res,
- EventType.RESOURCE_INACCESSIBLE,
- ReasonType.RESOURCE_DELETED));
- }
- // if the resource being tracked is a resource in the
- // project being
- // deleted, then fire a project deleted event
- else if (proj == res.getProject())
- {
- fireLifecycleEvent(new ResourceLifecycleEvent(res,
- EventType.RESOURCE_INACCESSIBLE,
- ReasonType.RESOURCE_PROJECT_DELETED));
- }
- }
- }
- break;
-
- case IResourceChangeEvent.POST_CHANGE:
- {
- for (final IResource res : _resources)
- {
- IResourceDelta delta = event.getDelta();
-
- // long seqId2 = _seqId++;
- // if (ENABLE_TEST_TRACKING && _testTracker != null)
- // {
- // _testTracker.fireEvent(Event.START_TRACKING, seqId2,
- // "testFindMember");
- // }
- // only care about post change events to resources
- // that we are tracking
- delta = delta.findMember(res.getFullPath());
-
- if (delta != null)
- {
- visit(delta);
- }
-
- // if (ENABLE_TEST_TRACKING && _testTracker != null)
- // {
- // _testTracker.fireEvent(Event.STOP_TRACKING, seqId2,
- // "testFindMember");
- // }
- }
- }
- break;
-
- default:
- // do nothing
- // we only handle these three
- }
-
- if (ENABLE_TEST_TRACKING && _testTracker != null)
- {
- _testTracker.fireEvent(Event.STOP_TRACKING, seqId,
- "trackMethod_resourceChanged"); //$NON-NLS-1$
- }
- }
-
- private void fireLifecycleEvent(final ResourceLifecycleEvent event)
- {
- boolean disposeAfter = false;
-
- // NOTE: must use iterator through _listeners so that
- // CopyOnWriteArrayList protects us from concurrent modification
- for (final IResourceLifecycleListener listener : _listeners)
- {
- final EventResult result = listener.acceptEvent(event);
- disposeAfter |= result.getDisposeAfterEvent();
- }
-
- if (disposeAfter)
- {
- dispose();
- }
- }
-
- private void visit(final IResourceDelta delta)
- {
- assert (!isDisposed());
-
- final IResource res = delta.getResource();
-
- // the wkspace root is a special case since even though
- // it is registered as the target resource, we are interested
- // in new projects created in the root
- if (res.getType() == IResource.ROOT)
- {
- handleWorkspaceRoot(delta);
- }
-
- switch (delta.getKind())
- {
- case IResourceDelta.CHANGED:
- {
- // the contents of the file have changed
- if ((delta.getFlags() & IResourceDelta.CONTENT) != 0)
- {
- fireLifecycleEvent(new ResourceLifecycleEvent(res,
- EventType.RESOURCE_CHANGED,
- ReasonType.RESOURCE_CHANGED_CONTENTS));
- }
- }
- break;
- case IResourceDelta.REMOVED:
- {
- fireLifecycleEvent(new ResourceLifecycleEvent(res,
- EventType.RESOURCE_INACCESSIBLE,
- ReasonType.RESOURCE_DELETED));
- }
- break;
- }
- }
-
- private void handleWorkspaceRoot(final IResourceDelta delta)
- {
- for (final IResourceDelta childDelta : delta
- .getAffectedChildren(IResourceDelta.ADDED))
- {
- final IResource res = childDelta.getResource();
- if ((childDelta.getFlags() & IResourceDelta.OPEN) != 0 &&
- // project was just opened
- res.getType() == IResource.PROJECT)
- {
- fireLifecycleEvent(new ResourceLifecycleEvent(res,
- EventType.RESOURCE_ADDED, ReasonType.PROJECT_OPENED));
- }
- }
- }
-}

Back to the top