blob: fe66ece3121a33afc451c03ce8d88fe04d944b48 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 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.e4.core.services.context;
/**
* An event describing a change to an {@link IEclipseContext}. The following types of events are
* currently defined:
* <ul>
* <li>An event indicating that the listener has just been registered with a context.</li>
* <li>An after-the-fact report that a context value has been changed (either a new value or a
* change to an existing value.</li>
* <li>An after-the-fact report that a context value has been removed.</li>
* <li>A report that a context is about to be disposed.</li>
* </ul>
* <p>
* In order to handle additional event types that may be introduced in future releases, clients
* should not write code that presumes the set of event types is closed.
* </p>
*
* @see IRunAndTrack
*/
public final class ContextChangeEvent {
/**
* A change event type (value "0"), indicating that the listener receiving this event has just
* been registered with a context.
*
* @see IEclipseContext#runAndTrack(IRunAndTrack, Object[])
*/
public static final int INITIAL = 0;
/**
* A change event type (value "1"), indicating that a context value has been added.
*/
public static final int ADDED = 1;
/**
* A change event type (value "2"), indicating that a context value has been removed.
*/
public static final int REMOVED = 2;
/**
* A change event type (value "3") indicating that the context is being disposed. The context is
* still valid at the time of this event.
*/
public static final int DISPOSE = 3;
/**
* A change event type (value "4"), indicating that a context has been un-injected from the
* object.
*/
public static final int UNINJECTED = 4;
/**
* A change event type (value "5"), indicating that a context needs to process scheduled
* updates.
*/
public static final int UPDATE = 5;
private Object[] args;
private IEclipseContext context;
private int eventType;
private String key;
private Object oldValue;
/**
* Creates a new context event.
*
* @param context
* @param eventType
* @param args
* @param name
*/
ContextChangeEvent(IEclipseContext context, int eventType, Object[] args, String name,
Object oldValue) {
this.context = context;
this.key = name;
this.eventType = eventType;
this.args = args;
this.oldValue = oldValue;
}
/**
* Returns the arguments that were supplied when the listener was registered.
*
* @see IEclipseContext#runAndTrack(IRunAndTrack, Object[])
* @return the arguments that were supplied when the listener was registered.
*/
public Object[] getArguments() {
return args;
}
/**
* Returns the context where the change occurred.
*
* @return the context where the change occurred
*/
public IEclipseContext getContext() {
return context;
}
/**
* Returns the type of content change that occurred.
*
* @return the type of content change that occurred.
*/
public int getEventType() {
return eventType;
}
/**
* Returns the name of the context value that changed, or <code>null</code> if not applicable if
* this event type.
*
* @return The name of the changed context value, or <code>null</code>
*/
public String getName() {
return key;
}
public Object getOldValue() {
return oldValue;
}
public int hashCode() {
final int prime = 31;
int result = 1;
// if ((eventType == DISPOSE) || (eventType == UNINJECTED))
// result = prime * result + ((context == null) ? 0 : context.hashCode());
result = prime * result + eventType;
result = prime * result + ((key == null) ? 0 : key.hashCode());
return result;
}
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ContextChangeEvent other = (ContextChangeEvent) obj;
// if ((eventType == DISPOSE) || (eventType == UNINJECTED)) {
// if (context == null) {
// if (other.context != null)
// return false;
// } else if (!context.equals(other.context))
// return false;
// }
if (eventType != other.eventType)
return false;
if (key == null) {
if (other.key != null)
return false;
} else if (!key.equals(other.key))
return false;
return true;
}
}