示例#1
0
  /**
   * Converts a primitive type value, this implementation only converts an EEnum to an Enum value.
   *
   * @param value the value to convert
   * @param eDataType its EDataType
   * @return the converted value
   */
  @SuppressWarnings({"unchecked", "rawtypes"})
  protected Object convertEAttributeValue(final Object value, final EDataType eDataType) {
    if (value instanceof Enum<?>) {
      final EDataType enumDataType = getDataTypeOrBaseType(eDataType);
      Check.isInstanceOf(enumDataType, EEnum.class);
      final ModelPackage modelPackage =
          ModelResolver.getInstance().getModelPackage(enumDataType.getEPackage().getNsURI());
      final Class<? extends Enum> enumClass =
          (Class<? extends Enum>) modelPackage.getEClassifierClass(enumDataType);
      return Enum.valueOf(enumClass, ((Enum<?>) value).name().toUpperCase(Locale.ENGLISH));
    } else if (value instanceof EEnumLiteral) {
      final EDataType enumDataType = getDataTypeOrBaseType(eDataType);
      Check.isInstanceOf(enumDataType, EEnum.class);
      final EEnumLiteral eeNumLiteral = (EEnumLiteral) value;
      final ModelPackage modelPackage =
          ModelResolver.getInstance().getModelPackage(enumDataType.getEPackage().getNsURI());
      if (modelPackage == null) {
        // dynamic model
        return eeNumLiteral;
      }
      final Class<? extends Enum> enumClass =
          (Class<? extends Enum>) modelPackage.getEClassifierClass(enumDataType);
      return Enum.valueOf(enumClass, eeNumLiteral.getName().toUpperCase(Locale.ENGLISH));
    }

    // convert these to a Date always
    if (value instanceof XMLGregorianCalendar) {
      final XMLGregorianCalendar xmlCalendar = (XMLGregorianCalendar) value;
      final Date date = xmlCalendar.toGregorianCalendar().getTime();
      return date;
    }

    return value;
  }
 /**
  * {@inheritDoc}
  *
  * @see
  *     org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverter#setCellValue(org.apache.poi.ss.usermodel.Cell,
  *     java.lang.Object, org.eclipse.emf.ecore.EStructuralFeature,
  *     org.eclipse.emf.ecp.view.spi.context.ViewModelContext)
  */
 @Override
 public void setCellValue(
     Cell cell,
     Object fromObject,
     EStructuralFeature eStructuralFeature,
     ViewModelContext viewModelContext)
     throws EMFFormsConverterException {
   final EDataType eDataType = EAttribute.class.cast(eStructuralFeature).getEAttributeType();
   final EFactory eFactory = eDataType.getEPackage().getEFactoryInstance();
   final StringBuilder result = new StringBuilder();
   for (final Object value : (List<?>) fromObject) {
     if (result.length() != 0) {
       result.append(SEPARATOR);
     }
     result.append(eFactory.convertToString(eDataType, value));
   }
   String valueString = result.toString();
   if (isDecimalNumber(eDataType.getInstanceClass())) {
     valueString =
         valueString.replace(
             '.',
             DecimalFormatSymbols.getInstance(localeProvider.getLocale()).getDecimalSeparator());
   }
   cell.setCellValue(valueString);
   cell.setCellStyle(
       (CellStyle) viewModelContext.getContextValue(EMFFormsCellStyleConstants.TEXT));
 }
示例#3
0
 /**
  * Get the value of the named AD parameter for the activity as a string. Works with several types,
  * not just strings -- enums, for example.
  *
  * @param element
  * @param parameterName
  * @return null if the parameter is not found
  */
 public static String getParameterString(EPlanElement element, String parameterName) {
   EObject data = element.getData();
   if (data == null) return null;
   EStructuralFeature feature;
   try {
     feature = getParameterFeature(data, parameterName);
   } catch (UndefinedParameterException e) {
     return null;
   }
   Object object = data.eGet(feature);
   if (object instanceof EEnumLiteral) {
     EEnumLiteral literal = (EEnumLiteral) object;
     return literal.getName();
   }
   EClassifier type = feature.getEType();
   if (type instanceof EDataType) {
     EDataType dataType = (EDataType) type;
     EPackage typePackage = dataType.getEPackage();
     EFactory factory = typePackage.getEFactoryInstance();
     String string = factory.convertToString(dataType, object);
     return string;
   }
   LogUtil.warnOnce("feature type '" + type + "'is not EDataType: " + parameterName);
   return String.valueOf(object);
 }
示例#4
0
 public String isValid(Object object) {
   Object value;
   try {
     value =
         eDataType
             .getEPackage()
             .getEFactoryInstance()
             .createFromString(eDataType, (String) object);
   } catch (Exception exception) {
     String message = exception.getClass().getName();
     int index = message.lastIndexOf('.');
     if (index >= 0) {
       message = message.substring(index + 1);
     }
     if (exception.getLocalizedMessage() != null) {
       message = message + ": " + exception.getLocalizedMessage();
     }
     return message;
   }
   Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eDataType, value);
   if (diagnostic.getSeverity() == Diagnostic.OK) {
     return null;
   } else {
     return (diagnostic.getChildren().get(0))
         .getMessage()
         .replaceAll("'", "''")
         .replaceAll("\\{", "'{'"); // }}
   }
 }
示例#5
0
 /**
  * Use setParameterString instead, unless calling from an XML loader that has not yet created the
  * plan element.
  */
 public static void setParameterStringInData(EObject data, String parameterName, String newValue)
     throws UndefinedParameterException {
   EStructuralFeature feature = getParameterFeature(data, parameterName);
   EClassifier type = feature.getEType();
   Object object;
   if (type instanceof EEnum) {
     EEnum enumType = (EEnum) type;
     object = enumType.getEEnumLiteral(newValue);
   } else if (type instanceof EDataType) {
     EDataType dataType = (EDataType) type;
     EPackage typePackage = dataType.getEPackage();
     EFactory factory = typePackage.getEFactoryInstance();
     object = factory.createFromString(dataType, newValue);
   } else {
     Logger logger = Logger.getLogger(ADParameterUtils.class);
     logger.warn("feature type '" + type + "'is not EDataType: " + parameterName);
     object = newValue;
   }
   data.eSet(feature, object);
 }
  /**
   * {@inheritDoc}
   *
   * @see
   *     org.eclipse.emfforms.spi.spreadsheet.core.converter.EMFFormsSpreadsheetValueConverter#getCellValue(org.apache.poi.ss.usermodel.Cell,
   *     org.eclipse.emf.ecore.EStructuralFeature)
   */
  @Override
  public Object getCellValue(Cell cell, EStructuralFeature eStructuralFeature)
      throws EMFFormsConverterException {
    String string;
    try {
      string = cell.getStringCellValue();
    } catch (final IllegalStateException e) {
      throw new EMFFormsConverterException(
          String.format(
              "Cell value of column %1$s in row %2$s on sheet %3$s must be a string.", //$NON-NLS-1$
              cell.getColumnIndex() + 1, cell.getRowIndex() + 1, cell.getSheet().getSheetName()),
          e);
    }

    if (string == null || string.length() == 0) {
      return Collections.emptyList();
    }
    final EAttribute eAttribute = EAttribute.class.cast(eStructuralFeature);
    final EDataType eDataType = eAttribute.getEAttributeType();
    if (isDecimalNumber(eDataType.getInstanceClass())) {
      string =
          string.replace(
              DecimalFormatSymbols.getInstance(localeProvider.getLocale()).getDecimalSeparator(),
              '.');
    }

    final List<Object> result = new ArrayList<Object>();
    final EFactory eFactory = eDataType.getEPackage().getEFactoryInstance();
    for (final String element : string.split(SEPARATOR)) {
      try {
        result.add(eFactory.createFromString(eDataType, element));
      } // BEGIN SUPRESS CATCH EXCEPTION
      catch (final RuntimeException ex) { // END SUPRESS CATCH EXCEPTION
        throw new EMFFormsConverterException(
            MessageFormat.format(
                "The cell value {0} could not converted to a model value.", string)); // $NON-NLS-1$
      }
    }

    return result;
  }
示例#7
0
 /**
  * Add a value to a named AD multi-select EEnum parameter for the activity
  *
  * @param element
  * @param parameterName
  * @param newValue
  * @throws UndefinedParameterException
  */
 @SuppressWarnings("unchecked")
 public static void addParameterStringToList(
     EPlanElement element, String parameterName, String newValue)
     throws UndefinedParameterException {
   EObject data = element.getData();
   EStructuralFeature feature = getParameterFeature(data, parameterName);
   EClassifier type = feature.getEType();
   Object object;
   if (type instanceof EEnum) {
     EEnum enumType = (EEnum) type;
     object = enumType.getEEnumLiteral(newValue);
   } else if (type instanceof EDataType) {
     EDataType dataType = (EDataType) type;
     EPackage typePackage = dataType.getEPackage();
     EFactory factory = typePackage.getEFactoryInstance();
     object = factory.createFromString(dataType, newValue);
   } else {
     Logger logger = Logger.getLogger(ADParameterUtils.class);
     logger.warn("feature type '" + type + "'is not EDataType: " + parameterName);
     object = newValue;
   }
   addParameterObjectToList(element, parameterName, object);
 }