Java Examples for org.eclipse.emf.ecore.EEnum

The following java examples will help you to understand the usage of org.eclipse.emf.ecore.EEnum. These source code samples are taken from different open source projects.

Example 1
Project: Reuseware-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 2
Project: ttc2011-master  File: SslCodeCompletionHelper.java View source code
private java.util.Collection<ssl.resource.ssl.ui.SslCompletionProposal> deriveProposals(ssl.resource.ssl.mopp.SslExpectedTerminal expectedTerminal, String content, ssl.resource.ssl.ISslTextResource resource, int cursorOffset) {
    ssl.resource.ssl.ISslMetaInformation metaInformation = resource.getMetaInformation();
    ssl.resource.ssl.ISslLocationMap locationMap = resource.getLocationMap();
    ssl.resource.ssl.ISslExpectedElement expectedElement = (ssl.resource.ssl.ISslExpectedElement) expectedTerminal.getTerminal();
    if (expectedElement instanceof ssl.resource.ssl.mopp.SslExpectedCsString) {
        ssl.resource.ssl.mopp.SslExpectedCsString csString = (ssl.resource.ssl.mopp.SslExpectedCsString) expectedElement;
        return handleKeyword(csString, expectedTerminal.getPrefix());
    } else if (expectedElement instanceof ssl.resource.ssl.mopp.SslExpectedBooleanTerminal) {
        ssl.resource.ssl.mopp.SslExpectedBooleanTerminal expectedBooleanTerminal = (ssl.resource.ssl.mopp.SslExpectedBooleanTerminal) expectedElement;
        return handleBooleanTerminal(expectedBooleanTerminal, expectedTerminal.getPrefix());
    } else if (expectedElement instanceof ssl.resource.ssl.mopp.SslExpectedStructuralFeature) {
        ssl.resource.ssl.mopp.SslExpectedStructuralFeature expectedFeature = (ssl.resource.ssl.mopp.SslExpectedStructuralFeature) expectedElement;
        org.eclipse.emf.ecore.EStructuralFeature feature = expectedFeature.getFeature();
        org.eclipse.emf.ecore.EClassifier featureType = feature.getEType();
        java.util.List<org.eclipse.emf.ecore.EObject> elementsAtCursor = locationMap.getElementsAt(cursorOffset);
        org.eclipse.emf.ecore.EObject container = null;
        // container for the reference we try to complete
        for (int i = 0; i < elementsAtCursor.size(); i++) {
            container = elementsAtCursor.get(i);
            if (!container.eIsProxy()) {
                break;
            }
        }
        // document. we need to create artificial containers.
        if (container == null) {
            boolean attachedArtificialContainer = false;
            org.eclipse.emf.ecore.EClass containerClass = expectedTerminal.getTerminal().getRuleMetaclass();
            org.eclipse.emf.ecore.EStructuralFeature[] containmentTrace = expectedTerminal.getContainmentTrace();
            java.util.List<org.eclipse.emf.ecore.EObject> contentList = null;
            for (org.eclipse.emf.ecore.EStructuralFeature eStructuralFeature : containmentTrace) {
                if (attachedArtificialContainer) {
                    break;
                }
                org.eclipse.emf.ecore.EClass neededClass = eStructuralFeature.getEContainingClass();
                // fill the content list during the first iteration of the loop
                if (contentList == null) {
                    contentList = new java.util.ArrayList<org.eclipse.emf.ecore.EObject>();
                    java.util.Iterator<org.eclipse.emf.ecore.EObject> allContents = resource.getAllContents();
                    while (allContents.hasNext()) {
                        org.eclipse.emf.ecore.EObject next = allContents.next();
                        contentList.add(next);
                    }
                }
                // find object to attach artificial container to
                for (int i = contentList.size() - 1; i >= 0; i--) {
                    org.eclipse.emf.ecore.EObject object = contentList.get(i);
                    if (neededClass.isInstance(object)) {
                        org.eclipse.emf.ecore.EObject newContainer = containerClass.getEPackage().getEFactoryInstance().create(containerClass);
                        if (eStructuralFeature.getEType().isInstance(newContainer)) {
                            ssl.resource.ssl.util.SslEObjectUtil.setFeature(object, eStructuralFeature, newContainer, false);
                            container = newContainer;
                            attachedArtificialContainer = true;
                        }
                    }
                }
            }
        }
        if (feature instanceof org.eclipse.emf.ecore.EReference) {
            org.eclipse.emf.ecore.EReference reference = (org.eclipse.emf.ecore.EReference) feature;
            if (featureType instanceof org.eclipse.emf.ecore.EClass) {
                if (reference.isContainment()) {
                    // the FOLLOW set should contain only non-containment references
                    assert false;
                } else {
                    return handleNCReference(metaInformation, container, reference, expectedTerminal.getPrefix(), expectedFeature.getTokenName());
                }
            }
        } else if (feature instanceof org.eclipse.emf.ecore.EAttribute) {
            org.eclipse.emf.ecore.EAttribute attribute = (org.eclipse.emf.ecore.EAttribute) feature;
            if (featureType instanceof org.eclipse.emf.ecore.EEnum) {
                org.eclipse.emf.ecore.EEnum enumType = (org.eclipse.emf.ecore.EEnum) featureType;
                return handleEnumAttribute(metaInformation, expectedFeature, enumType, expectedTerminal.getPrefix(), container);
            } else {
                // attribute, figure out token resolver, and call deResolve())
                return handleAttribute(metaInformation, expectedFeature, container, attribute, expectedTerminal.getPrefix());
            }
        } else {
            // there should be no other subclass of EStructuralFeature
            assert false;
        }
    } else {
        // there should be no other class implementing IExpectedElement
        assert false;
    }
    return java.util.Collections.emptyList();
}
Example 3
Project: gmf-tooling-master  File: ExpressionMigrationFacade.java View source code
private EClassifier migrateFeatureCall(FeatureCall featureCall) throws MigrationException {
    ExpressionAnalyzeTrace expressionTrace = ctx.getTraces().get(featureCall);
    if (false == expressionTrace instanceof FeatureCallTrace) {
        throw new MigrationException(Type.UNSUPPORTED_FEATURE_CALL_TRACE, resourceName, featureCall, expressionTrace);
    }
    FeatureCallTrace trace = (FeatureCallTrace) expressionTrace;
    switch(trace.getType()) {
        case ENUM_LITERAL_REF:
            EEnumLiteral enumLiteral = trace.getEnumLiteral();
            assert enumLiteral != null;
            write(typeManager.getQvtFQName(enumLiteral));
            return enumLiteral.getEEnum();
        case ENV_VAR_REF:
            write(modelManager.getName(featureCall, trace));
            EClassifier variableType = getEnvVariableType(featureCall.getName().getValue());
            return variableType != null ? variableType : trace.getResultType();
        case UNDESOLVED_TARGET_TYPE:
        case UNSUPPORTED_CLASSIFIER_REF:
            throw new MigrationException(Type.UNSUPPORTED_FEATURE_CALL, resourceName, featureCall.getName(), trace);
    }
    EClassifier targetType = trace.getTargetType();
    if (featureCall.getTarget() != null) {
        migrateExpression(featureCall.getTarget());
        if (targetType instanceof EEnum && trace.getType() == FeatureCallTrace.Type.FEATURE_REF) {
            if (skipEnumLiteralFeature(trace.getFeature())) {
                return targetType;
            } else if (addEnumLiteralStringRepresentation(trace.getFeature())) {
                write(".repr()");
                return EcorePackage.eINSTANCE.getEString();
            }
        }
        write(".");
    } else {
        if (targetType instanceof EEnum && trace.getType() == FeatureCallTrace.Type.FEATURE_REF) {
            if (skipEnumLiteralFeature(trace.getFeature())) {
                write(Environment.SELF_VARIABLE_NAME);
                return targetType;
            } else if (addEnumLiteralStringRepresentation(trace.getFeature())) {
                write(Environment.SELF_VARIABLE_NAME);
                write(".repr()");
                return EcorePackage.eINSTANCE.getEString();
            }
        }
        if (FeatureCallTrace.Type.IMPLICIT_COLLECT_FEATURE_REF == trace.getType()) {
            write(Environment.SELF_VARIABLE_NAME);
            write(".");
        }
    }
    write(modelManager.getName(featureCall, trace));
    assert targetType != null;
    switch(trace.getType()) {
        case FEATURE_REF:
            if (BuiltinMetaModel.isParameterizedType(targetType)) {
                throw new MigrationException(Type.UNSUPPORTED_EXPRESSION, resourceName, featureCall, "Attribute call is not supported for the collection types: " + targetType.toString() + "." + featureCall.getName().getValue());
            }
            return getTypedElementQvtType(trace.getFeature());
        case IMPLICIT_COLLECT_FEATURE_REF:
            if (!BuiltinMetaModel.isParameterizedType(targetType)) {
                throw new MigrationException(Type.UNSUPPORTED_EXPRESSION, resourceName, featureCall, "Implicit collect is not supported for simple types: " + targetType.toString() + "." + featureCall.getName().getValue());
            }
            convertImplicitCollectProduct(targetType);
            return trace.getResultType();
        default:
            throw new MigrationException(Type.UNSUPPORTED_FEATURE_CALL_TRACE, resourceName, featureCall, trace);
    }
}
Example 4
Project: ares-studio-master  File: EnumEditingSupport.java View source code
/* (non-Javadoc)
	 * @see com.hundsun.ares.studio.jres.ui.editingsupports.BaseEditingSupport#doGetCellEditor(java.lang.Object)
	 */
@Override
protected CellEditor doGetCellEditor(Object element) {
    EEnumComboBoxCellEditor cellEditor = (EEnumComboBoxCellEditor) super.doGetCellEditor(element);
    EStructuralFeature feature = getFeature(element);
    if (feature.getEType() instanceof EEnum) {
        EEnum eEnum = (EEnum) feature.getEType();
        cellEditor.setEEnum(eEnum, itemLableProvider);
    } else {
        cellEditor = null;
    }
    return cellEditor;
}
Example 5
Project: collaboro-master  File: Controller.java View source code
public List<ModelChange> applyChanges() {
    List<ModelChange> appliedChanges = new ArrayList<ModelChange>();
    if (getHistory() == null)
        return appliedChanges;
    for (Proposal proposal : getHistory().getHistories().get(getHistoryTracked()).getVersions().get(getVersionTracked()).getProposals()) {
        if (proposal.isAccepted()) {
            Solution solution = proposal.getSelected();
            if (solution != null) {
                for (ModelChange change : solution.getChanges()) {
                    if (change instanceof Add) {
                        Add add = (Add) change;
                        SyntaxElement referred = add.getReferredElement();
                        SyntaxElement target = add.getTarget();
                        if (referred instanceof ExistingAbstractSyntaxElement) {
                            ExistingAbstractSyntaxElement refExistingElement = (ExistingAbstractSyntaxElement) referred;
                            EObject refEObject = refExistingElement.getElement();
                            if (target instanceof NewAbstractSyntaxElement) {
                                NewAbstractSyntaxElement tgtNewElement = (NewAbstractSyntaxElement) target;
                                EObject tgtEObject = tgtNewElement.getElement();
                                if (tgtEObject instanceof EAttribute) {
                                    EAttribute newAttribute = (EAttribute) tgtEObject;
                                    if (refEObject instanceof EClass) {
                                        EClass eClass = (EClass) refEObject;
                                        eClass.getEStructuralFeatures().add(newAttribute);
                                        appliedChanges.add(change);
                                    }
                                }
                                if (tgtEObject instanceof EClass) {
                                    EClass eClass = (EClass) tgtEObject;
                                    if (refEObject instanceof EPackage) {
                                        EPackage ePackage = (EPackage) refEObject;
                                        ePackage.getEClassifiers().add(eClass);
                                        appliedChanges.add(change);
                                    }
                                }
                                if (tgtEObject instanceof EEnum) {
                                    EEnum eEnum = (EEnum) tgtEObject;
                                    if (refEObject instanceof EPackage) {
                                        EPackage ePackage = (EPackage) refEObject;
                                        ePackage.getEClassifiers().add(eEnum);
                                        appliedChanges.add(change);
                                    }
                                }
                            }
                        }
                    } else if (change instanceof Delete) {
                        Delete delete = (Delete) change;
                        SyntaxElement referred = delete.getReferredElement();
                        SyntaxElement target = delete.getTarget();
                        if (referred instanceof ExistingAbstractSyntaxElement) {
                            ExistingAbstractSyntaxElement refExistingElement = (ExistingAbstractSyntaxElement) referred;
                            EObject refEObject = refExistingElement.getElement();
                            if (target instanceof ExistingAbstractSyntaxElement) {
                                ExistingAbstractSyntaxElement toDelete = (ExistingAbstractSyntaxElement) target;
                                EObject tgtEObject = toDelete.getElement();
                                if (tgtEObject instanceof EAttribute) {
                                    EAttribute eAttribute = (EAttribute) tgtEObject;
                                    if (refEObject instanceof EClass) {
                                        EClass eClass = (EClass) refEObject;
                                        eClass.getEStructuralFeatures().remove(eAttribute);
                                        appliedChanges.add(change);
                                    }
                                }
                                if (tgtEObject instanceof EClass) {
                                    EClass eClass = (EClass) tgtEObject;
                                    if (refEObject instanceof EPackage) {
                                        EPackage ePackage = (EPackage) refEObject;
                                        ePackage.getEClassifiers().remove(eClass);
                                        appliedChanges.add(change);
                                    }
                                }
                                if (tgtEObject instanceof EEnum) {
                                    EEnum eEnum = (EEnum) tgtEObject;
                                    if (refEObject instanceof EPackage) {
                                        EPackage ePackage = (EPackage) refEObject;
                                        ePackage.getEClassifiers().remove(eEnum);
                                        appliedChanges.add(change);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    modelManager.saveEcoreModel();
    return appliedChanges;
}
Example 6
Project: emf.texo-master  File: GenUtils.java View source code
/**
   * Based on the literal a default value is returned. If the literal is null then a zero length string is returned.
   * 
   * @param literal
   *          the literal defining the default value to create
   * @return a valid (from a type perspective) java default value
   */
public static String getStaticDefaultValue(AnnotationManager annotationManager, EDataType eDataType, final String literal) {
    if (eDataType instanceof EEnum) {
        return getStaticDefaultValue(annotationManager, (EEnum) eDataType, literal);
    }
    if (isObjectTypeWithEnumBaseType(eDataType)) {
        final EEnum enumDataType = ModelUtils.getEnumBaseDataTypeIfObject(eDataType);
        return getStaticDefaultValue(annotationManager, enumDataType, literal);
    }
    // first check if there the type extends a base Ecore/XML type (is often
    // the case)
    final EDataType baseType = getEcoreXMLDataType(eDataType);
    if (baseType != null && !useFactoryFor(baseType)) {
        // get an object variant of the default value
        final Object value;
        if (literal == null) {
            value = baseType.getDefaultValue();
        } else {
            try {
                value = EcoreUtil.createFromString(baseType, literal);
            } catch (final Exception e) {
                return "Exception: " + e.getMessage() + " literal:" + literal;
            }
        }
        if (value == null) {
            //$NON-NLS-1$
            return "null";
        }
        // object
        if (baseType.getInstanceClass() == null) {
            return Literals.toLiteral(value.getClass(), value);
        }
        return Literals.toLiteral(baseType.getInstanceClass(), value);
    }
    // always an object type at this point
    if (literal == null) {
        return GenConstants.NULL;
    }
    // the current data type is an ecore type
    if (baseType == eDataType) {
        return createEcoreFactoryCall(baseType, literal);
    }
    // finally use the modelfactory createFromString
    return createModelFactoryCall(annotationManager, eDataType, literal);
}
Example 7
Project: modellipse-master  File: SemanticPostAction.java View source code
@Override
protected CellEditor getCellEditor(Object element) {
    EStructuralFeature feature = (EStructuralFeature) element;
    EClassifier eType = feature.getEType();
    if (eType instanceof EEnum) {
        return createEnumerationEditor(feature);
    }
    String instanceTypeName = eType.getInstanceClassName();
    if (instanceTypeName.equals(String.class.getCanonicalName())) {
        return new TextCellEditor(((TableViewer) getViewer()).getTable());
    } else if (instanceTypeName.equals(Integer.class.getCanonicalName())) {
        return new TextCellEditor(((TableViewer) getViewer()).getTable());
    } else if (instanceTypeName.equals("boolean")) {
        return createBooleanEditor(feature);
    }
    return new TextCellEditor(((TableViewer) getViewer()).getTable());
}
Example 8
Project: ocl-master  File: DelegatesTest.java View source code
protected void initModel(@NonNull ResourceSet resourceSet, @NonNull String testModelName) {
    URI uri = getTestModelURI(testModelName);
    testResource = resourceSet.getResource(uri, true);
    acme = testResource.getContents().get(0);
    companyClass = acme.eClass();
    companyPackage = companyClass.getEPackage();
    companyFactory = companyPackage.getEFactoryInstance();
    companyName = (EAttribute) companyClass.getEStructuralFeature("name");
    companyEmployees = (EReference) companyClass.getEStructuralFeature("employees");
    companySize = (EAttribute) companyClass.getEStructuralFeature("size");
    employeeClass = companyEmployees.getEReferenceType();
    employeeName = (EAttribute) employeeClass.getEStructuralFeature("name");
    employeeManager = (EReference) employeeClass.getEStructuralFeature("manager");
    employeeDirectReports = (EReference) employeeClass.getEStructuralFeature("directReports");
    employeeAllReports = (EReference) employeeClass.getEStructuralFeature("allReports");
    employeeReportsTo = getOperation(employeeClass, "reportsTo");
    sizeKind = (EEnum) companySize.getEAttributeType();
    sizeSmall = sizeKind.getEEnumLiteral("small").getInstance();
    sizeMedium = sizeKind.getEEnumLiteral("medium").getInstance();
    sizeLarge = sizeKind.getEEnumLiteral("large").getInstance();
    employees = new java.util.HashMap<String, EObject>();
//		MetamodelManagerResourceAdapter.getAdapter(companyPackage.eResource(), metamodelManager);
}
Example 9
Project: tefkat-master  File: Evaluator.java View source code
private List evalEnumExpr(Context context, Binding binding, Expression expr) throws ResolutionException, NotGroundException {
    List values = new ArrayList();
    List args = ((EnumConstant) expr).getArg();
    Expression enumExpr = (Expression) args.get(0);
    Expression literalExpr = (Expression) args.get(1);
    List enumObjs = eval(context, binding, enumExpr);
    List literalObjs = eval(context, binding, literalExpr);
    for (final Iterator eItr = enumObjs.iterator(); eItr.hasNext(); ) {
        Object eObj = eItr.next();
        EEnum enumeration = null;
        if (eObj instanceof String) {
            eObj = ModelUtils.findClassifierByName(ruleEval.nameMap, (String) eObj);
        }
        if (eObj instanceof EEnum) {
            enumeration = (EEnum) eObj;
        }
        if (null != enumeration) {
            for (final Iterator lItr = literalObjs.iterator(); lItr.hasNext(); ) {
                Object lObj = lItr.next();
                if (lObj instanceof String) {
                    EEnumLiteral eLit = enumeration.getEEnumLiteral((String) lObj);
                    if (null != eLit) {
                        values.add(eLit.getInstance());
                    }
                }
            }
        }
    }
    return values;
}
Example 10
Project: emf-master  File: EcoreValidationTest.java View source code
@Test
public void testEcoreValidator() {
    // Validate that the Ecore package instance itself is okay.
    {
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(EcorePackage.eINSTANCE);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // An annotation with an empty string for the source isn't valid.
    {
        EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        eAnnotation.setSource("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAnnotation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_SOURCE_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAnnotation, EcorePackage.Literals.EANNOTATION__SOURCE }, diagnostic.getChildren().get(0));
    }
    // An annotation with a source containing a space isn't valid.
    {
        EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        eAnnotation.setSource("a b");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAnnotation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_SOURCE_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAnnotation, EcorePackage.Literals.EANNOTATION__SOURCE }, diagnostic.getChildren().get(0));
    }
    // Two map entries with the same key are not valid.
    //
    {
        EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        {
            EObject entry = EcoreFactory.eINSTANCE.create(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY);
            entry.eSet(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY__KEY, "a");
            @SuppressWarnings("unchecked") Map.Entry<String, String> stringToStringMapEntry = (Map.Entry<String, String>) entry;
            eAnnotation.getDetails().add(stringToStringMapEntry);
        }
        {
            EObject entry = EcoreFactory.eINSTANCE.create(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY);
            entry.eSet(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY__KEY, "a");
            @SuppressWarnings("unchecked") Map.Entry<String, String> stringToStringMapEntry = (Map.Entry<String, String>) entry;
            eAnnotation.getDetails().add(stringToStringMapEntry);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAnnotation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MAP_ENTRY_UNIQUE, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eAnnotation, EcorePackage.Literals.EANNOTATION__DETAILS, eAnnotation.getDetails().get(1), eAnnotation.getDetails().get(0) }, diagnostic.getChildren().get(0));
    }
    // A named element without a name is invalid, unless strict element names are disabled.
    //
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ENAMED_ELEMENT__NAME }, diagnostic.getChildren().get(0));
        diagnostic = Diagnostician.INSTANCE.validate(eClass, Collections.singletonMap(EcoreValidator.STRICT_NAMED_ELEMENT_NAMES, Boolean.FALSE));
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // An instance type name with type arguments is valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("_<_>");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // An instance type name that's just an empty string is not valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_INSTANCE_TYPE_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASSIFIER__INSTANCE_TYPE_NAME }, diagnostic.getChildren().get(0));
    }
    // An instance type name with unbalanced "<" is not valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("_<_");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_INSTANCE_TYPE_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASSIFIER__INSTANCE_TYPE_NAME }, diagnostic.getChildren().get(0));
    }
    // An instance type name with unbalanced "[" is not valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("_[");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_INSTANCE_TYPE_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASSIFIER__INSTANCE_TYPE_NAME }, diagnostic.getChildren().get(0));
    }
    // A class that is an interface must also be abstract.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInterface(true);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.INTERFACE_IS_ABSTRACT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASS__ABSTRACT }, diagnostic.getChildren().get(0));
    }
    // A class can't have more than one attribute that is an ID.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setID(true);
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("b");
            eAttribute.setID(true);
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("c");
            eAttribute.setID(true);
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.AT_MOST_ONE_ID, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEAttributes().get(0), eClass.getEAttributes().get(1), eClass.getEAllAttributes().get(2), EcorePackage.Literals.ECLASS__EALL_ATTRIBUTES }, diagnostic.getChildren().get(0));
    }
    // A class can't have two attributes with the same name.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_FEATURE_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEAttributes().get(0), eClass.getEAttributes().get(1), EcorePackage.Literals.ECLASS__EALL_STRUCTURAL_FEATURES }, diagnostic.getChildren().get(0));
    }
    // A class can't have two attributes with the matching names.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("A_");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.WARNING, EcoreValidator.UNIQUE_FEATURE_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEAttributes().get(0), eClass.getEAttributes().get(1), EcorePackage.Literals.ECLASS__EALL_STRUCTURAL_FEATURES }, diagnostic.getChildren().get(0));
    }
    // A class can't have two operations with matching signatures.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
            eOperation.setName("a");
            {
                EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
                eParameter.setName("x");
                eParameter.setEType(XMLTypePackage.Literals.HEX_BINARY);
                eOperation.getEParameters().add(eParameter);
            }
            eClass.getEOperations().add(eOperation);
        }
        {
            EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
            eOperation.setName("a");
            {
                EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
                eParameter.setName("x");
                eParameter.setEType(XMLTypePackage.Literals.BASE64_BINARY);
                eOperation.getEParameters().add(eParameter);
            }
            eClass.getEOperations().add(eOperation);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_OPERATION_SIGNATURES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEOperations().get(0), eClass.getEOperations().get(1), EcorePackage.Literals.ECLASS__EALL_OPERATIONS }, diagnostic.getChildren().get(0));
    }
    // A class can't have circular super types.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.getESuperTypes().add(eClass);
        eClass.setName("_");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.NO_CIRCULAR_SUPER_TYPES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASS__EALL_SUPER_TYPES }, diagnostic.getChildren().get(0));
    }
    // A map entry class must have a key feature and a value feature.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceClassName("java.util.Map$Entry");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_MAP_ENTRY_CLASS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASS__EALL_STRUCTURAL_FEATURES }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_MAP_ENTRY_CLASS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, EcorePackage.Literals.ECLASS__EALL_STRUCTURAL_FEATURES }, diagnostic.getChildren().get(1));
    }
    // Two enum literals can't have the same name nor matching names.
    {
        EEnum eEnum = EcoreFactory.eINSTANCE.createEEnum();
        eEnum.setName("_");
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("a");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("a");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("A");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eEnum);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_ENUMERATOR_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eEnum, eEnum.getELiterals().get(0), eEnum.getELiterals().get(1), eEnum.getELiterals().get(2), EcorePackage.Literals.EENUM__ELITERALS }, diagnostic.getChildren().get(0));
    }
    // Two enum literals can't have the same literals.
    {
        EEnum eEnum = EcoreFactory.eINSTANCE.createEEnum();
        eEnum.setName("_");
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("a");
            eEnumLiteral.setLiteral("x");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("b");
            eEnumLiteral.setLiteral("x");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("c");
            eEnumLiteral.setLiteral("x");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eEnum);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_ENUMERATOR_LITERALS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eEnum, eEnum.getELiterals().get(0), eEnum.getELiterals().get(1), eEnum.getELiterals().get(2), EcorePackage.Literals.EENUM__ELITERALS }, diagnostic.getChildren().get(0));
    }
    // Two parameters cannot have the same name.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        {
            EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
            eParameter.setName("a");
            eParameter.setEType(EcorePackage.Literals.ESTRING);
            eOperation.getEParameters().add(eParameter);
        }
        {
            EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
            eParameter.setName("a");
            eParameter.setEType(EcorePackage.Literals.ESTRING);
            eOperation.getEParameters().add(eParameter);
        }
        {
            EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
            eParameter.setName("a");
            eParameter.setEType(EcorePackage.Literals.ESTRING);
            eOperation.getEParameters().add(eParameter);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_PARAMETER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eOperation, eOperation.getEParameters().get(0), eOperation.getEParameters().get(1), eOperation.getEParameters().get(2), EcorePackage.Literals.EOPERATION__EPARAMETERS }, diagnostic.getChildren().get(0));
    }
    // Two type parameters cannot have the same name.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eOperation.getETypeParameters().add(eTypeParameter);
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eOperation.getETypeParameters().add(eTypeParameter);
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eOperation.getETypeParameters().add(eTypeParameter);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_TYPE_PARAMETER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eOperation, eOperation.getETypeParameters().get(0), eOperation.getETypeParameters().get(1), eOperation.getETypeParameters().get(2), EcorePackage.Literals.EOPERATION__ETYPE_PARAMETERS }, diagnostic.getChildren().get(0));
    }
    // Two type parameters cannot have the same name.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eClass.getETypeParameters().add(eTypeParameter);
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eClass.getETypeParameters().add(eTypeParameter);
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eClass.getETypeParameters().add(eTypeParameter);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_TYPE_PARAMETER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getETypeParameters().get(0), eClass.getETypeParameters().get(1), eClass.getETypeParameters().get(2), EcorePackage.Literals.ECLASSIFIER__ETYPE_PARAMETERS }, diagnostic.getChildren().get(0));
    }
    // A void operation must have upper bound 1.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        eOperation.setUpperBound(2);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.NO_REPEATING_VOID, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eOperation, EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND }, diagnostic.getChildren().get(0));
    }
    // A package must have an nsURI.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsPrefix("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI }, diagnostic.getChildren().get(0));
    }
    // A null string is not a well formed nsURI for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("");
        ePackage.setNsPrefix("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI }, diagnostic.getChildren().get(0));
    }
    // A string with a space is not a well formed nsURI for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("a b");
        ePackage.setNsPrefix("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_URI }, diagnostic.getChildren().get(0));
    }
    // A prefix that starts with "xml" is not a well formed nsPrefix for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("xml");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_PREFIX, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_PREFIX }, diagnostic.getChildren().get(0));
    }
    // A prefix that isn't an NCName because it contains a ":" is not a well formed nsPrefix for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("a:b");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_PREFIX, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_PREFIX }, diagnostic.getChildren().get(0));
    }
    // A null prefix that an NCName and is not a well formed nsPrefix for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_PREFIX, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, EcorePackage.Literals.EPACKAGE__NS_PREFIX }, diagnostic.getChildren().get(0));
    }
    // Two subpackages cannot have the same name.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("a");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("b");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("c");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_SUBPACKAGE_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getESubpackages().get(0), ePackage.getESubpackages().get(1), ePackage.getESubpackages().get(2), EcorePackage.Literals.EPACKAGE__ESUBPACKAGES }, diagnostic.getChildren().get(0));
    }
    // Two classifiers cannot have the same name nor matching names.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("a");
            ePackage.getEClassifiers().add(eClass);
        }
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("a");
            ePackage.getEClassifiers().add(eClass);
        }
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            ePackage.getEClassifiers().add(eClass);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_CLASSIFIER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getEClassifiers().get(0), ePackage.getEClassifiers().get(1), ePackage.getEClassifiers().get(2), EcorePackage.Literals.EPACKAGE__ECLASSIFIERS }, diagnostic.getChildren().get(0));
    }
    // Two packages cannot have the same namespace URI.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("_");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_NS_URIS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getESubpackages().get(0), EcorePackage.Literals.EPACKAGE__ESUBPACKAGES }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_NS_URIS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage.getESubpackages().get(0), ePackage, EcorePackage.Literals.EPACKAGE__ESUBPACKAGES }, diagnostic.getChildren().get(1));
    }
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("_");
        eAttribute.setEType(EcorePackage.Literals.ERESOURCE);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TRANSIENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.ESTRUCTURAL_FEATURE__TRANSIENT }, diagnostic.getChildren().get(0));
    }
    // There are many ways for opposites to be inconsistent so we'll test them all.
    LOOP: for (int i = 0; i < 100; ++i) {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        EClass A;
        EReference a;
        EClass B;
        EReference b;
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            ePackage.getEClassifiers().add(eClass);
            {
                EReference eReference = EcoreFactory.eINSTANCE.createEReference();
                eReference.setName("b");
                eClass.getEStructuralFeatures().add(eReference);
                b = eReference;
            }
            A = eClass;
        }
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            ePackage.getEClassifiers().add(eClass);
            {
                EReference eReference = EcoreFactory.eINSTANCE.createEReference();
                eReference.setName("a");
                eClass.getEStructuralFeatures().add(eReference);
                a = eReference;
            }
            B = eClass;
        }
        switch(i) {
            // Valid unidirectional references.
            case 0:
                {
                    a.setEType(A);
                    b.setEType(B);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // Valid bidirectional references.
            case 1:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    b.setEType(B);
                    b.setEOpposite(a);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // The opposite must be a feature of the reference's type.
            case 2:
                {
                    // <-- Bad type that doesn't have a b feature
                    a.setEType(B);
                    a.setEOpposite(b);
                    b.setEType(B);
                    b.setEOpposite(a);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_NOT_FROM_TYPE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b, B, EcorePackage.Literals.EREFERENCE__EOPPOSITE }, diagnostic.getChildren().get(0));
                    break;
                }
            // The opposite of the opposite must be the feature itself.
            case 3:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    b.setEType(B);
                    //  b.setEOpposite(a); <-- No opposite for the opposite
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_NOT_MATCHING, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b, null, EcorePackage.Literals.EREFERENCE__EOPPOSITE }, diagnostic.getChildren().get(0));
                    break;
                }
            // Valid bidirectional container/containment references.
            case 4:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // A container reference must have upper bound 1.
            case 5:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    // <-- Bad upper bound.
                    b.setUpperBound(2);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.SINGLE_CONTAINER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { b, EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND }, diagnostic.getChildren().get(0));
                    break;
                }
            // Valid bidirectional references that are transient at both ends.
            case 6:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setTransient(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setTransient(true);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // Valid bidirectional references with one transient end that doesn't resolve proxy.
            case 7:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setTransient(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setResolveProxies(false);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // Valid bidirectional references with on transient end that's a container.
            case 8:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setTransient(true);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // The opposite of a transient bidirectional reference must either be transient as, non-proxy resolving, or a container.
            case 9:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setTransient(true);
                    // a.setContainment(true); <-- Must be a containment for b to be a container and hence be valid.
                    b.setEType(B);
                    b.setEOpposite(a);
                    // b.setTransient(true);  <-- Must be transient.
                    // b.setResolveProxies(false); <-- Or must not resolve proxies.
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_BAD_TRANSIENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b, EcorePackage.Literals.EREFERENCE__EOPPOSITE, EcorePackage.Literals.ESTRUCTURAL_FEATURE__TRANSIENT }, diagnostic.getChildren().get(0));
                    break;
                }
            // Both sides can't be containment.
            case 10:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setContainment(true);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(2, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_BOTH_CONTAINMENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { b, a, EcorePackage.Literals.EREFERENCE__EOPPOSITE, EcorePackage.Literals.EREFERENCE__CONTAINMENT }, diagnostic.getChildren().get(0));
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_BOTH_CONTAINMENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b, EcorePackage.Literals.EREFERENCE__EOPPOSITE, EcorePackage.Literals.EREFERENCE__CONTAINMENT }, diagnostic.getChildren().get(1));
                    break;
                }
            default:
                {
                    break LOOP;
                }
        }
    }
    // The lower bound of a typed element must be >= 0.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setLowerBound(-1);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.VALID_LOWER_BOUND, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.ETYPED_ELEMENT__LOWER_BOUND }, diagnostic.getChildren().get(0));
    }
    // The upper bound of a typed elements must be -2, -1, or >= 1 not 3.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setUpperBound(-3);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.VALID_UPPER_BOUND, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND }, diagnostic.getChildren().get(0));
    }
    // The upper bound of a typed element cannot be 0.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setUpperBound(0);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.VALID_UPPER_BOUND, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND }, diagnostic.getChildren().get(0));
    }
    // The lower bound of a typed element must be less than or equal to the upper bound, unless the upper bound is -1, or -2.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setLowerBound(2);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.ETYPED_ELEMENT__LOWER_BOUND, EcorePackage.Literals.ETYPED_ELEMENT__UPPER_BOUND }, diagnostic.getChildren().get(0));
    }
    // An attribute must have a type that's a data type.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        // <-- Bad class type.
        eAttribute.setEType(EcorePackage.Literals.EOBJECT);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.ERROR, diagnostic.getSeverity());
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.EATTRIBUTE__EATTRIBUTE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_CLASS_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute.getEGenericType(), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(1));
    }
    // A generic type used as the type of an attribute must not refer to a class.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        // <-- Bad class type.
        eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
        eAttribute.setEGenericType(eGenericType);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.ERROR, diagnostic.getSeverity());
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.EATTRIBUTE__EATTRIBUTE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_CLASS_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType, EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(1));
    }
    // A reference must have a type that's a class.
    {
        EReference eReference = EcoreFactory.eINSTANCE.createEReference();
        eReference.setName("r");
        eReference.setEType(EcorePackage.Literals.ESTRING);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eReference);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference, EcorePackage.Literals.EREFERENCE__EREFERENCE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_DATA_TYPE_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference.getEGenericType(), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(1));
    }
    // A generic type used as the type of a reference must not refer to a data type.
    {
        EReference eReference = EcoreFactory.eINSTANCE.createEReference();
        eReference.setName("r");
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
        eReference.setEGenericType(eGenericType);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eReference);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference, EcorePackage.Literals.EREFERENCE__EREFERENCE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_DATA_TYPE_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference.getEGenericType(), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(1));
    }
    // A reference with a valid key that's a feature of the reference's type.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        EAttribute a;
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
            a = eAttribute;
        }
        {
            EReference eReference = EcoreFactory.eINSTANCE.createEReference();
            eReference.setName("r");
            eReference.setEType(eClass);
            eReference.getEKeys().add(a);
            eClass.getEStructuralFeatures().add(eReference);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // Reference with a key that isn't a feature of the type.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        EAttribute a;
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
            a = eAttribute;
        }
        EReference r;
        {
            EReference eReference = EcoreFactory.eINSTANCE.createEReference();
            eReference.setName("r");
            // <-- Reference's type doesn't have the key attribute as a feature.
            eReference.setEType(EcorePackage.Literals.EOBJECT);
            eReference.getEKeys().add(a);
            eClass.getEStructuralFeatures().add(eReference);
            r = eReference;
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_KEYS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { r, a, EcorePackage.Literals.EREFERENCE__EKEYS }, diagnostic.getChildren().get(0));
    }
    // A generic type can act as a wildcard only when used as the type argument of a generic type, not when used as the type of a type element.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eOperation.setEGenericType(eGenericType);
        // eGenericType.setETypeParameter(...); // <-- Neither a type parameter
        // eGenericType.setEClassifier(...); // <-- Nor a classifier.
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_WILDCARD_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType, EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER, EcorePackage.Literals.EGENERIC_TYPE__ETYPE_PARAMETER }, diagnostic.getChildren().get(0));
    }
    // A generic type must not reference both a classifier and a type parameter.
    {
        ETypeParameter T;
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("T");
            eClass.getETypeParameters().add(eTypeParameter);
            T = eTypeParameter;
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("U");
            eClass.getETypeParameters().add(eTypeParameter);
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                // <-- Both a type parameter
                eGenericType.setETypeParameter(T);
                // <-- And a classifier.
                eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
                eTypeParameter.getEBounds().add(eGenericType);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_NO_TYPE_PARAMETER_AND_CLASSIFIER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getETypeParameters().get(1).getEBounds().get(0), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER, EcorePackage.Literals.EGENERIC_TYPE__ETYPE_PARAMETER }, diagnostic.getChildren().get(0));
    }
    // A generic super type must refer to a class.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            // <-- Bad reference to data type.
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_CLASS_REQUIRED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getEGenericSuperTypes().get(0), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(0));
    }
    // No two generic super types may reference the same class.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            // <-- Both refer to EObject.
            eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            // <-- Both refer to EObject.
            eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_SUPER_TYPES_DUPLICATE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEGenericSuperTypes().get(0), eClass.getEGenericSuperTypes().get(1), EcorePackage.Literals.ECLASS__EGENERIC_SUPER_TYPES }, diagnostic.getChildren().get(0));
    }
    // A generic type used as a type argument can be a wildcard.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic type used as a valid wildcard can have a lower bound.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                {
                    EGenericType eGenericTypeLowerBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeLowerBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    eGenericTypeArgument.setEUpperBound(eGenericTypeLowerBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic type used as a valid wildcard can have an upper bound.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                {
                    EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    eGenericTypeArgument.setEUpperBound(eGenericTypeUpperBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic type can't have both an upper and lower bound.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                {
                    EGenericType eGenericTypeLowerBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeLowerBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    // <-- A lower bound.
                    eGenericTypeArgument.setELowerBound(eGenericTypeLowerBound);
                }
                {
                    EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    // <-- And an upper bound.
                    eGenericTypeArgument.setEUpperBound(eGenericTypeUpperBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS_NO_LOWER_AND_UPPER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute.getEGenericType().getETypeArguments().get(0), EcorePackage.Literals.EGENERIC_TYPE__ELOWER_BOUND, EcorePackage.Literals.EGENERIC_TYPE__EUPPER_BOUND }, diagnostic.getChildren().get(0));
    }
    // A generic type can't have an upper bound except when used as a type argument.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
            {
                EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                // <-- Can't have bounds in this context.
                eGenericType.setEUpperBound(eGenericTypeUpperBound);
            }
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS_NOT_ALLOWED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getEGenericSuperTypes().get(0), EcorePackage.Literals.EGENERIC_TYPE__EUPPER_BOUND }, diagnostic.getChildren().get(0));
    }
    // A generic type with bounds can't also refer to a type parameter or classifier
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                // <-- Can't have classifier with bounds.
                eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
                {
                    EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    // <-- Can't have bounds with classifier.
                    eGenericTypeArgument.setEUpperBound(eGenericTypeUpperBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS_NO_BOUNDS_WITH_TYPE_PARAMETER_OR_CLASSIFIER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute.getEGenericType().getETypeArguments().get(0), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(0));
    }
    // Generic type with arguments must have a classifier.
    {
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        {
            EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            // Can't have arguments because there is no classifier.
            eGenericType.getETypeArguments().add(eGenericTypeArgument);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eGenericType);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_NONE_ALLOWED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType, EcorePackage.Literals.EGENERIC_TYPE__ETYPE_ARGUMENTS }, diagnostic.getChildren().get(0));
    }
    // Generic type with classifier that specifies type parameters must have corresponding arguments,
    // but it's only a warning, analogous to a raw type warning, to have no arguments when there are type parameters.
    {
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eGenericType);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.WARNING, EcoreValidator.CONSISTENT_ARGUMENTS_NONE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType, EcorePackage.Literals.EGENERIC_TYPE__ETYPE_ARGUMENTS }, diagnostic.getChildren().get(0));
    }
    // Generic type's classifier cannot specify a primitive type except as the generic type of a typed element.
    {
        EClass aClass = EcoreFactory.eINSTANCE.createEClass();
        aClass.setName("AClass");
        ETypeParameter e = EcoreFactory.eINSTANCE.createETypeParameter();
        e.setName("E");
        aClass.getETypeParameters().add(e);
        EClass bClass = EcoreFactory.eINSTANCE.createEClass();
        bClass.setName("BClass");
        EGenericType superType = EcoreFactory.eINSTANCE.createEGenericType();
        superType.setEClassifier(aClass);
        EGenericType typeArgument = EcoreFactory.eINSTANCE.createEGenericType();
        typeArgument.setEClassifier(EcorePackage.Literals.EINT);
        superType.getETypeArguments().add(typeArgument);
        bClass.getEGenericSuperTypes().add(superType);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(bClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_PRIMITIVE_TYPE_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { typeArgument, EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER }, diagnostic.getChildren().get(0));
    }
    // A generic type with classifier that specifies type parameters and that has arguments must have a matching number of them.
    {
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
        {
            EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            eGenericType.getETypeArguments().add(eGenericTypeArgument);
        }
        {
            EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            // <-- A second argument is not allowed.
            eGenericType.getETypeArguments().add(eGenericTypeArgument);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eGenericType);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_INCORRECT_NUMBER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType, EcorePackage.Literals.EGENERIC_TYPE__ETYPE_ARGUMENTS }, diagnostic.getChildren().get(0));
    }
    // Generic type must not reference an out of scope type parameter
    {
        ETypeParameter T;
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
            eOperation.setName("f");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eOperation.getETypeParameters().add(eTypeParameter);
                T = eTypeParameter;
            }
            eClass.getEOperations().add(eOperation);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setETypeParameter(T);
                eAttribute.setEGenericType(eGenericType);
            }
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_TYPE_PARAMETER_NOT_IN_SCOPE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getEStructuralFeatures().get(0).getEGenericType(), EcorePackage.Literals.EGENERIC_TYPE__ETYPE_PARAMETER }, diagnostic.getChildren().get(0));
    }
    // Generic type must not make a forward reference to a type parameter
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("T");
            eClass.getETypeParameters().add(eTypeParameter);
            {
                EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                eBound.setETypeParameter(eTypeParameter);
                eTypeParameter.getEBounds().add(eBound);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_TYPE_PARAMETER_NOT_IN_SCOPE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getETypeParameters().get(0).getEBounds().get(0), EcorePackage.Literals.EGENERIC_TYPE__ETYPE_PARAMETER }, diagnostic.getChildren().get(0));
    }
    // Type parameter can be used as the type argument of the
    // bound
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("T");
            eClass.getETypeParameters().add(eTypeParameter);
            {
                EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                eBound.setEClassifier(eClass);
                eTypeParameter.getEBounds().add(eBound);
                EGenericType typeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                typeArgument.setETypeParameter(eTypeParameter);
                eBound.getETypeArguments().add(typeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic super type can validly use type arguments.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(B);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic super type must not have wildcard type arguments.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(B);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_WILDCARD_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { B.getEGenericSuperTypes().get(0).getETypeArguments().get(0), EcorePackage.Literals.EGENERIC_TYPE__ECLASSIFIER, EcorePackage.Literals.EGENERIC_TYPE__ETYPE_PARAMETER }, diagnostic.getChildren().get(0));
    }
    // Generic super types can pass template parameters in complex ways with redundant diamond inheritance.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        EClass C;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("C");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(B);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            C = eClass;
        }
        assertEquals(2, C.getEAllGenericSuperTypes().size());
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(C);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // Generic super types can pass instantiate template parameters in complex ways with redundant diamond inheritance.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        EClass C;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("C");
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Use EString for A here.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(B);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Both use EString for B and hence indirectly for A.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            C = eClass;
        }
        assertEquals(2, C.getEAllGenericSuperTypes().size());
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(C);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // Generic super types can pass instantiate template parameters in complex ways with redundant diamond inheritance.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        EClass C;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("C");
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Use EString for A here.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(B);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Both use EInteger for B and hence indirectly for A.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EINTEGER_OBJECT);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            C = eClass;
        }
        assertEquals(3, C.getEAllGenericSuperTypes().size());
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(C);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_SUPER_TYPES_CONFLICT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { C, C.getEAllGenericSuperTypes().get(1), C.getEAllGenericSuperTypes().get(0), EcorePackage.Literals.ECLASS__EALL_GENERIC_SUPER_TYPES }, diagnostic.getChildren().get(0));
    }
    LOOP: for (int i = 0; i < 100; ++i) {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        // interface X {}
        //
        EClass X;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("X");
            ePackage.getEClassifiers().add(eClass);
            X = eClass;
        }
        // interface Y extends X {}
        //
        EClass Y;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("Y");
            eClass.getESuperTypes().add(X);
            ePackage.getEClassifiers().add(eClass);
            Y = eClass;
        }
        // interface Container<E> {}
        //
        EClass Container;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("Container");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("E");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            ePackage.getEClassifiers().add(eClass);
            Container = eClass;
        }
        // interface A<T extends Container<?>> {}
        //
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
                {
                    EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eBound.setEClassifier(Container);
                    {
                        EGenericType eTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                        if (i == 2 || i == 3) {
                            // <-- Container<?> or Container<X>
                            eTypeArgument.setEClassifier(X);
                        }
                        eBound.getETypeArguments().add(eTypeArgument);
                    }
                    eTypeParameter.getEBounds().add(eBound);
                }
            }
            ePackage.getEClassifiers().add(eClass);
            A = eClass;
        }
        // interface B<T extends Container<EString>> extends A<T> {}
        //
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            ETypeParameter T;
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                //
                if (i != 1) {
                    EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eBound.setEClassifier(Container);
                    {
                        EGenericType eTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                        if (i == 2) {
                            // <-- Container<X> is fine
                            eTypeArgument.setEClassifier(X);
                        } else if (i == 3) {
                            // <-- Container<Y> is an error
                            eTypeArgument.setEClassifier(Y);
                        } else {
                            // <-- Container<EString> is fine.
                            eTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                        }
                        eBound.getETypeArguments().add(eTypeArgument);
                    }
                    eTypeParameter.getEBounds().add(eBound);
                }
                eClass.getETypeParameters().add(eTypeParameter);
                T = eTypeParameter;
            }
            {
                EGenericType eGenericSuperType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericSuperType.setEClassifier(A);
                {
                    EGenericType eTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eTypeArgument.setETypeParameter(T);
                    eGenericSuperType.getETypeArguments().add(eTypeArgument);
                }
                eClass.getEGenericSuperTypes().add(eGenericSuperType);
            }
            ePackage.getEClassifiers().add(eClass);
            B = eClass;
        }
        switch(i) {
            case 0:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            case 1:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_INVALID_SUBSTITUTION, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { B.getEGenericSuperTypes().get(0), B.getEGenericSuperTypes().get(0).getETypeArguments().get(0), A.getETypeParameters().get(0), EcorePackage.Literals.EGENERIC_TYPE__ETYPE_ARGUMENTS }, diagnostic.getChildren().get(0));
                    break;
                }
            case 2:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            case 3:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_INVALID_SUBSTITUTION, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { B.getEGenericSuperTypes().get(0), B.getEGenericSuperTypes().get(0).getETypeArguments().get(0), A.getETypeParameters().get(0), EcorePackage.Literals.EGENERIC_TYPE__ETYPE_ARGUMENTS }, diagnostic.getChildren().get(0));
                    break;
                }
            default:
                {
                    break LOOP;
                }
        }
    }
}
Example 11
Project: fsmls-master  File: EEnumItemProvider.java View source code
/**
   * This handles model notifications by calling {@link #updateChildren} to update any cached
   * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
public void notifyChanged(Notification notification) {
    updateChildren(notification);
    switch(notification.getFeatureID(EEnum.class)) {
        case EcorePackage.EENUM__ELITERALS:
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
            return;
    }
    super.notifyChanged(notification);
}
Example 12
Project: org.eclipse.emf-master  File: EcoreValidationTest.java View source code
public void testEcoreValidator() {
    // Validate that the Ecore package instance itself is okay.
    {
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(EcorePackage.eINSTANCE);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // An annotation with an empty string for the source isn't valid.
    {
        EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        eAnnotation.setSource("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAnnotation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_SOURCE_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAnnotation }, diagnostic.getChildren().get(0));
    }
    // An annotation with a source containing a space isn't valid.
    {
        EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        eAnnotation.setSource("a b");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAnnotation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_SOURCE_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAnnotation }, diagnostic.getChildren().get(0));
    }
    // Two map entries with the same key are not valid.
    //
    {
        EAnnotation eAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        {
            EObject entry = EcoreFactory.eINSTANCE.create(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY);
            entry.eSet(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY__KEY, "a");
            @SuppressWarnings("unchecked") Map.Entry<String, String> stringToStringMapEntry = (Map.Entry<String, String>) entry;
            eAnnotation.getDetails().add(stringToStringMapEntry);
        }
        {
            EObject entry = EcoreFactory.eINSTANCE.create(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY);
            entry.eSet(EcorePackage.Literals.ESTRING_TO_STRING_MAP_ENTRY__KEY, "a");
            @SuppressWarnings("unchecked") Map.Entry<String, String> stringToStringMapEntry = (Map.Entry<String, String>) entry;
            eAnnotation.getDetails().add(stringToStringMapEntry);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAnnotation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MAP_ENTRY_UNIQUE, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eAnnotation, EcorePackage.Literals.EANNOTATION__DETAILS, eAnnotation.getDetails().get(1), eAnnotation.getDetails().get(0) }, diagnostic.getChildren().get(0));
    }
    // A named element without a name is invalid, unless strict element names are disabled.
    //
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
        diagnostic = Diagnostician.INSTANCE.validate(eClass, Collections.singletonMap(EcoreValidator.STRICT_NAMED_ELEMENT_NAMES, Boolean.FALSE));
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // An instance type name with type arguments is valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("_<_>");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // An instance type name that's just an empty string is not valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_INSTANCE_TYPE_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
    }
    // An instance type name with unbalanced "<" is not valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("_<_");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_INSTANCE_TYPE_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
    }
    // An instance type name with unbalanced "[" is not valid.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceTypeName("_[");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_INSTANCE_TYPE_NAME, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
    }
    // A class that is an interface must also be abstract.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInterface(true);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.INTERFACE_IS_ABSTRACT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
    }
    // A class can't have more than one attribute that is an ID.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setID(true);
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("b");
            eAttribute.setID(true);
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.AT_MOST_ONE_ID, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEAttributes().get(1), eClass.getEAttributes().get(0) }, diagnostic.getChildren().get(0));
    }
    // A class can't have two attributes with the same name.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_FEATURE_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEAttributes().get(1), eClass.getEAttributes().get(0) }, diagnostic.getChildren().get(0));
    }
    // A class can't have two attributes with the matching names.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("A_");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.WARNING, EcoreValidator.UNIQUE_FEATURE_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEAttributes().get(1), eClass.getEAttributes().get(0) }, diagnostic.getChildren().get(0));
    }
    // A class can't have two operations with matching signatures.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
            eOperation.setName("a");
            {
                EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
                eParameter.setName("x");
                eParameter.setEType(XMLTypePackage.Literals.HEX_BINARY);
                eOperation.getEParameters().add(eParameter);
            }
            eClass.getEOperations().add(eOperation);
        }
        {
            EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
            eOperation.setName("a");
            {
                EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
                eParameter.setName("x");
                eParameter.setEType(XMLTypePackage.Literals.BASE64_BINARY);
                eOperation.getEParameters().add(eParameter);
            }
            eClass.getEOperations().add(eOperation);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_OPERATION_SIGNATURES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEOperations().get(1), eClass.getEOperations().get(0) }, diagnostic.getChildren().get(0));
    }
    // A class can't have circular super types.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.getESuperTypes().add(eClass);
        eClass.setName("_");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.NO_CIRCULAR_SUPER_TYPES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
    }
    // A map entry class must have a key feature and a value feature.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        eClass.setInstanceClassName("java.util.Map$Entry");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_MAP_ENTRY_CLASS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_MAP_ENTRY_CLASS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass }, diagnostic.getChildren().get(1));
    }
    // Two enum literals can't have the same name nor matching names.
    {
        EEnum eEnum = EcoreFactory.eINSTANCE.createEEnum();
        eEnum.setName("_");
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("a");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("a");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("A");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eEnum);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_ENUMERATOR_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eEnum, eEnum.getELiterals().get(1), eEnum.getELiterals().get(0) }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.WARNING, EcoreValidator.UNIQUE_ENUMERATOR_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eEnum, eEnum.getELiterals().get(2), eEnum.getELiterals().get(0) }, diagnostic.getChildren().get(1));
    }
    // Two enum literals can't have the same literals.
    {
        EEnum eEnum = EcoreFactory.eINSTANCE.createEEnum();
        eEnum.setName("_");
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("a");
            eEnumLiteral.setLiteral("x");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        {
            EEnumLiteral eEnumLiteral = EcoreFactory.eINSTANCE.createEEnumLiteral();
            eEnumLiteral.setName("b");
            eEnumLiteral.setLiteral("x");
            eEnum.getELiterals().add(eEnumLiteral);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eEnum);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_ENUMERATOR_LITERALS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eEnum, eEnum.getELiterals().get(1), eEnum.getELiterals().get(0) }, diagnostic.getChildren().get(0));
    }
    // Two parameters cannot have the same name.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        {
            EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
            eParameter.setName("a");
            eParameter.setEType(EcorePackage.Literals.ESTRING);
            eOperation.getEParameters().add(eParameter);
        }
        {
            EParameter eParameter = EcoreFactory.eINSTANCE.createEParameter();
            eParameter.setName("a");
            eParameter.setEType(EcorePackage.Literals.ESTRING);
            eOperation.getEParameters().add(eParameter);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_PARAMETER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eOperation, eOperation.getEParameters().get(1), eOperation.getEParameters().get(0) }, diagnostic.getChildren().get(0));
    }
    // Two type parameters cannot have the same name.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eOperation.getETypeParameters().add(eTypeParameter);
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eOperation.getETypeParameters().add(eTypeParameter);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_TYPE_PARAMETER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eOperation, eOperation.getETypeParameters().get(1), eOperation.getETypeParameters().get(0) }, diagnostic.getChildren().get(0));
    }
    // Two type parameters cannot have the same name.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eClass.getETypeParameters().add(eTypeParameter);
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("A");
            eClass.getETypeParameters().add(eTypeParameter);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_TYPE_PARAMETER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getETypeParameters().get(1), eClass.getETypeParameters().get(0) }, diagnostic.getChildren().get(0));
    }
    // A void operation must have upper bound 1.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        eOperation.setUpperBound(2);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.NO_REPEATING_VOID, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eOperation }, diagnostic.getChildren().get(0));
    }
    // A package must have an nsURI.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsPrefix("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage }, diagnostic.getChildren().get(0));
    }
    // A null string is not a well formed nsURI for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("");
        ePackage.setNsPrefix("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage }, diagnostic.getChildren().get(0));
    }
    // A string with a space is not a well formed nsURI for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("a b");
        ePackage.setNsPrefix("");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_URI, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage }, diagnostic.getChildren().get(0));
    }
    // A prefix that starts with "xml" is not a well formed nsPrefix for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("xml");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_PREFIX, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage }, diagnostic.getChildren().get(0));
    }
    // A prefix that isn't an NCName because it contains a ":" is not a well formed nsPrefix for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("a:b");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_PREFIX, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage }, diagnostic.getChildren().get(0));
    }
    // A null prefix that an NCName and is not a well formed nsPrefix for a package.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.WELL_FORMED_NS_PREFIX, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage }, diagnostic.getChildren().get(0));
    }
    // Two subpackages cannot have the same name.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("a");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("b");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_SUBPACKAGE_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getESubpackages().get(1), ePackage.getESubpackages().get(0) }, diagnostic.getChildren().get(0));
    }
    // Two classifiers cannot have the same name nor matching names.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("a");
            ePackage.getEClassifiers().add(eClass);
        }
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("a");
            ePackage.getEClassifiers().add(eClass);
        }
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            ePackage.getEClassifiers().add(eClass);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_CLASSIFIER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getEClassifiers().get(1), ePackage.getEClassifiers().get(0) }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.WARNING, EcoreValidator.UNIQUE_CLASSIFIER_NAMES, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getEClassifiers().get(2), ePackage.getEClassifiers().get(0) }, diagnostic.getChildren().get(1));
    }
    // Two packages cannot have the same namespace URI.
    {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EPackage eSubpackage = EcoreFactory.eINSTANCE.createEPackage();
            eSubpackage.setName("a");
            eSubpackage.setNsURI("_");
            eSubpackage.setNsPrefix("");
            ePackage.getESubpackages().add(eSubpackage);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_NS_URIS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage, ePackage.getESubpackages().get(0) }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.UNIQUE_NS_URIS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { ePackage.getESubpackages().get(0), ePackage }, diagnostic.getChildren().get(1));
    }
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("_");
        eAttribute.setEType(EcorePackage.Literals.ERESOURCE);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TRANSIENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute }, diagnostic.getChildren().get(0));
    }
    // There are many ways for opposites to be inconsistent so we'll test them all.
    LOOP: for (int i = 0; i < 100; ++i) {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        EClass A;
        EReference a;
        EClass B;
        EReference b;
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            ePackage.getEClassifiers().add(eClass);
            {
                EReference eReference = EcoreFactory.eINSTANCE.createEReference();
                eReference.setName("b");
                eClass.getEStructuralFeatures().add(eReference);
                b = eReference;
            }
            A = eClass;
        }
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            ePackage.getEClassifiers().add(eClass);
            {
                EReference eReference = EcoreFactory.eINSTANCE.createEReference();
                eReference.setName("a");
                eClass.getEStructuralFeatures().add(eReference);
                a = eReference;
            }
            B = eClass;
        }
        switch(i) {
            // Valid unidirectional references.
            case 0:
                {
                    a.setEType(A);
                    b.setEType(B);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // Valid bidirectional references.
            case 1:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    b.setEType(B);
                    b.setEOpposite(a);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // The opposite must be a feature of the reference's type.
            case 2:
                {
                    // <-- Bad type that doesn't have a b feature
                    a.setEType(B);
                    a.setEOpposite(b);
                    b.setEType(B);
                    b.setEOpposite(a);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_NOT_FROM_TYPE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b, B }, diagnostic.getChildren().get(0));
                    break;
                }
            // The opposite of the opposite must be the feature itself.
            case 3:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    b.setEType(B);
                    //  b.setEOpposite(a); <-- No opposite for the opposite
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_NOT_MATCHING, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b, null }, diagnostic.getChildren().get(0));
                    break;
                }
            // Valid bidirectional container/containment references.
            case 4:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // A container reference must have upper bound 1.
            case 5:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    // <-- Bad upper bound.
                    b.setUpperBound(2);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.SINGLE_CONTAINER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { b }, diagnostic.getChildren().get(0));
                    break;
                }
            // Valid bidirectional references that are transient at both ends.
            case 6:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setTransient(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setTransient(true);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // Valid bidirectional references with one transient end that doesn't resolve proxy.
            case 7:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setTransient(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setResolveProxies(false);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // Valid bidirectional references with on transient end that's a container.
            case 8:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setTransient(true);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            // The opposite of a transient bidirectional reference must either be transient as, non-proxy resolving, or a container.
            case 9:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setTransient(true);
                    // a.setContainment(true); <-- Must be a containment for b to be a container and hence be valid.
                    b.setEType(B);
                    b.setEOpposite(a);
                    // b.setTransient(true);  <-- Must be transient.
                    // b.setResolveProxies(false); <-- Or must not resolve proxies.
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_BAD_TRANSIENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b }, diagnostic.getChildren().get(0));
                    break;
                }
            // Both sides can't be containment.
            case 10:
                {
                    a.setEType(A);
                    a.setEOpposite(b);
                    a.setContainment(true);
                    b.setEType(B);
                    b.setEOpposite(a);
                    b.setContainment(true);
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(2, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_BOTH_CONTAINMENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { b, a }, diagnostic.getChildren().get(0));
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_OPPOSITE_BOTH_CONTAINMENT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { a, b }, diagnostic.getChildren().get(1));
                    break;
                }
            default:
                {
                    break LOOP;
                }
        }
    }
    // The lower bound of a typed element must be >= 0.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setLowerBound(-1);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.VALID_LOWER_BOUND, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute }, diagnostic.getChildren().get(0));
    }
    // The upper bound of a typed elements must be -2, -1, or >= 1 not 3.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setUpperBound(-3);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.VALID_UPPER_BOUND, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute }, diagnostic.getChildren().get(0));
    }
    // The upper bound of a typed element cannot be 0.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setUpperBound(0);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.VALID_UPPER_BOUND, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute }, diagnostic.getChildren().get(0));
    }
    // The lower bound of a typed element must be less than or equal to the upper bound, unless the upper bound is -1, or -2.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        eAttribute.setEType(EcorePackage.Literals.ESTRING);
        eAttribute.setLowerBound(2);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute }, diagnostic.getChildren().get(0));
    }
    // An attribute must have a type that's a data type.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        // <-- Bad class type.
        eAttribute.setEType(EcorePackage.Literals.EOBJECT);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.ERROR, diagnostic.getSeverity());
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.EATTRIBUTE__EATTRIBUTE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_CLASS_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute.getEGenericType() }, diagnostic.getChildren().get(1));
    }
    // A generic type used as the type of an attribute must not refer to a class.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        // <-- Bad class type.
        eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
        eAttribute.setEGenericType(eGenericType);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.ERROR, diagnostic.getSeverity());
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute, EcorePackage.Literals.EATTRIBUTE__EATTRIBUTE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_CLASS_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType }, diagnostic.getChildren().get(1));
    }
    // A reference must have a type that's a class.
    {
        EReference eReference = EcoreFactory.eINSTANCE.createEReference();
        eReference.setName("r");
        eReference.setEType(EcorePackage.Literals.ESTRING);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eReference);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference, EcorePackage.Literals.EREFERENCE__EREFERENCE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_DATA_TYPE_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference.getEGenericType() }, diagnostic.getChildren().get(1));
    }
    // A generic type used as the type of a reference must not refer to a data type.
    {
        EReference eReference = EcoreFactory.eINSTANCE.createEReference();
        eReference.setName("r");
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
        eReference.setEGenericType(eGenericType);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eReference);
        assertEquals(2, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EObjectValidator.EOBJECT__EVERY_MULTIPCITY_CONFORMS, EObjectValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference, EcorePackage.Literals.EREFERENCE__EREFERENCE_TYPE }, diagnostic.getChildren().get(0));
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_DATA_TYPE_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eReference.getEGenericType() }, diagnostic.getChildren().get(1));
    }
    // A reference with a valid key that's a feature of the reference's type.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        EAttribute a;
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
            a = eAttribute;
        }
        {
            EReference eReference = EcoreFactory.eINSTANCE.createEReference();
            eReference.setName("r");
            eReference.setEType(eClass);
            eReference.getEKeys().add(a);
            eClass.getEStructuralFeatures().add(eReference);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // Reference with a key that isn't a feature of the type.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        EAttribute a;
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            eAttribute.setEType(EcorePackage.Literals.ESTRING);
            eClass.getEStructuralFeatures().add(eAttribute);
            a = eAttribute;
        }
        EReference r;
        {
            EReference eReference = EcoreFactory.eINSTANCE.createEReference();
            eReference.setName("r");
            // <-- Reference's type doesn't have the key attribute as a feature.
            eReference.setEType(EcorePackage.Literals.EOBJECT);
            eReference.getEKeys().add(a);
            eClass.getEStructuralFeatures().add(eReference);
            r = eReference;
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_KEYS, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { r, a }, diagnostic.getChildren().get(0));
    }
    // A generic type can act as a wildcard only when used as the type argument of a generic type, not when used as the type of a type element.
    {
        EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
        eOperation.setName("_");
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eOperation.setEGenericType(eGenericType);
        // eGenericType.setETypeParameter(...); // <-- Neither a type parameter
        // eGenericType.setEClassifier(...); // <-- Nor a classifier.
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eOperation);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_WILDCARD_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType }, diagnostic.getChildren().get(0));
    }
    // A generic type must not reference both a classifier and a type parameter.
    {
        ETypeParameter T;
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("T");
            eClass.getETypeParameters().add(eTypeParameter);
            T = eTypeParameter;
        }
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("U");
            eClass.getETypeParameters().add(eTypeParameter);
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                // <-- Both a type parameter
                eGenericType.setETypeParameter(T);
                // <-- And a classifier.
                eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
                eTypeParameter.getEBounds().add(eGenericType);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_NO_TYPE_PARAMETER_AND_CLASSIFIER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getETypeParameters().get(1).getEBounds().get(0) }, diagnostic.getChildren().get(0));
    }
    // A generic super type must refer to a class.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            // <-- Bad reference to data type.
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_CLASS_REQUIRED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getEGenericSuperTypes().get(0) }, diagnostic.getChildren().get(0));
    }
    // No two generic super types may reference the same class.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            // <-- Both refer to EObject.
            eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            // <-- Both refer to EObject.
            eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_SUPER_TYPES_DUPLICATE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass, eClass.getEGenericSuperTypes().get(1), eClass.getEGenericSuperTypes().get(0) }, diagnostic.getChildren().get(0));
    }
    // A generic type used as a type argument can be a wildcard.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic type used as a valid wildcard can have a lower bound.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                {
                    EGenericType eGenericTypeLowerBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeLowerBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    eGenericTypeArgument.setEUpperBound(eGenericTypeLowerBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic type used as a valid wildcard can have an upper bound.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                {
                    EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    eGenericTypeArgument.setEUpperBound(eGenericTypeUpperBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic type can't have both an upper and lower bound.
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                {
                    EGenericType eGenericTypeLowerBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeLowerBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    // <-- A lower bound.
                    eGenericTypeArgument.setELowerBound(eGenericTypeLowerBound);
                }
                {
                    EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    // <-- And an upper bound.
                    eGenericTypeArgument.setEUpperBound(eGenericTypeUpperBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS_NO_LOWER_AND_UPPER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute.getEGenericType().getETypeArguments().get(0) }, diagnostic.getChildren().get(0));
    }
    // A generic type can't have an upper bound except when used as a type argument.
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EOBJECT);
            {
                EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                // <-- Can't have bounds in this context.
                eGenericType.setEUpperBound(eGenericTypeUpperBound);
            }
            eClass.getEGenericSuperTypes().add(eGenericType);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS_NOT_ALLOWED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getEGenericSuperTypes().get(0) }, diagnostic.getChildren().get(0));
    }
    // A generic type with bounds can't also refer to a type parameter or classifier
    {
        EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
        eAttribute.setName("a");
        {
            EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
            eAttribute.setEGenericType(eGenericType);
            {
                EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                // <-- Can't have classifier with bounds.
                eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
                {
                    EGenericType eGenericTypeUpperBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeUpperBound.setEClassifier(EcorePackage.Literals.EOBJECT);
                    // <-- Can't have bounds with classifier.
                    eGenericTypeArgument.setEUpperBound(eGenericTypeUpperBound);
                }
                eGenericType.getETypeArguments().add(eGenericTypeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eAttribute);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_BOUNDS_NO_BOUNDS_WITH_TYPE_PARAMETER_OR_CLASSIFIER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eAttribute.getEGenericType().getETypeArguments().get(0) }, diagnostic.getChildren().get(0));
    }
    // Generic type with arguments must have a classifier.
    {
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        {
            EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            // Can't have arguments because there is no classifier.
            eGenericType.getETypeArguments().add(eGenericTypeArgument);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eGenericType);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_NONE_ALLOWED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType }, diagnostic.getChildren().get(0));
    }
    // Generic type with classifier that specifies type parameters must have corresponding arguments,
    // but it's only a warning, analogous to a raw type warning, to have no arguments when there are type parameters.
    {
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eGenericType);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.WARNING, EcoreValidator.CONSISTENT_ARGUMENTS_NONE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType }, diagnostic.getChildren().get(0));
    }
    // Generic type's classifier cannot specify a primitive type except as the generic type of a typed element.
    {
        EClass aClass = EcoreFactory.eINSTANCE.createEClass();
        aClass.setName("AClass");
        ETypeParameter e = EcoreFactory.eINSTANCE.createETypeParameter();
        e.setName("E");
        aClass.getETypeParameters().add(e);
        EClass bClass = EcoreFactory.eINSTANCE.createEClass();
        bClass.setName("BClass");
        EGenericType superType = EcoreFactory.eINSTANCE.createEGenericType();
        superType.setEClassifier(aClass);
        EGenericType typeArgument = EcoreFactory.eINSTANCE.createEGenericType();
        typeArgument.setEClassifier(EcorePackage.Literals.EINT);
        superType.getETypeArguments().add(typeArgument);
        bClass.getEGenericSuperTypes().add(superType);
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(bClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_PRIMITIVE_TYPE_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { typeArgument }, diagnostic.getChildren().get(0));
    }
    // A generic type with classifier that specifies type parameters and that has arguments must have a matching number of them.
    {
        EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
        eGenericType.setEClassifier(EcorePackage.Literals.EJAVA_CLASS);
        {
            EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            eGenericType.getETypeArguments().add(eGenericTypeArgument);
        }
        {
            EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
            eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EJAVA_OBJECT);
            // <-- A second argument is not allowed.
            eGenericType.getETypeArguments().add(eGenericTypeArgument);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eGenericType);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_INCORRECT_NUMBER, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eGenericType }, diagnostic.getChildren().get(0));
    }
    // Generic type must not reference an out of scope type parameter
    {
        ETypeParameter T;
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            EOperation eOperation = EcoreFactory.eINSTANCE.createEOperation();
            eOperation.setName("f");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eOperation.getETypeParameters().add(eTypeParameter);
                T = eTypeParameter;
            }
            eClass.getEOperations().add(eOperation);
        }
        {
            EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
            eAttribute.setName("a");
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setETypeParameter(T);
                eAttribute.setEGenericType(eGenericType);
            }
            eClass.getEStructuralFeatures().add(eAttribute);
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_TYPE_PARAMETER_NOT_IN_SCOPE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getEStructuralFeatures().get(0).getEGenericType() }, diagnostic.getChildren().get(0));
    }
    // Generic type must not make a forward reference to a type parameter
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("T");
            eClass.getETypeParameters().add(eTypeParameter);
            {
                EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                eBound.setETypeParameter(eTypeParameter);
                eTypeParameter.getEBounds().add(eBound);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_TYPE_PARAMETER_NOT_IN_SCOPE, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { eClass.getETypeParameters().get(0).getEBounds().get(0) }, diagnostic.getChildren().get(0));
    }
    // Type parameter can be used as the type argument of the
    // bound
    {
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        eClass.setName("_");
        {
            ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
            eTypeParameter.setName("T");
            eClass.getETypeParameters().add(eTypeParameter);
            {
                EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                eBound.setEClassifier(eClass);
                eTypeParameter.getEBounds().add(eBound);
                EGenericType typeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                typeArgument.setETypeParameter(eTypeParameter);
                eBound.getETypeArguments().add(typeArgument);
            }
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(eClass);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic super type can validly use type arguments.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(B);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // A generic super type must not have wildcard type arguments.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(B);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_TYPE_WILDCARD_NOT_PERMITTED, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { B.getEGenericSuperTypes().get(0).getETypeArguments().get(0) }, diagnostic.getChildren().get(0));
    }
    // Generic super types can pass template parameters in complex ways with redundant diamond inheritance.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        EClass C;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("C");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(B);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            C = eClass;
        }
        assertEquals(2, C.getEAllGenericSuperTypes().size());
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(C);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // Generic super types can pass instantiate template parameters in complex ways with redundant diamond inheritance.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        EClass C;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("C");
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Use EString for A here.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(B);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Both use EString for B and hence indirectly for A.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            C = eClass;
        }
        assertEquals(2, C.getEAllGenericSuperTypes().size());
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(C);
        assertEquals(Diagnostic.OK, diagnostic.getSeverity());
    }
    // Generic super types can pass instantiate template parameters in complex ways with redundant diamond inheritance.
    {
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            A = eClass;
        }
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eGenericTypeArgument.setETypeParameter(eClass.getETypeParameters().get(0));
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            B = eClass;
        }
        EClass C;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("C");
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(A);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Use EString for A here.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            {
                EGenericType eGenericType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericType.setEClassifier(B);
                eClass.getEGenericSuperTypes().add(eGenericType);
                {
                    EGenericType eGenericTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    // <-- Both use EInteger for B and hence indirectly for A.
                    eGenericTypeArgument.setEClassifier(EcorePackage.Literals.EINTEGER_OBJECT);
                    eGenericType.getETypeArguments().add(eGenericTypeArgument);
                }
            }
            C = eClass;
        }
        assertEquals(3, C.getEAllGenericSuperTypes().size());
        Diagnostic diagnostic = Diagnostician.INSTANCE.validate(C);
        assertEquals(1, diagnostic.getChildren().size());
        assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_SUPER_TYPES_CONFLICT, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { C, C.getEAllGenericSuperTypes().get(1), C.getEAllGenericSuperTypes().get(0) }, diagnostic.getChildren().get(0));
    }
    LOOP: for (int i = 0; i < 100; ++i) {
        EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
        ePackage.setName("_");
        ePackage.setNsURI("_");
        ePackage.setNsPrefix("");
        // interface X {}
        //
        EClass X;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("X");
            ePackage.getEClassifiers().add(eClass);
            X = eClass;
        }
        // interface Y extends X {}
        //
        EClass Y;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("Y");
            eClass.getESuperTypes().add(X);
            ePackage.getEClassifiers().add(eClass);
            Y = eClass;
        }
        // interface Container<E> {}
        //
        EClass Container;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("Container");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("E");
                eClass.getETypeParameters().add(eTypeParameter);
            }
            ePackage.getEClassifiers().add(eClass);
            Container = eClass;
        }
        // interface A<T extends Container<?>> {}
        //
        EClass A;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("A");
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                eClass.getETypeParameters().add(eTypeParameter);
                {
                    EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eBound.setEClassifier(Container);
                    {
                        EGenericType eTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                        if (i == 2 || i == 3) {
                            // <-- Container<?> or Container<X> 
                            eTypeArgument.setEClassifier(X);
                        }
                        eBound.getETypeArguments().add(eTypeArgument);
                    }
                    eTypeParameter.getEBounds().add(eBound);
                }
            }
            ePackage.getEClassifiers().add(eClass);
            A = eClass;
        }
        // interface B<T extends Container<EString>> extends A<T> {}
        //
        EClass B;
        {
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            eClass.setName("B");
            ETypeParameter T;
            {
                ETypeParameter eTypeParameter = EcoreFactory.eINSTANCE.createETypeParameter();
                eTypeParameter.setName("T");
                //
                if (i != 1) {
                    EGenericType eBound = EcoreFactory.eINSTANCE.createEGenericType();
                    eBound.setEClassifier(Container);
                    {
                        EGenericType eTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                        if (i == 2) {
                            // <-- Container<X> is fine
                            eTypeArgument.setEClassifier(X);
                        } else if (i == 3) {
                            // <-- Container<Y> is an error
                            eTypeArgument.setEClassifier(Y);
                        } else {
                            // <-- Container<EString> is fine.
                            eTypeArgument.setEClassifier(EcorePackage.Literals.ESTRING);
                        }
                        eBound.getETypeArguments().add(eTypeArgument);
                    }
                    eTypeParameter.getEBounds().add(eBound);
                }
                eClass.getETypeParameters().add(eTypeParameter);
                T = eTypeParameter;
            }
            {
                EGenericType eGenericSuperType = EcoreFactory.eINSTANCE.createEGenericType();
                eGenericSuperType.setEClassifier(A);
                {
                    EGenericType eTypeArgument = EcoreFactory.eINSTANCE.createEGenericType();
                    eTypeArgument.setETypeParameter(T);
                    eGenericSuperType.getETypeArguments().add(eTypeArgument);
                }
                eClass.getEGenericSuperTypes().add(eGenericSuperType);
            }
            ePackage.getEClassifiers().add(eClass);
            B = eClass;
        }
        switch(i) {
            case 0:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            case 1:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_INVALID_SUBSTITUTION, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { B.getEGenericSuperTypes().get(0), B.getEGenericSuperTypes().get(0).getETypeArguments().get(0), A.getETypeParameters().get(0) }, diagnostic.getChildren().get(0));
                    break;
                }
            case 2:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(Diagnostic.OK, diagnostic.getSeverity());
                    break;
                }
            case 3:
                {
                    Diagnostic diagnostic = Diagnostician.INSTANCE.validate(ePackage);
                    assertEquals(1, diagnostic.getChildren().size());
                    assertDiagnostic(Diagnostic.ERROR, EcoreValidator.CONSISTENT_ARGUMENTS_INVALID_SUBSTITUTION, EcoreValidator.DIAGNOSTIC_SOURCE, new Object[] { B.getEGenericSuperTypes().get(0), B.getEGenericSuperTypes().get(0).getETypeArguments().get(0), A.getETypeParameters().get(0) }, diagnostic.getChildren().get(0));
                    break;
                }
            default:
                {
                    break LOOP;
                }
        }
    }
}
Example 13
Project: FURCAS-master  File: RoseEcoreBuilder.java View source code
protected void visitClass(RoseNode roseNode, String roseNodeValue, String objectKey, String objectName, Object parent) {
    if (objectName == null || objectName.length() == 0) {
        String quid = roseNode.getRoseId();
        if (quid != null) {
            quid = quid.substring(1, quid.length() - 1);
        }
        objectName = "Unnamed" + quid;
        error(RoseImporterPlugin.INSTANCE.getString("_UI_UnnamedClass_message", new Object[] { objectName }));
    }
    // Map to EClass, EEnum or EInerface.
    // Note that we do not map structure and primitive type class.
    //
    RoseNode stereoTypeNode = roseNode.findNodeWithKey(RoseStrings.STEREOTYPE);
    if (stereoTypeNode != null) {
        String stereoTypeValue = stereoTypeNode.getValue();
        stereoTypeValue = stereoTypeValue.substring(1, stereoTypeValue.length() - 1);
        if (stereoTypeValue.equals(RoseStrings.INTERFACE)) {
            // Map to an EClass.
            //
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            allClasses.add(eClass);
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                classifierName = validName(upperCaseName(objectName));
            }
            eClass.setName(classifierName);
            roseNode.setNode(eClass);
            setEClassProperties(roseNode, eClass);
            eClass.setInterface(true);
            eClass.setAbstract(true);
            build(roseNode, parent, eClass);
        } else if (stereoTypeValue.equalsIgnoreCase(RoseStrings.ENUMERATION)) {
            // Map to an EEnum.
            EEnum eEnum = EcoreFactory.eINSTANCE.createEEnum();
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                classifierName = validName(upperCaseName(objectName));
            }
            eEnum.setName(classifierName);
            roseNode.setNode(eEnum);
            setEEnumProperties(roseNode, eEnum);
            build(roseNode, parent, eEnum);
        } else if (stereoTypeValue.equalsIgnoreCase("datatype") || stereoTypeValue.equalsIgnoreCase("primitive")) {
            // Map to an EDataType.
            //
            EDataType eDataType = EcoreFactory.eINSTANCE.createEDataType();
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                classifierName = validName(upperCaseName(objectName));
            }
            eDataType.setName(classifierName);
            roseNode.setNode(eDataType);
            setEDataTypeProperties(roseNode, eDataType);
            build(roseNode, parent, eDataType);
            String uml2MOFCorbaType = roseNode.getUML2MOFCorbaType();
            if (uml2MOFCorbaType != null) {
                uml2MOFCorbaType = uml2MOFCorbaType.trim();
                int start = uml2MOFCorbaType.indexOf("typedef ");
                if (start != -1) {
                    uml2MOFCorbaType = uml2MOFCorbaType.substring(8);
                    int end = uml2MOFCorbaType.lastIndexOf(" ");
                    if (end != -1) {
                        uml2MOFCorbaType = uml2MOFCorbaType.substring(0, end);
                    }
                }
                if (uml2MOFCorbaType != null && uml2MOFCorbaType.length() != 0) {
                    roseUtil.typeTable.put(eDataType, uml2MOFCorbaType);
                }
            }
        } else if (stereoTypeValue.equalsIgnoreCase("javatype")) {
            // Map to an EDataType.
            //
            EDataType eDataType = EcoreFactory.eINSTANCE.createEDataType();
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                int index = objectName.lastIndexOf(".");
                classifierName = validName(upperCaseName(index == -1 ? objectName : objectName.substring(index + 1)));
            }
            int index = objectName.lastIndexOf(".");
            eDataType.setName(validName(upperCaseName(index == -1 ? objectName : objectName.substring(index + 1))));
            eDataType.setInstanceClassName(objectName);
            roseNode.setNode(eDataType);
            setEDataTypeProperties(roseNode, eDataType);
            build(roseNode, parent, eDataType);
        } else if (stereoTypeValue.equalsIgnoreCase("abstract")) {
            // Map to an EClass.
            //
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            allClasses.add(eClass);
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                classifierName = validName(upperCaseName(objectName));
            }
            eClass.setName(classifierName);
            roseNode.setNode(eClass);
            setEClassProperties(roseNode, eClass);
            build(roseNode, parent, eClass);
        } else if (stereoTypeValue.equalsIgnoreCase("MapEntry")) {
            // Map to an EClass.
            //
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            allClasses.add(eClass);
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                classifierName = validName(upperCaseName(objectName));
            }
            eClass.setName(classifierName);
            roseNode.setNode(eClass);
            setEClassProperties(roseNode, eClass);
            eClass.setInstanceClassName("java.util.Map$Entry");
            build(roseNode, parent, eClass);
        } else if (stereoTypeValue.equalsIgnoreCase("constraint")) {
            // look for an "OCL" operation and if found, extract OCL expression from Semantics node
            // first, find owning class
            String x = objectName;
            x = x + "";
        } else {
            warning(RoseImporterPlugin.INSTANCE.getString("_UI_UnrecognizedStereotype_message", new Object[] { stereoTypeValue, objectName }));
            // Map to an eClass.
            //
            EClass eClass = EcoreFactory.eINSTANCE.createEClass();
            allClasses.add(eClass);
            String classifierName = roseNode.getClassifierName();
            if (classifierName == null || classifierName.length() == 0) {
                classifierName = validName(upperCaseName(objectName));
            }
            eClass.setName(classifierName);
            roseNode.setNode(eClass);
            setEClassProperties(roseNode, eClass);
            build(roseNode, parent, eClass);
        }
    } else {
        // Map to an eClass.
        //
        EClass eClass = EcoreFactory.eINSTANCE.createEClass();
        allClasses.add(eClass);
        String classifierName = roseNode.getClassifierName();
        if (classifierName == null || classifierName.length() == 0) {
            classifierName = validName(upperCaseName(objectName));
        }
        eClass.setName(classifierName);
        roseNode.setNode(eClass);
        setEClassProperties(roseNode, eClass);
        build(roseNode, parent, eClass);
    }
}
Example 14
Project: org.eclipse.xpand-master  File: EmfRegistryMetaModel.java View source code
@Override
protected Type createNew(EObject param) {
    if (param == null) {
        return null;
    }
    if (param instanceof EGenericType) {
        EGenericType genericType = (EGenericType) param;
        if (typeSystem != null) {
            Type innerType = getTypeForEClassifier(genericType.getETypeArguments().get(0));
            return new EmfListType(innerType, typeSystem, BuiltinMetaModel.LIST);
        } else {
            param = genericType.getEClassifier();
        }
    }
    if (!(param instanceof EClassifier))
        return null;
    EClassifier ele = (EClassifier) param;
    if (ele.getName() == null) {
        return null;
    }
    if (ele instanceof EClass) {
        return new EClassType(EmfRegistryMetaModel.this, getFullyQualifiedName(ele), (EClass) ele);
    } else if (ele instanceof EEnum) {
        return new EEnumType(EmfRegistryMetaModel.this, getFullyQualifiedName(ele), (EEnum) ele);
    } else if (ele instanceof EDataType) {
        if (typeSystem != null) {
            if (stringTypes.contains(ele)) {
                return typeSystem.getStringType();
            } else if (booleanTypes.contains(ele)) {
                return typeSystem.getBooleanType();
            } else if (intTypes.contains(ele)) {
                return typeSystem.getIntegerType();
            } else if (realTypes.contains(ele)) {
                return typeSystem.getRealType();
            } else if (objectTypes.contains(ele)) {
                return typeSystem.getObjectType();
            } else if (listTypes.contains(ele)) {
                return new EmfListType(typeSystem.getObjectType(), typeSystem, BuiltinMetaModel.LIST);
            }
        }
        EDataType dataType = (EDataType) ele;
        if (dataType.getInstanceClassName() != null) {
            // fall back to qualified Java name for EDatatypes
            Type t = internalJbmm.getTypeForName(dataType.getInstanceClassName().replace(".", "::"));
            if (t == null) {
                // for primitives
                t = typeSystem.getTypeForName(dataType.getInstanceClassName().replace(".", "::"));
            }
            return t;
        } else {
            return typeSystem.getObjectType();
        }
    }
    return null;
}
Example 15
Project: ASEME-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 16
Project: ecore-master  File: AbstractOCCISemanticSequencer.java View source code
@Override
public void createSequence(EObject context, EObject semanticObject) {
    if (semanticObject.eClass().getEPackage() == EcorePackage.eINSTANCE)
        switch(semanticObject.eClass().getClassifierID()) {
            case EcorePackage.EANNOTATION:
                sequence_DataTypeAnnotations(context, (EAnnotation) semanticObject);
                return;
            case EcorePackage.EDATA_TYPE:
                sequence_DataTypeDecl(context, (EDataType) semanticObject);
                return;
            case EcorePackage.EENUM:
                sequence_EnumTypeDecl(context, (EEnum) semanticObject);
                return;
            case EcorePackage.EENUM_LITERAL:
                sequence_EnumLiteralDecl(context, (EEnumLiteral) semanticObject);
                return;
            case EcorePackage.ESTRING_TO_STRING_MAP_ENTRY:
                sequence_DataTypeAnnotation(context, (Entry<?, ?>) semanticObject);
                return;
        }
    else if (semanticObject.eClass().getEPackage() == OCCIPackage.eINSTANCE)
        switch(semanticObject.eClass().getClassifierID()) {
            case OCCIPackage.ACTION:
                sequence_ActionDecl(context, (Action) semanticObject);
                return;
            case OCCIPackage.ATTRIBUTE:
                if (context == grammarAccess.getAttributeDeclRule()) {
                    sequence_AttributeDecl(context, (Attribute) semanticObject);
                    return;
                } else if (context == grammarAccess.getParameterDeclRule()) {
                    sequence_ParameterDecl(context, (Attribute) semanticObject);
                    return;
                } else
                    break;
            case OCCIPackage.ATTRIBUTE_STATE:
                sequence_StateDecl(context, (AttributeState) semanticObject);
                return;
            case OCCIPackage.CONFIGURATION:
                sequence_ConfigurationDecl(context, (Configuration) semanticObject);
                return;
            case OCCIPackage.EXTENSION:
                sequence_ExtensionDecl(context, (Extension) semanticObject);
                return;
            case OCCIPackage.KIND:
                sequence_KindDecl(context, (Kind) semanticObject);
                return;
            case OCCIPackage.LINK:
                sequence_LinkDecl(context, (Link) semanticObject);
                return;
            case OCCIPackage.MIXIN:
                sequence_MixinDecl(context, (Mixin) semanticObject);
                return;
            case OCCIPackage.RESOURCE:
                sequence_ResourceDecl(context, (Resource) semanticObject);
                return;
        }
    if (errorAcceptor != null)
        errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
Example 17
Project: EMF-IncQuery-master  File: EMFPatternLanguageJavaValidator.java View source code
@Check
public void checkEnumValues(EnumValue value) {
    if (value.eContainer() instanceof PathExpressionHead) {
        // If container is PathExpression check for enum type assignability
        EEnum enumType = value.getEnumeration();
        if (enumType == null && value.getLiteral() != null) {
            enumType = value.getLiteral().getEEnum();
        }
        PathExpressionHead expression = (PathExpressionHead) value.eContainer();
        try {
            EEnum expectedType = EMFPatternLanguageScopeHelper.calculateEnumerationType(expression);
            if (enumType != null && !expectedType.equals(enumType)) {
                error(String.format("Inconsistent enumeration types: found %s but expected %s", enumType.getName(), expectedType.getName()), value, EMFPatternLanguagePackage.Literals.ENUM_VALUE__ENUMERATION, EMFIssueCodes.INVALID_ENUM_LITERAL);
            }
        } catch (ResolutionException e) {
            error(String.format("Invalid enumeration constant %s", enumType.getName()), value, EMFPatternLanguagePackage.Literals.ENUM_VALUE__ENUMERATION, EMFIssueCodes.INVALID_ENUM_LITERAL);
        }
    }
}
Example 18
Project: EMFTools-master  File: MecoreWrapper.java View source code
private void wrapMEnum(MEnum mEnum, EPackage ePackage) {
    EEnum eEnum = findOrCreateEEnum(mEnum, ePackage);
    eEnum.setName(mEnum.getName());
    int count = 0;
    for (MEnumLiteral literal : mEnum.getLiterals()) {
        wrapMEnumLiteral(literal, eEnum, count++);
    }
    wrapMAnnotations(mEnum, eEnum);
    primaryMapping.put(mEnum, eEnum);
}
Example 19
Project: gmf-tooling.uml2tools-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 20
Project: melanee-core-master  File: PLMAbstractExpression.java View source code
/**
	 * 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;
}
Example 21
Project: qvto-master  File: CompletionProposalUtil.java View source code
public static final void addPackageContentsProposals(Collection<ICompletionProposal> proposals, QvtCompletionData data, EPackage pack) {
    for (EClassifier classifier : pack.getEClassifiers()) {
        String classifierName = classifier.getName();
        if (classifierName == null) {
            continue;
        }
        String imageCategory = CategoryImageConstants.CLASSIFIER;
        if (classifier instanceof EClass) {
            imageCategory = CategoryImageConstants.CLASS;
            classifierName = escapeNameIfNecessary(classifierName);
        } else if (classifier instanceof EEnum) {
            imageCategory = CategoryImageConstants.ENUM;
        } else if (classifier instanceof EDataType) {
            imageCategory = CategoryImageConstants.DATATYPE;
        }
        QvtCompletionProposal info = CompletionProposalUtil.createCompletionProposal(classifierName, imageCategory, data);
        CompletionProposalUtil.addProposalIfNecessary(proposals, info, data);
    }
    for (EPackage subPack : pack.getESubpackages()) {
        QvtCompletionProposal info = CompletionProposalUtil.createCompletionProposal(subPack.getName(), CategoryImageConstants.PACKAGE, data);
        CompletionProposalUtil.addProposalIfNecessary(proposals, info, data);
    }
}
Example 22
Project: ui-bindings-master  File: EnumBindingDecorator.java View source code
@Override
public void init(IValueBinding binding) {
    super.init(binding);
    final EClassifier attributeType = binding.getDataType().getEType();
    if (!(attributeType instanceof EEnum)) {
        getBinding().addErrorCondition("Attribute is not an enumeration");
        return;
    }
    myEnumeration = (EEnum) attributeType;
    for (final IEnumDecoratorProviderEntry e : myProvider.getBaseMappings()) {
        final String uiValue = e.getUi();
        final String modelValue = e.getModel();
        uiToModelMappings.put(uiValue, modelValue);
        uiSequence.add(uiValue);
        if (!modelToUIMappings.containsKey(modelValue)) {
            modelToUIMappings.put(modelValue, uiValue);
        }
    }
    if (myProvider.isAddingDefaultMappings()) {
        for (final EEnumLiteral e : myEnumeration.getELiterals()) {
            final String modelValue = e.getName();
            final String uiValue = e.getLiteral();
            uiToModelMappings.put(uiValue, modelValue);
            uiSequence.add(uiValue);
            if (!modelToUIMappings.containsKey(modelValue)) {
                modelToUIMappings.put(modelValue, uiValue);
            }
        }
    }
}
Example 23
Project: extFM-Tooling-master  File: MtextCodeCompletionHelper.java View source code
public void run() {
    if (feature instanceof org.eclipse.emf.ecore.EReference) {
        org.eclipse.emf.ecore.EReference reference = (org.eclipse.emf.ecore.EReference) feature;
        if (featureType instanceof org.eclipse.emf.ecore.EClass) {
            if (reference.isContainment()) {
                // the FOLLOW set should contain only non-containment references
                assert false;
            } else {
                proposals.addAll(handleNCReference(expectedTerminal, container, reference, expectedTerminal.getPrefix(), expectedFeature.getTokenName()));
            }
        }
    } else if (feature instanceof org.eclipse.emf.ecore.EAttribute) {
        org.eclipse.emf.ecore.EAttribute attribute = (org.eclipse.emf.ecore.EAttribute) feature;
        if (featureType instanceof org.eclipse.emf.ecore.EEnum) {
            org.eclipse.emf.ecore.EEnum enumType = (org.eclipse.emf.ecore.EEnum) featureType;
            proposals.addAll(handleEnumAttribute(expectedTerminal, expectedFeature, enumType, expectedTerminal.getPrefix(), container));
        } else {
            // handle EAttributes (derive default value depending on the type of the
            // attribute, figure out token resolver, and call deResolve())
            proposals.addAll(handleAttribute(expectedTerminal, expectedFeature, container, attribute, expectedTerminal.getPrefix()));
        }
    } else {
        // there should be no other subclass of EStructuralFeature
        assert false;
    }
}
Example 24
Project: k3-master  File: ModelGeneratorUtil.java View source code
public void setEObjectAttributes(EObject eObject, Random random, Set<RuntimeException> exceptionLog, boolean ignoreAndLog) {
    Map<EClassifier, IAttributeSetter<?>> attributeSetters = attributeHandler.getAttributeSetters();
    for (EAttribute attribute : eObject.eClass().getEAllAttributes()) {
        EClassifier attributeType = attribute.getEAttributeType();
        if (!isValid(attribute, eObject, exceptionLog, ignoreAndLog)) {
            continue;
        }
        // the attribute setter used to create new attributes
        IAttributeSetter<?> attributeSetter = null;
        // is there a setter for this attribute?
        if (attributeSetters.containsKey(attributeType)) {
            attributeSetter = attributeSetters.get(attributeType);
        } else if (isEnum(attributeType)) {
            attributeSetter = attributeHandler.getEEnumSetter((EEnum) attributeType);
        }
        // was there a fitting attribute setter?
        if (attributeSetter != null) {
            if (attribute.isMany()) {
                int numberOfAttributes = computeFeatureAmount(attribute, random);
                addPerCommand(eObject, attribute, attributeSetter.createNewAttributes(numberOfAttributes), exceptionLog, ignoreAndLog);
            } else {
                setPerCommand(eObject, attribute, attributeSetter.createNewAttribute(), exceptionLog, ignoreAndLog);
            }
        }
    }
}
Example 25
Project: ThingML-master  File: ThingmlCodeCompletionHelper.java View source code
public void run() {
    if (feature instanceof org.eclipse.emf.ecore.EReference) {
        org.eclipse.emf.ecore.EReference reference = (org.eclipse.emf.ecore.EReference) feature;
        if (featureType instanceof org.eclipse.emf.ecore.EClass) {
            if (reference.isContainment()) {
                // the FOLLOW set should contain only non-containment references
                assert false;
            } else {
                proposals.addAll(handleNCReference(expectedTerminal, container, reference, expectedTerminal.getPrefix(), expectedFeature.getTokenName()));
            }
        }
    } else if (feature instanceof org.eclipse.emf.ecore.EAttribute) {
        org.eclipse.emf.ecore.EAttribute attribute = (org.eclipse.emf.ecore.EAttribute) feature;
        if (featureType instanceof org.eclipse.emf.ecore.EEnum) {
            org.eclipse.emf.ecore.EEnum enumType = (org.eclipse.emf.ecore.EEnum) featureType;
            proposals.addAll(handleEnumAttribute(expectedTerminal, expectedFeature, enumType, expectedTerminal.getPrefix(), container));
        } else {
            // handle EAttributes (derive default value depending on the type of the
            // attribute, figure out token resolver, and call deResolve())
            proposals.addAll(handleAttribute(expectedTerminal, expectedFeature, container, attribute, expectedTerminal.getPrefix()));
        }
    } else {
        // there should be no other subclass of EStructuralFeature
        assert false;
    }
}
Example 26
Project: amalgamation-examples-master  File: TabWidgetPropertiesEditionComponent.java View source code
/**
	 * {@inheritDoc}
	 * 
	 * @see org.eclipse.emf.eef.runtime.api.component.IPropertiesEditionComponent#initPart(java.lang.Object, int, org.eclipse.emf.ecore.EObject, 
	 *      org.eclipse.emf.ecore.resource.ResourceSet)
	 * 
	 */
public void initPart(Object key, int kind, EObject elt, ResourceSet allResource) {
    setInitializing(true);
    if (editingPart != null && key == partKey) {
        editingPart.setContext(elt, allResource);
        final TabWidget tabWidget = (TabWidget) elt;
        final TabWidgetPropertiesEditionPart basePart = (TabWidgetPropertiesEditionPart) editingPart;
        // init values
        if (tabWidget.getName() != null && isAccessible(DroidViewsRepository.TabWidget.Properties.name))
            basePart.setName(EEFConverterUtil.convertToString(EcorePackage.eINSTANCE.getEString(), tabWidget.getName()));
        if (tabWidget.getAlpha() != null && isAccessible(DroidViewsRepository.TabWidget.Properties.alpha))
            basePart.setAlpha(EEFConverterUtil.convertToString(EcorePackage.eINSTANCE.getEFloatObject(), tabWidget.getAlpha()));
        if (isAccessible(DroidViewsRepository.TabWidget.Properties.nextFocusDown)) {
            // init part
            nextFocusDownSettings = new EObjectFlatComboSettings(tabWidget, DroidPackage.eINSTANCE.getLayout_NextFocusDown());
            basePart.initNextFocusDown(nextFocusDownSettings);
            // set the button mode
            basePart.setNextFocusDownButtonMode(ButtonsModeEnum.BROWSE);
        }
        if (isAccessible(DroidViewsRepository.TabWidget.Properties.nextFocusLeft)) {
            // init part
            nextFocusLeftSettings = new EObjectFlatComboSettings(tabWidget, DroidPackage.eINSTANCE.getLayout_NextFocusLeft());
            basePart.initNextFocusLeft(nextFocusLeftSettings);
            // set the button mode
            basePart.setNextFocusLeftButtonMode(ButtonsModeEnum.BROWSE);
        }
        if (isAccessible(DroidViewsRepository.TabWidget.Properties.nextFocusRight)) {
            // init part
            nextFocusRightSettings = new EObjectFlatComboSettings(tabWidget, DroidPackage.eINSTANCE.getLayout_NextFocusRight());
            basePart.initNextFocusRight(nextFocusRightSettings);
            // set the button mode
            basePart.setNextFocusRightButtonMode(ButtonsModeEnum.BROWSE);
        }
        if (isAccessible(DroidViewsRepository.TabWidget.Properties.nextFocusUp)) {
            // init part
            nextFocusUpSettings = new EObjectFlatComboSettings(tabWidget, DroidPackage.eINSTANCE.getLayout_NextFocusUp());
            basePart.initNextFocusUp(nextFocusUpSettings);
            // set the button mode
            basePart.setNextFocusUpButtonMode(ButtonsModeEnum.BROWSE);
        }
        if (isAccessible(DroidViewsRepository.TabWidget.Properties.visibility)) {
            basePart.initVisibility((EEnum) DroidPackage.eINSTANCE.getLayout_Visibility().getEType(), tabWidget.getVisibility());
        }
        if (isAccessible(DroidViewsRepository.TabWidget.Properties.orientation)) {
            basePart.initOrientation((EEnum) DroidPackage.eINSTANCE.getAbstractLinearLayout_Orientation().getEType(), tabWidget.getOrientation());
        }
        if (tabWidget.getGravity() != null && isAccessible(DroidViewsRepository.TabWidget.Properties.gravity))
            basePart.setGravity(tabWidget.getGravity());
        // init filters
        basePart.addFilterToNextFocusDown(new ViewerFilter() {

            /**
			 * {@inheritDoc}
			 * 
			 * @see org.eclipse.jface.viewers.ViewerFilter#select(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
			 */
            public boolean select(Viewer viewer, Object parentElement, Object element) {
                return //$NON-NLS-1$ 
                (element instanceof String && element.equals("")) || (element instanceof View);
            }
        });
        // Start of user code for additional businessfilters for nextFocusDown
        // End of user code
        basePart.addFilterToNextFocusLeft(new ViewerFilter() {

            public boolean select(Viewer viewer, Object parentElement, Object element) {
                return //$NON-NLS-1$ 
                (element instanceof String && element.equals("")) || (element instanceof View);
            }
        });
        // Start of user code for additional businessfilters for nextFocusLeft
        // End of user code
        basePart.addFilterToNextFocusRight(new ViewerFilter() {

            public boolean select(Viewer viewer, Object parentElement, Object element) {
                return //$NON-NLS-1$ 
                (element instanceof String && element.equals("")) || (element instanceof View);
            }
        });
        // Start of user code for additional businessfilters for nextFocusRight
        // End of user code
        basePart.addFilterToNextFocusUp(new ViewerFilter() {

            public boolean select(Viewer viewer, Object parentElement, Object element) {
                return //$NON-NLS-1$ 
                (element instanceof String && element.equals("")) || (element instanceof View);
            }
        });
    // Start of user code for additional businessfilters for nextFocusUp
    // End of user code
    // init values for referenced views
    // init filters for referenced views
    }
    setInitializing(false);
}
Example 27
Project: cdo-master  File: CoreTypeMappings.java View source code
@Override
protected Object getDefaultValue() {
    // return getFeature().getDefaultValue();
    EEnum eenum = (EEnum) getFeature().getEType();
    String defaultValueLiteral = getFeature().getDefaultValueLiteral();
    if (defaultValueLiteral != null) {
        EEnumLiteral literal = eenum.getEEnumLiteralByLiteral(defaultValueLiteral);
        return literal.getValue();
    }
    Enumerator enumerator = (Enumerator) eenum.getDefaultValue();
    return enumerator.getValue();
}
Example 28
Project: ecoretools-master  File: TableObjectManager.java View source code
/**
	 * Computes the EStructuralFeature type. When the type is an enumeration
	 * this function will initialize the literals array
	 * 
	 * @see EcorePackage#EBOOLEAN , EcorePackage#ESTRING , EcorePackage#EINT or
	 *      EcorePackage#EEnum
	 * @see #BOOL
	 * @see #INT
	 * @see #STR
	 * @see #ENUM
	 * 
	 * @return An integer code which determine the type
	 */
public int getEType() {
    if (type instanceof EEnum) {
        return ENUM;
    } else if (type instanceof EDataType) {
        Class<?> clazz = type.getInstanceClass();
        if (clazz == int.class || clazz == Integer.class) {
            return INT;
        } else if (clazz == double.class || clazz == Double.class) {
            return DBL;
        } else if (clazz == BigInteger.class) {
            return B_INT;
        } else if (clazz == String.class) {
            return STR;
        } else if (clazz == boolean.class || clazz == Boolean.class) {
            return BOOL;
        } else {
            return 0;
        }
    } else if (type instanceof EClass) {
        return REF;
    } else {
        return 0;
    }
}
Example 29
Project: emf-databinding-example-master  File: PersistenceMappingSchemaGenerator.java View source code
/** process annotation packages */
private List<Element> processAnnotationEPackage(EPackage epackage) {
    final ArrayList<Element> elemList = new ArrayList<Element>();
    final List<EClassifier> eclassifiers = new ArrayList<EClassifier>(epackage.getEClassifiers());
    Collections.sort(eclassifiers, new ENamedElementComparator());
    for (EClassifier eClassifier : eclassifiers) {
        if (isIgnorable(eClassifier) || isUnsupported(eClassifier)) {
            continue;
        }
        String schemaTypeName = eClassifier.getName();
        if (eClassifier instanceof EClass) {
            final EClass eClass = (EClass) eClassifier;
            if (eClass.isAbstract()) {
                continue;
            }
            final List<EStructuralFeature> eStructuralFeatures = eClass.getEAllStructuralFeatures();
            if (eStructuralFeatures.isEmpty()) {
                continue;
            }
            // the schema.
            if (oneMappableFeature(eClass)) {
                /*
					 * final EStructuralFeature eStructuralFeature = (EStructuralFeature)
					 * eClass.getEStructuralFeatures().get(0); final EClassifier eType =
					 * eStructuralFeature.getEType(); schemaTypeName = (String)
					 * schemaTypeNamesByAnnotationType.get(eType.getName()); if (schemaTypeName ==
					 * null) { schemaTypeName = eType.getName(); }
					 * schemaTypeNamesByAnnotationType.put(eClassifier.getName(), schemaTypeName);
					 */
                continue;
            }
            final Element complexTypeElement = createSchemaComplexType(eClass.getName());
            elemList.add(complexTypeElement);
            final Element choiceElement = complexTypeElement.addElement("xsd:choice");
            addZeroUnbounded(choiceElement);
            processStructuralFeatures(choiceElement, eStructuralFeatures);
            if (choiceElement.getChildren().size() == 0) {
                complexTypeElement.getChildren().remove(choiceElement);
            }
        } else if (eClassifier instanceof EEnum) {
            elemList.add(processEnum((EEnum) eClassifier));
        } else {
            throw new RuntimeException("Unexpected EClassifier: " + eClassifier.eClass().getName());
        }
        schemaTypeNamesByAnnotationType.put(eClassifier.getName(), schemaTypeName);
    }
    return elemList;
}
Example 30
Project: MMI-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 31
Project: MMINT-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 32
Project: dresdenocl-master  File: OclCodeCompletionHelper.java View source code
public void run() {
    if (feature instanceof EReference) {
        EReference reference = (EReference) feature;
        if (featureType instanceof EClass) {
            if (reference.isContainment()) {
                // the FOLLOW set should contain only non-containment references
                assert false;
            } else {
                proposals.addAll(handleNCReference(expectedTerminal, container, reference, expectedTerminal.getPrefix(), expectedFeature.getTokenName()));
            }
        }
    } else if (feature instanceof EAttribute) {
        EAttribute attribute = (EAttribute) feature;
        if (featureType instanceof EEnum) {
            EEnum enumType = (EEnum) featureType;
            proposals.addAll(handleEnumAttribute(expectedTerminal, expectedFeature, enumType, expectedTerminal.getPrefix(), container));
        } else {
            // handle EAttributes (derive default value depending on the type of the
            // attribute, figure out token resolver, and call deResolve())
            proposals.addAll(handleAttribute(expectedTerminal, expectedFeature, container, attribute, expectedTerminal.getPrefix()));
        }
    } else {
        // there should be no other subclass of EStructuralFeature
        assert false;
    }
}
Example 33
Project: emf-fragments-master  File: FStoreImpl.java View source code
private Object getUserValue(Object internalValue, EStructuralFeature userFeature) {
    if (userFeature != null && userFeature.getEType() instanceof EEnum) {
        return EcoreUtil.createFromString((EDataType) userFeature.getEType(), internalValue.toString());
    } else if (internalValue != null && internalValue instanceof DynamicEObjectImpl) {
        FInternalObjectImpl internalObject = (FInternalObjectImpl) internalValue;
        return getUserObject(internalObject);
    } else {
        return internalValue;
    }
}
Example 34
Project: etl-java-master  File: EMFTermParser.java View source code
/**
	 * {@inheritDoc}
	 */
@Override
protected Object parseValue(EObject rc, EStructuralFeature f, Token value) {
    final EStructuralFeature field = f;
    final EClassifier type = field.getEType();
    if (type instanceof EEnum) {
        return ((EEnum) type).getEEnumLiteral(value.text()).getInstance();
    } else if (type instanceof EDataType) {
        final EDataType dt = (EDataType) type;
        final Class<?> c = dt.getInstanceClass();
        if (c == int.class || c == Integer.class) {
            return new Integer(LiteralUtils.parseInt(value.text()));
        } else if (c == String.class) {
            return value.text();
        } else {
            return dt.getEPackage().getEFactoryInstance().createFromString(dt, value.text());
        }
    } else {
        throw new ParserException("Unsupported type for value: " + type);
    }
}
Example 35
Project: eu.geclipse.core-master  File: ResourcesTypeAdapter.java View source code
// end EObject checkProxy()
/**
   * The attach point that handles the {@link Combo} widget which is responsible for the 
   * Resources <b>OperatingSystem</b> element. This attach point provides a {@link SelectionListener}
   * that listens to changes in the text box and commits this changes to the underlying
   * model.
   * 
   * @param widget The Text widget responsible for Resources Operating System element.
   */
public void attachToOSType(final Combo widget) {
    Integer featureID = Integer.valueOf(JsdlPackage.RESOURCES_TYPE__OPERATING_SYSTEM);
    this.comboFeaturesMap.put(featureID, widget);
    /* Populate the Combo Box with the CPU Architecture Literals */
    EEnum cFEnum = JsdlPackage.Literals.OPERATING_SYSTEM_TYPE_ENUMERATION;
    // Adding Empty String to allow disabling O/S Type.
    widget.add(EMPTY_STRING);
    for (int i = 0; i < cFEnum.getELiterals().size(); i++) {
        widget.add(cFEnum.getEEnumLiteral(i).toString());
    }
    String[] sortedTypes = widget.getItems();
    Arrays.sort(sortedTypes);
    widget.setItems(sortedTypes);
    widget.addSelectionListener(new SelectionListener() {

        public void widgetSelected(final SelectionEvent e) {
            String selectedOSName = widget.getItem(widget.getSelectionIndex());
            if (selectedOSName == EMPTY_STRING) {
                deleteElement(ResourcesTypeAdapter.this.operatingSystemType);
                ResourcesTypeAdapter.this.operatingSystemType = null;
            } else {
                checkOSElement();
                ResourcesTypeAdapter.this.operatingSystemTypeType.setOperatingSystemName(OperatingSystemTypeEnumeration.get(selectedOSName));
                ResourcesTypeAdapter.this.operatingSystemType.setOperatingSystemType(ResourcesTypeAdapter.this.operatingSystemTypeType);
            }
            ResourcesTypeAdapter.this.contentChanged();
        }

        public void widgetDefaultSelected(final SelectionEvent e) {
        //Do Nothing
        }
    });
}
Example 36
Project: gremf-master  File: GrEMFSchemaTransformer.java View source code
/**
	 * Resolves the grEMF types of the contained EMF types of the given
	 * resource. Therefore, all contained elements are visited and added to the
	 * corresponding sets. Additionally, the transformation order of the vertex
	 * and edge classes is built. <br>
	 * Note that not all resolved edge classes necessarily are transformed to
	 * such type. Some may become vertex classes.
	 * 
	 * @param resource
	 *            input <code>Resource</code> whose content is resolved
	 */
private void resolveResourceContent(Resource resource) {
    TreeIterator<EObject> i = resource.getAllContents();
    while (i.hasNext()) {
        EObject eObj = i.next();
        if (eObj instanceof EPackage) {
            // implicitly created via EClass and EEnum
            this.packages.add((EPackage) eObj);
        } else if (eObj instanceof EClass) {
            if (isVertexClassCertainly((EClass) eObj)) {
                this.vertexClasses.add((EClass) eObj);
            } else {
                this.edgeClasses.add((EClass) eObj);
            }
        } else if (eObj instanceof EEnum) {
            this.enumDomains.add((EEnum) eObj);
        } else if (eObj instanceof EAttribute) {
            EAttribute eAttr = (EAttribute) eObj;
            if (FeatureMapUtil.isFeatureMap(eAttr)) {
                this.resolveFeatureMap(new BasicFeatureMap((InternalEObject) eAttr.getEContainingClass(), eAttr.getFeatureID()));
            } else {
                this.attributes.add(eAttr);
            }
        } else if (eObj instanceof EReference) {
            if (!this.incidenceClasses.contains(((EReference) eObj).getEOpposite())) {
                this.incidenceClasses.add((EReference) eObj);
            }
        } else if (eObj instanceof EAnnotation) {
        // nothing to do; done via the annotated element
        }
    }
}
Example 37
Project: js4emf-master  File: JavascriptDelegatesTest.java View source code
//
// Test framework
//
protected void setUp() throws Exception {
    setUp("ecoreJavascriptDelegatesTest.xmi");
    String registryId = JavascriptSupport.SCRIPTING_SOURCE_URI;
    JavascriptDelegateFactory javascriptDelegateFactory = new JavascriptDelegateFactory();
    EStructuralFeature.Internal.SettingDelegate.Factory.Registry.INSTANCE.put(registryId, javascriptDelegateFactory);
    EOperation.Internal.InvocationDelegate.Factory.Registry.INSTANCE.put(registryId, javascriptDelegateFactory);
    EValidator.ValidationDelegate.Registry.INSTANCE.put(registryId, new JavascriptValidationDelegate());
    acme = resource.getContents().get(0);
    EClass companyClass = acme.eClass();
    companyPackage = companyClass.getEPackage();
    companyFactory = companyPackage.getEFactoryInstance();
    companyName = (EAttribute) companyClass.getEStructuralFeature("name");
    companyEmployees = (EReference) companyClass.getEStructuralFeature("employees");
    companySize = (EAttribute) companyClass.getEStructuralFeature("size");
    employeeClass = companyEmployees.getEReferenceType();
    employeeName = (EAttribute) employeeClass.getEStructuralFeature("name");
    employeeManager = (EReference) employeeClass.getEStructuralFeature("manager");
    employeeDirectReports = (EReference) employeeClass.getEStructuralFeature("directReports");
    employeeAllReports = (EReference) employeeClass.getEStructuralFeature("allReports");
    employeeReportsTo = employeeClass.getEOperations().get(0);
    EEnum sizeKind = (EEnum) companySize.getEAttributeType();
    sizeSmall = sizeKind.getEEnumLiteral("small");
    sizeMedium = sizeKind.getEEnumLiteral("medium");
    sizeLarge = sizeKind.getEEnumLiteral("large");
    employees = new java.util.HashMap<String, EObject>();
}
Example 38
Project: molic-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteralMessage, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, String.class.getName()));
            }
        }
    }
    return value;
}
Example 39
Project: mylyn.docs.intent.main-master  File: ModelingUnitCompletionProcessor.java View source code
/**
	 * Computes the {@link ICompletionProposal}s to provide for a Structural Feature value instruction.
	 * 
	 * @param isResourceContribution
	 *            indicates if we are in the scope of a resource contribution or not
	 * @param featureName
	 *            the feature name
	 * @param beginning
	 *            the beginning of the instruction on which completion is called
	 * @param featureToConsider
	 *            the {@link EStructuralFeature} to consider
	 * @throws ReadOnlyException
	 *             if permission issue occur while querying document
	 * @return the {@link ICompletionProposal}s to provide for a Structural feature value instruction
	 */
private Collection<ICompletionProposal> doGetProposalsForStructuralFeatureValue(boolean isResourceContribution, String featureName, String beginning, EStructuralFeature featureToConsider) throws ReadOnlyException {
    Collection<ICompletionProposal> proposals = Sets.newLinkedHashSet();
    // attribute type
    if (featureToConsider instanceof EAttribute) {
        String defaultAttributeValue = "";
        if (featureToConsider.getEType().getDefaultValue() != null) {
            defaultAttributeValue = "Default: " + featureToConsider.getDefaultValue().toString();
        }
        if (featureToConsider.getEType() instanceof EEnum) {
            for (EEnumLiteral literal : ((EEnum) featureToConsider.getEType()).getELiterals()) {
                proposals.add(createTemplateProposal("'" + literal.getName() + "' value (of type " + featureToConsider.getEType().getName() + RIGHT_PAR, defaultAttributeValue + " - Set a simple value of type " + featureToConsider.getEType().getName(), '"' + literal.getName() + "\";", "icon/outline/modelingunit_value.gif"));
            }
        } else {
            proposals.add(createTemplateProposal("value (of type " + featureToConsider.getEType().getName() + RIGHT_PAR, defaultAttributeValue + " - Set a simple value of type " + featureToConsider.getEType().getName(), '"' + defaultAttributeValue + "\";", "icon/outline/modelingunit_value.gif"));
        }
    } else {
        // Propose to create a new Element of the feature type
        if (!isResourceContribution) {
            proposals.add(createTemplateProposal("new Element (of type " + featureToConsider.getEType().getName() + RIGHT_PAR, "Set this new Element as value for " + featureToConsider.getName(), "new " + getQualifiedName(featureToConsider.getEType().getEPackage()) + DOT + featureToConsider.getEType().getName() + "{\n\t${}\n};", MODELINGUNIT_NEW_ELEMENT_ICON));
        }
        // Propose to reference an already defined element
        for (InstanciationInstruction instruction : traceabilityInfoQuery.getInstanciations()) {
            // Instruction's name should match the beginning
            boolean isMatchingInstruction = false;
            boolean hasMatchingName = instruction.getName() != null && (beginning.length() == 0 || instruction.getName().startsWith(beginning));
            if (hasMatchingName && !isResourceContribution) {
                // Instruction's type should match the featureToConsider type
                isMatchingInstruction = instruction.getMetaType() != null && (featureToConsider.getEType().equals(instruction.getMetaType().getResolvedType()) || featureToConsider.getEType() instanceof EClass && ((EClass) featureToConsider.getEType()).isSuperTypeOf(instruction.getMetaType().getResolvedType()));
            } else if (hasMatchingName) {
                // Resource content has not type so all instructions should be displayed
                isMatchingInstruction = true;
            }
            if (isMatchingInstruction) {
                proposals.add(createTemplateProposal("Reference to " + instruction.getName(), "Set the " + instruction.getName() + " element as value for " + featureName, instruction.getName(), "icon/outline/modelingunit_ref.png"));
            }
        }
        // If the expected eType is an EClassifier, also propose all available classifiers
        if (!isResourceContribution && featureToConsider.getEType().equals(EcorePackage.eINSTANCE.getEClassifier())) {
            proposals.addAll(getProposalsForEClassifier(beginning));
        }
    }
    return proposals;
}
Example 40
Project: Neo4EMF-master  File: Neo4emfResourceUtil.java View source code
@SuppressWarnings("unchecked")
private static void setupAttributes(EObject eObject, Node n) {
    // TODO Auto-generated method stub
    EList<EAttribute> atrList = eObject.eClass().getEAllAttributes();
    java.util.Iterator<EAttribute> it = atrList.iterator();
    while (it.hasNext()) {
        EAttribute at = it.next();
        if (eObject.eGet(at) != null && !at.isMany()) {
            if (at.getEType() instanceof EEnum)
                n.setProperty(at.getName(), eObject.eGet(at).toString());
            else if (isPrimitive(at.getName()))
                n.setProperty(at.getName(), eObject.eGet(at));
            else
                n.setProperty(at.getName(), eObject.eGet(at).toString());
        } else if (eObject.eGet(at) != null && at.isMany()) {
            n.setProperty(at.getName(), ((EList<EDataType>) eObject.eGet(at)).toArray());
        } else if (!at.isMany()) {
            if (at.getEType().getInstanceClass().isAssignableFrom(Boolean.class))
                n.setProperty(at.getName(), false);
            else if (at.getEType().getInstanceClass().isAssignableFrom(String.class))
                n.setProperty(at.getName(), "");
            else if (at.getEType().getInstanceClass().isAssignableFrom(Integer.class))
                n.setProperty(at.getName(), 0);
            else
                n.setProperty(at.getName(), 0);
        } else {
            n.setProperty(at.getName(), new Object[1]);
        }
    }
}
Example 41
Project: TOGAF-Designer-master  File: SmartEAItemPropertyDescriptor.java View source code
protected Collection<?> getComboBoxObjects(Object object) {
    if (object instanceof EObject) {
        if (parentReferences != null) {
            Collection<Object> result = new UniqueEList<Object>();
            for (int i = 0; i < parentReferences.length; ++i) {
                result.addAll(getReachableObjectsOfType((EObject) object, parentReferences[i].getEType()));
            }
            return result;
        } else if (feature != null) {
            if (feature instanceof EReference) {
                Collection<EObject> result = getReachableObjectsOfType((EObject) object, feature.getEType());
                if (!feature.isMany() && !result.contains(null)) {
                    result.add(null);
                }
                return result;
            } else if (feature.getEType() instanceof EEnum) {
                EEnum eEnum = (EEnum) feature.getEType();
                List<Enumerator> enumerators = new ArrayList<Enumerator>();
                for (EEnumLiteral eEnumLiteral : eEnum.getELiterals()) {
                    enumerators.add(eEnumLiteral.getInstance());
                }
                return enumerators;
            } else {
                EDataType eDataType = (EDataType) feature.getEType();
                List<String> enumeration = ExtendedMetaData.INSTANCE.getEnumerationFacet(eDataType);
                if (!enumeration.isEmpty()) {
                    List<Object> enumerators = new ArrayList<Object>();
                    for (String enumerator : enumeration) {
                        enumerators.add(EcoreUtil.createFromString(eDataType, enumerator));
                    }
                    return enumerators;
                } else {
                    for (EDataType baseType = ExtendedMetaData.INSTANCE.getBaseType(eDataType); baseType != null; baseType = ExtendedMetaData.INSTANCE.getBaseType(baseType)) {
                        if (baseType instanceof EEnum) {
                            EEnum eEnum = (EEnum) baseType;
                            List<Enumerator> enumerators = new ArrayList<Enumerator>();
                            enumerators.add(null);
                            for (EEnumLiteral eEnumLiteral : eEnum.getELiterals()) {
                                enumerators.add(eEnumLiteral.getInstance());
                            }
                            return enumerators;
                        }
                    }
                }
            }
        }
    }
    return null;
}
Example 42
Project: vespucci-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(de.tud.cs.st.vespucci.vespucci_model.diagram.part.Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 43
Project: wazaabi-master  File: StyleRulesHelper.java View source code
/**
	 * Builds a default EObject by iterating over the annotation 'default'
	 * content. When found, attributes are set using conversion mechanisms. All
	 * the attribute are not supposed to be set.
	 * 
	 * @param annotation
	 *            A non null EAnnotation whose 'name' is not null.
	 * @param eClass
	 *            The EClass of the EObject to create
	 * @return An EObject if the build mechanisms succeded.
	 */
protected static StyleRule buildDefault(EAnnotation annotation, EClass eClass) {
    EObject result = null;
    //$NON-NLS-1$
    final String content = annotation.getDetails().get("default");
    if (//$NON-NLS-1$
    content == null || "".equals(content))
        return null;
    try {
        Properties defaultValues = new Properties();
        defaultValues.load(new ByteArrayInputStream(content.getBytes("UTF-8")));
        result = EcoreUtil.create(eClass);
        @SuppressWarnings("rawtypes") Iterator iterator = defaultValues.entrySet().iterator();
        while (iterator.hasNext()) {
            @SuppressWarnings("unchecked") Entry<String, String> entry = (Entry<String, String>) iterator.next();
            EAttribute attr = getEAttribute(eClass, entry.getKey());
            if (attr != null) {
                EDataType attrType = attr.getEAttributeType();
                if (attrType instanceof EEnum) {
                    EEnumLiteral eEnumLiteral = ((EEnum) attrType).getEEnumLiteral(entry.getValue());
                    if (eEnumLiteral != null)
                        result.eSet(attr, eEnumLiteral.getInstance());
                } else
                    switch(attrType.getClassifierID()) {
                        case EcorePackage.EBOOLEAN:
                            result.eSet(attr, Boolean.parseBoolean(entry.getValue()));
                            break;
                        // TODO : continue to implement conversion mechanisms
                        default:
                            throw new RuntimeException(//$NON-NLS-1$
                            "No conversion mechanism for " + (((EClass) annotation.getEModelElement()).getName()) + //$NON-NLS-1$
                            "." + annotation.getDetails().get(//$NON-NLS-1$ 
                            "name") + //$NON-NLS-1$
                            ".default");
                    }
            } else
                throw new RuntimeException("Unable to find an attribute for " + (((EClass) annotation.getEModelElement()).getName()) + "." + //$NON-NLS-1$ 
                annotation.getDetails().get("name"));
        }
    } catch (IOException e) {
        throw new RuntimeException("Unable to read default for " + (((EClass) annotation.getEModelElement()).getName()) + "." + annotation.getDetails().get("name"));
    }
    return (StyleRule) result;
}
Example 44
Project: bpmn2-modeler-master  File: ModelDecorator.java View source code
/**
	 * Create a dynamic EClassifier from a type string. This will create a new
	 * EEnum if the supertype is an EEnum, or a new EDataType if the supertype
	 * is an EDataType. If no supertype is given, an EClass is created instead.
	 * 
	 * @param type - a type name string that may contain additional supertype names.
	 * @see getType(String)
	 * @return the EClassifier.
	 */
public EClassifier createEClassifier(String type) {
    EClassifier eClassifier = getEClassifier(type);
    if (eClassifier != null)
        return eClassifier;
    EClassifier eDataType = null;
    for (String st : getSuperTypes(type)) {
        EClassifier ec = findEClassifier(st);
        if (EDataType.class.isAssignableFrom(ec.getInstanceClass())) {
            eDataType = ec;
            break;
        }
    }
    if (eDataType == null) {
        if (EDataTypeConversionFactory.isFactoryFor(getType(type)))
            return createEDataType(type);
        return createEClass(type);
    }
    if (EEnum.class.isAssignableFrom(eDataType.getInstanceClass()))
        eClassifier = theCoreFactory.createEEnum();
    else
        eClassifier = theCoreFactory.createEDataType();
    eClassifier.setName(getType(type));
    ePackage.getEClassifiers().add(eClassifier);
    return eClassifier;
}
Example 45
Project: CertWare-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 46
Project: CIMTool-master  File: EcoreGenerator.java View source code
/*
	 * Adds packages and classifiers without parent packages to the 'result' package.
	 * Create an Element class from which all other classes derive.
	 */
@Override
public void run() {
    super.run();
    EPackage result = null;
    Collection<EPackage> roots = new HashSet<EPackage>();
    for (EPackage p : index.ePackages.values()) {
        if (p.getESuperPackage() == null && p.eContents().size() > 0) {
            roots.add(p);
        }
    }
    if (roots.size() == 1)
        result = roots.iterator().next();
    else {
        result = EcoreFactory.eINSTANCE.createEPackage();
        result.getESubpackages().addAll(roots);
    }
    index.root = result;
    if (originalNamespace.endsWith("#")) {
        EAnnotation annotation = EcoreFactory.eINSTANCE.createEAnnotation();
        annotation.setSource(RDF_SERIALISATION_ANNOTATION);
        annotation.getDetails().put("suffix", "#");
        index.root.getEAnnotations().add(annotation);
    }
    if (!originalNamespace.equals(originalProfileNamespace)) {
        EAnnotation pAnnotation = EcoreFactory.eINSTANCE.createEAnnotation();
        pAnnotation.setSource(PROFILE_ANNOTATION);
        pAnnotation.getDetails().put("nsURI", profileNamespace);
        index.root.getEAnnotations().add(pAnnotation);
    }
    index.root.setNsPrefix("cim");
    index.root.setNsURI(this.namespace);
    Iterator<?> nt = datatypes.iterator();
    while (nt.hasNext()) {
        OntResource type = (OntResource) nt.next();
        EDataType dt = index.eDataTypes.get(type.getURI());
        if (dt != null && type.getIsDefinedBy() != null) {
            EPackage p = index.ePackages.get(type.getIsDefinedBy().getURI());
            if (p != null)
                p.getEClassifiers().add(dt);
        }
    }
    /* Create root Element class from which all other classes derive. */
    EClass element = coreFactory.createEClass();
    if (addRootClass) {
        if (index.root.getEClassifier(ELEMENT_CLASS_NAME) != null && index.root.getEClassifier(ELEMENT_CLASS_NAME) instanceof EClass)
            element = (EClass) index.root.getEClassifier(ELEMENT_CLASS_NAME);
        else
            element.setName(EcoreGenerator.ELEMENT_CLASS_NAME);
        element.setAbstract(true);
        EAttribute uri;
        if (element.getEStructuralFeature(ELEMENT_CLASS_IDENTIFIER) == null || !(element.getEStructuralFeature(ELEMENT_CLASS_IDENTIFIER) instanceof EAttribute)) {
            uri = coreFactory.createEAttribute();
            uri.setName(EcoreGenerator.ELEMENT_CLASS_IDENTIFIER);
            uri.setEType(corePackage.getEString());
            element.getEStructuralFeatures().add(uri);
        } else
            uri = (EAttribute) element.getEStructuralFeature(ELEMENT_CLASS_IDENTIFIER);
        uri.setID(true);
        index.root.getEClassifiers().add(element);
    }
    for (Iterator<EClass> ix = index.eClasses.values().iterator(); ix.hasNext(); ) {
        EClass klass = ix.next();
        if (klass.getEPackage() == null)
            index.root.getEClassifiers().add(klass);
        /* Make all classes derive from Element. */
        if (addRootClass && (klass.getESuperTypes().size() == 0) && klass != element && !isCompound(klass)) {
            klass.getESuperTypes().add(element);
        }
        for (EReference ref : klass.getEReferences()) {
            if (ref.getName() == null) {
                String name = ref.getEType().getName();
                if (ref.isMany())
                    name += "s";
                log("Reference between " + klass.getName() + " and " + ref.getEType().getName() + " has no role name, setting to " + name);
                ref.setName(name);
            }
        }
    }
    for (Iterator<EEnum> ix = index.eEnums.values().iterator(); ix.hasNext(); ) {
        EEnum eEnum = ix.next();
        if (eEnum.getEPackage() == null)
            index.root.getEClassifiers().add(eEnum);
    }
    for (Iterator<EDataType> ix = index.eDataTypes.values().iterator(); ix.hasNext(); ) {
        EDataType dt = ix.next();
        if (dt.getEPackage() == null)
            index.root.getEClassifiers().add(dt);
    }
    for (Iterator<EDataType> ix = index.eTypes.values().iterator(); ix.hasNext(); ) {
        EDataType dt = ix.next();
        if (dt.getEPackage() == null)
            index.root.getEClassifiers().add(dt);
    }
    for (Iterator<EPackage> ix = index.ePackages.values().iterator(); ix.hasNext(); ) {
        EPackage pkg = ix.next();
        if (pkg.getESuperPackage() == null && pkg != index.root) {
            index.root.getESubpackages().add(pkg);
        }
    }
    if (!isEcoreSchema()) {
        for (Iterator<EPackage> ix = index.ePackages.values().iterator(); ix.hasNext(); ) {
            EPackage pkg = ix.next();
            if (pkg.getESuperPackage() == index.root && index.root.getESubpackages().size() == 1 && pkg.getESubpackages().size() == 1) {
                index.root.getESubpackages().addAll(pkg.getESubpackages());
                index.root.getEClassifiers().addAll(pkg.getEClassifiers());
                index.root.getEAnnotations().addAll(pkg.getEAnnotations());
                if (index.root.getName() == null)
                    index.root.setName(pkg.getName());
                index.root.getESubpackages().remove(pkg);
            }
        }
    }
    for (Iterator<EReference> ix = index.notInverted.iterator(); ix.hasNext(); ) {
        EReference ref = ix.next();
        if (!isCompound((EClass) ref.getEType()))
            log("Non-inverted reference: " + ref.getName());
    }
}
Example 47
Project: d-case_editor-master  File: AbstractParser.java View source code
/**
     * @generated
     */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 48
Project: eclipse-gov.redhawk.core-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 49
Project: emf-compare-master  File: AttributeChangeMerger.java View source code
/**
	 * Returns the target value, that is, the value to be set when merging the given {@code diff} in the
	 * direction indicated by {@code rightToLeft}.
	 * 
	 * @param diff
	 *            The diff we are currently merging.
	 * @param rightToLeft
	 *            Direction of the merge.
	 * @return The target value to be set when merging.
	 */
private Object getTargetValue(AttributeChange diff, boolean rightToLeft) {
    final EStructuralFeature attribute = diff.getAttribute();
    final EObject targetContainer = getTargetContainer(diff, rightToLeft);
    final EObject sourceContainer = getSourceContainer(diff, rightToLeft);
    final Object sourceValue = safeEGet(sourceContainer, attribute);
    final Object targetValue;
    if (isEnumChangeOfDynamicEObject(diff, targetContainer)) {
        final EEnum eEnum = getAttributeTypeEnumFromDynamicObject(targetContainer, attribute);
        targetValue = eEnum.getEEnumLiteral(((ENamedElement) sourceValue).getName());
    } else if (requireThreeWayTextMerge(diff)) {
        targetValue = performThreeWayTextMerge(diff, rightToLeft);
    } else {
        targetValue = sourceValue;
    }
    return targetValue;
}
Example 50
Project: emf.compare-master  File: AttributeChangeMerger.java View source code
/**
	 * Returns the target value, that is, the value to be set when merging the given {@code diff} in the
	 * direction indicated by {@code rightToLeft}.
	 * 
	 * @param diff
	 *            The diff we are currently merging.
	 * @param rightToLeft
	 *            Direction of the merge.
	 * @return The target value to be set when merging.
	 */
private Object getTargetValue(AttributeChange diff, boolean rightToLeft) {
    final EStructuralFeature attribute = diff.getAttribute();
    final EObject targetContainer = getTargetContainer(diff, rightToLeft);
    final EObject sourceContainer = getSourceContainer(diff, rightToLeft);
    final Object sourceValue = safeEGet(sourceContainer, attribute);
    final Object targetValue;
    if (isEnumChangeOfDynamicEObject(diff, targetContainer)) {
        final EEnum eEnum = getAttributeTypeEnumFromDynamicObject(targetContainer, attribute);
        targetValue = eEnum.getEEnumLiteral(((ENamedElement) sourceValue).getName());
    } else if (requireThreeWayTextMerge(diff)) {
        targetValue = performThreeWayTextMerge(diff, rightToLeft);
    } else {
        targetValue = sourceValue;
    }
    return targetValue;
}
Example 51
Project: EPF-Composer-master  File: DiagramAbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EStructuralFeature feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue("Value of type Boolean is expected");
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue("Value of type Character is expected");
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue("String value does not convert to Byte value");
                    }
                }
            } else {
                value = new InvalidValue("Value of type Byte is expected");
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue("String value does not convert to Short value");
                    }
                }
            } else {
                value = new InvalidValue("Value of type Short is expected");
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue("String value does not convert to Integer value");
                    }
                }
            } else {
                value = new InvalidValue("Value of type Integer is expected");
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue("String value does not convert to Long value");
                    }
                }
            } else {
                value = new InvalidValue("Value of type Long is expected");
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue("String value does not convert to Float value");
                    }
                }
            } else {
                value = new InvalidValue("Value of type Float is expected");
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue("String value does not convert to Double value");
                    }
                }
            } else {
                value = new InvalidValue("Value of type Double is expected");
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue("Unknown literal: " + value);
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue("Value of type String is expected");
            }
        }
    }
    return value;
}
Example 52
Project: gmf-runtime-master  File: MetamodelManager.java View source code
/**
	 * Register meta-model object.
	 */
public static void register(ENamedElement element, ResourceLocator resourceLocator) {
    if (element instanceof EOperation)
        return;
    if (element instanceof EParameter)
        return;
    String id = getNonCachedID(element);
    String name = element.getName();
    String displayName = null;
    if ((resourceLocator == null) && (element instanceof EPackage)) {
        // get a resource locator from the adapter factory registered
        //     against the IItemLabelProvider adapter type
        resourceLocator = findResourceLocator((EPackage) element);
    }
    if (resourceLocator != null) {
        if (element instanceof EClass) {
            displayName = //$NON-NLS-1$
            resourceLocator.getString("_UI_" + name + //$NON-NLS-1$
            "_type");
        } else if (element instanceof EStructuralFeature) {
            EClass eClass = ((EStructuralFeature) element).getEContainingClass();
            if (eClass != null)
                displayName = //$NON-NLS-1$
                resourceLocator.getString("_UI_" + eClass.getName() + "_" + name + //$NON-NLS-1$//$NON-NLS-2$
                "_feature");
        } else if (element instanceof EEnumLiteral) {
            EEnum eEnum = ((EEnumLiteral) element).getEEnum();
            if (eEnum != null)
                displayName = //$NON-NLS-1$
                resourceLocator.getString("_UI_" + eEnum.getName() + "_" + name + //$NON-NLS-1$//$NON-NLS-2$
                "_literal");
        }
    }
    if (displayName == null)
        displayName = name;
    METAMODEL_MAP.put(element, new MetaModelDescriptor(id, displayName));
    REVERSE_METAMODEL_MAP.put(id, element);
    for (Iterator i = element.eContents().iterator(); i.hasNext(); ) {
        Object child = i.next();
        if (child instanceof ENamedElement)
            register((ENamedElement) child, resourceLocator);
    }
}
Example 53
Project: hawk-drivers-master  File: Express2EMF.java View source code
private void addEnumerations() {
    Iterator<DefinedType> typeIter = schema.getTypes().iterator();
    while (typeIter.hasNext()) {
        DefinedType type = typeIter.next();
        if (type instanceof EnumerationType) {
            EEnum enumeration = eFactory.createEEnum();
            enumeration.setName(type.getName());
            EEnumLiteral nullValue = eFactory.createEEnumLiteral();
            nullValue.setName("NULL");
            nullValue.setLiteral("NULL");
            nullValue.setValue(0);
            enumeration.getELiterals().add(nullValue);
            int counter = 1;
            Iterator<String> values = ((EnumerationType) type).getElements().iterator();
            while (values.hasNext()) {
                String stringVal = values.next();
                if (!stringVal.equals("NULL")) {
                    EEnumLiteral value = eFactory.createEEnumLiteral();
                    value.setName(stringVal);
                    value.setLiteral(stringVal);
                    value.setValue(counter);
                    counter++;
                    enumeration.getELiterals().add(value);
                }
            }
            schemaPack.getEClassifiers().add(enumeration);
        }
    }
}
Example 54
Project: org.roxgt-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversionMessage, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteralMessage, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueTypeMessage, String.class.getName()));
            }
        }
    }
    return value;
}
Example 55
Project: petals-studio-master  File: InitializeModelExtensionCommand.java View source code
/**
	 * Adapts a raw object so that its type is valid according to the model extension.
	 * @param entryValue
	 * @param targetFeature
	 * @return an adapted object (null if entryValue is null)
	 */
private Object adaptValueType(Object entryValue, EStructuralFeature targetFeature) {
    Object finalValue = entryValue;
    if (entryValue instanceof String && targetFeature instanceof EAttribute) {
        EDataType expectedType = ((EAttribute) targetFeature).getEAttributeType();
        String instanceClassName = expectedType.getInstanceClassName().toLowerCase();
        if (expectedType.equals(EcorePackage.Literals.EINT) || "int".equals(instanceClassName) || "java.lang.integer".equals(instanceClassName)) {
            finalValue = Integer.valueOf((String) entryValue);
        } else if (expectedType.equals(EcorePackage.Literals.ELONG) || "long".equals(instanceClassName) || "java.lang.long".equals(instanceClassName)) {
            finalValue = Long.valueOf((String) entryValue);
        } else if (instanceClassName.equals("javax.xml.namespace.qname")) {
            // Extract the QName value...
            String[] parts = ((String) entryValue).split(":");
            String ns = null, name = null;
            if (parts.length == 1) {
                name = parts[0];
            } else if (parts.length == 2) {
                ns = parts[0];
                name = parts[1];
            } else {
                PetalsServicesPlugin.log("Found invalid QName while intializing the model extensions.", IStatus.ERROR);
            }
            // ... and resolve it
            QName newValue = null;
            EMap<String, String> map = JbiXmlUtils.findPrefixMap(this.element);
            if (map == null) {
                PetalsServicesPlugin.log("Could not find the prefix map while intializing the model extensions.", IStatus.ERROR);
            } else if (name != null) {
                if (ns != null)
                    ns = map.get(ns);
                newValue = ns != null ? new QName(ns, name) : new QName(name);
            }
            finalValue = newValue;
        } else if (expectedType instanceof EEnum) {
            EEnum eEnum = (EEnum) expectedType;
            EEnumLiteral literal = eEnum.getEEnumLiteralByLiteral((String) entryValue);
            finalValue = literal.getInstance();
        } else if (expectedType.getInstanceClass().equals(boolean.class)) {
            finalValue = Boolean.valueOf((String) entryValue);
        }
    }
    return finalValue;
}
Example 56
Project: smooks-editor-master  File: SmooksStuffPropertyDetailPage.java View source code
protected AttributeFieldEditPart createAttributeUI(Composite detailsComposite, IItemPropertyDescriptor propertyDescriptor, IPropertyUICreator creator) {
    final IItemPropertyDescriptor itemPropertyDescriptor = propertyDescriptor;
    EAttribute feature = (EAttribute) itemPropertyDescriptor.getFeature(getModel());
    AttributeFieldEditPart editPart = null;
    boolean createDefault = true;
    if (creator != null) {
        if (creator.ignoreProperty(feature)) {
            return null;
        }
        editPart = creator.createPropertyUI(formToolkit, detailsComposite, itemPropertyDescriptor, getModel(), feature, this.smooksModelProvider, editorPart);
        if (editPart != null) {
            createDefault = false;
        }
    }
    if (createDefault) {
        EClassifier typeClazz = feature.getEType();
        boolean hasCreated = false;
        if (typeClazz instanceof EEnum) {
            editPart = createEnumFieldEditor(detailsComposite, feature, (EEnum) typeClazz, formToolkit, itemPropertyDescriptor);
            hasCreated = true;
        }
        if (typeClazz.getInstanceClass() == String.class) {
            editPart = createStringFieldEditor(detailsComposite, feature, formToolkit, itemPropertyDescriptor);
            hasCreated = true;
        }
        if (typeClazz.getInstanceClass() == Boolean.class || typeClazz.getInstanceClass() == boolean.class) {
            editPart = createBooleanFieldEditor(detailsComposite, feature, formToolkit, itemPropertyDescriptor);
            hasCreated = true;
        }
        if (typeClazz.getInstanceClass() == Integer.class || typeClazz.getInstanceClass() == int.class) {
            editPart = createIntegerFieldEditor(detailsComposite, feature, formToolkit, itemPropertyDescriptor);
            hasCreated = true;
        }
        if (!hasCreated) {
        // createStringFieldEditor(detailsComposite, feature,
        // formToolkit,
        // itemPropertyDescriptor);
        }
    }
    return editPart;
}
Example 57
Project: teiid-designer-master  File: EmfTestUtil.java View source code
/**
     * Builds a dummy model based on the library scenario, creating a resource set.
     * DOES NOT REQUIRE THE PLUGIN ENVIRONMENT TO CREATE THE RESOURCE SET
     * @param displayContents - if true, the model structure will be printed out to the console after it is built
     * @return ResourceSet - the dummy resource set.
     */
public static EPackage generateMetamodel(boolean displayContents) {
    //$NON-NLS-1$
    final String nsURI = "http://www.metamatrix.com/metabase/3.1/metamodels/Library.xml";
    //$NON-NLS-1$
    final String nsPrefix = "Library";
    // Create the package for the model
    //$NON-NLS-1$
    EPackage ePackage = createEPackage(null, "library", nsURI, nsPrefix);
    EPackage.Registry.INSTANCE.put(nsURI, ePackage);
    // Create necessary data types
    //$NON-NLS-1$
    EDataType myString = createEDataType(ePackage, "myString", java.lang.String.class);
    //$NON-NLS-1$
    EDataType myInt = createEDataType(ePackage, "myInt", java.lang.Integer.class);
    // Create classifiers for the model
    //$NON-NLS-1$
    EClass book = createEClass(ePackage, "Book", false, false);
    //$NON-NLS-1$
    EClass library = createEClass(ePackage, "Library", false, false);
    //$NON-NLS-1$
    EClass writer = createEClass(ePackage, "Writer", false, false);
    // Create enumeration for the model
    //$NON-NLS-1$
    EEnum bookCategory = createEEnum(ePackage, "BookCategory");
    // Create enumeration literals for the model
    //$NON-NLS-1$
    addEnumLiteral(bookCategory, createEnumLiteral("MYSTERY"));
    //$NON-NLS-1$
    addEnumLiteral(bookCategory, createEnumLiteral("SCIENCE_FICTION"));
    //$NON-NLS-1$
    addEnumLiteral(bookCategory, createEnumLiteral("BIOGRAPHY"));
    // Add the attributes to the book class
    //$NON-NLS-1$
    createEAttribute(book, "title", myString);
    //$NON-NLS-1$
    createEAttribute(book, "pages", myInt);
    //$NON-NLS-1$
    createEAttribute(book, "category", bookCategory);
    // Add the attributes to the writer class
    //$NON-NLS-1$
    createEAttribute(writer, "name", myString);
    // Add the attributes to the library class
    //$NON-NLS-1$
    createEAttribute(library, "name", myString);
    // Create a two-way reference between books and writers in which
    // a book has only one reference to a writer and a writer
    // has zero or more references to books
    //$NON-NLS-1$
    EReference books = createEReference("books", book, 0, ETypedElement.UNBOUNDED_MULTIPLICITY, false);
    //$NON-NLS-1$
    EReference author = createEReference("author", writer, 1, 1, false);
    author.setEOpposite(books);
    books.setEOpposite(author);
    book.getEReferences().add(author);
    writer.getEReferences().add(books);
    // Create a containment reference in which a library contains
    // one or more books
    //$NON-NLS-1$
    EReference libBooks = createEReference("books", book, 1, ETypedElement.UNBOUNDED_MULTIPLICITY, true);
    library.getEReferences().add(libBooks);
    // Create a containment reference in which a library contains
    // one or more writers
    //$NON-NLS-1$
    EReference writers = createEReference("writers", writer, 1, ETypedElement.UNBOUNDED_MULTIPLICITY, true);
    library.getEReferences().add(writers);
    return ePackage;
}
Example 58
Project: Xcore-master  File: EcoreXcoreBuilder.java View source code
XClassifier getXClassifier(final EClassifier eClassifier) {
    final XClassifier xClassifier = eClassifier instanceof EClass ? getXClass((EClass) eClassifier) : eClassifier instanceof EEnum ? getXEnum((EEnum) eClassifier) : getXDataType((EDataType) eClassifier);
    handleAnnotations(eClassifier, xClassifier);
    xClassifier.setName(eClassifier.getName());
    String instanceTypeName = eClassifier.getInstanceTypeName();
    if (instanceTypeName != null) {
        final String finalInstanceTypeName = instanceTypeName;
        runnables.add(new Runnable() {

            public void run() {
                Diagnostic diagnostic = EcoreValidator.EGenericTypeBuilder.INSTANCE.parseInstanceTypeName(finalInstanceTypeName);
                xClassifier.setInstanceType(jvmInferrer.getJvmTypeReference((EGenericType) diagnostic.getData().get(0), eClassifier));
            }
        });
    }
    for (ETypeParameter eTypeParameter : eClassifier.getETypeParameters()) {
        XTypeParameter xTypeParameter = getXTypeParameter(eTypeParameter);
        xClassifier.getTypeParameters().add(xTypeParameter);
    }
    return xClassifier;
}
Example 59
Project: gmp.graphiti-master  File: AbstractGFTests.java View source code
protected void addEnumToDiagram(IFeatureProvider fp, Diagram diagram, int x, int y, String enumName) {
    // create add context
    AreaContext areaContext = new AreaContext();
    areaContext.setLocation(x, y);
    EEnum newEEnum = createEEnum(diagram, enumName);
    AddContext addContext = new AddContext(areaContext, newEEnum);
    addContext.setTargetContainer(diagram);
    // get add class feature
    IAddFeature addFeature = fp.getAddFeature(addContext);
    assertNotNull("add class feature not available", addFeature);
    if (addFeature.canAdd(addContext)) {
        addFeature.execute(addContext);
    }
}
Example 60
Project: Henshin-Editor-master  File: AttributeImpl.java View source code
/**
	 * Try to cast a string value into a constant.
	 * @param value String value.
	 * @param type Attribute type.
	 * @return The constant or <code>null</code>.
	 */
private static Object getConstant(String value, EAttribute type) {
    // Enum?
    if (type.getEType() instanceof EEnum) {
        try {
            return ((EEnum) type.getEType()).getEEnumLiteral(value);
        } catch (Throwable t) {
        }
    }
    // Special treatment for strings:
    if (type.getEType().getInstanceClass() == String.class) {
        String v = value.trim();
        if (// double quotes
        v.startsWith("\"") && v.endsWith("\"")) {
            v = v.substring(1, v.length() - 1);
            if (v.indexOf("\"") < 0) {
                return v;
            }
        }
        if (// single quotes
        v.startsWith("'") && v.endsWith("'")) {
            v = v.substring(1, v.length() - 1);
            if (v.indexOf("'") < 0) {
                return v;
            }
        }
        return null;
    }
    // Last chance: try to load it using the factory:
    try {
        EFactory factory = type.getEType().getEPackage().getEFactoryInstance();
        return factory.createFromString(type.getEAttributeType(), value);
    } catch (Throwable t) {
    }
    // Seems not to be a constant:
    return null;
}
Example 61
Project: Socio-technical-Security-Requirements-master  File: AbstractParser.java View source code
/**
	 * @generated
	 */
protected Object getValidNewValue(EAttribute feature, Object value) {
    EClassifier type = feature.getEType();
    if (type instanceof EDataType) {
        Class iClass = type.getInstanceClass();
        if (Boolean.TYPE.equals(iClass)) {
            if (value instanceof Boolean) {
            // ok
            } else if (value instanceof String) {
                value = Boolean.valueOf((String) value);
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Character.TYPE.equals(iClass)) {
            if (value instanceof Character) {
            // ok
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    value = new Character(s.charAt(0));
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Byte.TYPE.equals(iClass)) {
            if (value instanceof Byte) {
            // ok
            } else if (value instanceof Number) {
                value = new Byte(((Number) value).byteValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Byte.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Short.TYPE.equals(iClass)) {
            if (value instanceof Short) {
            // ok
            } else if (value instanceof Number) {
                value = new Short(((Number) value).shortValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Short.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Integer.TYPE.equals(iClass)) {
            if (value instanceof Integer) {
            // ok
            } else if (value instanceof Number) {
                value = new Integer(((Number) value).intValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Integer.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Long.TYPE.equals(iClass)) {
            if (value instanceof Long) {
            // ok
            } else if (value instanceof Number) {
                value = new Long(((Number) value).longValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Long.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Float.TYPE.equals(iClass)) {
            if (value instanceof Float) {
            // ok
            } else if (value instanceof Number) {
                value = new Float(((Number) value).floatValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Float.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (Double.TYPE.equals(iClass)) {
            if (value instanceof Double) {
            // ok
            } else if (value instanceof Number) {
                value = new Double(((Number) value).doubleValue());
            } else if (value instanceof String) {
                String s = (String) value;
                if (s.length() == 0) {
                    value = null;
                } else {
                    try {
                        value = Double.valueOf(s);
                    } catch (NumberFormatException nfe) {
                        value = new InvalidValue(NLS.bind(Messages.AbstractParser_WrongStringConversion, iClass.getName()));
                    }
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, iClass.getName()));
            }
        } else if (type instanceof EEnum) {
            if (value instanceof String) {
                EEnumLiteral literal = ((EEnum) type).getEEnumLiteralByLiteral((String) value);
                if (literal == null) {
                    value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnknownLiteral, value));
                } else {
                    value = literal.getInstance();
                }
            } else {
                value = new InvalidValue(NLS.bind(Messages.AbstractParser_UnexpectedValueType, String.class.getName()));
            }
        }
    }
    return value;
}
Example 62
Project: sad-analyzer-master  File: UimaTypeSystem2Ecore.java View source code
private static EClassifier uimaType2EClassifier(TypeDescription aType, Map aOptions) {
    // separate name into package name and class name
    String fullTypeName = aType.getName();
    String uimaNamespace, shortTypeName;
    int lastDot = fullTypeName.lastIndexOf('.');
    if (lastDot <= 0) {
        uimaNamespace = null;
        shortTypeName = fullTypeName;
    } else {
        uimaNamespace = fullTypeName.substring(0, lastDot);
        shortTypeName = fullTypeName.substring(lastDot + 1);
    }
    // does EPackage already exist for this URI?
    EPackage ePackage = uimaNamespace2EPackage(uimaNamespace);
    EClassifier eclassifier;
    // if aType is a "subtype" of uima.cas.String, create an EEnum for it
    if (CAS.TYPE_NAME_STRING.equals(aType.getSupertypeName())) {
        eclassifier = EcoreFactory.eINSTANCE.createEEnum();
        AllowedValue[] vals = aType.getAllowedValues();
        for (int i = 0; i < vals.length; i++) {
            EEnumLiteral literal = EcoreFactory.eINSTANCE.createEEnumLiteral();
            literal.setValue(i);
            literal.setName(vals[i].getString());
            if (vals[i].getDescription() != null && vals[i].getDescription().length() > 0) {
                EAnnotation eannot = EcoreFactory.eINSTANCE.createEAnnotation();
                eannot.setSource("http://uima.apache.org");
                eannot.getDetails().put("description", vals[i].getDescription());
                literal.getEAnnotations().add(eannot);
            }
            ((EEnum) eclassifier).getELiterals().add(literal);
        }
    } else {
        // create EClass
        eclassifier = EcoreFactory.eINSTANCE.createEClass();
    }
    // set name of EClassifier
    eclassifier.setName(shortTypeName);
    // add to package
    ePackage.getEClassifiers().add(eclassifier);
    // set description as EAnnotation
    if (aType.getDescription() != null && aType.getDescription().length() > 0) {
        EAnnotation eannot = EcoreFactory.eINSTANCE.createEAnnotation();
        eannot.setSource("http://uima.apache.org");
        eannot.getDetails().put("description", aType.getDescription());
        eclassifier.getEAnnotations().add(eannot);
    }
    return eclassifier;
}
Example 63
Project: uima_prolog-master  File: UimaTypeSystem2Ecore.java View source code
private static EClassifier uimaType2EClassifier(TypeDescription aType, Map aOptions) {
    // separate name into package name and class name
    String fullTypeName = aType.getName();
    String uimaNamespace, shortTypeName;
    int lastDot = fullTypeName.lastIndexOf('.');
    if (lastDot <= 0) {
        uimaNamespace = null;
        shortTypeName = fullTypeName;
    } else {
        uimaNamespace = fullTypeName.substring(0, lastDot);
        shortTypeName = fullTypeName.substring(lastDot + 1);
    }
    // does EPackage already exist for this URI?
    EPackage ePackage = uimaNamespace2EPackage(uimaNamespace);
    EClassifier eclassifier;
    // if aType is a "subtype" of uima.cas.String, create an EEnum for it
    if (CAS.TYPE_NAME_STRING.equals(aType.getSupertypeName())) {
        eclassifier = EcoreFactory.eINSTANCE.createEEnum();
        AllowedValue[] vals = aType.getAllowedValues();
        for (int i = 0; i < vals.length; i++) {
            EEnumLiteral literal = EcoreFactory.eINSTANCE.createEEnumLiteral();
            literal.setValue(i);
            literal.setName(vals[i].getString());
            if (vals[i].getDescription() != null && vals[i].getDescription().length() > 0) {
                EAnnotation eannot = EcoreFactory.eINSTANCE.createEAnnotation();
                eannot.setSource("http://uima.apache.org");
                eannot.getDetails().put("description", vals[i].getDescription());
                literal.getEAnnotations().add(eannot);
            }
            ((EEnum) eclassifier).getELiterals().add(literal);
        }
    } else {
        // create EClass
        eclassifier = EcoreFactory.eINSTANCE.createEClass();
    }
    // set name of EClassifier
    eclassifier.setName(shortTypeName);
    // add to package
    ePackage.getEClassifiers().add(eclassifier);
    // set description as EAnnotation
    if (aType.getDescription() != null && aType.getDescription().length() > 0) {
        EAnnotation eannot = EcoreFactory.eINSTANCE.createEAnnotation();
        eannot.setSource("http://uima.apache.org");
        eannot.getDetails().put("description", aType.getDescription());
        eclassifier.getEAnnotations().add(eannot);
    }
    return eclassifier;
}
Example 64
Project: EmfStore-Test-master  File: IntegrationTestHelper.java View source code
/**
	 * This changes the given attribute on given ME. If attribute isMany then a new entry of attribute type will be
	 * added to a random position of its list. Also if attribute is an Enum, then a new value from this enumeration will
	 * be set for it. Note that new values are all selected randomly (except for strings).
	 * 
	 * @param me model element
	 * @param attribute attribute to change
	 */
@SuppressWarnings("unchecked")
public void changeAttribute(EObject me, EAttribute attribute) {
    if (attribute.getEType().getInstanceClass().equals(String.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<String> eList = (EList<String>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, "new entry for" + attribute.getName());
        } else {
            String oldValue = (String) me.eGet(attribute);
            String newValue = "changed-" + oldValue;
            me.eSet(attribute, newValue);
        }
    } else if (attribute.getEType().getInstanceClass().equals(boolean.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<Boolean> eList = (EList<Boolean>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, getRandom().nextBoolean());
        } else {
            me.eSet(attribute, !((Boolean) me.eGet(attribute)));
        }
    } else if (attribute.getEType().getInstanceClass().equals(int.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<Integer> eList = (EList<Integer>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, getRandom().nextInt());
        } else {
            me.eSet(attribute, getRandom().nextInt());
        }
    } else if (attribute.getEType().getInstanceClass().equals(Date.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<Date> eList = (EList<Date>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, getRandomDate());
        } else {
            me.eSet(attribute, getRandomDate());
        }
    }
    if (attribute.getEType() instanceof EEnum) {
        EEnum en = (EEnum) attribute.getEType();
        int numOfLiterals = en.getELiterals().size();
        int index = getRandomPosition(numOfLiterals);
        EEnumLiteral value = en.getELiterals().get(index);
        me.eSet(attribute, value.getInstance());
    }
}
Example 65
Project: JaMoPP-master  File: JavaCodeCompletionHelper.java View source code
public void run() {
    if (feature instanceof EReference) {
        EReference reference = (EReference) feature;
        if (featureType instanceof EClass) {
            if (reference.isContainment()) {
                // the FOLLOW set should contain only non-containment references
                assert false;
            } else {
                proposals.addAll(handleNCReference(expectedTerminal, container, reference, expectedTerminal.getPrefix(), expectedFeature.getTokenName()));
            }
        }
    } else if (feature instanceof EAttribute) {
        EAttribute attribute = (EAttribute) feature;
        if (featureType instanceof EEnum) {
            EEnum enumType = (EEnum) featureType;
            proposals.addAll(handleEnumAttribute(expectedTerminal, expectedFeature, enumType, expectedTerminal.getPrefix(), container));
        } else {
            // handle EAttributes (derive default value depending on the type of the
            // attribute, figure out token resolver, and call deResolve())
            proposals.addAll(handleAttribute(expectedTerminal, expectedFeature, container, attribute, expectedTerminal.getPrefix()));
        }
    } else {
        // there should be no other subclass of EStructuralFeature
        assert false;
    }
}
Example 66
Project: spray-master  File: PropertySection.java View source code
public StringConcatenation mainFile(final EAttribute eAttribute, final String className) {
    StringConcatenation _builder = new StringConcatenation();
    String _name = this.diagram.getName();
    final String diagramName = _name;
    _builder.newLineIfNotEmpty();
    EClass _eContainingClass = eAttribute.getEContainingClass();
    final EClass eClass = _eContainingClass;
    _builder.newLineIfNotEmpty();
    String _name_1 = eAttribute.getName();
    final String propertyName = _name_1;
    _builder.append(" ");
    _builder.newLineIfNotEmpty();
    EDataType _eAttributeType = eAttribute.getEAttributeType();
    final boolean isEnum = (_eAttributeType instanceof EEnum);
    _builder.newLineIfNotEmpty();
    EDataType _eAttributeType_1 = eAttribute.getEAttributeType();
    String _name_2 = _eAttributeType_1.getName();
    boolean _operator_equals = ObjectExtensions.operator_equals(_name_2, "EBoolean");
    final boolean isBoolean = _operator_equals;
    _builder.newLineIfNotEmpty();
    StringConcatenation _header = this.header(this);
    _builder.append(_header, "");
    _builder.newLineIfNotEmpty();
    _builder.append("package ");
    String _property_package = GeneratorUtil.property_package();
    _builder.append(_property_package, "");
    _builder.append(";");
    _builder.newLineIfNotEmpty();
    _builder.newLine();
    _builder.append("import org.eclipse.emf.transaction.RecordingCommand;");
    _builder.newLine();
    _builder.append("import org.eclipse.emf.transaction.TransactionalEditingDomain;");
    _builder.newLine();
    _builder.append("import org.eclipse.graphiti.mm.pictograms.PictogramElement;");
    _builder.newLine();
    _builder.append("import org.eclipse.graphiti.services.Graphiti;");
    _builder.newLine();
    _builder.append("import org.eclipse.graphiti.ui.platform.GFPropertySection;");
    _builder.newLine();
    _builder.append("import org.eclipse.graphiti.ui.internal.services.GraphitiUiInternal;");
    _builder.newLine();
    _builder.append("import org.eclipse.jface.action.IStatusLineManager;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.SWT;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.custom.CLabel;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.FocusEvent;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.FocusListener;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.ModifyEvent;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.ModifyListener;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.SelectionAdapter;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.SelectionEvent;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.events.SelectionListener;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.layout.FormAttachment;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.layout.FormData;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.widgets.Composite;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.widgets.Text;");
    _builder.newLine();
    _builder.append("import org.eclipse.swt.custom.CCombo;");
    _builder.newLine();
    _builder.append("import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;");
    _builder.newLine();
    _builder.append("import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;");
    _builder.newLine();
    _builder.append("import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;");
    _builder.newLine();
    _builder.append("import java.util.List;");
    _builder.newLine();
    _builder.append("import ");
    String _javaInterfaceName = this.naming.getJavaInterfaceName(eClass);
    _builder.append(_javaInterfaceName, "");
    _builder.append(";");
    _builder.newLineIfNotEmpty();
    {
        if (isEnum) {
            _builder.append("import ");
            EDataType _eAttributeType_2 = eAttribute.getEAttributeType();
            String _fullPackageName = MetaModel.fullPackageName(_eAttributeType_2);
            _builder.append(_fullPackageName, "");
            _builder.append(".");
            EDataType _eAttributeType_3 = eAttribute.getEAttributeType();
            String _name_3 = _eAttributeType_3.getName();
            _builder.append(_name_3, "");
            _builder.append(";");
            _builder.newLineIfNotEmpty();
        }
    }
    _builder.append("// MARKER_IMPORT");
    _builder.newLine();
    _builder.newLine();
    _builder.append("public class ");
    _builder.append(className, "");
    _builder.append(" extends GFPropertySection implements ITabbedPropertyConstants {");
    _builder.newLineIfNotEmpty();
    _builder.append(" ");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("protected ");
    String _name_4 = eClass.getName();
    _builder.append(_name_4, "    ");
    _builder.append(" bc = null;");
    _builder.newLineIfNotEmpty();
    {
        boolean _operator_or = false;
        if (isEnum) {
            _operator_or = true;
        } else {
            _operator_or = BooleanExtensions.operator_or(isEnum, isBoolean);
        }
        if (_operator_or) {
            _builder.append("    ");
            _builder.append("protected CCombo ");
            _builder.append(propertyName, "    ");
            _builder.append("Widget;");
            _builder.newLineIfNotEmpty();
        } else {
            _builder.append("    ");
            _builder.append("protected Text ");
            _builder.append(propertyName, "    ");
            _builder.append("Widget;");
            _builder.newLineIfNotEmpty();
        }
    }
    _builder.append(" ");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("@Override");
    _builder.newLine();
    _builder.append("    ");
    _builder.append("public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("super.createControls(parent, tabbedPropertySheetPage);");
    _builder.newLine();
    _builder.append(" ");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("TabbedPropertySheetWidgetFactory factory = getWidgetFactory();");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("Composite composite = factory.createFlatFormComposite(parent);");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("FormData data;");
    _builder.newLine();
    _builder.newLine();
    {
        boolean _operator_or_1 = false;
        if (isEnum) {
            _operator_or_1 = true;
        } else {
            _operator_or_1 = BooleanExtensions.operator_or(isEnum, isBoolean);
        }
        if (_operator_or_1) {
            _builder.append("    ");
            _builder.append(propertyName, "    ");
            _builder.append("Widget = factory.createCCombo(composite);");
            _builder.newLineIfNotEmpty();
        } else {
            _builder.append("    ");
            _builder.append(propertyName, "    ");
            _builder.append("Widget = factory.createText(composite, \"\");");
            _builder.newLineIfNotEmpty();
        }
    }
    _builder.append("        ");
    _builder.append("data = new FormData();");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("data.left = new FormAttachment(0, STANDARD_LABEL_WIDTH);");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("data.right = new FormAttachment(100, 0);");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("data.top = new FormAttachment(0, VSPACE);");
    _builder.newLine();
    _builder.append("        ");
    _builder.append(propertyName, "        ");
    _builder.append("Widget.setLayoutData(data);");
    _builder.newLineIfNotEmpty();
    _builder.append(" ");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("CLabel valueLabel = factory.createCLabel(composite, \"");
    String _firstUpper = StringExtensions.toFirstUpper(propertyName);
    _builder.append(_firstUpper, "        ");
    _builder.append("\");");
    _builder.newLineIfNotEmpty();
    _builder.append("        ");
    _builder.append("data = new FormData();");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("data.left = new FormAttachment(0, 0);");
    _builder.newLine();
    _builder.append("        ");
    _builder.append("data.right = new FormAttachment(");
    _builder.append(propertyName, "        ");
    _builder.append("Widget, -HSPACE);");
    _builder.newLineIfNotEmpty();
    _builder.append("        ");
    _builder.append("data.top = new FormAttachment(");
    _builder.append(propertyName, "        ");
    _builder.append("Widget, 0, SWT.CENTER);");
    _builder.newLineIfNotEmpty();
    _builder.append("        ");
    _builder.append("valueLabel.setLayoutData(data);");
    _builder.newLine();
    _builder.append("}");
    _builder.newLine();
    _builder.append(" ");
    _builder.newLine();
    {
        boolean _operator_or_2 = false;
        if (isEnum) {
            _operator_or_2 = true;
        } else {
            _operator_or_2 = BooleanExtensions.operator_or(isEnum, isBoolean);
        }
        boolean _operator_not = BooleanExtensions.operator_not(_operator_or_2);
        if (_operator_not) {
            _builder.append("@Override");
            _builder.newLine();
            _builder.append("public void refresh() {");
            _builder.newLine();
            _builder.append("    ");
            _builder.append(propertyName, "    ");
            _builder.append("Widget.removeModifyListener(nameListener);");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("    ");
            _builder.append("PictogramElement pe = getSelectedPictogramElement();");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("if (pe != null) {");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("Object bo = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(pe);");
            _builder.newLine();
            _builder.append("       ");
            _builder.append("// the filter assured, that it is a ");
            String _name_5 = eClass.getName();
            _builder.append(_name_5, "       ");
            _builder.newLineIfNotEmpty();
            _builder.append("        ");
            _builder.append("if (bo == null)");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("return;");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("bc = (");
            String _name_6 = eClass.getName();
            _builder.append(_name_6, "        ");
            _builder.append(")bo;");
            _builder.newLineIfNotEmpty();
            _builder.append("        ");
            _builder.append("String value = \"\";");
            _builder.newLine();
            {
                EDataType _eAttributeType_4 = eAttribute.getEAttributeType();
                String _name_7 = _eAttributeType_4.getName();
                boolean _operator_equals_1 = ObjectExtensions.operator_equals(_name_7, "EString");
                if (_operator_equals_1) {
                    _builder.append("value = bc.get");
                    String _firstUpper_1 = StringExtensions.toFirstUpper(propertyName);
                    _builder.append(_firstUpper_1, "");
                    _builder.append("();");
                    _builder.newLineIfNotEmpty();
                } else {
                    EDataType _eAttributeType_5 = eAttribute.getEAttributeType();
                    String _name_8 = _eAttributeType_5.getName();
                    boolean _operator_equals_2 = ObjectExtensions.operator_equals(_name_8, "EInt");
                    if (_operator_equals_2) {
                        _builder.append("value = Integer.toString( bc.get");
                        String _firstUpper_2 = StringExtensions.toFirstUpper(propertyName);
                        _builder.append(_firstUpper_2, "");
                        _builder.append("() );");
                        _builder.newLineIfNotEmpty();
                    } else {
                        _builder.append("value = \"unknown\";");
                        _builder.newLine();
                    }
                }
            }
            _builder.append("        ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.setText(value == null ? \"\" : value);");
            _builder.newLineIfNotEmpty();
            _builder.append("        ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.addModifyListener(nameListener);");
            _builder.newLineIfNotEmpty();
            _builder.append("    ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.append("private ModifyListener nameListener = new ModifyListener() {");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("public void modifyText(ModifyEvent arg0) {");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("TransactionalEditingDomain editingDomain = getDiagramEditor().getEditingDomain();");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) {");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("@Override");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("protected void doExecute() {");
            _builder.newLine();
            _builder.append("                ");
            _builder.append("changePropertyValue();");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("});");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("};");
            _builder.newLine();
        }
    }
    _builder.newLine();
    {
        boolean _operator_or_3 = false;
        if (isEnum) {
            _operator_or_3 = true;
        } else {
            _operator_or_3 = BooleanExtensions.operator_or(isEnum, isBoolean);
        }
        boolean _operator_not_1 = BooleanExtensions.operator_not(_operator_or_3);
        if (_operator_not_1) {
            _builder.append("protected void changePropertyValue(){");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("String newValue = ");
            _builder.append(propertyName, "    ");
            _builder.append("Widget.getText();");
            _builder.newLineIfNotEmpty();
            {
                boolean _operator_and = false;
                boolean _isDerived = eAttribute.isDerived();
                boolean _operator_not_2 = BooleanExtensions.operator_not(_isDerived);
                if (!_operator_not_2) {
                    _operator_and = false;
                } else {
                    boolean _isChangeable = eAttribute.isChangeable();
                    _operator_and = BooleanExtensions.operator_and(_operator_not_2, _isChangeable);
                }
                if (_operator_and) {
                    {
                        EDataType _eAttributeType_6 = eAttribute.getEAttributeType();
                        String _name_9 = _eAttributeType_6.getName();
                        boolean _operator_equals_3 = ObjectExtensions.operator_equals(_name_9, "EBoolean");
                        if (_operator_equals_3) {
                            _builder.append("String oldValue = ( bc.is");
                            String _firstUpper_3 = StringExtensions.toFirstUpper(propertyName);
                            _builder.append(_firstUpper_3, "");
                            _builder.append("() ? \"true\" : \"false\" );");
                            _builder.newLineIfNotEmpty();
                            _builder.append("if( ! newValue.equals(oldValue) ) { ");
                            _builder.newLine();
                            _builder.append("    ");
                            _builder.append("bc.set");
                            String _firstUpper_4 = StringExtensions.toFirstUpper(propertyName);
                            _builder.append(_firstUpper_4, "    ");
                            _builder.append("(! bc.is");
                            String _firstUpper_5 = StringExtensions.toFirstUpper(propertyName);
                            _builder.append(_firstUpper_5, "    ");
                            _builder.append("() );");
                            _builder.newLineIfNotEmpty();
                            _builder.append("}");
                            _builder.newLine();
                        } else {
                            EDataType _eAttributeType_7 = eAttribute.getEAttributeType();
                            String _name_10 = _eAttributeType_7.getName();
                            boolean _operator_equals_4 = ObjectExtensions.operator_equals(_name_10, "EString");
                            if (_operator_equals_4) {
                                _builder.append("if( ! newValue.equals(bc.get");
                                String _firstUpper_6 = StringExtensions.toFirstUpper(propertyName);
                                _builder.append(_firstUpper_6, "");
                                _builder.append("() ) ) { ");
                                _builder.newLineIfNotEmpty();
                                _builder.append("    ");
                                _builder.append("bc.set");
                                String _firstUpper_7 = StringExtensions.toFirstUpper(propertyName);
                                _builder.append(_firstUpper_7, "    ");
                                _builder.append("(newValue);");
                                _builder.newLineIfNotEmpty();
                                _builder.append("}");
                                _builder.newLine();
                            } else {
                                EDataType _eAttributeType_8 = eAttribute.getEAttributeType();
                                String _name_11 = _eAttributeType_8.getName();
                                boolean _operator_equals_5 = ObjectExtensions.operator_equals(_name_11, "EInt");
                                if (_operator_equals_5) {
                                    _builder.append("try {");
                                    _builder.newLine();
                                    _builder.append("    ");
                                    _builder.append("int newIntValue = Integer.parseInt(newValue);");
                                    _builder.newLine();
                                    _builder.append("    ");
                                    _builder.append("bc.set");
                                    String _firstUpper_8 = StringExtensions.toFirstUpper(propertyName);
                                    _builder.append(_firstUpper_8, "    ");
                                    _builder.append("( newIntValue );");
                                    _builder.newLineIfNotEmpty();
                                    _builder.append("} catch(Exception e) {");
                                    _builder.newLine();
                                    _builder.append("       ");
                                    _builder.append("IStatusLineManager mgr = GraphitiUiInternal.getWorkbenchService().getActiveStatusLineManager();");
                                    _builder.newLine();
                                    _builder.append("    ");
                                    _builder.append("mgr.setErrorMessage(e.getMessage() + \" should be a number\");");
                                    _builder.newLine();
                                    _builder.append("}");
                                    _builder.newLine();
                                }
                            }
                        }
                    }
                }
            }
            _builder.append("}");
            _builder.newLine();
        }
    }
    _builder.newLine();
    {
        boolean _operator_or_4 = false;
        if (isEnum) {
            _operator_or_4 = true;
        } else {
            _operator_or_4 = BooleanExtensions.operator_or(isEnum, isBoolean);
        }
        if (_operator_or_4) {
            _builder.append("    ");
            _builder.append("@Override");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("public void refresh() {");
            _builder.newLine();
            _builder.append("        ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.removeSelectionListener(nameListener);");
            _builder.newLineIfNotEmpty();
            _builder.append("        ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.setItems(getEnumerationFeatureValues());");
            _builder.newLineIfNotEmpty();
            _builder.append("        ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.setText(getFeatureAsText());");
            _builder.newLineIfNotEmpty();
            _builder.append("        ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.addSelectionListener(nameListener);");
            _builder.newLineIfNotEmpty();
            _builder.append("    ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("    ");
            _builder.newLine();
            _builder.append("   ");
            _builder.append("/**");
            _builder.newLine();
            _builder.append("     ");
            _builder.append("* ");
            _builder.newLine();
            _builder.append("     ");
            _builder.append("* @return An Array of all the String representations of Multiplicity enumeration values");
            _builder.newLine();
            _builder.append("     ");
            _builder.append("*/");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("protected String[] getEnumerationFeatureValues() {");
            _builder.newLine();
            {
                if (isEnum) {
                    _builder.append("    ");
                    _builder.append("List<");
                    EDataType _eAttributeType_9 = eAttribute.getEAttributeType();
                    String _name_12 = _eAttributeType_9.getName();
                    _builder.append(_name_12, "    ");
                    _builder.append("> values = ");
                    EDataType _eAttributeType_10 = eAttribute.getEAttributeType();
                    String _name_13 = _eAttributeType_10.getName();
                    _builder.append(_name_13, "    ");
                    _builder.append(".VALUES;");
                    _builder.newLineIfNotEmpty();
                    _builder.append("    ");
                    _builder.append("String[] ret = new String[values.size()];");
                    _builder.newLine();
                    _builder.append("    ");
                    _builder.append("for (int i = 0; i < values.size(); i++) {");
                    _builder.newLine();
                    _builder.append("    ");
                    _builder.append("    ");
                    _builder.append("ret[i] = ((");
                    EDataType _eAttributeType_11 = eAttribute.getEAttributeType();
                    String _name_14 = _eAttributeType_11.getName();
                    _builder.append(_name_14, "        ");
                    _builder.append(") values.get(i)).getName();");
                    _builder.newLineIfNotEmpty();
                    _builder.append("    ");
                    _builder.append("}");
                    _builder.newLine();
                } else {
                    EDataType _eAttributeType_12 = eAttribute.getEAttributeType();
                    String _name_15 = _eAttributeType_12.getName();
                    boolean _operator_equals_6 = ObjectExtensions.operator_equals(_name_15, "EBoolean");
                    if (_operator_equals_6) {
                        _builder.append("    ");
                        _builder.append("String[] ret = new String[] {\"false\", \"true\"};");
                        _builder.newLine();
                    }
                }
            }
            _builder.append("        ");
            _builder.append("return ret;");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("//        value = ( bc.is");
            String _firstUpper_9 = StringExtensions.toFirstUpper(propertyName);
            _builder.append(_firstUpper_9, "");
            _builder.append("() ? \"true\" : \"false\" );");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("    ");
            _builder.append("/**");
            _builder.newLine();
            _builder.append("     ");
            _builder.append("* ");
            _builder.newLine();
            _builder.append("     ");
            _builder.append("* @return The string representation of the current value of \'sourceMultiplicity\' of the selected Association");
            _builder.newLine();
            _builder.append("     ");
            _builder.append("*/");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("protected String getFeatureAsText() {");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("PictogramElement pe = getSelectedPictogramElement();");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("if (pe != null) {");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("Object bo = Graphiti.getLinkService().getBusinessObjectForLinkedPictogramElement(pe);");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("// the filter assured, that it is a ");
            String _name_16 = eClass.getName();
            _builder.append(_name_16, "            ");
            _builder.newLineIfNotEmpty();
            _builder.append("            ");
            _builder.append("if (bo == null) {");
            _builder.newLine();
            _builder.append("                ");
            _builder.append("return \"unknown \";");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("bc = (");
            String _name_17 = eClass.getName();
            _builder.append(_name_17, "            ");
            _builder.append(") bo;");
            _builder.newLineIfNotEmpty();
            {
                if (isEnum) {
                    _builder.append("    ");
                    _builder.append("if( bc.get");
                    String _name_18 = eAttribute.getName();
                    String _firstUpper_10 = StringExtensions.toFirstUpper(_name_18);
                    _builder.append(_firstUpper_10, "    ");
                    _builder.append("() == null ){");
                    _builder.newLineIfNotEmpty();
                    _builder.append("    ");
                    _builder.append("    ");
                    _builder.append("return \"Null value for ");
                    String _name_19 = eAttribute.getName();
                    _builder.append(_name_19, "        ");
                    _builder.append("\";");
                    _builder.newLineIfNotEmpty();
                    _builder.append("    ");
                    _builder.append("}");
                    _builder.newLine();
                    _builder.append("    ");
                    _builder.append("return bc.get");
                    String _name_20 = eAttribute.getName();
                    String _firstUpper_11 = StringExtensions.toFirstUpper(_name_20);
                    _builder.append(_firstUpper_11, "    ");
                    _builder.append("().getName();");
                    _builder.newLineIfNotEmpty();
                } else {
                    if (isBoolean) {
                        _builder.append("    ");
                        _builder.append("   ");
                        String _xifexpression = null;
                        String _name_21 = eAttribute.getName();
                        boolean _startsWith = _name_21.startsWith("is");
                        if (_startsWith) {
                            String _name_22 = eAttribute.getName();
                            _xifexpression = _name_22;
                        } else {
                            String _name_23 = eAttribute.getName();
                            String _firstUpper_12 = StringExtensions.toFirstUpper(_name_23);
                            String _operator_plus = StringExtensions.operator_plus("is", _firstUpper_12);
                            _xifexpression = _operator_plus;
                        }
                        final String name = _xifexpression;
                        _builder.newLineIfNotEmpty();
                        _builder.append("    ");
                        _builder.append("return ( bc.");
                        _builder.append(name, "    ");
                        _builder.append("() ? \"true\" : \"false\" );");
                        _builder.newLineIfNotEmpty();
                    }
                }
            }
            _builder.append("        ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("return \"unknown \";");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("}");
            _builder.newLine();
            _builder.newLine();
            _builder.newLine();
            _builder.append("     ");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("private SelectionListener nameListener = new SelectionAdapter() {");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("public void widgetSelected(SelectionEvent event) {");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("TransactionalEditingDomain editingDomain = getDiagramEditor().getEditingDomain();");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) {");
            _builder.newLine();
            _builder.append("                ");
            _builder.append("@Override");
            _builder.newLine();
            _builder.append("                ");
            _builder.append("protected void doExecute() {");
            _builder.newLine();
            _builder.append("                    ");
            _builder.append("changePropertyValue();");
            _builder.newLine();
            _builder.append("                ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("            ");
            _builder.append("});");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("}");
            _builder.newLine();
            _builder.append("    ");
            _builder.append("};");
            _builder.newLine();
            _builder.newLine();
            _builder.append("    ");
            _builder.append("protected void changePropertyValue(){");
            _builder.newLine();
            _builder.append("        ");
            _builder.append("int index = ");
            _builder.append(propertyName, "        ");
            _builder.append("Widget.getSelectionIndex();");
            _builder.newLineIfNotEmpty();
            {
                boolean _operator_and_1 = false;
                boolean _isDerived_1 = eAttribute.isDerived();
                boolean _operator_not_3 = BooleanExtensions.operator_not(_isDerived_1);
                if (!_operator_not_3) {
                    _operator_and_1 = false;
                } else {
                    boolean _isChangeable_1 = eAttribute.isChangeable();
                    _operator_and_1 = BooleanExtensions.operator_and(_operator_not_3, _isChangeable_1);
                }
                if (_operator_and_1) {
                    {
                        if (isEnum) {
                            _builder.append("    ");
                            EDataType _eAttributeType_13 = eAttribute.getEAttributeType();
                            String _name_24 = _eAttributeType_13.getName();
                            _builder.append(_name_24, "    ");
                            _builder.append(" value = ");
                            EDataType _eAttributeType_14 = eAttribute.getEAttributeType();
                            String _name_25 = _eAttributeType_14.getName();
                            _builder.append(_name_25, "    ");
                            _builder.append(".VALUES.get(index);");
                            _builder.newLineIfNotEmpty();
                            _builder.append("    ");
                            _builder.append("bc.set");
                            String _name_26 = eAttribute.getName();
                            String _firstUpper_13 = StringExtensions.toFirstUpper(_name_26);
                            _builder.append(_firstUpper_13, "    ");
                            _builder.append("(value);");
                            _builder.newLineIfNotEmpty();
                        } else {
                            if (isBoolean) {
                                _builder.append("    ");
                                _builder.append("   ");
                                _builder.append("boolean newValue = (index == 0 ? false : true);");
                                _builder.newLine();
                                _builder.append("    ");
                                _builder.append("   ");
                                String _xifexpression_1 = null;
                                String _name_27 = eAttribute.getName();
                                boolean _startsWith_1 = _name_27.startsWith("is");
                                if (_startsWith_1) {
                                    String _name_28 = eAttribute.getName();
                                    _xifexpression_1 = _name_28;
                                } else {
                                    String _name_29 = eAttribute.getName();
                                    String _firstUpper_14 = StringExtensions.toFirstUpper(_name_29);
                                    String _operator_plus_1 = StringExtensions.operator_plus("is", _firstUpper_14);
                                    _xifexpression_1 = _operator_plus_1;
                                }
                                final String name_1 = _xifexpression_1;
                                _builder.newLineIfNotEmpty();
                                _builder.append("    ");
                                _builder.append("if( newValue != bc.");
                                _builder.append(name_1, "    ");
                                _builder.append("() ) { ");
                                _builder.newLineIfNotEmpty();
                                _builder.append("    ");
                                _builder.append("    ");
                                _builder.append("bc.set");
                                String _name_30 = eAttribute.getName();
                                String _firstUpper_15 = StringExtensions.toFirstUpper(_name_30);
                                _builder.append(_firstUpper_15, "        ");
                                _builder.append("(newValue );");
                                _builder.newLineIfNotEmpty();
                                _builder.append("    ");
                                _builder.append("}");
                                _builder.newLine();
                            }
                        }
                    }
                }
            }
            _builder.append("    ");
            _builder.append("}");
            _builder.newLine();
        }
    }
    _builder.append("}    ");
    return _builder;
}
Example 67
Project: EMF-Store-Extensible-Authorization-master  File: IntegrationTestHelper.java View source code
/**
	 * This changes the given attribute on given ME. If attribute isMany then a new entry of attribute type will be
	 * added to a random position of its list. Also if attribute is an Enum, then a new value from this enumeration will
	 * be set for it. Note that new values are all selected randomly (except for strings).
	 * 
	 * @param me model element
	 * @param attribute attribute to change
	 */
@SuppressWarnings("unchecked")
public void changeAttribute(EObject me, EAttribute attribute) {
    if (attribute.getEType().getInstanceClass().equals(String.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<String> eList = (EList<String>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, "new entry for" + attribute.getName());
        } else {
            String oldValue = (String) me.eGet(attribute);
            String newValue = "changed-" + oldValue;
            me.eSet(attribute, newValue);
        }
    } else if (attribute.getEType().getInstanceClass().equals(boolean.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<Boolean> eList = (EList<Boolean>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, getRandom().nextBoolean());
        } else {
            me.eSet(attribute, !((Boolean) me.eGet(attribute)));
        }
    } else if (attribute.getEType().getInstanceClass().equals(int.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<Integer> eList = (EList<Integer>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, getRandom().nextInt());
        } else {
            me.eSet(attribute, getRandom().nextInt());
        }
    } else if (attribute.getEType().getInstanceClass().equals(Date.class)) {
        if (attribute.isMany()) {
            Object object = me.eGet(attribute);
            EList<Date> eList = (EList<Date>) object;
            int position = getRandomPosition(eList.size());
            eList.add(position, getRandomDate());
        } else {
            me.eSet(attribute, getRandomDate());
        }
    }
    if (attribute.getEType() instanceof EEnum) {
        EEnum en = (EEnum) attribute.getEType();
        int numOfLiterals = en.getELiterals().size();
        int index = getRandomPosition(numOfLiterals);
        EEnumLiteral value = en.getELiterals().get(index);
        me.eSet(attribute, value.getInstance());
    }
}
Example 68
Project: org.eclipselab.emf.ecore.protobuf-master  File: EnumConverter.java View source code
@Override
public boolean supports(FieldDescriptor sourceType, EDataType targetType) {
    return sourceType.getType() == Type.ENUM && targetType instanceof EEnum;
}
Example 69
Project: emf4sw-master  File: DatatypeConverter.java View source code
public static String get(EDataType aType) {
    return aType instanceof EEnum ? RDFS.Literal : xsdmap.containsKey(aType) ? xsdmap.get(aType) : RDFS.Literal;
}
Example 70
Project: monticore-master  File: ASTENodePackageImpl.java View source code
public EEnum getConstantsASTENode() {
    return constantsASTENodeEEnum;
}
Example 71
Project: xrepl-master  File: EcoreUtil3.java View source code
public static boolean isEnum(EClassifier eType) {
    return eType instanceof EEnum;
}
Example 72
Project: Android-DataLib-master  File: ContentPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getParseType() {
    return parseTypeEEnum;
}
Example 73
Project: edu.ufc.femtost.disc.sysml2modelica-master  File: TypesPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getModelicaFlowFlagKind() {
    return modelicaFlowFlagKindEEnum;
}
Example 74
Project: eef-master  File: ValidationPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getSeverity() {
    return severityEEnum;
}
Example 75
Project: EMF-IncQuery-Examples-master  File: Bpmn20execPackageImpl.java View source code
/**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
public EEnum getProcessState() {
    return processStateEEnum;
}
Example 76
Project: ifml-editor-master  File: DataTypesPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getDirection() {
    return directionEEnum;
}
Example 77
Project: rmf-master  File: MappingPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getDataType() {
    return dataTypeEEnum;
}
Example 78
Project: starschema-talend-plugins-master  File: ConstantsPackageImpl.java View source code
/**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
public EEnum getDevelopmentStatus() {
    return developmentStatusEEnum;
}
Example 79
Project: webtools.jsf-master  File: QuickEditTabSectionsPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getSECTION_TYPE() {
    return sectioN_TYPEEEnum;
}
Example 80
Project: ArchStudio5-master  File: Domain_3_0PackageImpl.java View source code
/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
@Override
public EEnum getDomainType() {
    return domainTypeEEnum;
}
Example 81
Project: dltk.tcl-master  File: MessagesPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getMessageCategory() {
    return messageCategoryEEnum;
}
Example 82
Project: elexis-3-core-master  File: TypesPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getContactType() {
    return contactTypeEEnum;
}
Example 83
Project: fstoolkit-master  File: ExperimentRuntimePackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getRuntimeElementStatus() {
    return runtimeElementStatusEEnum;
}
Example 84
Project: Magic-Collection-Builder-master  File: DatabasePackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getCardCSVFields() {
    return cardCSVFieldsEEnum;
}
Example 85
Project: melange-master  File: TestcopyPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getMyEnum() {
    return myEnumEEnum;
}
Example 86
Project: openflexo-eclipse-master  File: City1PackageImpl.java View source code
/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
public EEnum getHouseType() {
    return houseTypeEEnum;
}
Example 87
Project: skysail-server-ext-master  File: FormsPackageImpl.java View source code
/**
     * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
     * @generated
     */
public EEnum getType() {
    return typeEEnum;
}
Example 88
Project: tdq-studio-se-master  File: SQLPackageImpl.java View source code
/**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
public EEnum getSqlPredicate() {
    return sqlPredicateEEnum;
}
Example 89
Project: viatra-example-master  File: FowlerPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getState() {
    return stateEEnum;
}
Example 90
Project: webtools.javaee-master  File: ClientPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getResAuthApplicationType() {
    return resAuthApplicationTypeEEnum;
}
Example 91
Project: webtools.sourceediting-master  File: DTDAdapterFactory.java View source code
public Object caseEEnum(EEnum object) {
    return createEEnumAdapter();
}
Example 92
Project: emf.emfstore.core-master  File: ModelPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 *
	 * @generated
	 */
public EEnum getEMFStorePropertyType() {
    return emfStorePropertyTypeEEnum;
}
Example 93
Project: emfdatabinding-tutorial-master  File: AddressbookPackageImpl.java View source code
/**
	 * <!-- begin-user-doc --> <!-- end-user-doc -->
	 * 
	 * @generated
	 */
public EEnum getAddressType() {
    return addressTypeEEnum;
}
Example 94
Project: fr.obeo.performance-master  File: PerformancePackageImpl.java View source code
/**
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * @generated
     */
public EEnum getDimension() {
    return dimensionEEnum;
}
Example 95
Project: geotools-2.7.x-master  File: XlinkPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getActuateType() {
    return actuateTypeEEnum;
}
Example 96
Project: geotools-old-master  File: XlinkPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getActuateType() {
    return actuateTypeEEnum;
}
Example 97
Project: geotools-tike-master  File: XlinkPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getActuateType() {
    return actuateTypeEEnum;
}
Example 98
Project: geotools_trunk-master  File: XlinkPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getActuateType() {
    return actuateTypeEEnum;
}
Example 99
Project: mecha-master  File: OpServiceModelPackageImpl.java View source code
/**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
public EEnum getOpArgType() {
    return opArgTypeEEnum;
}
Example 100
Project: mechanoid-master  File: OpServiceModelPackageImpl.java View source code
/**
   * <!-- begin-user-doc -->
   * <!-- end-user-doc -->
   * @generated
   */
public EEnum getOpArgType() {
    return opArgTypeEEnum;
}
Example 101
Project: Permet-master  File: ChessPackageImpl.java View source code
/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
public EEnum getRanks() {
    return ranksEEnum;
}