All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.odata4j.edm.EdmNavigationProperty Maven / Gradle / Ivy

The newest version!
package org.odata4j.edm;

/**
 * A CSDL NavigationProperty element.
 *
 * 

A NavigationProperty element defines a navigation property, which provides a reference to the other end of an * association. Unlike properties defined with the Property element, navigation properties do not define the shape * and characteristics of data. They provide a way to navigate an association between two entity types. * *

Note that navigation properties are optional on both entity types at the ends of an association. If you define * a navigation property on one entity type at the end of an association, you do not have to define a navigation property * on the entity type at the other end of the association. * *

The data type returned by a navigation property is determined by the multiplicity of its remote association end. * For example, suppose a navigation property, OrdersNavProp, exists on a Customer entity type and navigates a one-to-many * association between Customer and Order. Because the remote association end for the navigation property has multiplicity * many (*), its data type is a collection (of Order). Similarly, if a navigation property, CustomerNavProp, exists on the * Order entity type, its data type would be Customer since the multiplicity of the remote end is one (1). * * @see [msdn] NavigationProperty Element (CSDL) */ public class EdmNavigationProperty extends EdmPropertyBase { private final EdmAssociation relationship; private final EdmAssociationEnd fromRole; private final EdmAssociationEnd toRole; private EdmNavigationProperty( String name, EdmAssociation relationship, EdmAssociationEnd fromRole, EdmAssociationEnd toRole) { super(null, null, name); this.relationship = relationship; this.fromRole = fromRole; this.toRole = toRole; } public EdmAssociation getRelationship() { return relationship; } public EdmAssociationEnd getFromRole() { return fromRole; } public EdmAssociationEnd getToRole() { return toRole; } @Override public String toString() { return String.format("EdmNavigationProperty[%s,rel=%s,from=%s,to=%s]", getName(), relationship, fromRole, toRole); } public static Builder newBuilder(String name) { return new Builder(name); } static Builder newBuilder(EdmNavigationProperty navigationProperty, BuilderContext context) { return context.newBuilder(navigationProperty, new Builder(navigationProperty.getName())); } /** Mutable builder for {@link EdmNavigationProperty} objects. */ public static class Builder extends EdmPropertyBase.Builder { private EdmAssociation.Builder relationship; private String relationshipName; private EdmAssociationEnd.Builder fromRole; private String fromRoleName; private EdmAssociationEnd.Builder toRole; private String toRoleName; private Builder(String name) { super(name); } @Override Builder newBuilder(EdmNavigationProperty navigationProperty, BuilderContext context) { this.relationship = EdmAssociation.newBuilder(navigationProperty.relationship, context); this.fromRole = EdmAssociationEnd.newBuilder(navigationProperty.fromRole, context); this.toRole = EdmAssociationEnd.newBuilder(navigationProperty.toRole, context); return this; } public Builder setRelationship(EdmAssociation.Builder relationship) { this.relationship = relationship; return this; } public Builder setFromTo(EdmAssociationEnd.Builder fromRole, EdmAssociationEnd.Builder toRole) { this.fromRole = fromRole; this.toRole = toRole; return this; } public EdmNavigationProperty build() { return new EdmNavigationProperty(getName(), relationship.build(), fromRole.build(), toRole.build()); } public String getRelationshipName() { return relationshipName; } public String getFromRoleName() { return fromRoleName; } public String getToRoleName() { return toRoleName; } public Builder setRelationshipName(String relationshipName) { this.relationshipName = relationshipName; return this; } public Builder setFromToName(String fromRoleName, String toRoleName) { this.fromRoleName = fromRoleName; this.toRoleName = toRoleName; return this; } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy