blob: e2e7eeb85649f0c998be8d36974ebbfe980a3462 [file] [log] [blame]
// GraphTimeProviderAdapterFactory.java
package org.eclipse.stem.core.graph.provider;
/*******************************************************************************
* Copyright (c) 2008 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
*******************************************************************************/
import org.eclipse.emf.common.notify.Adapter;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.edit.provider.ChangeNotifier;
import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.IChangeNotifier;
import org.eclipse.emf.edit.provider.INotifyChangedListener;
import org.eclipse.stem.adapters.time.TimeProvider;
import org.eclipse.stem.adapters.time.TimeProviderAdapter;
import org.eclipse.stem.adapters.time.TimeProviderAdapterFactory;
import org.eclipse.stem.core.graph.DynamicLabel;
import org.eclipse.stem.core.graph.Graph;
import org.eclipse.stem.core.graph.LabelValue;
import org.eclipse.stem.core.graph.util.GraphAdapterFactory;
import org.eclipse.stem.core.model.STEMTime;
/**
* This class is an {@link TimeProviderAdapterFactory}.
*/
public class GraphTimeProviderAdapterFactory extends GraphAdapterFactory
implements TimeProviderAdapterFactory {
/**
* This keeps track of the root adapter factory that delegates to this
* adapter factory.
*/
protected ComposedAdapterFactory parentAdapterFactory;
/**
* This is used to implement {@link
* org.eclipse.emf.edit.provider.IChangeNotifier}.
*/
protected IChangeNotifier changeNotifier = new ChangeNotifier();
/**
* Default Constructor
*/
public GraphTimeProviderAdapterFactory() {
super();
TimeProviderAdapterFactory.INSTANCE.addAdapterFactory(this);
}
/**
* @see org.eclipse.stem.core.graph.util.GraphAdapterFactory#
* createGraphAdapter()
*/
@Override
public Adapter createGraphAdapter() {
return new GraphTimeProvider();
}
/**
* @see
* org.eclipse.emf.edit.provider.IChangeNotifier#addListener(org.eclipse
* .emf.edit.provider.INotifyChangedListener)
*/
public void addListener(final INotifyChangedListener notifyChangedListener) {
changeNotifier.addListener(notifyChangedListener);
}
/**
* @see
* org.eclipse.emf.edit.provider.IChangeNotifier#removeListener(org.eclipse
* .emf.edit.provider.INotifyChangedListener)
*/
public void removeListener(
final INotifyChangedListener notifyChangedListener) {
changeNotifier.removeListener(notifyChangedListener);
}
/**
* @see org.eclipse.emf.edit.provider.IChangeNotifier#fireNotifyChanged(org.
* eclipse.emf.common.notify.Notification)
*/
public void fireNotifyChanged(final Notification notification) {
changeNotifier.fireNotifyChanged(notification);
if (parentAdapterFactory != null) {
parentAdapterFactory.fireNotifyChanged(notification);
}
}
/**
* @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#
* getRootAdapterFactory()
*/
public ComposeableAdapterFactory getRootAdapterFactory() {
return parentAdapterFactory == null ? this : parentAdapterFactory
.getRootAdapterFactory();
}
/**
* @see org.eclipse.emf.edit.provider.ComposeableAdapterFactory#
* setParentAdapterFactory
* (org.eclipse.emf.edit.provider.ComposedAdapterFactory)
*/
public void setParentAdapterFactory(
final ComposedAdapterFactory parentAdapterFactory) {
this.parentAdapterFactory = parentAdapterFactory;
}
/**
* @see
* org.eclipse.stem.diseasemodels.standard.util.StandardAdapterFactory
* #isFactoryForType(java.lang.Object)
*/
@Override
public boolean isFactoryForType(final Object type) {
return type == TimeProvider.class || super.isFactoryForType(type);
} // isFactoryForType
/**
* @see org.eclipse.emf.edit.provider.IDisposable#dispose()
*/
public void dispose() {
// Nothing
}
/**
* This class is a {@link TimeProvider} for {@link Graph} instances. It
* provides a time value for the graph. The value is the time that the
* {@link LabelValue}s of {@link DynamicLabel} were last updated.
*/
private static class GraphTimeProvider extends TimeProviderAdapter
implements TimeProvider {
/**
* @see org.eclipse.stem.adapters.time.TimeProviderAdapter#getTime()
*/
@Override
public STEMTime getTime() {
Graph graph = (Graph)getTarget();
return graph.getTime();
}
} // GraphTimeProvider
} // GraphTimeProviderAdapterFactory