/**
* <copyright>
*
* Copyright (c) 2004, 2009 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 - Initial API and implementation
*
* </copyright>
*
* $Id: AttributeValueWrapperItemProvider.java,v 1.4 2006/12/28 06:48:54 marcelop Exp $
*/
package net.enilink.komma.edit.provider;
import java.util.Collections;
import java.util.List;
import net.enilink.komma.common.adapter.IAdapterFactory;
import net.enilink.komma.common.command.ICommand;
import net.enilink.komma.common.util.IResourceLocator;
import net.enilink.komma.edit.command.CommandParameter;
import net.enilink.komma.edit.command.CopyCommand;
import net.enilink.komma.edit.command.SetCommand;
import net.enilink.komma.edit.domain.IEditingDomain;
import net.enilink.komma.model.IObject;
import net.enilink.komma.model.ModelUtil;
import net.enilink.komma.core.IEntity;
import net.enilink.komma.core.IReference;
/**
* A wrapper implementation for simple attribute values.
*/
public class LiteralValueWrapperItemProvider extends WrapperItemProvider
implements IStructuredItemContentProvider, ITreeItemContentProvider,
IItemLabelProvider, IItemPropertySource, IEditingDomainItemProvider {
/**
* The resource locator from the owner's item provider.
*/
protected IResourceLocator resourceLocator;
/**
* The single property descriptor for the value is cached here as a
* singleton list.
*/
protected List<IItemPropertyDescriptor> propertyDescriptors;
/**
* Creates an instance for a single-valued attribute.
*/
public LiteralValueWrapperItemProvider(Object value, IEntity owner,
IReference property, IAdapterFactory adapterFactory,
IResourceLocator resourceLocator) {
super(value, owner, property, CommandParameter.NO_INDEX,
adapterFactory);
this.resourceLocator = resourceLocator;
}
/**
* Creates an instance for a value within a multi-valued attribute.
*/
public LiteralValueWrapperItemProvider(Object value, IEntity owner,
IReference property, int index, IAdapterFactory adapterFactory,
IResourceLocator resourceLocator) {
super(value, owner, property, index, adapterFactory);
this.resourceLocator = resourceLocator;
}
/**
* If non-null, the value is converted to a string, using the type of its
* attribute and the appropriate factory.
*/
@Override
public String getText(Object object) {
return value != null ? ModelUtil.getLabel(value) : "null";
}
/**
* Creates, caches and returns an item property descriptor for the value.
*/
@Override
public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
if (propertyDescriptors == null) {
propertyDescriptors = Collections
.<IItemPropertyDescriptor> singletonList(new WrapperItemPropertyDescriptor(
resourceLocator, property));
}
return propertyDescriptors;
}
/**
* Returns a wrapped set command that returns as its affected object the
* replacement wrapper for the value.
*/
@Override
protected ICommand createSetCommand(IEditingDomain domain, Object owner,
Object feature, Object value, int index) {
return new ReplacementAffectedObjectCommand(SetCommand.create(domain,
this.owner, this.property, value, this.index));
}
/**
* Returns a {@link WrapperItemProvider.SimpleCopyCommand} that copies the
* value by converting it into a string and back, using the factory methods.
*/
@Override
protected ICommand createCopyCommand(IEditingDomain domain, Object owner,
CopyCommand.Helper helper) {
return new SimpleCopyCommand(domain) {
@Override
public IWrapperItemProvider copy() {
Object valueCopy = null;
if (value != null) {
// KommaUtil.convertToType(((IObject)getOwner()).getModel(), , typeUri)
}
return new LiteralValueWrapperItemProvider(valueCopy,
(IObject) LiteralValueWrapperItemProvider.this.owner,
(IReference) property, index, adapterFactory, resourceLocator);
}
};
}
}