/** * Sets the value of an opaque expression, using a string value. * * @param specification the opaque expression to update * @param language the specified language * @param value the new value */ public static void restoreOpaqueExpression( org.eclipse.uml2.uml.OpaqueExpression specification, String language, String value) { OpaqueExpressionUtil.setBodyForLanguage(specification, language, value); }
/** * Get a string representing of a ValueSpecification * * @param specification */ public static String getSpecificationValue(ValueSpecification specification) { String value = ""; // $NON-NLS-1$ if (specification != null && specification.eClass() != null) { switch (specification.eClass().getClassifierID()) { case UMLPackage.LITERAL_STRING: value = ((LiteralString) specification).getValue(); break; case UMLPackage.LITERAL_BOOLEAN: value = Boolean.toString(((LiteralBoolean) specification).booleanValue()); break; case UMLPackage.LITERAL_INTEGER: value = Integer.toString(((LiteralInteger) specification).getValue()); break; case UMLPackage.LITERAL_UNLIMITED_NATURAL: value = Integer.toString(((LiteralUnlimitedNatural) specification).getValue()); if ("-1".equals(value)) { // $NON-NLS-1$ value = UNLIMITED_KEYWORD; // $NON-NLS-1$ } break; case UMLPackage.LITERAL_NULL: break; case UMLPackage.OPAQUE_EXPRESSION: OpaqueExpression exp = (OpaqueExpression) specification; if (!exp.getLanguages().isEmpty()) { value = OpaqueExpressionUtil.getBodyForLanguage( exp, exp.getLanguages().get(0)); // $NON-NLS-1$ } break; case UMLPackage.INSTANCE_VALUE: value = ((InstanceValue) specification).getInstance().getName(); break; case UMLPackage.EXPRESSION: Expression expr = (Expression) specification; if (!expr.getOperands().isEmpty()) { StringBuffer operandsBuff = new StringBuffer(expr.getSymbol()); operandsBuff.append("("); int initialLength = operandsBuff.length(); for (ValueSpecification operand : expr.getOperands()) { if (operandsBuff.length() > initialLength) { operandsBuff.append(","); } operandsBuff.append(getSpecificationValue(operand)); } operandsBuff.append(")"); value = operandsBuff.toString(); } else { value = expr.getSymbol(); } break; case UMLPackage.STRING_EXPRESSION: // TODO break; case UMLPackage.DURATION: Duration durationExpr = (Duration) specification; if (durationExpr.getExpr() != null) { value = getSpecificationValue(durationExpr.getExpr()); } else if (durationExpr.getObservations().size() > 0) { value = durationExpr.getObservations().get(0).getName(); } break; case UMLPackage.TIME_EXPRESSION: TimeExpression timeExpr = (TimeExpression) specification; if (timeExpr.getExpr() != null) { value = getSpecificationValue(timeExpr.getExpr()); } else if (timeExpr.getObservations().size() > 0) { value = timeExpr.getObservations().get(0).getName(); } break; case UMLPackage.INTERVAL: case UMLPackage.TIME_INTERVAL: case UMLPackage.DURATION_INTERVAL: Interval interval = (Interval) specification; String min = getSpecificationValue(interval.getMin()); String max = getSpecificationValue(interval.getMax()); value = String.format(INTERVAL_FORMAT, min, max); break; default: { break; } } } return value; }
/** * Sets the value of an opaque expression, using a string value * * @param specification the opaque expression to update * @param value the new value */ public static void restoreOpaqueExpression( org.eclipse.uml2.uml.OpaqueExpression specification, String value) { // save in "UML" language, but should be desactivable OpaqueExpressionUtil.setBodyForLanguage(specification, "UML", value); }