Skip to content

Commit

Permalink
Fix #560 Manage boolean and enum tagged values
Browse files Browse the repository at this point in the history
  • Loading branch information
mbats committed Mar 19, 2015
1 parent 0a310d2 commit 5115f09
Show file tree
Hide file tree
Showing 2 changed files with 324 additions and 120 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
Expand All @@ -37,8 +38,6 @@
import org.obeonetwork.dsl.uml2.properties.uml.parts.SAPropertyPropertiesEditionPart;
import org.obeonetwork.dsl.uml2.properties.uml.parts.UmlViewsRepository;

import com.google.common.collect.Lists;

/**
* @author <a href="mailto:cedric.notot@obeo.fr">Cédric Notot</a>
*/
Expand All @@ -60,7 +59,8 @@ public SAPropertyPropertiesEditionComponent(
repositoryKey = UmlViewsRepository.class;
partKey = CustomUmlViewsRepository.SAProperty.class;
if (editingContext.getParentContext() instanceof SAPropertyContext) {
property = ((SAPropertyContext) editingContext.getParentContext()).getStereotypeApplicationProperty();
property = ((SAPropertyContext) editingContext.getParentContext())
.getStereotypeApplicationProperty();
}
}

Expand All @@ -76,13 +76,12 @@ public void initPart(Object key, int kind, EObject elt,
setInitializing(true);
if (editingPart != null && key == partKey) {
editingPart.setContext(elt, allResource);

final SAPropertyPropertiesEditionPart saPropertyPart = (SAPropertyPropertiesEditionPart) editingPart;
// init values
if (isAccessible(CustomUmlViewsRepository.SAProperty.stereotypeApplicationProperty)) {
saPropertyPart.setValue(property.getValue());
}

}
}
setInitializing(false);
}
Expand All @@ -105,54 +104,77 @@ public EStructuralFeature associatedFeature(Object editorKey) {
* @see org.eclipse.emf.eef.runtime.impl.components.StandardPropertiesEditionComponent#updateSemanticModel(org.eclipse.emf.eef.runtime.api.notify.IPropertiesEditionEvent)
*/
public void updateSemanticModel(final IPropertiesEditionEvent event) {
if (CustomUmlViewsRepository.SAProperty.stereotypeApplicationProperty == event.getAffectedEditor()) {
if (CustomUmlViewsRepository.SAProperty.stereotypeApplicationProperty == event
.getAffectedEditor()) {
if (event.getNewValue() instanceof String) {
// SINGLE ATTRIBUTE
property.getContainer().eSet(property.getFeature(), transformStringValues((String) event.getNewValue(), property));
} else if (property.getFeature().isMany()
property.getContainer().eSet(
property.getFeature(),
transformStringValues((String) event.getNewValue(),
property));
} else if (event.getNewValue() instanceof Boolean) {
// BOOLEAN ATTRIBUTE
property.getContainer().eSet(property.getFeature(),
event.getNewValue());
} else if (event.getNewValue() instanceof EEnumLiteral) {
// ENUM ATTRIBUTE
property.getContainer().eSet(property.getFeature(),
event.getNewValue());
} else if (property.getFeature().isMany()
&& property.getFeature() instanceof EReference
&& !((EReference)property.getFeature()).isContainment()) {
&& !((EReference) property.getFeature()).isContainment()) {
// MANY REFERENCES
if (event.getKind() == PropertiesEditionEvent.ADD) {
List<Object> result = (List<Object>)property.getContainer().eGet(property.getFeature(), true);
List<Object> result = (List<Object>) property
.getContainer().eGet(property.getFeature(), true);
result.add(event.getNewValue());
} else if (event.getKind() == PropertiesEditionEvent.REMOVE) {
EcoreUtil.remove(property.getContainer(), property.getFeature(), event.getNewValue());
}
} else if (!property.getFeature().isMany()
EcoreUtil.remove(property.getContainer(),
property.getFeature(), event.getNewValue());
}
} else if (!property.getFeature().isMany()
&& property.getFeature() instanceof EReference
&& !((EReference)property.getFeature()).isContainment()) {
&& !((EReference) property.getFeature()).isContainment()) {
// SINGLE REFERENCE
if (event.getKind() == PropertiesEditionEvent.SET && event.getNewValue() != null) {
property.getContainer().eSet(property.getFeature(), event.getNewValue());
} else if (event.getKind() == PropertiesEditionEvent.SET && event.getNewValue() == null) {
if (event.getKind() == PropertiesEditionEvent.SET
&& event.getNewValue() != null) {
property.getContainer().eSet(property.getFeature(),
event.getNewValue());
} else if (event.getKind() == PropertiesEditionEvent.SET
&& event.getNewValue() == null) {
property.getContainer().eSet(property.getFeature(), null);
}
} else if (!property.getFeature().isMany()
}
} else if (!property.getFeature().isMany()
&& property.getFeature() instanceof EReference
&& ((EReference)property.getFeature()).isContainment()
&& property.getFeature().getEType() instanceof EClass){
&& ((EReference) property.getFeature()).isContainment()
&& property.getFeature().getEType() instanceof EClass) {
// SINGLE CONTAINMENT
if (event.getKind() == PropertiesEditionEvent.ADD) {
if (property.getValue() != null) {
EcoreUtil.delete((EObject)property.getValue(), true);
EcoreUtil.delete((EObject) property.getValue(), true);
}
EObject value = property.getFeature().getEType().getEPackage().getEFactoryInstance().create((EClass) property.getFeature().getEType());
EObject value = property.getFeature().getEType()
.getEPackage().getEFactoryInstance()
.create((EClass) property.getFeature().getEType());
property.getContainer().eSet(property.getFeature(), value);
} else if (event.getKind() == PropertiesEditionEvent.SET && event.getNewValue() == null) {
EcoreUtil.delete((EObject)property.getValue(), true);
} else if (event.getKind() == PropertiesEditionEvent.SET
&& event.getNewValue() == null) {
EcoreUtil.delete((EObject) property.getValue(), true);
}
} else if (property.getFeature().isMany()
} else if (property.getFeature().isMany()
&& property.getFeature() instanceof EReference
&& ((EReference)property.getFeature()).isContainment()
&& property.getFeature().getEType() instanceof EClass){
// MANY CONTAINMENTS
&& ((EReference) property.getFeature()).isContainment()
&& property.getFeature().getEType() instanceof EClass) {
// MANY CONTAINMENTS
if (event.getKind() == PropertiesEditionEvent.ADD) {
EObject value = property.getFeature().getEType().getEPackage().getEFactoryInstance().create((EClass) property.getFeature().getEType());
List<Object> result = (List<Object>)property.getContainer().eGet(property.getFeature(), true);
EObject value = property.getFeature().getEType()
.getEPackage().getEFactoryInstance()
.create((EClass) property.getFeature().getEType());
List<Object> result = (List<Object>) property
.getContainer().eGet(property.getFeature(), true);
result.add(value);
} else if (event.getKind() == PropertiesEditionEvent.REMOVE) {
EcoreUtil.delete((EObject)event.getNewValue(), true);
EcoreUtil.delete((EObject) event.getNewValue(), true);
}
}
}
Expand Down Expand Up @@ -185,7 +207,7 @@ && isAccessible(CustomUmlViewsRepository.SAProperty.stereotypeApplicationPropert
protected NotificationFilter[] getNotificationFilters() {
NotificationFilter filter = new EStructuralFeatureNotificationFilter(
property.getFeature());
return new NotificationFilter[] {filter};
return new NotificationFilter[] { filter };
}

/**
Expand Down Expand Up @@ -215,21 +237,22 @@ public Diagnostic validateValue(IPropertiesEditionEvent event) {
}
return ret;
}

/**
* @param value
* @param property
* @return
*/
private static Object transformStringValues (String value, StereotypeApplicationProperty property) {
Object result = value;
private static Object transformStringValues(String value,
StereotypeApplicationProperty property) {
Object result = value;
if (!property.getFeature().isMany()) {
result = transformStringValue(value, property);
} else {
String[] values = value.split(" ");
result = new ArrayList<Object>();
for (String val : values) {
((List)result).add(transformStringValue(val, property));
((List) result).add(transformStringValue(val, property));
}
}
return result;
Expand All @@ -240,19 +263,27 @@ private static Object transformStringValues (String value, StereotypeApplication
* @param property
* @return
*/
private static Object transformStringValue(String value, StereotypeApplicationProperty property) {
private static Object transformStringValue(String value,
StereotypeApplicationProperty property) {
String result = value;
if(value == null || value.trim().equals("")) {
if (value == null || value.trim().equals("")) {
result = "0";
}
if (property.getFeature().getEType() instanceof EDataType) {
return property.getFeature().getEType().getEPackage().getEFactoryInstance().createFromString((EDataType) property.getFeature().getEType(), result);
return property
.getFeature()
.getEType()
.getEPackage()
.getEFactoryInstance()
.createFromString(
(EDataType) property.getFeature().getEType(),
result);
} else {
// Some cases otherwise... but we should not be here.
EClassifier eType = property.getFeature().getEType();
Class<?> instanceClass = eType.getInstanceClass();
Class<?> dataClass = EcoreUtil.wrapperClassFor(instanceClass);

if (dataClass.isAssignableFrom(Integer.class)) {
return Integer.parseInt(result);
}
Expand Down
Loading

0 comments on commit 5115f09

Please sign in to comment.