1 17 package org.eclipse.emf.mapping.ecore2ecore.provider; 18 19 20 import java.util.ArrayList ; 21 import java.util.Collection ; 22 23 import org.eclipse.emf.common.notify.Adapter; 24 import org.eclipse.emf.common.notify.Notification; 25 import org.eclipse.emf.common.notify.Notifier; 26 27 import org.eclipse.emf.edit.provider.ChangeNotifier; 28 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; 29 import org.eclipse.emf.edit.provider.ComposedAdapterFactory; 30 import org.eclipse.emf.edit.provider.IChangeNotifier; 31 import org.eclipse.emf.edit.provider.IDisposable; 32 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; 33 import org.eclipse.emf.edit.provider.IItemLabelProvider; 34 import org.eclipse.emf.edit.provider.IItemPropertySource; 35 import org.eclipse.emf.edit.provider.INotifyChangedListener; 36 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; 37 import org.eclipse.emf.edit.provider.ITreeItemContentProvider; 38 39 import org.eclipse.emf.mapping.ecore2ecore.util.Ecore2EcoreAdapterFactory; 40 41 42 51 public class Ecore2EcoreItemProviderAdapterFactory extends Ecore2EcoreAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable 52 { 53 59 protected ComposedAdapterFactory parentAdapterFactory; 60 61 67 protected IChangeNotifier changeNotifier = new ChangeNotifier(); 68 69 75 protected Collection supportedTypes = new ArrayList (); 76 77 83 public Ecore2EcoreItemProviderAdapterFactory() 84 { 85 supportedTypes.add(IEditingDomainItemProvider.class); 86 supportedTypes.add(IStructuredItemContentProvider.class); 87 supportedTypes.add(ITreeItemContentProvider.class); 88 supportedTypes.add(IItemLabelProvider.class); 89 supportedTypes.add(IItemPropertySource.class); 90 } 91 92 98 protected Ecore2EcoreMappingRootItemProvider ecore2EcoreMappingRootItemProvider; 99 100 106 public Adapter createEcore2EcoreMappingRootAdapter() 107 { 108 if (ecore2EcoreMappingRootItemProvider == null) 109 { 110 ecore2EcoreMappingRootItemProvider = new Ecore2EcoreMappingRootItemProvider(this); 111 } 112 113 return ecore2EcoreMappingRootItemProvider; 114 } 115 116 122 public ComposeableAdapterFactory getRootAdapterFactory() 123 { 124 return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory(); 125 } 126 127 133 public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) 134 { 135 this.parentAdapterFactory = parentAdapterFactory; 136 } 137 138 143 public boolean isFactoryForType(Object type) 144 { 145 return supportedTypes.contains(type) || super.isFactoryForType(type); 146 } 147 148 154 public Adapter adapt(Notifier notifier, Object type) 155 { 156 return super.adapt(notifier, this); 157 } 158 159 164 public Object adapt(Object object, Object type) 165 { 166 if (isFactoryForType(type)) 167 { 168 Object adapter = super.adapt(object, type); 169 if (!(type instanceof Class ) || (((Class )type).isInstance(adapter))) 170 { 171 return adapter; 172 } 173 } 174 175 return null; 176 } 177 178 184 public void addListener(INotifyChangedListener notifyChangedListener) 185 { 186 changeNotifier.addListener(notifyChangedListener); 187 } 188 189 195 public void removeListener(INotifyChangedListener notifyChangedListener) 196 { 197 changeNotifier.removeListener(notifyChangedListener); 198 } 199 200 206 public void fireNotifyChanged(Notification notification) 207 { 208 changeNotifier.fireNotifyChanged(notification); 209 210 if (parentAdapterFactory != null) 211 { 212 parentAdapterFactory.fireNotifyChanged(notification); 213 } 214 } 215 216 222 public void dispose() 223 { 224 if (ecore2EcoreMappingRootItemProvider != null) ecore2EcoreMappingRootItemProvider.dispose(); 225 } 226 227 } | Popular Tags |