blob: 73b086869c68dd38e6469bf2af71079363ea0485 [file] [log] [blame]
//------------------------------------------------------------------------------
// 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);
}
}