| /******************************************************************************* |
| * 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; |
| } |
| |
| } |