/** * This method validates Csdl Entity types. * Looks for correct namespace aliases and correct base types */ private void validateCsdlEntityTypes() { for (Map.Entry<FullQualifiedName, CsdlEntityType> entityTypes : csdlEntityTypesMap.entrySet()) { if (entityTypes.getValue() != null && entityTypes.getKey() != null) { CsdlEntityType entityType = entityTypes.getValue(); if (entityType.getBaseType() != null) { CsdlEntityType baseEntityType; FullQualifiedName baseTypeFQName = entityType.getBaseTypeFQN(); if (!csdlEntityTypesMap.containsKey(baseTypeFQName)) { FullQualifiedName fqName = validateCsdlEntityTypeWithAlias(baseTypeFQName); baseEntityType = fetchLastCsdlBaseType(fqName); } else { baseEntityType = fetchLastCsdlBaseType(baseTypeFQName); } if (baseEntityType != null && (baseEntityType.getKey() == null || baseEntityType.getKey().isEmpty())) { throw new RuntimeException("Missing key for EntityType " + baseEntityType.getName()); } } else if (entityType.getKey() == null || entityType.getKey().isEmpty()) { throw new RuntimeException("Missing key for EntityType " + entityType.getName()); } } } }
@Override void build(XMLEventReader reader, StartElement element, CsdlEntityType entityType, String name) throws XMLStreamException { CsdlPropertyRef ref = new CsdlPropertyRef(); ref.setName(attr(element, "Name")); ref.setAlias(attr(element, "Alias")); entityType.getKey().add(ref); } }.read(reader, element, entityType, "PropertyRef");
/** * This method validates Csdl Entity types. * Looks for correct namespace aliases and correct base types */ private void validateCsdlEntityTypes() { for (Map.Entry<FullQualifiedName, CsdlEntityType> entityTypes : csdlEntityTypesMap.entrySet()) { if (entityTypes.getValue() != null && entityTypes.getKey() != null) { CsdlEntityType entityType = entityTypes.getValue(); if (entityType.getBaseType() != null) { CsdlEntityType baseEntityType; FullQualifiedName baseTypeFQName = entityType.getBaseTypeFQN(); if (!csdlEntityTypesMap.containsKey(baseTypeFQName)) { FullQualifiedName fqName = validateCsdlEntityTypeWithAlias(baseTypeFQName); baseEntityType = fetchLastCsdlBaseType(fqName); } else { baseEntityType = fetchLastCsdlBaseType(baseTypeFQName); } if (baseEntityType != null && (baseEntityType.getKey() == null || baseEntityType.getKey().isEmpty())) { throw new RuntimeException("Missing key for EntityType " + baseEntityType.getName()); } } else if (entityType.getKey() == null || entityType.getKey().isEmpty()) { throw new RuntimeException("Missing key for EntityType " + entityType.getName()); } } } }
@Override void build(XMLEventReader reader, StartElement element, CsdlEntityType entityType, String name) throws XMLStreamException { CsdlPropertyRef ref = new CsdlPropertyRef(); ref.setName(attr(element, "Name")); ref.setAlias(attr(element, "Alias")); entityType.getKey().add(ref); } }.read(reader, element, entityType, "PropertyRef");
/** * This fetches the last Base Type entity from a hierarchy of base type derived types * @param baseTypeFQName * @return CsdlEntityType */ private CsdlEntityType fetchLastCsdlBaseType(FullQualifiedName baseTypeFQName) { CsdlEntityType baseEntityType = null; while (baseTypeFQName != null) { if (!(csdlEntityTypesMap.containsKey(baseTypeFQName))) { baseTypeFQName = validateCsdlEntityTypeWithAlias(baseTypeFQName); } baseEntityType = csdlEntityTypesMap.get(baseTypeFQName); if (baseEntityType != null) { if (baseEntityType.getKey() != null) { break; } else if (baseEntityType.getBaseType() != null) { baseTypeFQName = baseEntityType.getBaseTypeFQN(); } else if (baseEntityType.getBaseType() == null) { break; } } } return baseEntityType; }
@Override protected void checkBaseType() { if (!baseTypeChecked) { if (baseTypeName != null) { baseType = buildBaseType(baseTypeName); entityBaseType = (EdmEntityType) baseType; } if (baseType == null || (baseType.isAbstract() && ((EdmEntityType) baseType).getKeyPropertyRefs().isEmpty())) { final List<CsdlPropertyRef> key = entityType.getKey(); if (key != null) { final List<EdmKeyPropertyRef> edmKey = new ArrayList<EdmKeyPropertyRef>(); for (CsdlPropertyRef ref : key) { edmKey.add(new EdmKeyPropertyRefImpl(this, ref)); } setEdmKeyPropertyRef(edmKey); } } baseTypeChecked = true; } }
@Override protected void checkBaseType() { if (!baseTypeChecked) { if (baseTypeName != null) { baseType = buildBaseType(baseTypeName); entityBaseType = (EdmEntityType) baseType; } if (baseType == null || (baseType.isAbstract() && ((EdmEntityType) baseType).getKeyPropertyRefs().isEmpty())) { final List<CsdlPropertyRef> key = entityType.getKey(); if (key != null) { final List<EdmKeyPropertyRef> edmKey = new ArrayList<EdmKeyPropertyRef>(); for (CsdlPropertyRef ref : key) { edmKey.add(new EdmKeyPropertyRefImpl(this, ref)); } setEdmKeyPropertyRef(edmKey); } } baseTypeChecked = true; } }
/** * This fetches the last Base Type entity from a hierarchy of base type derived types * @param baseTypeFQName * @return CsdlEntityType */ private CsdlEntityType fetchLastCsdlBaseType(FullQualifiedName baseTypeFQName) { CsdlEntityType baseEntityType = null; while (baseTypeFQName != null) { if (!(csdlEntityTypesMap.containsKey(baseTypeFQName))) { baseTypeFQName = validateCsdlEntityTypeWithAlias(baseTypeFQName); } baseEntityType = csdlEntityTypesMap.get(baseTypeFQName); if (baseEntityType != null) { if (baseEntityType.getKey() != null) { break; } else if (baseEntityType.getBaseType() != null) { baseTypeFQName = baseEntityType.getBaseTypeFQN(); } else if (baseEntityType.getBaseType() == null) { break; } } } return baseEntityType; }
void addPrimaryKey(MetadataFactory mf, XMLMetadata metadata, Table table, CsdlEntityType entityType) throws TranslatorException { List<CsdlPropertyRef> keys = entityType.getKey(); List<String> pkNames = new ArrayList<String>(); for (CsdlPropertyRef ref : keys) { if (!addProperty(mf, metadata, table, entityType.getProperty(ref.getName()))) { throw new AssertionError("Complex type not allowed as part of primary key"); //$NON-NLS-1$ } pkNames.add(ref.getName()); if (ref.getAlias() != null) { throw new TranslatorException(ODataPlugin.Util.gs(ODataPlugin.Event.TEIID17018, table.getName(),ref.getName())); } } mf.addPrimaryKey("PK", pkNames, table); }
csdlProp.getTypeAsFQNObject().getNamespace()); property.setServiceName(namespaceToServMap.get(propNamespace)); property.setIskey(EdmxToCommonModelHelper.checkIfKeyProperty(property.getName(), csdlEntity.getKey())); property.setEnumType(false);