Author: thn Date: 2011-04-19 00:28:41-0700 New Revision: 19260 Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/DataTypesHelperEUMLImpl.java trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/DataTypesHelperMDRImpl.java trunk/src/argouml-core-model/src/org/argouml/model/AbstractDataTypesHelperDecorator.java trunk/src/argouml-core-model/src/org/argouml/model/DataTypesHelper.java
Log: UML2: adding methods for handling of ValueSpecification objects Patch obtained from Laurent Braud Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/DataTypesHelperEUMLImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/DataTypesHelperEUMLImpl.java?view=diff&pathrev=19260&r1=19259&r2=19260 ============================================================================== --- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/DataTypesHelperEUMLImpl.java (original) +++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/DataTypesHelperEUMLImpl.java 2011-04-19 00:28:41-0700 @@ -9,17 +9,28 @@ * Contributors: * Tom Morris - initial implementation * Thomas Neustupny + * Laurent Braud *******************************************************************************/ package org.argouml.model.euml; +import java.util.ArrayList; import java.util.List; import org.argouml.model.DataTypesHelper; import org.eclipse.emf.common.util.EList; +import org.eclipse.uml2.uml.LiteralBoolean; +import org.eclipse.uml2.uml.LiteralInteger; +import org.eclipse.uml2.uml.LiteralNull; +import org.eclipse.uml2.uml.LiteralString; +import org.eclipse.uml2.uml.LiteralUnlimitedNatural; import org.eclipse.uml2.uml.MultiplicityElement; import org.eclipse.uml2.uml.OpaqueBehavior; import org.eclipse.uml2.uml.OpaqueExpression; +import org.eclipse.uml2.uml.Property; import org.eclipse.uml2.uml.PseudostateKind; +import org.eclipse.uml2.uml.UMLFactory; +import org.eclipse.uml2.uml.UMLPackage; +import org.eclipse.uml2.uml.ValueSpecification; /** * The implementation of the DataTypesHelper for EUML2. @@ -149,4 +160,162 @@ return handle; } + /** + * @see org.argouml.model.DataTypesHelper#getValueSpecifications() + */ + public ArrayList<String> getValueSpecifications() { + ArrayList<String> list = new ArrayList<String>(); + // + list.add("OpaqueExpression"); + //list.add("OpaqueExpression"); + + //LiteralSpecification + //list.add("LiteralNull");//When other ok + list.add("LiteralString"); + //list.add("LiteralInteger");//When other ok + list.add("LiteralBoolean"); + //list.add("LiteralUnlimitedNatural");//When other ok + + //list.add("LiteralReal");//UML 2.4 + //End LiteralSpecification + + //list.add("InstanceValue"); + + return list; + } + + /** + * @see org.argouml.model.DataTypesHelper#createValueValueSpecification(java.lang.String, java.lang.Object) + */ + public Object createValueSpecification(Object handle, + String type) { + + ValueSpecification newValueSpecification = null; + if (handle instanceof Property) { + Property property = (Property) handle; + + Object[] tabValues = null; + if (type.equals("LiteralBoolean")) { + newValueSpecification = (ValueSpecification)UMLFactory.eINSTANCE.create(UMLPackage.eINSTANCE.getLiteralBoolean()); + } else if (type.equals("LiteralNull")) { + newValueSpecification = (ValueSpecification)UMLFactory.eINSTANCE.create(UMLPackage.eINSTANCE.getLiteralNull()); + } else if (type.equals("LiteralString")) { + newValueSpecification = (ValueSpecification)UMLFactory.eINSTANCE.create(UMLPackage.eINSTANCE.getLiteralString()); + tabValues = new String[]{""}; + } else if (type.equals("LiteralUnlimitedNatural")) { + newValueSpecification = (ValueSpecification)UMLFactory.eINSTANCE.create(UMLPackage.eINSTANCE.getLiteralUnlimitedNatural()); + tabValues = new String[]{"0"}; + } else if (type.equals("LiteralInteger")) { + newValueSpecification = (ValueSpecification)UMLFactory.eINSTANCE.create(UMLPackage.eINSTANCE.getLiteralInteger()); + tabValues = new String[]{"0"}; + } else if (type.equals("OpaqueExpression")) { + newValueSpecification = (ValueSpecification)UMLFactory.eINSTANCE.create(UMLPackage.eINSTANCE.getOpaqueExpression()); + setLanguage(newValueSpecification, ""); + setBody(newValueSpecification, ""); + } + if(tabValues != null){ + modifyValueSpecification(newValueSpecification,tabValues); + } + + if(newValueSpecification!=null){ + property.setDefaultValue(newValueSpecification); + } + }// TODO else => Exception ! + + return newValueSpecification; + + } + + /** + * @see org.argouml.model.DataTypesHelper#modifyValueSpecification(java.lang.Object, java.lang.Object[]) + */ + public void modifyValueSpecification(Object handle, Object[] tabValues) { + // LiteralSpecification + if (handle instanceof LiteralBoolean) { + LiteralBoolean lb = (LiteralBoolean) handle; + if (tabValues != null && tabValues.length == 1) { + Boolean value = (Boolean) tabValues[0]; + lb.setValue(value); + } + } else if (handle instanceof LiteralNull) { + // Can't be changed + } else if (handle instanceof LiteralString) { + LiteralString ls = (LiteralString) handle; + if (tabValues != null && tabValues.length == 1) { + String value = (String) tabValues[0]; + ls.setValue(value); + } + } else if (handle instanceof LiteralUnlimitedNatural) { + LiteralUnlimitedNatural ls = (LiteralUnlimitedNatural) handle; + if (tabValues != null && tabValues.length == 1) { + Integer value = (Integer) tabValues[0]; + ls.setValue(value); + } + } else if (handle instanceof LiteralInteger) { + LiteralInteger ls = (LiteralInteger) handle; + if (tabValues != null && tabValues.length == 1) { + Integer value = (Integer) tabValues[0]; + ls.setValue(value); + } + } else if (handle instanceof OpaqueExpression) { + //rewrite it after change setExpression ? + OpaqueExpression oe=(OpaqueExpression) handle; + List<String> bodies = oe.getBodies(); + List<String> langs = oe.getLanguages(); + // as write in UML specification, we have size(bodies)==size(langs) + // we must have tabValues.length%2==0 + bodies.clear(); + langs.clear(); + for (int i = 0; i < tabValues.length; i += 2) { + bodies.add((String)tabValues[i]); + langs.add((String)tabValues[i+1]); + } + } + // TODO Expression and InstanceValue (how) + // If anyone have an example. + + } + + /** + * @see org.argouml.model.DataTypesHelper#getValueSpecificationValues(java.lang.Object) + */ + public Object[] getValueSpecificationValues(Object handle) { + Object[] tabValues = null; + // LiteralSpecification + if (handle instanceof LiteralBoolean) { + LiteralBoolean lb = (LiteralBoolean) handle; + tabValues = new Boolean[]{lb.isValue()}; + + } else if (handle instanceof LiteralNull) { + // Can't be set + } else if (handle instanceof LiteralString) { + LiteralString ls = (LiteralString) handle; + tabValues = new String[]{ls.getValue()}; + } else if (handle instanceof LiteralUnlimitedNatural) { + LiteralUnlimitedNatural lun = (LiteralUnlimitedNatural) handle; + tabValues = new String[]{""+lun.getValue()}; + } else if (handle instanceof LiteralInteger) { + LiteralInteger li = (LiteralInteger) handle; + tabValues = new Integer[]{li.getValue()}; + } + else if (handle instanceof OpaqueExpression) { + //rewrite it after change setExpression ? + OpaqueExpression oe = (OpaqueExpression) handle; + List<String> bodies = oe.getBodies(); + List<String> langs = oe.getLanguages(); + // as write in UML specification, we have size(bodies)==size(langs) + // we must have tabValues.length%2==0 + if (bodies.size() > 0) { + tabValues= new String[bodies.size()*2]; + for (int i = 0; i < bodies.size(); i++) { + tabValues[i*2] = bodies.get(i); + tabValues[i*2+1] = langs.get(i); + } + } + } + // TODO Expression and InstanceValue (how) + // If anyone have an example. + + return tabValues; + } } Modified: trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/DataTypesHelperMDRImpl.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/DataTypesHelperMDRImpl.java?view=diff&pathrev=19260&r1=19259&r2=19260 ============================================================================== --- trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/DataTypesHelperMDRImpl.java (original) +++ trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/DataTypesHelperMDRImpl.java 2011-04-19 00:28:41-0700 @@ -7,7 +7,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * tfmorris + * Tom Morris + * Thomas Neustupny + * Laurent Braud ***************************************************************************** * * Some portions of this file was previously release using the BSD License: @@ -38,6 +40,7 @@ package org.argouml.model.mdr; +import java.util.Collection; import java.util.Iterator; import javax.jmi.reflect.InvalidObjectException; @@ -235,5 +238,34 @@ } throw new IllegalArgumentException("handle: " + handle); } - + + /** + * @see org.argouml.model.DataTypesHelper#getValueSpecifications() + */ + public Collection<String> getValueSpecifications() { + return null; + } + + /** + * @see org.argouml.model.DataTypesHelper#createValueSpecification(java.lang.Object,java.lang.String) + */ + public Object createValueSpecification(Object handle, + String type) { + return null; + } + + /** + * @see org.argouml.model.DataTypesHelper#modifyValueSpecification(java.lang.Object, java.lang.Object[]) + */ + public void modifyValueSpecification(Object handle, Object[] tabValues) { + // Not implemented in MDR + } + + /** + * @see org.argouml.model.DataTypesHelper#getValueSpecificationValues(java.lang.Object) + */ + public Object[] getValueSpecificationValues(Object handle) { + return null; + } + } Modified: trunk/src/argouml-core-model/src/org/argouml/model/AbstractDataTypesHelperDecorator.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/AbstractDataTypesHelperDecorator.java?view=diff&pathrev=19260&r1=19259&r2=19260 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/AbstractDataTypesHelperDecorator.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/AbstractDataTypesHelperDecorator.java 2011-04-19 00:28:41-0700 @@ -7,7 +7,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * tfmorris + * Tom Morris + * Thomas Neustupny + * Laurent Braud ******************************************************************************* * * Some portions of this file was previously release using the BSD License: @@ -38,6 +40,8 @@ package org.argouml.model; +import java.util.Collection; + /** * An abstract Decorator for the {@link DataTypesHelper}. * @@ -115,4 +119,19 @@ return impl.getLanguage(handle); } + public Collection<String> getValueSpecifications(){ + return impl.getValueSpecifications(); + } + + public Object createValueSpecification(Object handle, String type) { + return impl.createValueSpecification(handle, type); + } + + public void modifyValueSpecification(Object handle, Object[] tabValues) { + impl.modifyValueSpecification(handle, tabValues); + } + + public Object[] getValueSpecificationValues(Object handle) { + return impl.getValueSpecificationValues(handle); + } } Modified: trunk/src/argouml-core-model/src/org/argouml/model/DataTypesHelper.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/DataTypesHelper.java?view=diff&pathrev=19260&r1=19259&r2=19260 ============================================================================== --- trunk/src/argouml-core-model/src/org/argouml/model/DataTypesHelper.java (original) +++ trunk/src/argouml-core-model/src/org/argouml/model/DataTypesHelper.java 2011-04-19 00:28:41-0700 @@ -7,7 +7,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * tfmorris + * Tom Morris + * Thomas Neustupny + * Laurent Braud ******************************************************************************* * * Some portions of this file was previously release using the BSD License: @@ -38,6 +40,8 @@ package org.argouml.model; +import java.util.Collection; + /** * The interface for the helper for DataTypes.<p> @@ -145,4 +149,38 @@ */ String getLanguage(Object handle); + /** + * Return the list of implemented ValueSpecification + * @return All the type of ValueSpecification + */ + Collection<String> getValueSpecifications(); + + /** + * Creates a value specification object of a given type. + * TODO move to DataTypesFactory? + * + * @param handle The element that will own the value specification. + * @param type "OpaqueExpression", "LiteralBoolean",... + * @return The ValueSpecification created for handle. + * @since 20110407 + */ + Object createValueSpecification(Object handle, String type); + + /** + * Modifies a value specification object. + * + * @param handle The instance to modify. + * @param tabValues One ore more object in order to get the values. + * @since 20110407 + */ + void modifyValueSpecification(Object handle, Object[] tabValues); + + /** + * Gets the value specification values as an array. + * + * @param handle + * @return The existing ValueSpecification for handle + * @since 20110412 + */ + Object[] getValueSpecificationValues(Object handle); } ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2721286 To unsubscribe from this discussion, e-mail: [[email protected]].
