blob: becc78bfe025c11784a4be92f9eabf3ff42642b0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2013 Tasktop Technologies 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.reviews.core.spi.remote.emf;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
/**
* A concrete implementation of {@link IRemoteEmfObserver}, providing a number of convenience methods for managing
* consumer interaction with observers.
*
* @author Miles Parker
*/
public class RemoteEmfObserver<EParentObjectType extends EObject, EObjectType, LocalKeyType, ObjectCurrentType>
implements IRemoteEmfObserver<EParentObjectType, EObjectType, LocalKeyType, ObjectCurrentType> {
RemoteEmfConsumer<EParentObjectType, EObjectType, LocalKeyType, ?, ?, ObjectCurrentType> consumer;
/**
* Constructs an observer that listens to the supplied consumer.
*
* @param consumer
*/
public RemoteEmfObserver(
RemoteEmfConsumer<EParentObjectType, EObjectType, LocalKeyType, ?, ?, ObjectCurrentType> consumer) {
setConsumer(consumer);
}
/**
* Constructs an observer.
*/
public RemoteEmfObserver() {
}
public void created(EParentObjectType parentObject, EObjectType modelObject) {
}
public void updating(EParentObjectType parent, EObjectType object) {
}
public void updated(EParentObjectType parentObject, EObjectType modelObject, boolean modified) {
}
public void sent(EParentObjectType parentObject, EObjectType modelObject) {
}
public void sending(EParentObjectType parentObject, EObjectType modelObject) {
}
public void failed(EParentObjectType parentObject, EObjectType modelObject, IStatus status) {
}
/**
* Returns the consumer the observer is listening to. This value may be null if the observer was added directly to
* the consumer.
*/
public RemoteEmfConsumer<EParentObjectType, EObjectType, LocalKeyType, ?, ?, ObjectCurrentType> getConsumer() {
return consumer;
}
/**
* Sets the consumer for the given observer, adding itself to the supplied consumer and removing it from an existing
* consumer if any. This supports reuse of an observer when the underlying model object changes.
*
* @param consumer
*/
public void setConsumer(
RemoteEmfConsumer<EParentObjectType, EObjectType, LocalKeyType, ?, ?, ObjectCurrentType> consumer) {
if (this.consumer != consumer) {
consumer.addObserver(this);
}
}
/**
* Non-API. Intended for use by consumer only.
*/
void internalSetConsumer(
RemoteEmfConsumer<EParentObjectType, EObjectType, LocalKeyType, ?, ?, ObjectCurrentType> consumer) {
this.consumer = consumer;
}
public void dispose() {
if (consumer != null) {
consumer.removeObserver(this);
}
}
}