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

org.apache.olingo.odata2.api.edm.provider.package-info Maven / Gradle / Ivy

There is a newer version: 3.4.1
Show newest version
/*******************************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 ******************************************************************************/
/**
 * Entity Data Model Provider API
 * 

Classes in this package are used to provide an EDM to the library as well as to the application. To do this the * class {@link org.apache.olingo.odata2.api.edm.provider.EdmProvider} has to be implemented.

*

Inside the OData library we are using a lazy loading concept which means the EdmProvider is only called for an * element if it is needed. See some sample coding for an EdmProvider below

*

public class Provider extends EdmProvider { *

public static final String NAMESPACE_1 = "RefScenario"; *
public static final String NAMESPACE_2 = "RefScenario2"; *
private static final FullQualifiedName ENTITY_TYPE_1_1 = new FullQualifiedName(NAMESPACE_1, "Employee"); *
private static final FullQualifiedName ENTITY_TYPE_1_BASE = new FullQualifiedName(NAMESPACE_1, "Base"); *
private static final FullQualifiedName ENTITY_TYPE_1_4 = new FullQualifiedName(NAMESPACE_1, "Manager"); *
private static final FullQualifiedName ENTITY_TYPE_2_1 = new FullQualifiedName(NAMESPACE_2, "Photo"); *
private static final FullQualifiedName COMPLEX_TYPE_1 = new FullQualifiedName(NAMESPACE_1, "c_Location"); *
private static final FullQualifiedName COMPLEX_TYPE_2 = new FullQualifiedName(NAMESPACE_1, "c_City"); *
private static final FullQualifiedName ASSOCIATION_1_1 = new FullQualifiedName(NAMESPACE_1, "ManagerEmployees"); *
private static final String ROLE_1_1 = "r_Employees"; *
private static final String ROLE_1_4 = "r_Manager"; *
private static final String ENTITY_CONTAINER_1 = "Container1"; *
private static final String ENTITY_CONTAINER_2 = "Container2"; *
private static final String ENTITY_SET_1_1 = "Employees"; *
private static final String ENTITY_SET_1_4 = "Managers"; *
private static final String ENTITY_SET_2_1 = "Photos"; *
private static final String FUNCTION_IMPORT_1 = "EmployeeSearch"; *
private static final String FUNCTION_IMPORT_2 = "AllLocations"; *

*

public List getSchemas() throws ODataException { *

List schemas = new ArrayList(); *
Schema schema = new Schema(); *
schema.setNamespace(NAMESPACE_1); * *
List entityTypes = new ArrayList(); *
entityTypes.add(getEntityType(ENTITY_TYPE_1_1)); *
entityTypes.add(getEntityType(ENTITY_TYPE_1_4)); *
entityTypes.add(getEntityType(ENTITY_TYPE_1_BASE)); *
schema.setEntityTypes(entityTypes); * *
List complexTypes = new ArrayList(); *
complexTypes.add(getComplexType(COMPLEX_TYPE_1)); *
complexTypes.add(getComplexType(COMPLEX_TYPE_2)); *
schema.setComplexTypes(complexTypes); * *
List associations = new ArrayList(); *
associations.add(getAssociation(ASSOCIATION_1_1)); *
schema.setAssociations(associations); * *
EntityContainer entityContainer = new EntityContainer(); *
entityContainer.setName(ENTITY_CONTAINER_1).setDefaultEntityContainer(true); * *
List entitySets = new ArrayList(); *
entitySets.add(getEntitySet(ENTITY_CONTAINER_1, ENTITY_SET_1_1)); *
entitySets.add(getEntitySet(ENTITY_CONTAINER_1, ENTITY_SET_1_4)); *
entityContainer.setEntitySets(entitySets); * *
List associationSets = new ArrayList(); *
associationSets.add(getAssociationSet(ENTITY_CONTAINER_1, ASSOCIATION_1_1, ENTITY_SET_1_4, ROLE_1_4)); *
entityContainer.setAssociationSets(associationSets); * *
List functionImports = new ArrayList(); *
functionImports.add(getFunctionImport(ENTITY_CONTAINER_1, FUNCTION_IMPORT_1)); *
functionImports.add(getFunctionImport(ENTITY_CONTAINER_1, FUNCTION_IMPORT_2)); *
entityContainer.setFunctionImports(functionImports); * *
schema.setEntityContainers(Arrays.asList(entityContainer)); * *
schemas.add(schema); *

*

schema = new Schema(); *
schema.setNamespace(NAMESPACE_2); * *
schema.setEntityTypes(Arrays.asList(getEntityType(ENTITY_TYPE_2_1))); * *
entityContainer = new EntityContainer(); *
entityContainer.setName(ENTITY_CONTAINER_2); *
entityContainer.setEntitySets(Arrays.asList(getEntitySet(ENTITY_CONTAINER_2, ENTITY_SET_2_1))); *
schema.setEntityContainers(Arrays.asList(entityContainer)); * *
schemas.add(schema); *

*

return schemas;

* } * *

public EntityType getEntityType(FullQualifiedName edmFQName) throws ODataException { *

if (NAMESPACE_1.equals(edmFQName.getNamespace())) { *
if (ENTITY_TYPE_1_1.getName().equals(edmFQName.getName())) { *
List properties = new ArrayList(); *
properties.add(new SimpleProperty().setName("EmployeeId").setType(EdmSimpleTypeKind.String) * .setFacets(new Facets().setNullable(false)) * .setMapping(new Mapping().setInternalName("getId"))); *
properties.add(new SimpleProperty().setName("EmployeeName").setType(EdmSimpleTypeKind.String) * .setCustomizableFeedMappings(new CustomizableFeedMappings() * .setFcTargetPath(EdmTargetPath.SYNDICATION_TITLE))); *
properties.add(new SimpleProperty().setName("ManagerId").setType(EdmSimpleTypeKind.String) * .setMapping(new Mapping().setInternalName("getManager.getId"))); *
properties.add(new SimpleProperty().setName("RoomId").setType(EdmSimpleTypeKind.String) * .setMapping(new Mapping().setInternalName("getRoom.getId"))); *
properties.add(new SimpleProperty().setName("TeamId").setType(EdmSimpleTypeKind.String) * .setFacets(new Facets().setMaxLength(2)) * .setMapping(new Mapping().setInternalName("getTeam.getId"))); *
properties.add(new ComplexProperty().setName("Location").setType(COMPLEX_TYPE_1) * .setFacets(new Facets().setNullable(false))); *
properties.add(new SimpleProperty().setName("Age").setType(EdmSimpleTypeKind.Int16)); *
properties.add(new SimpleProperty().setName("EntryDate").setType(EdmSimpleTypeKind.DateTime) * .setFacets(new Facets().setNullable(true)) * .setCustomizableFeedMappings(new CustomizableFeedMappings() * .setFcTargetPath(EdmTargetPath.SYNDICATION_UPDATED))); *
properties.add(new SimpleProperty().setName("ImageUrl").setType(EdmSimpleTypeKind.String) * .setMapping(new Mapping().setInternalName("getImageUri"))); *
List navigationProperties = new ArrayList(); *
navigationProperties.add(new NavigationProperty().setName("ne_Manager") * .setRelationship(ASSOCIATION_1_1).setFromRole(ROLE_1_1).setToRole(ROLE_1_4)); * *
return new EntityType().setName(ENTITY_TYPE_1_1.getName()) * .setProperties(properties) * .setHasStream(true) * .setKey(getKey("EmployeeId")) * .setNavigationProperties(navigationProperties) * .setMapping(new Mapping().setMimeType("getImageType")); * *

} else if (ENTITY_TYPE_1_BASE.getName().equals(edmFQName.getName())) { *
List properties = new ArrayList(); *
properties.add(new SimpleProperty().setName("Id").setType(EdmSimpleTypeKind.String) * .setFacets(new Facets().setNullable(false).setDefaultValue("1"))); *
properties.add(new SimpleProperty().setName("Name").setType(EdmSimpleTypeKind.String) * .setCustomizableFeedMappings(new CustomizableFeedMappings() * .setFcTargetPath(EdmTargetPath.SYNDICATION_TITLE))); * *
return new EntityType().setName(ENTITY_TYPE_1_BASE.getName()) * .setAbstract(true) * .setProperties(properties) * .setKey(getKey("Id")); * *

} else if (ENTITY_TYPE_1_4.getName().equals(edmFQName.getName())) { *
List navigationProperties = new ArrayList(); *
navigationProperties.add(new NavigationProperty().setName("nm_Employees") * .setRelationship(ASSOCIATION_1_1).setFromRole(ROLE_1_4).setToRole(ROLE_1_1)); * *
return new EntityType().setName(ENTITY_TYPE_1_4.getName()) * .setBaseType(ENTITY_TYPE_1_1) * .setHasStream(true) * .setNavigationProperties(navigationProperties) * .setMapping(new Mapping().setMimeType("getImageType")); * *

} else if (NAMESPACE_2.equals(edmFQName.getNamespace())) { *
if (ENTITY_TYPE_2_1.getName().equals(edmFQName.getName())) { *
List properties = new ArrayList(); *
properties.add(new SimpleProperty().setName("Id").setType(EdmSimpleTypeKind.Int32) * .setFacets(new Facets().setNullable(false).setConcurrencyMode(EdmConcurrencyMode.Fixed))); *
properties.add(new SimpleProperty().setName("Name").setType(EdmSimpleTypeKind.String) * .setCustomizableFeedMappings(new CustomizableFeedMappings() * .setFcTargetPath(EdmTargetPath.SYNDICATION_TITLE))); *
properties.add(new SimpleProperty().setName("Type").setType(EdmSimpleTypeKind.String) * .setFacets(new Facets().setNullable(false))); *
properties.add(new SimpleProperty().setName("ImageUrl").setType(EdmSimpleTypeKind.String) * .setCustomizableFeedMappings(new CustomizableFeedMappings() * .setFcTargetPath(EdmTargetPath.SYNDICATION_AUTHORURI)) * .setMapping(new Mapping().setInternalName("getImageUri"))); *
properties.add(new SimpleProperty().setName("Image").setType(EdmSimpleTypeKind.Binary) * .setMapping(new Mapping().setMimeType("getImageType"))); *
properties.add(new SimpleProperty().setName("BinaryData").setType(EdmSimpleTypeKind.Binary) * .setFacets(new Facets().setNullable(true)) * .setMimeType("image/jpeg")); *
properties.add(new SimpleProperty().setName("Содержание").setType(EdmSimpleTypeKind.String) * .setFacets(new Facets().setNullable(true)) * .setCustomizableFeedMappings(new CustomizableFeedMappings() * .setFcKeepInContent(false) * .setFcNsPrefix("ру") // CYRILLIC SMALL LETTER ER + CYRILLIC SMALL LETTER U * .setFcNsUri("http://localhost") * .setFcTargetPath("Содержание")) * .setMapping(new Mapping().setInternalName("getContent"))); * *
return new EntityType().setName(ENTITY_TYPE_2_1.getName()) * .setProperties(properties) * .setHasStream(true) * .setKey(getKey("Id", "Type")) * .setMapping(new Mapping().setMimeType("getType")); * } * } * } *

return null; * } * *

public ComplexType getComplexType(FullQualifiedName edmFQName) throws ODataException { *
if (NAMESPACE_1.equals(edmFQName.getNamespace())) *
if (COMPLEX_TYPE_1.getName().equals(edmFQName.getName())) { *
List properties = new ArrayList(); *
properties.add(new ComplexProperty().setName("City").setType(COMPLEX_TYPE_2)); *
properties.add(new SimpleProperty().setName("Country").setType(EdmSimpleTypeKind.String)); *
return new ComplexType().setName(COMPLEX_TYPE_1.getName()).setProperties(properties); * * }
else if (COMPLEX_TYPE_2.getName().equals(edmFQName.getName())) { *
List properties = new ArrayList(); *
properties.add(new SimpleProperty().setName("PostalCode").setType(EdmSimpleTypeKind.String)); *
properties.add(new SimpleProperty().setName("CityName").setType(EdmSimpleTypeKind.String)); *
return new ComplexType().setName(COMPLEX_TYPE_2.getName()).setProperties(properties); * } * *
return null; * } * *

public Association getAssociation(FullQualifiedName edmFQName) throws ODataException { *
if (NAMESPACE_1.equals(edmFQName.getNamespace())) { *
if (ASSOCIATION_1_1.getName().equals(edmFQName.getName())) { *
return new Association().setName(ASSOCIATION_1_1.getName()) * .setEnd1(new AssociationEnd().setType(ENTITY_TYPE_1_1).setRole(ROLE_1_1).setMultiplicity(EdmMultiplicity.MANY)) * .setEnd2(new AssociationEnd().setType(ENTITY_TYPE_1_4).setRole(ROLE_1_4).setMultiplicity(EdmMultiplicity.ONE)); * } * } *
return null; * } * *

public EntityContainerInfo getEntityContainerInfo(String name) throws ODataException { *
if (name == null || ENTITY_CONTAINER_1.equals(name)) { *
return new EntityContainerInfo().setName(ENTITY_CONTAINER_1).setDefaultEntityContainer(true); * }
else if (ENTITY_CONTAINER_2.equals(name)) { *
return new EntityContainerInfo().setName(name).setDefaultEntityContainer(false); * } *
return null; * } * *

public EntitySet getEntitySet(String entityContainer, String name) throws ODataException { *
if (ENTITY_CONTAINER_1.equals(entityContainer)) { *
if (ENTITY_SET_1_1.equals(name)) { *
return new EntitySet().setName(name).setEntityType(ENTITY_TYPE_1_1); * } * }
else if (ENTITY_CONTAINER_2.equals(entityContainer)) { *
if (ENTITY_SET_2_1.equals(name)) { *
return new EntitySet().setName(name).setEntityType(ENTITY_TYPE_2_1); * } * } *
return null; * } * *

public FunctionImport getFunctionImport(String entityContainer, String name) throws ODataException { *
if (ENTITY_CONTAINER_1.equals(entityContainer)) { *
if (FUNCTION_IMPORT_1.equals(name)) { *
List parameters = new ArrayList(); *
parameters.add(new FunctionImportParameter().setName("q").setType(EdmSimpleTypeKind.String) * .setFacets(new Facets().setNullable(true))); *
return new FunctionImport().setName(name) * .setReturnType(new ReturnType().setTypeName(ENTITY_TYPE_1_1).setMultiplicity(EdmMultiplicity.MANY)) * .setEntitySet(ENTITY_SET_1_1) * .setHttpMethod("GET") * .setParameters(parameters); * * }
else if (FUNCTION_IMPORT_2.equals(name)) { *
return new FunctionImport().setName(name) * .setReturnType(new ReturnType().setTypeName(COMPLEX_TYPE_1).setMultiplicity(EdmMultiplicity.MANY)) * .setHttpMethod("GET"); * * } * } * *
return null; * } * *

public AssociationSet getAssociationSet(String entityContainer, FullQualifiedName association, String * sourceEntitySetName, String sourceEntitySetRole) throws ODataException { *
if (ENTITY_CONTAINER_1.equals(entityContainer)) *
if (ASSOCIATION_1_1.equals(association)) *
return new AssociationSet().setName(ASSOCIATION_1_1.getName()) * .setAssociation(ASSOCIATION_1_1) * .setEnd1(new AssociationSetEnd().setRole(ROLE_1_4).setEntitySet(ENTITY_SET_1_4)) * .setEnd2(new AssociationSetEnd().setRole(ROLE_1_1).setEntitySet(ENTITY_SET_1_1)); * *
return null; * } * } *

*/ package org.apache.olingo.odata2.api.edm.provider;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy