@Override public String getReferencingPropertyName(final String referencedPropertyName) { final List<CsdlReferentialConstraint> refConstraints = navigationProperty.getReferentialConstraints(); if (refConstraints != null) { for (CsdlReferentialConstraint constraint : refConstraints) { if (constraint.getReferencedProperty().equals(referencedPropertyName)) { return constraint.getProperty(); } } } return null; }
@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");
@Override protected CsdlReferentialConstraint doDeserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException { final CsdlReferentialConstraint refConst = new ClientCsdlReferentialConstraint(); for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) { final JsonToken token = jp.getCurrentToken(); if (token == JsonToken.FIELD_NAME) { if ("Property".equals(jp.getCurrentName())) { refConst.setProperty(jp.nextTextValue()); } else if ("ReferencedProperty".equals(jp.getCurrentName())) { refConst.setReferencedProperty(jp.nextTextValue()); } } } return refConst; } }
@Override public String getReferencedPropertyName() { return constraint.getReferencedProperty(); } }
@Override public String getPropertyName() { return constraint.getProperty(); }
@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");
@Override protected CsdlReferentialConstraint doDeserialize(final JsonParser jp, final DeserializationContext ctxt) throws IOException { final CsdlReferentialConstraint refConst = new ClientCsdlReferentialConstraint(); for (; jp.getCurrentToken() != JsonToken.END_OBJECT; jp.nextToken()) { final JsonToken token = jp.getCurrentToken(); if (token == JsonToken.FIELD_NAME) { if ("Property".equals(jp.getCurrentName())) { refConst.setProperty(jp.nextTextValue()); } else if ("ReferencedProperty".equals(jp.getCurrentName())) { refConst.setReferencedProperty(jp.nextTextValue()); } } } return refConst; } }
@Override public String getReferencedPropertyName() { return constraint.getReferencedProperty(); } }
@Override public String getPropertyName() { return constraint.getProperty(); }
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; }
@Override public String getReferencingPropertyName(final String referencedPropertyName) { final List<CsdlReferentialConstraint> refConstraints = navigationProperty.getReferentialConstraints(); if (refConstraints != null) { for (CsdlReferentialConstraint constraint : refConstraints) { if (constraint.getReferencedProperty().equals(referencedPropertyName)) { return constraint.getProperty(); } } } return null; }
private static CsdlNavigationProperty buildNavigation(ForeignKey fk) { String refSchemaName = fk.getReferenceKey().getParent().getParent().getName(); CsdlNavigationProperty navigaton = new CsdlNavigationProperty(); navigaton.setName(fk.getName()).setType(new FullQualifiedName(refSchemaName, fk.getReferenceTableName())); 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(c.getName()); constraint.setReferencedProperty(refColumn); } navigaton.setReferentialConstraints(constrainsts); return navigaton; }
/** * @param sourceEntityType * @param targetEntityType * @param navProperty */ private void validateReferentialConstraint(CsdlEntityType sourceEntityType, CsdlEntityType targetEntityType, CsdlNavigationProperty navProperty) { if (!navProperty.getReferentialConstraints().isEmpty()) { String propertyName = navProperty.getReferentialConstraints().get(0).getProperty(); if (sourceEntityType.getProperty(propertyName) == null) { throw new RuntimeException("Property name " + propertyName + " not part of the source entity."); } String referencedPropertyName = navProperty.getReferentialConstraints().get(0).getReferencedProperty(); if (targetEntityType.getProperty(referencedPropertyName) == null) { throw new RuntimeException("Property name " + referencedPropertyName + " not part of the target entity."); } } }
KeyRecord key = fk.getReferenceKey(); for (int i = 0; i < key.getColumns().size(); i++) { constraints.add(new CsdlReferentialConstraint().setReferencedProperty(key.getColumns().get(i).getName()) .setProperty(fk.getColumns().get(i).getName()));
/** * @param sourceEntityType * @param targetEntityType * @param navProperty */ private void validateReferentialConstraint(CsdlEntityType sourceEntityType, CsdlEntityType targetEntityType, CsdlNavigationProperty navProperty) { if (!navProperty.getReferentialConstraints().isEmpty()) { String propertyName = navProperty.getReferentialConstraints().get(0).getProperty(); if (sourceEntityType.getProperty(propertyName) == null) { throw new RuntimeException("Property name " + propertyName + " not part of the source entity."); } String referencedPropertyName = navProperty.getReferentialConstraints().get(0).getReferencedProperty(); if (targetEntityType.getProperty(referencedPropertyName) == null) { throw new RuntimeException("Property name " + referencedPropertyName + " not part of the target entity."); } } }
for (final IntermediateJoinColumn intermediateColumn : joinColumns) { final CsdlReferentialConstraint constraint = new CsdlReferentialConstraint(); constraints.add(constraint); IntermediateModelElement p = null; p = sourceType.getPropertyByDBField(intermediateColumn.getName()); if (p != null) { constraint.setProperty(p.getExternalName()); p = targetType.getPropertyByDBField(intermediateColumn.getReferencedColumnName()); if (p != null) constraint.setReferencedProperty(p.getExternalName()); else throw new ODataJPAModelException(ODataJPAModelException.MessageKeys.REFERENCED_PROPERTY_NOT_FOUND, p = sourceType.getPropertyByDBField(intermediateColumn.getReferencedColumnName()); if (p != null) { constraint.setProperty(p.getExternalName()); p = targetType.getPropertyByDBField(intermediateColumn.getName()); if (p != null) constraint.setReferencedProperty(p.getExternalName()); else throw new ODataJPAModelException(ODataJPAModelException.MessageKeys.REFERENCED_PROPERTY_NOT_FOUND,
columnNames.add(constraint.getProperty()); referenceColumnNames.add(constraint.getReferencedProperty());