package org.obeonetwork.dsl.typeslibrary.components;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.eef.runtime.context.PropertiesEditingContext;
import org.obeonetwork.dsl.typeslibrary.NativeTypeKind;
import org.obeonetwork.dsl.typeslibrary.TypeInstance;
import org.obeonetwork.dsl.typeslibrary.TypesLibraryPackage;
import org.obeonetwork.dsl.typeslibrary.parts.TypeInstancePropertiesEditionPart;
public class CustomTypeInstancePropertiesEditionComponent extends TypeInstancePropertiesEditionComponent {
public CustomTypeInstancePropertiesEditionComponent(PropertiesEditingContext editingContext, EObject column, String editing_mode) {
super(editingContext, column, editing_mode);
}
/**
* {@inheritDoc}
*
* @see org.eclipse.emf.eef.runtime.api.component.IPropertiesEditionComponent#initPart(java.lang.Object, int, org.eclipse.emf.ecore.EObject,
* org.eclipse.emf.ecore.resource.ResourceSet)
*
*/
public void initPart(Object key, int kind, EObject elt, ResourceSet allResource) {
super.initPart(key, kind, elt, allResource);
setInitializing(true);
if (editingPart != null && key == partKey) {
editingPart.setContext(elt, allResource);
final TypeInstancePropertiesEditionPart basePart = (TypeInstancePropertiesEditionPart)editingPart;
updateTypeFieldsVisibility((TypeInstance)elt, basePart);
}
setInitializing(false);
}
@Override
public void updatePart(Notification msg) {
super.updatePart(msg);
if (editingPart.isVisible()) {
TypeInstancePropertiesEditionPart basePart = (TypeInstancePropertiesEditionPart)editingPart;
if (TypesLibraryPackage.eINSTANCE.getTypeInstance_NativeType().equals((msg.getFeature()))) {
updateTypeFieldsVisibility((TypeInstance)semanticObject, basePart);
}
}
}
private void updateTypeFieldsVisibility(TypeInstance typeInstance, TypeInstancePropertiesEditionPart basePart) {
if (typeInstance.getNativeType() != null) {
NativeTypeKind nativeTypeKind = typeInstance.getNativeType().getSpec();
boolean lengthVisible = (nativeTypeKind == NativeTypeKind.LENGTH || nativeTypeKind == NativeTypeKind.LENGTH_AND_PRECISION);
boolean precisionVisible = (nativeTypeKind == NativeTypeKind.LENGTH_AND_PRECISION);
boolean literalsVisible = (nativeTypeKind == NativeTypeKind.ENUM);
basePart.updateTypeFields(lengthVisible, precisionVisible, literalsVisible);
}
}
}