| //------------------------------------------------------------------------------ |
| // Copyright (c) 2005, 2006 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 implementation |
| //------------------------------------------------------------------------------ |
| package org.eclipse.epf.library.edit.category; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.Collections; |
| import java.util.List; |
| |
| import org.eclipse.emf.common.command.Command; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.common.notify.Notification; |
| import org.eclipse.emf.common.notify.Notifier; |
| import org.eclipse.emf.edit.command.CommandParameter; |
| import org.eclipse.emf.edit.command.CopyCommand; |
| import org.eclipse.emf.edit.domain.EditingDomain; |
| import org.eclipse.emf.edit.provider.IEditingDomainItemProvider; |
| import org.eclipse.emf.edit.provider.IItemLabelProvider; |
| import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; |
| import org.eclipse.emf.edit.provider.IItemPropertySource; |
| import org.eclipse.emf.edit.provider.IStructuredItemContentProvider; |
| import org.eclipse.emf.edit.provider.ITreeItemContentProvider; |
| import org.eclipse.emf.edit.provider.ItemProviderAdapter; |
| import org.eclipse.emf.edit.provider.ViewerNotification; |
| import org.eclipse.epf.library.edit.TngAdapterFactory; |
| |
| import com.ibm.uma.MethodElement; |
| import com.ibm.uma.UmaPackage; |
| |
| /** |
| * @author Phong Nguyen Le |
| * @since 1.0 |
| */ |
| public class ObjectLinkItemProvider extends ItemProviderAdapter implements |
| IEditingDomainItemProvider, IStructuredItemContentProvider, |
| ITreeItemContentProvider, IItemLabelProvider, IItemPropertySource { |
| |
| private Object parent; |
| |
| private Object linkedObject; |
| |
| private List children; |
| |
| /** |
| * @param adapterFactory |
| */ |
| public ObjectLinkItemProvider(AdapterFactory adapterFactory, Object parent, |
| Notifier target) { |
| super(adapterFactory); |
| this.parent = parent; |
| linkedObject = target; |
| target.eAdapters().add(this); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#setTarget(org.eclipse.emf.common.notify.Notifier) |
| */ |
| public void setTarget(Notifier target) { |
| super.setTarget(target); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getParent(java.lang.Object) |
| */ |
| public Object getParent(Object object) { |
| return parent; |
| } |
| |
| public Object getLinkedObject() { |
| return linkedObject; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getText(java.lang.Object) |
| */ |
| public String getText(Object object) { |
| ItemProviderAdapter adapter = getLinkedObjectItemProvider(); |
| // System.out.println("ObjectLinkItemProvider.getText(): adapter = " + |
| // adapter); |
| return adapter == null ? object.toString() : adapter |
| .getText(linkedObject); |
| } |
| |
| private ItemProviderAdapter getLinkedObjectItemProvider() { |
| // System.out.println("ObjectLinkItemProvider.getTargetItemProvider(): |
| // target = " + target); |
| return (ItemProviderAdapter) TngAdapterFactory.INSTANCE |
| .getNavigatorView_ComposedAdapterFactory().adapt(linkedObject, |
| ITreeItemContentProvider.class); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getImage(java.lang.Object) |
| */ |
| public Object getImage(Object object) { |
| ItemProviderAdapter adapter = getLinkedObjectItemProvider(); |
| return adapter == null ? null : adapter.getImage(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.common.notify.impl.AdapterImpl#notifyChanged(org.eclipse.emf.common.notify.Notification) |
| */ |
| public void notifyChanged(Notification msg) { |
| switch (msg.getFeatureID(MethodElement.class)) { |
| case UmaPackage.METHOD_ELEMENT__NAME: |
| fireNotifyChanged(new ViewerNotification(msg, this, false, true)); |
| return; |
| } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getPropertyDescriptors(java.lang.Object) |
| */ |
| public List getPropertyDescriptors(Object object) { |
| List descriptors = getLinkedObjectItemProvider() |
| .getPropertyDescriptors(linkedObject); |
| int size = descriptors.size(); |
| List delegateDescriptors = new ArrayList(size); |
| for (int i = 0; i < size; i++) { |
| delegateDescriptors.add(new DelegateItemPropertyDescriptor( |
| (IItemPropertyDescriptor) descriptors.get(i))); |
| } |
| return delegateDescriptors; |
| } |
| |
| private class DelegateItemPropertyDescriptor implements |
| IItemPropertyDescriptor { |
| |
| private IItemPropertyDescriptor descriptor; |
| |
| /** |
| * |
| */ |
| public DelegateItemPropertyDescriptor(IItemPropertyDescriptor descriptor) { |
| this.descriptor = descriptor; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getPropertyValue(java.lang.Object) |
| */ |
| public Object getPropertyValue(Object object) { |
| return descriptor.getPropertyValue(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#isPropertySet(java.lang.Object) |
| */ |
| public boolean isPropertySet(Object object) { |
| return descriptor.isPropertySet(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#canSetProperty(java.lang.Object) |
| */ |
| public boolean canSetProperty(Object object) { |
| return descriptor.canSetProperty(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#resetPropertyValue(java.lang.Object) |
| */ |
| public void resetPropertyValue(Object object) { |
| descriptor.resetPropertyValue(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#setPropertyValue(java.lang.Object, |
| * java.lang.Object) |
| */ |
| public void setPropertyValue(Object object, Object value) { |
| descriptor.setPropertyValue(linkedObject, value); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getCategory(java.lang.Object) |
| */ |
| public String getCategory(Object object) { |
| return descriptor.getCategory(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getDescription(java.lang.Object) |
| */ |
| public String getDescription(Object object) { |
| return descriptor.getDescription(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getDisplayName(java.lang.Object) |
| */ |
| public String getDisplayName(Object object) { |
| return descriptor.getDisplayName(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getFilterFlags(java.lang.Object) |
| */ |
| public String[] getFilterFlags(Object object) { |
| return descriptor.getFilterFlags(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getHelpContextIds(java.lang.Object) |
| */ |
| public Object getHelpContextIds(Object object) { |
| return descriptor.getHelpContextIds(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getId(java.lang.Object) |
| */ |
| public String getId(Object object) { |
| return descriptor.getId(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getLabelProvider(java.lang.Object) |
| */ |
| public IItemLabelProvider getLabelProvider(Object object) { |
| return descriptor.getLabelProvider(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#isCompatibleWith(java.lang.Object, |
| * java.lang.Object, |
| * org.eclipse.emf.edit.provider.IItemPropertyDescriptor) |
| */ |
| public boolean isCompatibleWith(Object object, Object anotherObject, |
| IItemPropertyDescriptor anotherPropertyDescriptor) { |
| return descriptor.isCompatibleWith(linkedObject, anotherObject, |
| anotherPropertyDescriptor); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getFeature(java.lang.Object) |
| */ |
| public Object getFeature(Object object) { |
| return descriptor.getFeature(linkedObject); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#getChoiceOfValues(java.lang.Object) |
| */ |
| public Collection getChoiceOfValues(Object object) { |
| return descriptor.getChoiceOfValues(linkedObject); |
| } |
| |
| /* |
| * @since EMF 2.1 |
| */ |
| public boolean isMany(Object object) { |
| return descriptor.isMany(object); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.IItemPropertyDescriptor#isMany(java.lang.Object) |
| * @since EMF 2.1 |
| */ |
| // public boolean isMany(Object object) { |
| // return descriptor.isMany(object); |
| // } |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getPropertyDescriptor(java.lang.Object, |
| * java.lang.Object) |
| */ |
| public IItemPropertyDescriptor getPropertyDescriptor(Object object, |
| Object propertyId) { |
| IItemPropertyDescriptor propDescriptor = getLinkedObjectItemProvider() |
| .getPropertyDescriptor(getTarget(), propertyId); |
| return new DelegateItemPropertyDescriptor(propDescriptor); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getEditableValue(java.lang.Object) |
| */ |
| public Object getEditableValue(Object object) { |
| return getLinkedObjectItemProvider().getEditableValue(getTarget()); |
| } |
| |
| // /* (non-Javadoc) |
| // * @see |
| // org.eclipse.emf.edit.provider.ItemProviderAdapter#getChildrenFeatures(java.lang.Object) |
| // */ |
| // protected Collection getChildrenFeatures(Object object) { |
| // ItemProviderAdapter adapter = (ItemProviderAdapter) |
| // TngAdapterFactory.INSTANCE.getNavigatorView_ComposedAdapterFactory().adapt(target, |
| // ITreeItemContentProvider.class); |
| // Collection features = adapter.getChildrenFeatures(target); |
| // // System.out.println("ObjectLinkItemProvider.getChildrenFeatures(): |
| // target=" + target + ", features=" + features); |
| // return features; |
| // } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getChildren(java.lang.Object) |
| */ |
| public Collection getChildren(Object object) { |
| // System.out.println("ObjectLinkItemProvider.getChildren(): target=" + |
| // target); |
| ItemProviderAdapter adapter = (ItemProviderAdapter) TngAdapterFactory.INSTANCE |
| .getNavigatorView_ComposedAdapterFactory().adapt(target, |
| ITreeItemContentProvider.class); |
| children = ObjectLinkItemProviderList.createList(adapterFactory, |
| children, object, adapter.getChildren(target)); |
| return children; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#isAdapterForType(java.lang.Object) |
| */ |
| public boolean isAdapterForType(Object type) { |
| return false; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#getNewChildDescriptors(java.lang.Object, |
| * org.eclipse.emf.edit.domain.EditingDomain, java.lang.Object) |
| */ |
| public Collection getNewChildDescriptors(Object object, |
| EditingDomain editingDomain, Object sibling) { |
| return Collections.EMPTY_LIST; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createCommand(java.lang.Object, |
| * org.eclipse.emf.edit.domain.EditingDomain, java.lang.Class, |
| * org.eclipse.emf.edit.command.CommandParameter) |
| */ |
| public Command createCommand(Object object, EditingDomain domain, |
| Class commandClass, CommandParameter commandParameter) { |
| // System.out.println("ObjectLinkItemProvider.createCommand():"); |
| // System.out.println(" object: " + object); |
| // System.out.println(" commandClass: " + commandClass); |
| |
| // if(commandClass == RemoveCommand.class) { |
| // EList list = (()) |
| // return new RemoveCommand(domain, ) |
| // } |
| Command cmd; |
| if (commandClass == CopyCommand.class) { |
| commandParameter.setOwner(linkedObject); |
| cmd = super.createCommand(linkedObject, domain, commandClass, |
| commandParameter); |
| } else { |
| cmd = super.createCommand(object, domain, commandClass, |
| commandParameter); |
| } |
| |
| // System.out.println(" cmd: " + cmd); |
| return cmd; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.emf.edit.provider.ItemProviderAdapter#createDragAndDropCommand(org.eclipse.emf.edit.domain.EditingDomain, |
| * java.lang.Object, float, int, int, java.util.Collection) |
| */ |
| protected Command createDragAndDropCommand(EditingDomain domain, |
| Object owner, float location, int operations, int operation, |
| Collection collection) { |
| return super.createDragAndDropCommand(domain, owner, location, |
| operations, operation, collection); |
| } |
| |
| } |