/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.ui.properties.extension;
import static org.teiid.designer.ui.UiConstants.Util;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.views.properties.IPropertyDescriptor;
import org.eclipse.ui.views.properties.IPropertySource;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.extension.ExtensionPlugin;
import org.teiid.designer.extension.ModelExtensionAssistantAggregator;
import org.teiid.designer.extension.properties.ModelExtensionPropertyDefinition;
/**
*
*
* @since 8.0
*/
public class ModelExtensionPropertySource implements IPropertySource {
// TODO see ModelRowElement uses ExtensionPropertySource should it also use this?
private final EObject eObject;
/**
* @param eObject the object whose property source is being created (cannot be <code>null</code>)
*/
public ModelExtensionPropertySource( EObject eObject ) {
CoreArgCheck.isNotNull(eObject, "eObject is null"); //$NON-NLS-1$
this.eObject = eObject;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.views.properties.IPropertySource#getEditableValue()
*/
@Override
public Object getEditableValue() {
return this.eObject;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors()
*/
@Override
public IPropertyDescriptor[] getPropertyDescriptors() {
String metaclassName = this.eObject.getClass().getName();
Collection<ModelExtensionPropertyDefinition> propDefns = new ArrayList<ModelExtensionPropertyDefinition>();
try {
ModelExtensionAssistantAggregator aggregator = ExtensionPlugin.getInstance().getModelExtensionAssistantAggregator();
propDefns.addAll(aggregator.getPropertyDefinitions(this.eObject));
} catch (Exception e) {
Util.log(IStatus.ERROR, e, NLS.bind(Messages.errorCreatingPropertyDescriptors, metaclassName));
}
// no extended properties found
if (propDefns.isEmpty()) {
return new IPropertyDescriptor[0];
}
IPropertyDescriptor[] descriptors = new IPropertyDescriptor[propDefns.size()];
int i = 0;
// create descriptors for each property
for (ModelExtensionPropertyDefinition propDefn : propDefns) {
descriptors[i++] = new ModelExtensionPropertyDescriptor(this.eObject, propDefn);
}
return descriptors;
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object)
*/
@Override
public Object getPropertyValue( Object id ) {
if (isExtensionProperty(id)) {
return ((ModelExtensionPropertyDescriptor)id).getPropertyValue();
}
Util.log(IStatus.ERROR, NLS.bind(Messages.unexpectedPropertySourceId, id));
return null;
}
/**
* @param object the object being checked (cannot be <code>null</code>)
* @return <code>true</code> if the parameter is a <code>ModelExtensionPropertyDescriptor</code>
*/
public boolean isExtensionProperty( Object object ) {
CoreArgCheck.isNotNull(object, "object is null"); //$NON-NLS-1$
return (object instanceof ModelExtensionPropertyDescriptor);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.views.properties.IPropertySource#isPropertySet(java.lang.Object)
*/
@Override
public boolean isPropertySet( Object id ) {
return (getPropertyValue(id) != null);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.views.properties.IPropertySource#resetPropertyValue(java.lang.Object)
*/
@Override
public void resetPropertyValue( Object id ) {
setPropertyValue(id, null);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object)
*/
@Override
public void setPropertyValue( Object id,
Object value ) {
if (isExtensionProperty(id)) {
((ModelExtensionPropertyDescriptor)id).setPropertyValue(value);
} else {
Util.log(IStatus.ERROR, NLS.bind(Messages.unexpectedPropertySourceId, id.getClass().getName()));
}
}
}