00001 00007 package org.best_of_robotics.model.datatypes.provider; 00008 00009 import java.util.ArrayList; 00010 import java.util.Collection; 00011 00012 import org.best_of_robotics.model.datatypes.util.DatatypesAdapterFactory; 00013 00014 import org.eclipse.emf.common.notify.Adapter; 00015 import org.eclipse.emf.common.notify.Notification; 00016 import org.eclipse.emf.common.notify.Notifier; 00017 00018 import org.eclipse.emf.edit.provider.ChangeNotifier; 00019 import org.eclipse.emf.edit.provider.ComposeableAdapterFactory; 00020 import org.eclipse.emf.edit.provider.ComposedAdapterFactory; 00021 import org.eclipse.emf.edit.provider.IChangeNotifier; 00022 import org.eclipse.emf.edit.provider.IDisposable; 00023 import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; 00024 import org.eclipse.emf.edit.provider.IItemLabelProvider; 00025 import org.eclipse.emf.edit.provider.IItemPropertySource; 00026 import org.eclipse.emf.edit.provider.INotifyChangedListener; 00027 import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; 00028 import org.eclipse.emf.edit.provider.ITreeItemContentProvider; 00029 00039 public class DatatypesItemProviderAdapterFactory extends DatatypesAdapterFactory implements ComposeableAdapterFactory, IChangeNotifier, IDisposable { 00046 protected ComposedAdapterFactory parentAdapterFactory; 00047 00054 protected IChangeNotifier changeNotifier = new ChangeNotifier(); 00055 00062 protected Collection<Object> supportedTypes = new ArrayList<Object>(); 00063 00070 public DatatypesItemProviderAdapterFactory() { 00071 supportedTypes.add(IEditingDomainItemProvider.class); 00072 supportedTypes.add(IStructuredItemContentProvider.class); 00073 supportedTypes.add(ITreeItemContentProvider.class); 00074 supportedTypes.add(IItemLabelProvider.class); 00075 supportedTypes.add(IItemPropertySource.class); 00076 } 00077 00084 protected TypesLibraryItemProvider typesLibraryItemProvider; 00085 00092 @Override 00093 public Adapter createTypesLibraryAdapter() { 00094 if (typesLibraryItemProvider == null) { 00095 typesLibraryItemProvider = new TypesLibraryItemProvider(this); 00096 } 00097 00098 return typesLibraryItemProvider; 00099 } 00100 00107 protected SimpleTypeItemProvider simpleTypeItemProvider; 00108 00115 @Override 00116 public Adapter createSimpleTypeAdapter() { 00117 if (simpleTypeItemProvider == null) { 00118 simpleTypeItemProvider = new SimpleTypeItemProvider(this); 00119 } 00120 00121 return simpleTypeItemProvider; 00122 } 00123 00130 protected RosIDLReferenceItemProvider rosIDLReferenceItemProvider; 00131 00138 @Override 00139 public Adapter createRosIDLReferenceAdapter() { 00140 if (rosIDLReferenceItemProvider == null) { 00141 rosIDLReferenceItemProvider = new RosIDLReferenceItemProvider(this); 00142 } 00143 00144 return rosIDLReferenceItemProvider; 00145 } 00146 00153 protected VectorTypeItemProvider vectorTypeItemProvider; 00154 00161 @Override 00162 public Adapter createVectorTypeAdapter() { 00163 if (vectorTypeItemProvider == null) { 00164 vectorTypeItemProvider = new VectorTypeItemProvider(this); 00165 } 00166 00167 return vectorTypeItemProvider; 00168 } 00169 00176 protected CustomTypeItemProvider customTypeItemProvider; 00177 00184 @Override 00185 public Adapter createCustomTypeAdapter() { 00186 if (customTypeItemProvider == null) { 00187 customTypeItemProvider = new CustomTypeItemProvider(this); 00188 } 00189 00190 return customTypeItemProvider; 00191 } 00192 00199 protected FieldItemProvider fieldItemProvider; 00200 00207 @Override 00208 public Adapter createFieldAdapter() { 00209 if (fieldItemProvider == null) { 00210 fieldItemProvider = new FieldItemProvider(this); 00211 } 00212 00213 return fieldItemProvider; 00214 } 00215 00222 public ComposeableAdapterFactory getRootAdapterFactory() { 00223 return parentAdapterFactory == null ? this : parentAdapterFactory.getRootAdapterFactory(); 00224 } 00225 00232 public void setParentAdapterFactory(ComposedAdapterFactory parentAdapterFactory) { 00233 this.parentAdapterFactory = parentAdapterFactory; 00234 } 00235 00241 @Override 00242 public boolean isFactoryForType(Object type) { 00243 return supportedTypes.contains(type) || super.isFactoryForType(type); 00244 } 00245 00252 @Override 00253 public Adapter adapt(Notifier notifier, Object type) { 00254 return super.adapt(notifier, this); 00255 } 00256 00262 @Override 00263 public Object adapt(Object object, Object type) { 00264 if (isFactoryForType(type)) { 00265 Object adapter = super.adapt(object, type); 00266 if (!(type instanceof Class<?>) || (((Class<?>)type).isInstance(adapter))) { 00267 return adapter; 00268 } 00269 } 00270 00271 return null; 00272 } 00273 00280 public void addListener(INotifyChangedListener notifyChangedListener) { 00281 changeNotifier.addListener(notifyChangedListener); 00282 } 00283 00290 public void removeListener(INotifyChangedListener notifyChangedListener) { 00291 changeNotifier.removeListener(notifyChangedListener); 00292 } 00293 00300 public void fireNotifyChanged(Notification notification) { 00301 changeNotifier.fireNotifyChanged(notification); 00302 00303 if (parentAdapterFactory != null) { 00304 parentAdapterFactory.fireNotifyChanged(notification); 00305 } 00306 } 00307 00314 public void dispose() { 00315 if (typesLibraryItemProvider != null) typesLibraryItemProvider.dispose(); 00316 if (simpleTypeItemProvider != null) simpleTypeItemProvider.dispose(); 00317 if (rosIDLReferenceItemProvider != null) rosIDLReferenceItemProvider.dispose(); 00318 if (vectorTypeItemProvider != null) vectorTypeItemProvider.dispose(); 00319 if (customTypeItemProvider != null) customTypeItemProvider.dispose(); 00320 if (fieldItemProvider != null) fieldItemProvider.dispose(); 00321 } 00322 00323 }