blob: e2fcfccac4e479222e185f87b14c82c4cf1fadbc [file] [log] [blame]
/*******************************************************************************
* 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.EventObject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jst.jsf.common.internal.resource.IClasspathLifecycleListener.ClasspathLifecycleEvent;
/**
* Listener can register for events ona particular LifecycleListener
*
* @author cbateman
*
*/
public interface IClasspathLifecycleListener extends
ILifecycleListener<ClasspathLifecycleEvent>
{
/**
* Listener accepts the classpath lifecycle event
*
* @param event
*/
EventResult acceptEvent(ClasspathLifecycleEvent event);
/**
* An event indicating a change on the classpath
*
*/
public static class ClasspathLifecycleEvent extends EventObject
{
/**
* Indicates the type of change.
*
*/
public enum Type
{
/**
* The affected element was added to the classpath
*/
ADDED,
/**
* The affected element was removed from the classpath
*/
REMOVED,
/**
* A classpath object has been deleted from the workspace. The
* affected element is the owning IJavaProject. The actual deleted
* object can be obtained by query getAffectedResource. Note that
* this is a post change event, so the underlying resources most
* likely don't exist any more.
*
*/
REMOVED_DELTA
}
private final IJavaElement _affectedElement;
private final IResource _affectedResource;
private final Type _type;
/**
* @param source
* @param affectedElement
* @param type
*/
public ClasspathLifecycleEvent(
final ClasspathEntryLifecycleListener source,
final IJavaElement affectedElement, final Type type)
{
this(source, affectedElement, type, null);
}
/**
* @param source
* @param affectedElement
* @param type
* @param affectedResource
* @throws IllegalArgumentException
* if affectedResource is non-null but type doesn't match
* one that has affectedResources (see
* isAffectResourceEvent)
*/
public ClasspathLifecycleEvent(
final ClasspathEntryLifecycleListener source,
final IJavaElement affectedElement, final Type type,
final IResource affectedResource)
{
super(source);
_affectedElement = affectedElement;
_type = type;
_affectedResource = affectedResource;
if (affectedResource != null && !isAffectResourceEvent(type))
{
throw new IllegalArgumentException();
}
}
@Override
public ClasspathEntryLifecycleListener getSource()
{
return (ClasspathEntryLifecycleListener) super.getSource();
}
/**
* @return the type of event.
*/
public Type getType()
{
return _type;
}
/**
* @return the affected resource or null if none.
*/
public IResource getAffectedResource()
{
return _affectedResource;
}
/**
*
*/
private static final long serialVersionUID = -2510218872082581659L;
/**
* @return the element that changed.
*/
public IJavaElement getAffectedElement()
{
return _affectedElement;
}
/**
* @param type
* @return true if the type instance matches one for which
* affectedResource's are valid in the change event.
*/
public boolean isAffectResourceEvent(final Type type)
{
return type == Type.REMOVED_DELTA;
}
@Override
public String toString()
{
return String.format(
"ClasspathLifecycleEvent: IJavaElement=%s, Res = %s, Event=%s", //$NON-NLS-1$
getAffectedElement(), getAffectedResource(), getType());
}
}
}