blob: 3778536ecd14ed7e3c9b8a0b9d25d403b39129ee [file] [log] [blame]
/*
* Copyright (c) 2007, 2009-2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.edit;
import org.eclipse.emf.cdo.CDOElement;
import org.eclipse.emf.cdo.CDOLock;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.CDOState;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.revision.CDORevision;
import org.eclipse.emf.cdo.internal.edit.messages.Messages;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.internal.cdo.object.ObjectProperties;
import org.eclipse.net4j.util.properties.Property;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.InternalEObject;
import org.eclipse.emf.edit.provider.IItemLabelProvider;
import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
import org.eclipse.emf.edit.provider.ItemProviderAdapter;
import java.util.Collection;
import java.util.List;
/**
* Adds CDO-specific properties to {@link EObject objects}, such as {@link CDOObject#cdoID() ID},
* {@link CDORevision#getVersion() version} and {@link CDOObject#cdoState() state}.
*
* @author Eike Stepper
*/
public class CDOItemProviderAdapter extends ItemProviderAdapter
{
public CDOItemProviderAdapter(AdapterFactory adapterFactory)
{
super(adapterFactory);
}
@Override
@SuppressWarnings("deprecation")
public boolean hasChildren(Object object)
{
Collection<? extends EStructuralFeature> anyChildrenFeatures = getChildrenFeatures(object);
if (anyChildrenFeatures.isEmpty())
{
anyChildrenFeatures = getChildrenReferences(object);
}
EObject eObject = (EObject)object;
for (EStructuralFeature feature : anyChildrenFeatures)
{
if (feature.isMany())
{
List<?> children = (List<?>)eObject.eGet(feature);
if (!children.isEmpty())
{
return true;
}
}
else
{
if (eObject.eIsSet(feature))
{
return true;
}
}
}
return false;
}
/**
* @ADDED
*/
@Override
public Object getParent(Object object)
{
return CDOElement.getParentOf((EObject)object);
}
/**
* @since 2.0
*/
@Override
public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object)
{
if (itemPropertyDescriptors == null)
{
super.getPropertyDescriptors(object);
if (object instanceof EObject)
{
EObject eObject = (EObject)object;
for (Property<EObject> property : ObjectProperties.INSTANCE.getProperties())
{
if (property.getLabel() != null)
{
addCDOPropertyDescriptor(eObject, property);
}
}
}
}
return itemPropertyDescriptors;
}
/**
* @since 4.4
*/
protected void addCDOPropertyDescriptor(EObject object, Property<EObject> property)
{
itemPropertyDescriptors.add(new CDOPropertyDescriptor(property));
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addIDDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addVersionDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addStateDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addViewDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addContainerDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addDirectResourceDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addReadLockedDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addWriteLockedDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 4.3
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addWriteOptionDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addAdaptersDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addChangeSubscriptionPoliciesDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
protected void addURIDescriptor(Object object)
{
throw new UnsupportedOperationException();
}
/**
* Base abstract to add CDO debug information to PropertiesView. Users wanting to add new information to the
* Properties view can subclass this class instead of directly implementing {@link IItemPropertyDescriptor}.
*
* @since 2.0
* @author Victor Roldan Betancort
*/
public static class CDOPropertyDescriptor implements IItemPropertyDescriptor, IItemLabelProvider
{
/**
* The filter id for expert properties
*/
public static final String[] FILTER_ID_EXPERT = { "org.eclipse.ui.views.properties.expert" }; //$NON-NLS-1$
/**
* PropertiesView category for CDO
*/
public static final String CDO_CATEGORY = Messages.getString("CDOItemProviderAdapter.0"); //$NON-NLS-1$
private final Property<EObject> property;
/**
* @deprecated as of 4.4. use {@link #CDOPropertyDescriptor(Property)}.
*/
@Deprecated
public CDOPropertyDescriptor()
{
throw new UnsupportedOperationException();
}
/**
* @since 4.4
*/
public CDOPropertyDescriptor(Property<EObject> property)
{
this.property = property;
}
/**
* @since 4.4
*/
public final Property<EObject> getProperty()
{
return property;
}
/**
* @since 4.4
*/
public String getId(Object object)
{
return "___CDO___" + property.getName();
}
/**
* @since 4.4
*/
public Object getFeature(Object object)
{
return getId(object);
}
/**
* @since 4.4
*/
public String getDisplayName(Object object)
{
return property.getLabel();
}
/**
* @since 4.4
*/
public String getDescription(Object object)
{
return property.getDescription();
}
public boolean isPropertySet(Object object)
{
return true;
}
/**
* @since 4.4
*/
public Object getPropertyValue(Object object)
{
return property.getValue((EObject)object);
}
public void setPropertyValue(Object object, Object value)
{
// Do nothing.
}
public void resetPropertyValue(Object object)
{
// Do nothing.
}
public boolean canSetProperty(Object object)
{
return false;
}
public String getCategory(Object object)
{
return CDO_CATEGORY;
}
public Collection<?> getChoiceOfValues(Object object)
{
return null;
}
public Object getHelpContextIds(Object object)
{
return null;
}
public boolean isCompatibleWith(Object object, Object anotherObject,
IItemPropertyDescriptor anotherPropertyDescriptor)
{
return false;
}
public boolean isMany(Object object)
{
return false;
}
public boolean isMultiLine(Object object)
{
return false;
}
public boolean isSortChoices(Object object)
{
return false;
}
public String[] getFilterFlags(Object object)
{
return FILTER_ID_EXPERT;
}
public IItemLabelProvider getLabelProvider(Object object)
{
return this;
}
/**
* @since 4.4
*/
public Object getImage(Object object)
{
return null;
}
/**
* @since 4.4
*/
public String getText(Object object)
{
return object.toString();
}
/**
* A default implementation of {@link IItemLabelProvider}.
*
* @author Eike Stepper
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class DefaultLabelProvider implements IItemLabelProvider
{
public DefaultLabelProvider()
{
}
public Object getImage(Object object)
{
return null;
}
public String getText(Object object)
{
return object.toString();
}
}
}
/**
* Adds the {@link CDOID} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class IDDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the version of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class VersionDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the {@link CDOState state} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class StateDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the associate {@link CDOView view} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class ViewDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the {@link EObject#eContainer() eContainer} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class ContainerDescriptor extends CDOPropertyDescriptor
{
public ContainerDescriptor(AdapterFactory adapterFactory)
{
}
}
/**
* Adds the {@link InternalEObject#eDirectResource() direct resource} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class DirectResourceDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the {@link CDOLock read lock} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class ReadLockedDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the {@link CDOLock write lock} of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class WriteLockedDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the {@link CDOLock write option} of a {@link CDOObject} to the Properties view.
*
* @author Eike Stepper
* @since 4.3
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class WriteOptionDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the {@link EObject#eAdapters() eAdapters} list of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class AdaptersDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the change subscription policies list of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class ChangeSubscriptionPoliciesDescriptor extends CDOPropertyDescriptor
{
}
/**
* Adds the URI of a {@link CDOObject} to the Properties view.
*
* @author Victor Roldan Betancort
* @since 2.0
* @deprecated as of 4.4 not used any more.
*/
@Deprecated
public static class URIDescriptor extends CDOPropertyDescriptor
{
}
}