Package OntoUML.diagram.expressions

Source Code of OntoUML.diagram.expressions.OntoUMLAbstractExpression

package OntoUML.diagram.expressions;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collections;
import java.util.Map;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EDataType;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EEnumLiteral;
import org.eclipse.emf.ecore.util.EcoreUtil;

/**
* @generated
*/
public abstract class OntoUMLAbstractExpression {

  /**
   * @generated
   */
  private IStatus status = Status.OK_STATUS;

  /**
   * @generated
   */
  protected void setStatus(int severity, String message, Throwable throwable) {
    String pluginID = OntoUML.diagram.part.OntoUMLDiagramEditorPlugin.ID;
    this.status = new Status(severity, pluginID, -1,
        (message != null) ? message : "", throwable); //$NON-NLS-1$
    if (!this.status.isOK()) {
      OntoUML.diagram.part.OntoUMLDiagramEditorPlugin
          .getInstance()
          .logError(
              "Expression problem:" + message + "body:" + body(), throwable); //$NON-NLS-1$ //$NON-NLS-2$
    }
  }

  /**
   * @generated
   */
  public IStatus getStatus() {
    return status;
  }

  /**
   * @generated
   */
  private final String myBody;

  /**
   * @generated
   */
  public String body() {
    return myBody;
  }

  /**
   * @generated
   */
  private final EClassifier myContext;

  /**
   * @generated
   */
  public EClassifier context() {
    return myContext;
  }

  /**
   * @generated
   */
  protected OntoUMLAbstractExpression(String body, EClassifier context) {
    myBody = body;
    myContext = context;
  }

  /**
   * @generated
   */
  protected abstract Object doEvaluate(Object context, Map env);

  /**
   * @generated
   */
  public Object evaluate(Object context) {
    return evaluate(context, Collections.EMPTY_MAP);
  }

  /**
   * @generated
   */
  public Object evaluate(Object context, Map env) {
    if (context().isInstance(context)) {
      try {
        return doEvaluate(context, env);
      } catch (Exception e) {
        OntoUML.diagram.part.OntoUMLDiagramEditorPlugin
            .getInstance()
            .logError("Expression evaluation failure: " + body(), e);//$NON-NLS-1$
      }
    }
    return null;
  }

  /**
   * Expression may return number value which is not directly compatible with feature type (e.g. Double when Integer is expected), or EEnumLiteral meta-object when literal instance is expected
   * @generated
   */
  public static Object performCast(Object value, EDataType targetType) {
    if (targetType instanceof EEnum) {
      if (value instanceof EEnumLiteral) {
        EEnumLiteral literal = (EEnumLiteral) value;
        return (literal.getInstance() != null) ? literal.getInstance()
            : literal;
      }
    }
    if (false == value instanceof Number || targetType == null
        || targetType.getInstanceClass() == null) {
      return value;
    }
    Class targetClass = targetType.getInstanceClass();
    Number num = (Number) value;
    Class valClass = value.getClass();
    Class targetWrapperClass = targetClass;
    if (targetClass.isPrimitive()) {
      targetWrapperClass = EcoreUtil.wrapperClassFor(targetClass);
    }
    if (valClass.equals(targetWrapperClass)) {
      return value;
    }
    if (Number.class.isAssignableFrom(targetWrapperClass)) {
      if (targetWrapperClass.equals(Byte.class))
        return new Byte(num.byteValue());
      if (targetWrapperClass.equals(Integer.class))
        return new Integer(num.intValue());
      if (targetWrapperClass.equals(Short.class))
        return new Short(num.shortValue());
      if (targetWrapperClass.equals(Long.class))
        return new Long(num.longValue());
      if (targetWrapperClass.equals(BigInteger.class))
        return BigInteger.valueOf(num.longValue());
      if (targetWrapperClass.equals(Float.class))
        return new Float(num.floatValue());
      if (targetWrapperClass.equals(Double.class))
        return new Double(num.doubleValue());
      if (targetWrapperClass.equals(BigDecimal.class))
        return new BigDecimal(num.doubleValue());
    }
    return value;
  }

}
TOP

Related Classes of OntoUML.diagram.expressions.OntoUMLAbstractExpression

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.