@Override public List<EdmReferentialConstraint> getReferentialConstraints() { if (referentialConstraints == null) { final List<CsdlReferentialConstraint> providerConstraints = navigationProperty.getReferentialConstraints(); final List<EdmReferentialConstraint> referentialConstraintsLocal = new ArrayList<EdmReferentialConstraint>(); if (providerConstraints != null) { for (CsdlReferentialConstraint constraint : providerConstraints) { referentialConstraintsLocal.add(new EdmReferentialConstraintImpl(edm, constraint)); } } referentialConstraints = Collections.unmodifiableList(referentialConstraintsLocal); } return referentialConstraints; } }
@Override public FullQualifiedName getTypeFQN() { // TODO Auto-generated method stub return super.getTypeFQN(); }
@Override public boolean isCollection() { return navigationProperty.isCollection(); }
/** Adds annotations to Entity type Navigation Properties derived from entity set * @param annotationGrp * @param entityType * @param navPropertyName */ private void addAnnotationsToEntityTypeNavProperties(CsdlAnnotations annotationGrp, CsdlEntityType entityType, CsdlNavigationProperty navPropertyName) { for (CsdlAnnotation annotation : annotationGrp.getAnnotations()) { if (!compareAnnotations(entityType.getNavigationProperty( navPropertyName.getName()).getAnnotations(), annotation)) { entityType.getNavigationProperty(navPropertyName.getName()).getAnnotations().add(annotation); } } }
if (token == JsonToken.FIELD_NAME) { if ("Name".equals(jp.getCurrentName())) { property.setName(jp.nextTextValue()); } else if ("Type".equals(jp.getCurrentName())) { String metadataTypeName = jp.nextTextValue(); if (metadataTypeName.startsWith("Collection(")) { property.setType(metadataTypeName.substring(metadataTypeName.indexOf("(") + 1, metadataTypeName.length() - 1)); property.setCollection(true); } else { property.setType(metadataTypeName); property.setCollection(false); property.setNullable(BooleanUtils.toBoolean(jp.nextTextValue())); } else if ("Partner".equals(jp.getCurrentName())) { property.setPartner(jp.nextTextValue()); } else if ("ContainsTarget".equals(jp.getCurrentName())) { property.setContainsTarget(BooleanUtils.toBoolean(jp.nextTextValue())); } else if ("ReferentialConstraint".equals(jp.getCurrentName())) { jp.nextToken(); property.getReferentialConstraints().add(jp.readValueAs(ClientCsdlReferentialConstraint.class)); } else if ("OnDelete".equals(jp.getCurrentName())) { jp.nextToken(); property.setOnDelete(jp.readValueAs(ClientCsdlOnDelete.class)); } else if ("Annotation".equals(jp.getCurrentName())) { jp.nextToken(); property.getAnnotations().add(jp.readValueAs(ClientCsdlAnnotation.class));
private CsdlNavigationProperty readNavigationProperty(XMLEventReader reader, StartElement element) throws XMLStreamException { CsdlNavigationProperty property = new CsdlNavigationProperty(); property.setReferentialConstraints(new ArrayList<CsdlReferentialConstraint>()); property.setName(attr(element, "Name")); property.setType(readType(element)); property.setCollection(isCollectionType(element)); property.setNullable(Boolean.parseBoolean(attr(element, "Nullable") == null ? "true" : attr(element, "Nullable"))); property.setPartner(attr(element, "Partner")); property.setContainsTarget(Boolean.parseBoolean(attr(element, "ContainsTarget")));
String mappedBy = null; boolean isSourceOne = false; edmNaviProperty = new CsdlNavigationProperty(); edmNaviProperty.setName(getExternalName()); edmNaviProperty.setType(nameBuilder.buildFQN(targetType.getExternalName())); edmNaviProperty.setCollection(jpaAttribute.isCollection()); mappedBy = cardinalityOtM.mappedBy(); isSourceOne = true; edmNaviProperty.setOnDelete(edmOnDelete != null ? edmOnDelete : setJPAOnDelete(cardinalityOtM.cascade())); break; case ONE_TO_ONE: final OneToOne cardinalityOtO = annotatedElement.getAnnotation(OneToOne.class); edmNaviProperty.setNullable(cardinalityOtO.optional()); mappedBy = cardinalityOtO.mappedBy(); isSourceOne = true; edmNaviProperty.setOnDelete(edmOnDelete != null ? edmOnDelete : setJPAOnDelete(cardinalityOtO.cascade())); break; case MANY_TO_ONE: final ManyToOne cardinalityMtO = annotatedElement.getAnnotation(ManyToOne.class); edmNaviProperty.setNullable(cardinalityMtO.optional()); edmNaviProperty.setOnDelete(edmOnDelete != null ? edmOnDelete : setJPAOnDelete(cardinalityMtO.cascade())); break; case MANY_TO_MANY: final ManyToMany cardinalityMtM = annotatedElement.getAnnotation(ManyToMany.class); mappedBy = cardinalityMtM.mappedBy(); edmNaviProperty.setOnDelete(edmOnDelete != null ? edmOnDelete : setJPAOnDelete(cardinalityMtM.cascade())); break; default:
CsdlNavigationProperty navProp = new CsdlNavigationProperty(); navProp.setName(navigation); navProp.setType(new FullQualifiedName(namespace, navigation)); navProp.setCollection(true); navProp.setPartner(entityTypeName); navigationProperties.add(navProp); CsdlNavigationProperty navProp = new CsdlNavigationProperty(); navProp.setName(navigation); navProp.setType(new FullQualifiedName(namespace, navigation)); navProp.setPartner(entityTypeName); navigationProperties.add(navProp);
private static CsdlNavigationProperty buildReverseNavigation(Table table, ForeignKey fk) { String refSchemaName = table.getParent().getName(); CsdlNavigationProperty navigaton = new CsdlNavigationProperty(); navigaton.setName(table.getName() + "_" + fk.getName()).setType( new FullQualifiedName(refSchemaName, table.getName())); ArrayList<CsdlReferentialConstraint> constrainsts = new ArrayList<CsdlReferentialConstraint>(); for (int i = 0; i < fk.getColumns().size(); i++) { Column c = fk.getColumns().get(i); String refColumn = fk.getReferenceColumns().get(i); CsdlReferentialConstraint constraint = new CsdlReferentialConstraint(); constraint.setProperty(refColumn); constraint.setReferencedProperty(c.getName()); } navigaton.setReferentialConstraints(constrainsts); return navigaton; }
List<NavigationTypeModel> comxNavs = new ArrayList<>(); for (int i = 0; i < navProps.size(); i++) { FullQualifiedName navpropFQN = navProps.get(i).getTypeFQN(); if (navpropFQN != null) { NavigationTypeModel comxNavProp = new NavigationTypeModel(); comxNavProp.setPath(navProps.get(i).getName()); comxNavProp.setTypeClassName(navProps.get(i).getTypeFQN().getName()); comxNavProp.setCollection(navProps.get(i).isCollection()); comxNavs.add(comxNavProp); String navPropNamespace = EdmxToCommonModelHelper.resolveAliasToNamespace(edmxMetadataProvider, commonComplex.addRefNamespace(namespaceToServMap.get(navPropNamespace)); comModel.addReferenceInfo(refInfo); } else if (navProps.get(i).isContainsTarget()) { CsdlEntityType csdlCNEntity = edmxMetadataProvider.getEntityType(navProps.get(i).getTypeFQN()); EntityTypeModel entityModel = convertCsdlEntityToCommonModel(csdlCNEntity, navPropNamespace, comModel, edmxMetadataProvider, namespaceToServMap);
entitySet, property.getName()); toTable.setNameInSource(binding.getTarget()); } else if (property.isContainsTarget()) { toTable.setProperty(FQN, parent + FullyQualifiedName.SEPARATOR + new FullyQualifiedName("contained", property.getName()).toString()); //$NON-NLS-1$ } else { toTable = addNavigationAsTable(mf, metadata, fromTable, property); String parent = fromTable.getProperty(FQN, false); toTable.setProperty(FQN, parent + FullyQualifiedName.SEPARATOR + new FullyQualifiedName().append("self join", property.getName()).toString()); //$NON-NLS-1$ if (property.getReferentialConstraints().isEmpty()) { if (!isNavigationType(toTable) && !hasReverseNavigation(mf, metadata, container, fromTable, property, binding, toTable)) { if (property.isCollection()) { addImplicitFk(mf, fromTable, property, toTable, columnNames, referenceColumnNames); } else if (!property.isCollection()) { //sanity check - it should not be a collection for (CsdlReferentialConstraint constraint : property.getReferentialConstraints()) { columnNames.add(constraint.getProperty()); referenceColumnNames.add(constraint.getReferencedProperty()); mf.addForeignKey(join(fromTable.getName(), NAME_SEPARATOR, property.getName()), columnNames, referenceColumnNames, toTable.getFullName(), fromTable);
CsdlNavigationPropertyBinding binding, Table toTable) throws TranslatorException, AssertionError { if (!property.isCollection() || binding == null) { return false; if (toProperty.isCollection() || toProperty.isContainsTarget()) { continue; toEntitySet, toProperty.getName()); if (toBinding == null) { continue;
private Table addNavigationAsTable(MetadataFactory mf, XMLMetadata metadata, Table fromTable, CsdlNavigationProperty property) throws TranslatorException { String name = join(fromTable.getName(), NAME_SEPARATOR, property.getName()); Table toTable = addTable(mf, name, property.getType(), property.isCollection()?ODataType.NAVIGATION_COLLECTION:ODataType.NAVIGATION, metadata); toTable.setNameInSource(property.getName()); KeyRecord pk = fromTable.getPrimaryKey(); List<String> columnNames = new ArrayList<String>(); for (Column c : pk.getColumns()) { String columnName = join(fromTable.getName(), NAME_SEPARATOR, c.getName()); Column column = mf.addColumn(columnName, c.getRuntimeType(), toTable); column.setProperty(PSEUDO, String.valueOf(Boolean.TRUE)); columnNames.add(columnName); } mf.addForeignKey("FK0", columnNames, getColumnNames(pk.getColumns()), fromTable.getFullName(), toTable); return toTable; }
navigaton.setNullable(false); } else { navigaton.setCollection(true);
@Override void build(XMLEventReader reader, StartElement element, CsdlNavigationProperty property, String name) throws XMLStreamException { if ("ReferentialConstraint".equals(name)) { CsdlReferentialConstraint constraint = new CsdlReferentialConstraint(); constraint.setProperty(attr(element, "Property")); constraint.setReferencedProperty(attr(element, "ReferencedProperty")); peekAnnotations(reader, name, constraint); property.getReferentialConstraints().add(constraint); } else if ("OnDelete".equals(name)) { CsdlOnDelete delete = new CsdlOnDelete(); delete.setAction(CsdlOnDeleteAction.valueOf(attr(element, "Action"))); property.setOnDelete(delete); peekAnnotations(reader, name, delete); } else if ("Annotation".equals(name)) { readAnnotations(reader, element, property); } } }.read(reader, element, property, "ReferentialConstraint", "OnDelete", "Annotation");
navigaton.setNullable(false); } else { for (Column c : fk.getColumns()) { if (c.getNullType() == NullType.No_Nulls) { navigaton.setNullable(false); break; .setProperty(fk.getColumns().get(i).getName())); navigaton.setReferentialConstraints(constraints);
public EdmNavigationPropertyImpl(final Edm edm, final CsdlNavigationProperty navigationProperty) { super(edm, navigationProperty.getName(), navigationProperty); this.navigationProperty = navigationProperty; }
private void determinePartner(String mappedBy) throws ODataJPAModelException { if (sourceType instanceof IntermediateEntityType) { // Partner Attribute must not be defined at Complex Types. // JPA bi-directional associations are defined at both sides, e.g. // at the BusinessPartner and at the Roles. JPA only defines the // "mappedBy" at the Parent. if (mappedBy != null && !mappedBy.isEmpty()) { partner = targetType.getAssociation(mappedBy); edmNaviProperty.setPartner(partner.getExternalName()); } else { partner = targetType.getCorrespondingAssiciation(sourceType, getInternalName()); if (partner != null && ((IntermediateNavigationProperty) partner).isMapped()) { edmNaviProperty.setPartner(partner.getExternalName()); } } } }
if (token == JsonToken.FIELD_NAME) { if ("Name".equals(jp.getCurrentName())) { property.setName(jp.nextTextValue()); } else if ("Type".equals(jp.getCurrentName())) { String metadataTypeName = jp.nextTextValue(); if (metadataTypeName.startsWith("Collection(")) { property.setType(metadataTypeName.substring(metadataTypeName.indexOf("(") + 1, metadataTypeName.length() - 1)); property.setCollection(true); } else { property.setType(metadataTypeName); property.setCollection(false); property.setNullable(BooleanUtils.toBoolean(jp.nextTextValue())); } else if ("Partner".equals(jp.getCurrentName())) { property.setPartner(jp.nextTextValue()); } else if ("ContainsTarget".equals(jp.getCurrentName())) { property.setContainsTarget(BooleanUtils.toBoolean(jp.nextTextValue())); } else if ("ReferentialConstraint".equals(jp.getCurrentName())) { jp.nextToken(); property.getReferentialConstraints().add(jp.readValueAs(ClientCsdlReferentialConstraint.class)); } else if ("OnDelete".equals(jp.getCurrentName())) { jp.nextToken(); property.setOnDelete(jp.readValueAs(ClientCsdlOnDelete.class)); } else if ("Annotation".equals(jp.getCurrentName())) { jp.nextToken(); property.getAnnotations().add(jp.readValueAs(ClientCsdlAnnotation.class));
private CsdlNavigationProperty readNavigationProperty(XMLEventReader reader, StartElement element) throws XMLStreamException { CsdlNavigationProperty property = new CsdlNavigationProperty(); property.setReferentialConstraints(new ArrayList<CsdlReferentialConstraint>()); property.setName(attr(element, "Name")); property.setType(readType(element)); property.setCollection(isCollectionType(element)); property.setNullable(Boolean.parseBoolean(attr(element, "Nullable") == null ? "true" : attr(element, "Nullable"))); property.setPartner(attr(element, "Partner")); property.setContainsTarget(Boolean.parseBoolean(attr(element, "ContainsTarget")));