Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java166
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

Back to the top