public static String resolveBaseTypesForComplex(CsdlComplexType csdlComplexType, CommonJavaObjectForEdmx comModel, CDXEdmProvider edmxProvider, Map<String, String> namespaceToServMap) { String baseTypeName = csdlComplexType.getBaseType(); // build entity model for base type entity FullQualifiedName fqnComplex = csdlComplexType.getBaseTypeFQN(); if (fqnComplex != null) { try { CsdlComplexType csdlBaseComplex = edmxProvider.getComplexType(fqnComplex); if (!EdmxToCommonModelHelper.isComplexTypeAlreadyAdded(csdlBaseComplex.getName(), comModel)) { ComplexTypeModel comComplex = EdmxToCommonJavaObjectConverter.convertCsdlComplexToCommonModel( csdlBaseComplex, comModel, edmxProvider, namespaceToServMap); comModel.addComplexType(comComplex); } } catch (ODataException e) { PojoGenUtil.logDebug(log, "Could not fetch Base Type from EdmxProvider called by resolveBaseTypesForComplex"); } } return baseTypeName != null ? baseTypeName : ""; }
@Override void build(XMLEventReader reader, StartElement element, CsdlComplexType complexType, String name) throws XMLStreamException { if ("Property".equals(name)) { complexType.getProperties().add(readProperty(reader, element)); } else if ("NavigationProperty".equals(name)) { complexType.getNavigationProperties().add(readNavigationProperty(reader, element)); } else if ("Annotation".equals(name)) { readAnnotations(reader, element, complexType); } } }.read(reader, null, complexType, "Property", "NavigationProperty", "Annotation");
private void readComplexType(XMLEventReader reader, StartElement element, CsdlSchema schema) throws XMLStreamException { CsdlComplexType complexType = new CsdlComplexType(); complexType.setProperties(new ArrayList<CsdlProperty>()); complexType.setNavigationProperties(new ArrayList<CsdlNavigationProperty>()); complexType.setName(attr(element, "Name")); if (attr(element, "BaseType") != null) { complexType.setBaseType(new FullQualifiedName(attr(element, "BaseType"))); } complexType.setAbstract(Boolean.parseBoolean(attr(element, "Abstract"))); complexType.setOpenType(Boolean.parseBoolean(attr(element, "OpenType"))); readProperties(reader, complexType); schema.getComplexTypes().add(complexType); }
private static CsdlComplexType newAbstractComplexType(FullQualifiedName name, CsdlProperty... properties) { return new CsdlComplexType().setOpenType(true).setAbstract(true).setName(name.getName()).setProperties(Arrays .asList(properties)); }
/** * This method validates Csdl Complex types. * Looks for correct namespace aliases and correct complex base types */ private void validateCsdlComplexTypes() { for (Map.Entry<FullQualifiedName, CsdlComplexType> complexTypes : csdlComplexTypesMap.entrySet()) { if (complexTypes.getValue() != null && complexTypes.getKey() != null) { CsdlComplexType complexType = complexTypes.getValue(); if (complexType.getBaseType() != null) { FullQualifiedName baseTypeFQName = complexType.getBaseTypeFQN(); if (!csdlComplexTypesMap.containsKey(baseTypeFQName)) { validateCsdlComplexTypeWithAlias(baseTypeFQName); } } } } }
@SuppressWarnings("unchecked") @Override protected void lazyBuildEdmItem() throws ODataJPAModelException { if (edmComplexType == null) { buildPropertyList(); buildNaviPropertyList(); edmComplexType = new CsdlComplexType(); edmComplexType.setName(this.getExternalName()); edmComplexType.setProperties((List<CsdlProperty>) extractEdmModelElements(declaredPropertiesList)); edmComplexType.setNavigationProperties((List<CsdlNavigationProperty>) extractEdmModelElements( declaredNaviPropertiesList)); edmComplexType.setBaseType(determineBaseType()); // TODO Abstract // edmComplexType.setAbstract(isAbstract) // TODO OpenType // edmComplexType.setOpenType(isOpenType) if (determineHasStream()) { throw new ODataJPAModelException(ODataJPAModelException.MessageKeys.NOT_SUPPORTED_EMBEDDED_STREAM, internalName); } } }
private static CsdlComplexType buildComplexType(Procedure proc, ColumnSet<Procedure> returnColumns, CsdlSchema csdlSchema) { CsdlComplexType complexType = new CsdlComplexType(); String entityTypeName = proc.getName() + "_" + returnColumns.getName(); //$NON-NLS-1$ complexType.setName(entityTypeName); ArrayList<CsdlProperty> props = new ArrayList<CsdlProperty>(); for (Column c : returnColumns.getColumns()) { CsdlProperty property = buildProperty(c, (c.getNullType() == NullType.Nullable)); props.add(property); addColumnAnnotations(c, property, csdlSchema); } complexType.setProperties(props); return complexType; }
public static ComplexTypeModel convertCsdlComplexToCommonModel(CsdlComplexType csdlComplexType, CommonJavaObjectForEdmx comModel, CDXEdmProvider edmxProvider, Map<String, String> namespaceToServMap) { ComplexTypeModel commonComplex = new ComplexTypeModel(); if (csdlComplexType != null) { commonComplex.setName(csdlComplexType.getName()); // resolve base type of complex type String baseType = CsdlBaseTypeResolver.resolveBaseTypesForComplex(csdlComplexType, comModel, edmxProvider, namespaceToServMap); commonComplex.setBaseTypeName(baseType); commonComplex.setHasBaseType(baseType.equals("") ? false : true); List<PropertyTypeModel> comxProps = csdlToCommonPropertiesForComplex(commonComplex, csdlComplexType.getProperties(), comModel, edmxProvider, namespaceToServMap); commonComplex.setProperties(comxProps); List<NavigationTypeModel> comxNavs = csdlToCommonNavigationsForComplex( csdlComplexType.getNavigationProperties(), edmxProvider, comModel, commonComplex, namespaceToServMap); commonComplex.setNavigations(comxNavs); } return commonComplex; }
CsdlProperty propertyName, boolean isComplexPropAnnotationsCleared, boolean isComplexNavPropAnnotationsCleared, CsdlComplexType complexType) { for (CsdlProperty complexPropertyName : complexType.getProperties()) { if (!isComplexPropAnnotationsCleared) { complexType.getProperty(complexPropertyName.getName()).getAnnotations().clear(); for (CsdlNavigationProperty complexNavPropertyName : complexType.getNavigationProperties()) { if (!isComplexNavPropAnnotationsCleared) { complexType.getNavigationProperty(complexNavPropertyName.getName()).getAnnotations().clear();
protected List<EdmComplexType> createComplexTypes() { final List<EdmComplexType> edmComplexTypes = new ArrayList<EdmComplexType>(); final List<CsdlComplexType> providerComplexTypes = schema.getComplexTypes(); if (providerComplexTypes != null) { for (CsdlComplexType complexType : providerComplexTypes) { FullQualifiedName comlexTypeName = new FullQualifiedName(namespace, complexType.getName()); EdmComplexTypeImpl complexTypeImpl = new EdmComplexTypeImpl(edm, comlexTypeName, complexType); edmComplexTypes.add(complexTypeImpl); edm.cacheComplexType(comlexTypeName, complexTypeImpl); } } return edmComplexTypes; }
for (CsdlProperty property : complexType.getProperties()) { if (!addProperty(mf, metadata, childTable, property)) { complexTypes.add(property); String baseType = complexType.getBaseType(); while(baseType != null) { CsdlComplexType baseComplexType = getComplexType(metadata, baseType); for (CsdlProperty property:baseComplexType.getProperties()) { if (!addProperty(mf, metadata, childTable, property)) { complexTypes.add(property); baseType = baseComplexType.getBaseType();
private List<CsdlProperty> resolveEmbeddedId(final IntermediateEmbeddedIdProperty embeddedId) throws ODataJPAModelException { return ((IntermediateComplexType) embeddedId.getStructuredType()).getEdmItem().getProperties(); } }
/** * * @param singleton * @param entityContainerName2 * @param annotationGrp * @param propertyName * @param isComplexNavPropAnnotationsCleared * @param complexType */ private void addAnnotationsToComplexTypeIncludedFromSingleton(CsdlSingleton singleton, CsdlAnnotations annotationGrp, CsdlProperty propertyName, boolean isComplexNavPropAnnotationsCleared, CsdlComplexType complexType) { for (CsdlNavigationProperty complexNavPropertyName : complexType.getNavigationProperties()) { if (!isComplexNavPropAnnotationsCleared) { complexType.getNavigationProperty(complexNavPropertyName.getName()).getAnnotations().clear(); } if (annotationGrp.getTarget(). equalsIgnoreCase(entityContainerName + "/" + singleton.getName() + "/" + propertyName.getName() + "/" + complexNavPropertyName.getName())) { isSingletonAnnotationsIncluded = true; addAnnotationsToComplexTypeNavProperties(annotationGrp, complexType, complexNavPropertyName); } } }
private static CsdlComplexType newComplexType(FullQualifiedName name, FullQualifiedName base, CsdlProperty... properties) { return newComplexType(name, properties).setBaseType(base); }
public static CsdlNavigationProperty findNavigationPropertyFromPath(String path, CsdlEntityType csdlentity, CDXEdmProvider edmxMetadataProvider) { CsdlNavigationProperty navProperty = null; CsdlComplexType complxType = null; if (csdlentity != null) { if (path.contains("/")) { String[] spltdArray = path.split("/"); String navPropName = spltdArray[spltdArray.length-1]; complxType = EdmxToCommonModelHelper.getComplexTypeFromPath(spltdArray[0], csdlentity, edmxMetadataProvider); if (complxType != null) { for (int i = 1; i < spltdArray.length - 1; i++) { complxType = getComplexTypeFromPath(spltdArray[i], complxType, edmxMetadataProvider); } if (complxType != null) { List<CsdlNavigationProperty> navprops = complxType.getNavigationProperties(); navProperty = getNavPropertyFromList(navprops, navPropName); } } } else { List<CsdlNavigationProperty> navprops = csdlentity.getNavigationProperties(); navProperty = getNavPropertyFromList(navprops, path); } } return navProperty; }
/** * @param annotationGrp * @param complexType * @param complexNavPropertyName */ private void addAnnotationsToComplexTypeNavProperties(CsdlAnnotations annotationGrp, CsdlComplexType complexType, CsdlNavigationProperty complexNavPropertyName) { for (CsdlAnnotation annotation : annotationGrp.getAnnotations()) { if (!compareAnnotations(complexType.getNavigationProperty( complexNavPropertyName.getName()).getAnnotations(), annotation)) { complexType.getNavigationProperty(complexNavPropertyName.getName()).getAnnotations().add(annotation); } } }
private static CsdlComplexType newComplexType(FullQualifiedName name, CsdlProperty... properties) { return new CsdlComplexType().setOpenType(true).setAbstract(false).setName(name.getName()).setProperties(Arrays .asList(properties)); }
protected List<EdmComplexType> createComplexTypes() { final List<EdmComplexType> edmComplexTypes = new ArrayList<EdmComplexType>(); final List<CsdlComplexType> providerComplexTypes = schema.getComplexTypes(); if (providerComplexTypes != null) { for (CsdlComplexType complexType : providerComplexTypes) { FullQualifiedName comlexTypeName = new FullQualifiedName(namespace, complexType.getName()); EdmComplexTypeImpl complexTypeImpl = new EdmComplexTypeImpl(edm, comlexTypeName, complexType); edmComplexTypes.add(complexTypeImpl); edm.cacheComplexType(comlexTypeName, complexTypeImpl); } } return edmComplexTypes; }
/** * This method validates Csdl Complex types. * Looks for correct namespace aliases and correct complex base types */ private void validateCsdlComplexTypes() { for (Map.Entry<FullQualifiedName, CsdlComplexType> complexTypes : csdlComplexTypesMap.entrySet()) { if (complexTypes.getValue() != null && complexTypes.getKey() != null) { CsdlComplexType complexType = complexTypes.getValue(); if (complexType.getBaseType() != null) { FullQualifiedName baseTypeFQName = complexType.getBaseTypeFQN(); if (!csdlComplexTypesMap.containsKey(baseTypeFQName)) { validateCsdlComplexTypeWithAlias(baseTypeFQName); } } } } }
public static CsdlComplexType getComplexTypeFromPath(String name, CsdlComplexType csdlobj, CDXEdmProvider edmxMetadataProvider) { FullQualifiedName complxFQN = null; CsdlComplexType cmplxType = null; if (csdlobj != null) { List<CsdlProperty> props = csdlobj.getProperties(); if (props != null) { for (int i = 0; i < props.size(); i++) { if (name.equals(props.get(i).getName())) { complxFQN = props.get(i).getTypeAsFQNObject(); try { cmplxType = edmxMetadataProvider.getComplexType(complxFQN); } catch (ODataException e) { PojoGenUtil.logDebug(log, "Could not fetch Complex Type from EdmxProvider called by getComplexTypeFromPath"); } break; } } } } return cmplxType; }