diff options
Diffstat (limited to 'jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java')
-rw-r--r-- | jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java new file mode 100644 index 0000000000..d6ca598339 --- /dev/null +++ b/jpa/plugins/org.eclipse.jpt.ui/src/org/eclipse/jpt/ui/internal/java/structure/JpaCoreJavaItemProviderAdapterFactory.java @@ -0,0 +1,166 @@ +package org.eclipse.jpt.ui.internal.java.structure; + +import java.util.ArrayList; +import java.util.Collection; +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.Notification; +import org.eclipse.emf.common.notify.Notifier; +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.IDisposable; +import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; +import org.eclipse.emf.edit.provider.IItemLabelProvider; +import org.eclipse.emf.edit.provider.INotifyChangedListener; +import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; +import org.eclipse.emf.edit.provider.ITreeItemContentProvider; +import org.eclipse.jpt.core.internal.content.java.util.JpaJavaAdapterFactory; + +/** + * This is the factory that is used to provide the interfaces needed to support Viewers. + * The adapters generated by this factory convert EMF adapter notifications into calls to {@link #fireNotifyChanged fireNotifyChanged}. + * The adapters also support Eclipse property sheets. + * Note that most of the adapters are shared among multiple instances. + */ +public class JpaCoreJavaItemProviderAdapterFactory + extends JpaJavaAdapterFactory + implements ComposeableAdapterFactory, + IChangeNotifier, + IDisposable +{ + /** + * 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(); + + /** + * This keeps track of all the supported types checked by {@link #isFactoryForType isFactoryForType}. + */ + protected Collection supportedTypes = new ArrayList(); + + + public JpaCoreJavaItemProviderAdapterFactory() { + supportedTypes.add(IEditingDomainItemProvider.class); + supportedTypes.add(IStructuredItemContentProvider.class); + supportedTypes.add(ITreeItemContentProvider.class); + supportedTypes.add(IItemLabelProvider.class); + } + + + protected JavaCompilationUnitItemProvider javaCompilationUnitItemProvider; + + public Adapter createJpaCompilationUnitAdapter() { + if (javaCompilationUnitItemProvider == null) { + javaCompilationUnitItemProvider = new JavaCompilationUnitItemProvider(this); + } + + return javaCompilationUnitItemProvider; + } + + protected JavaPersistentTypeItemProvider javaPersistentTypeItemProvider; + + public Adapter createJavaPersistentTypeAdapter() { + if (javaPersistentTypeItemProvider == null) { + javaPersistentTypeItemProvider = new JavaPersistentTypeItemProvider(this); + } + + return javaPersistentTypeItemProvider; + } + + protected JavaPersistentAttributeItemProvider javaPersistentAttributeItemProvider; + + public Adapter createJavaPersistentAttributeAdapter() { + if (javaPersistentAttributeItemProvider == null) { + javaPersistentAttributeItemProvider = new JavaPersistentAttributeItemProvider( + this); + } + + return javaPersistentAttributeItemProvider; + } + + /** + * This returns the root adapter factory that contains this factory. + */ + public ComposeableAdapterFactory getRootAdapterFactory() { + return parentAdapterFactory == null ? + this : + parentAdapterFactory.getRootAdapterFactory(); + } + + /** + * This sets the composed adapter factory that contains this factory. + */ + public void setParentAdapterFactory( + ComposedAdapterFactory parentAdapterFactory) { + this.parentAdapterFactory = parentAdapterFactory; + } + + public boolean isFactoryForType(Object type) { + return supportedTypes.contains(type) || super.isFactoryForType(type); + } + + /** + * This implementation substitutes the factory itself as the key for the adapter. + */ + public Adapter adapt(Notifier notifier, Object type) { + return super.adapt(notifier, this); + } + + public Object adapt(Object object, Object type) { + if (isFactoryForType(type)) { + Object adapter = super.adapt(object, type); + if (!(type instanceof Class) + || (((Class) type).isInstance(adapter))) { + return adapter; + } + } + + return null; + } + + /** + * This adds a listener. + */ + public void addListener(INotifyChangedListener notifyChangedListener) { + changeNotifier.addListener(notifyChangedListener); + } + + /** + * This removes a listener. + */ + public void removeListener(INotifyChangedListener notifyChangedListener) { + changeNotifier.removeListener(notifyChangedListener); + } + + /** + * This delegates to {@link #changeNotifier} and to {@link #parentAdapterFactory}. + */ + public void fireNotifyChanged(Notification notification) { + changeNotifier.fireNotifyChanged(notification); + + if (parentAdapterFactory != null) { + parentAdapterFactory.fireNotifyChanged(notification); + } + } + + /** + * This disposes all of the item providers created by this factory. + */ + public void dispose() { + if (javaCompilationUnitItemProvider != null) { + javaCompilationUnitItemProvider.dispose(); + } + if (javaPersistentTypeItemProvider != null) { + javaPersistentTypeItemProvider.dispose(); + } + if (javaPersistentAttributeItemProvider != null) { + javaPersistentAttributeItemProvider.dispose(); + } + } +}
\ No newline at end of file |