Java Code Examples for org.apache.olingo.commons.api.edm.EdmProperty#getType()
The following examples show how to use
org.apache.olingo.commons.api.edm.EdmProperty#getType() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: EdmPropertyImplTest.java From olingo-odata4 with Apache License 2.0 | 6 votes |
@Test public void getTypeReturnsTypeDefinition() throws Exception { CsdlEdmProvider provider = mock(CsdlEdmProvider.class); EdmProviderImpl edm = new EdmProviderImpl(provider); final FullQualifiedName typeName = new FullQualifiedName("ns", "definition"); CsdlTypeDefinition typeProvider = new CsdlTypeDefinition().setUnderlyingType(new FullQualifiedName("Edm", "String")); when(provider.getTypeDefinition(typeName)).thenReturn(typeProvider); CsdlProperty propertyProvider = new CsdlProperty(); propertyProvider.setType(typeName); final EdmProperty property = new EdmPropertyImpl(edm, propertyProvider); assertFalse(property.isPrimitive()); final EdmType type = property.getType(); assertEquals(EdmTypeKind.DEFINITION, type.getKind()); assertEquals("ns", type.getNamespace()); assertEquals("definition", type.getName()); }
Example 2
Source File: ExpressionVisitorImpl.java From micro-integrator with Apache License 2.0 | 6 votes |
@Override public VisitorOperand visitMember(Member member) throws ExpressionVisitException, ODataApplicationException { final List<UriResource> uriResourceParts = member.getResourcePath().getUriResourceParts(); int size = uriResourceParts.size(); if (uriResourceParts.get(0) instanceof UriResourceProperty) { EdmProperty currentEdmProperty = ((UriResourceProperty) uriResourceParts.get(0)).getProperty(); Property currentProperty = entity.getProperty(currentEdmProperty.getName()); return new TypedOperand(currentProperty.getValue(), currentEdmProperty.getType(), currentEdmProperty); } else if (uriResourceParts.get(size - 1) instanceof UriResourceLambdaAll) { return throwNotImplemented(); } else if (uriResourceParts.get(size - 1) instanceof UriResourceLambdaAny) { return throwNotImplemented(); } else { return throwNotImplemented(); } }
Example 3
Source File: DataProvider.java From olingo-odata4 with Apache License 2.0 | 6 votes |
private Property createProperty(final EdmProperty edmProperty, final String propertyName) throws DataProviderException { final EdmType type = edmProperty.getType(); Property newProperty; if (edmProperty.isPrimitive() || type.getKind() == EdmTypeKind.ENUM || type.getKind() == EdmTypeKind.DEFINITION) { newProperty = edmProperty.isCollection() ? DataCreator.createPrimitiveCollection(propertyName) : DataCreator.createPrimitive(propertyName, null); } else { if (edmProperty.isCollection()) { @SuppressWarnings("unchecked") Property newProperty2 = DataCreator.createComplexCollection(propertyName, edmProperty.getType().getFullQualifiedName().getFullQualifiedNameAsString()); newProperty = newProperty2; } else { newProperty = DataCreator.createComplex(propertyName, edmProperty.getType().getFullQualifiedName().getFullQualifiedNameAsString()); createProperties((EdmComplexType) type, newProperty.asComplex().getValue()); } } return newProperty; }
Example 4
Source File: UriHelperImpl.java From olingo-odata4 with Apache License 2.0 | 5 votes |
@Override public String buildKeyPredicate(final EdmEntityType edmEntityType, final Entity entity) throws SerializerException { StringBuilder result = new StringBuilder(); final List<String> keyNames = edmEntityType.getKeyPredicateNames(); boolean first = true; for (final String keyName : keyNames) { EdmKeyPropertyRef refType = edmEntityType.getKeyPropertyRef(keyName); if (first) { first = false; } else { result.append(','); } if (keyNames.size() > 1) { result.append(Encoder.encode(keyName)).append('='); } final EdmProperty edmProperty = refType.getProperty(); if (edmProperty == null) { throw new SerializerException("Property not found (possibly an alias): " + keyName, SerializerException.MessageKeys.MISSING_PROPERTY, keyName); } final EdmPrimitiveType type = (EdmPrimitiveType) edmProperty.getType(); final Object propertyValue = findPropertyRefValue(entity, refType); try { final String value = type.toUriLiteral( type.valueToString(propertyValue, edmProperty.isNullable(), edmProperty.getMaxLength(), edmProperty.getPrecision(), edmProperty.getScale(), edmProperty.isUnicode())); result.append(Encoder.encode(value)); } catch (final EdmPrimitiveTypeException e) { throw new SerializerException("Wrong key value!", e, SerializerException.MessageKeys.WRONG_PROPERTY_VALUE, edmProperty.getName(), propertyValue != null ? propertyValue.toString(): null); } } return result.toString(); }
Example 5
Source File: ODataJsonSerializer.java From olingo-odata4 with Apache License 2.0 | 5 votes |
private void writePropertyType(final EdmProperty edmProperty, JsonGenerator json) throws SerializerException, IOException { if (!isODataMetadataFull) { return; } String typeName = edmProperty.getName() + constants.getType(); final EdmType type = edmProperty.getType(); if (type.getKind() == EdmTypeKind.ENUM || type.getKind() == EdmTypeKind.DEFINITION) { if (edmProperty.isCollection()) { json.writeStringField(typeName, "#Collection(" + type.getFullQualifiedName().getFullQualifiedNameAsString() + ")"); } else { json.writeStringField(typeName, "#" + type.getFullQualifiedName().getFullQualifiedNameAsString()); } } else if (edmProperty.isPrimitive()) { if (edmProperty.isCollection()) { json.writeStringField(typeName, "#Collection(" + type.getFullQualifiedName().getName() + ")"); } else { // exclude the properties that can be heuristically determined if (type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Boolean) && type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Double) && type != EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.String)) { json.writeStringField(typeName, "#" + type.getFullQualifiedName().getName()); } } } else if (type.getKind() == EdmTypeKind.COMPLEX) { // non-collection case written in writeComplex method directly. if (edmProperty.isCollection()) { json.writeStringField(typeName, "#Collection(" + type.getFullQualifiedName().getFullQualifiedNameAsString() + ")"); } } else { throw new SerializerException("Property type not yet supported!", SerializerException.MessageKeys.UNSUPPORTED_PROPERTY_TYPE, edmProperty.getName()); } }
Example 6
Source File: DataProvider.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public Entity readDataFromEntity(final EdmEntityType edmEntityType, final List<UriParameter> keys) throws DataProviderException { EntityCollection coll = data.get(edmEntityType.getName()); List<Entity> entities = coll.getEntities(); try { for (final Entity entity : entities) { boolean found = true; for (final UriParameter key : keys) { EdmKeyPropertyRef refType = edmEntityType.getKeyPropertyRef(key.getName()); Object value = findPropertyRefValue(entity, refType); final EdmProperty property = refType.getProperty(); final EdmPrimitiveType type = (EdmPrimitiveType) property.getType(); if (key.getExpression() != null && !(key.getExpression() instanceof Literal)) { throw new DataProviderException("Expression in key value is not supported yet!", HttpStatusCode.NOT_IMPLEMENTED); } final String text = key.getAlias() == null ? key.getText() : ((Literal) key.getExpression()).getText(); Object keyValue = null; if (Calendar.class.isAssignableFrom(value.getClass())) { keyValue = type.valueOfString(type.fromUriLiteral(text), property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), property.isUnicode(), Calendar.class); } else { keyValue = type.valueOfString(type.fromUriLiteral(text), property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), property.isUnicode(), value.getClass()); } if (!value.equals(keyValue)) { found = false; break; } } if (found) { return entity; } } return null; } catch (final EdmPrimitiveTypeException e) { throw new DataProviderException("Wrong key!", HttpStatusCode.BAD_REQUEST, e); } }
Example 7
Source File: Util.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public static boolean entityMatchesAllKeys(EdmEntityType edmEntityType, Entity entity, List<UriParameter> keyParams) throws ODataApplicationException { // loop over all keys for (final UriParameter key : keyParams) { // key String keyName = key.getName(); String keyText = key.getText(); // Edm: we need this info for the comparison below EdmProperty edmKeyProperty = (EdmProperty) edmEntityType.getProperty(keyName); Boolean isNullable = edmKeyProperty.isNullable(); Integer maxLength = edmKeyProperty.getMaxLength(); Integer precision = edmKeyProperty.getPrecision(); Boolean isUnicode = edmKeyProperty.isUnicode(); Integer scale = edmKeyProperty.getScale(); // get the EdmType in order to compare EdmType edmType = edmKeyProperty.getType(); EdmPrimitiveType edmPrimitiveType = (EdmPrimitiveType) edmType; // Runtime data: the value of the current entity // don't need to check for null, this is done in olingo library Object valueObject = entity.getProperty(keyName).getValue(); // now need to compare the valueObject with the keyText String // this is done using the type.valueToString // String valueAsString = null; try { valueAsString = edmPrimitiveType.valueToString(valueObject, isNullable, maxLength, precision, scale, isUnicode); } catch (EdmPrimitiveTypeException e) { throw new ODataApplicationException("Failed to retrieve String value", HttpStatusCode.INTERNAL_SERVER_ERROR .getStatusCode(), Locale.ENGLISH, e); } if (valueAsString == null) { return false; } boolean matches = valueAsString.equals(keyText); if (!matches) { // if any of the key properties is not found in the entity, we don't need to search further return false; } } return true; }
Example 8
Source File: ODataJsonSerializer.java From olingo-odata4 with Apache License 2.0 | 4 votes |
private boolean isStreamProperty(EdmProperty edmProperty) { final EdmType type = edmProperty.getType(); return (edmProperty.isPrimitive() && type == EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Stream)); }
Example 9
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult result = serializer.primitive(serviceMetadata, edmPropertyType, property, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }else{ // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 10
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property // the last segment is the Property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult serializerResult = serializer.primitive(serviceMetadata, edmPropertyType, property, options); InputStream propertyStream = serializerResult.getContent(); //4. configure the response object response.setContent(propertyStream); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } else { // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 11
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property // the last segment is the Property UriResourceProperty uriProperty = (UriResourceProperty) resourceParts.get(resourceParts.size() - 1); EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult serializerResult = serializer.primitive(serviceMetadata, edmPropertyType, property, options); InputStream propertyStream = serializerResult.getContent(); // 4. configure the response object response.setContent(propertyStream); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } else { // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 12
Source File: Util.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public static boolean entityMatchesAllKeys(EdmEntityType edmEntityType, Entity entity, List<UriParameter> keyParams) throws ODataApplicationException { // loop over all keys for (final UriParameter key : keyParams) { // key String keyName = key.getName(); String keyText = key.getText(); // Edm: we need this info for the comparison below EdmProperty edmKeyProperty = (EdmProperty) edmEntityType.getProperty(keyName); Boolean isNullable = edmKeyProperty.isNullable(); Integer maxLength = edmKeyProperty.getMaxLength(); Integer precision = edmKeyProperty.getPrecision(); Boolean isUnicode = edmKeyProperty.isUnicode(); Integer scale = edmKeyProperty.getScale(); // get the EdmType in order to compare EdmType edmType = edmKeyProperty.getType(); EdmPrimitiveType edmPrimitiveType = (EdmPrimitiveType) edmType; // Runtime data: the value of the current entity // don't need to check for null, this is done in olingo library Object valueObject = entity.getProperty(keyName).getValue(); // now need to compare the valueObject with the keyText String // this is done using the type.valueToString String valueAsString; try { valueAsString = edmPrimitiveType.valueToString(valueObject, isNullable, maxLength, precision, scale, isUnicode); } catch (EdmPrimitiveTypeException e) { throw new ODataApplicationException("Failed to retrieve String value", HttpStatusCode.INTERNAL_SERVER_ERROR .getStatusCode(), Locale.ENGLISH, e); } if (valueAsString == null) { return false; } boolean matches = valueAsString.equals(keyText); if (!matches) { // if any of the key properties is not found in the entity, we don't need to search further return false; } } return true; }
Example 13
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult result = serializer.primitive(serviceMetadata, edmPropertyType, property, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }else{ // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 14
Source File: ExpandParser.java From olingo-odata4 with Apache License 2.0 | 4 votes |
protected static UriInfoImpl parseExpandPath(UriTokenizer tokenizer, final Edm edm, final EdmStructuredType referencedType, ExpandItemImpl item) throws UriParserException { UriInfoImpl resource = new UriInfoImpl().setKind(UriInfoKind.resource); EdmStructuredType type = referencedType; String name = null; while (tokenizer.next(TokenKind.ODataIdentifier)) { name = tokenizer.getText(); final EdmProperty property = type.getStructuralProperty(name); if (property != null && property.getType().getKind() == EdmTypeKind.COMPLEX) { type = (EdmStructuredType) property.getType(); UriResourceComplexPropertyImpl complexResource = new UriResourceComplexPropertyImpl(property); ParserHelper.requireNext(tokenizer, TokenKind.SLASH); final EdmStructuredType typeCast = ParserHelper.parseTypeCast(tokenizer, edm, type); if (typeCast != null) { complexResource.setTypeFilter(typeCast); ParserHelper.requireNext(tokenizer, TokenKind.SLASH); type = typeCast; } resource.addResourcePart(complexResource); } } final EdmNavigationProperty navigationProperty = type.getNavigationProperty(name); if (navigationProperty == null) { //For handling $expand with Stream Properties in version 4.01 final EdmProperty streamProperty = (EdmProperty) type.getProperty(name); if(streamProperty != null && streamProperty.getType() == EdmPrimitiveTypeFactory. getInstance(EdmPrimitiveTypeKind.Stream)){ resource.addResourcePart(new UriResourcePrimitivePropertyImpl(streamProperty)); }else if (tokenizer.next(TokenKind.STAR)) { item.setIsStar(true); } else { throw new UriParserSemanticException( "Navigation Property '" + name + "' not found in type '" + type.getFullQualifiedName() + "'.", UriParserSemanticException.MessageKeys.EXPRESSION_PROPERTY_NOT_IN_TYPE, type.getName(), name); } } else { resource.addResourcePart(new UriResourceNavigationPropertyImpl(navigationProperty)); } return resource; }
Example 15
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult result = serializer.primitive(serviceMetadata, edmPropertyType, property, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }else{ // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 16
Source File: Util.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public static boolean entityMatchesAllKeys(EdmEntityType edmEntityType, Entity rt_entity, List<UriParameter> keyParams) { // loop over all keys for (final UriParameter key : keyParams) { // key String keyName = key.getName(); String keyText = key.getText(); // note: below line doesn't consider: keyProp can be part of a complexType in V4 // in such case, it would be required to access it via getKeyPropertyRef() // but since this isn't the case in our model, we ignore it in our implementation EdmProperty edmKeyProperty = (EdmProperty) edmEntityType.getProperty(keyName); // Edm: we need this info for the comparison below Boolean isNullable = edmKeyProperty.isNullable(); Integer maxLength = edmKeyProperty.getMaxLength(); Integer precision = edmKeyProperty.getPrecision(); Boolean isUnicode = edmKeyProperty.isUnicode(); Integer scale = edmKeyProperty.getScale(); // get the EdmType in order to compare EdmType edmType = edmKeyProperty.getType(); // if(EdmType instanceof EdmPrimitiveType) // do we need this? EdmPrimitiveType edmPrimitiveType = (EdmPrimitiveType) edmType; // Runtime data: the value of the current entity // don't need to check for null, this is done in FWK Object valueObject = rt_entity.getProperty(keyName).getValue(); // TODO if the property is a complex type // now need to compare the valueObject with the keyText String // this is done using the type.valueToString String valueAsString = null; try { valueAsString = edmPrimitiveType.valueToString(valueObject, isNullable, maxLength, precision, scale, isUnicode); } catch (EdmPrimitiveTypeException e) { return false; // TODO proper Exception handling } if (valueAsString == null) { return false; } boolean matches = valueAsString.equals(keyText); // if any of the key properties is not found in the entity, we don't need to search further if (!matches) { return false; } // if the given key value is found in the current entity, continue with the next key } return true; }
Example 17
Source File: DataProvider.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public Entity read(final EdmEntityType edmEntityType, final EntityCollection entitySet, final List<UriParameter> keys) throws DataProviderException { try { for (final Entity entity : entitySet.getEntities()) { boolean found = true; for (final UriParameter key : keys) { EdmKeyPropertyRef refType = edmEntityType.getKeyPropertyRef(key.getName()); Object value = findPropertyRefValue(entity, refType); final EdmProperty property = refType.getProperty(); final EdmPrimitiveType type = (EdmPrimitiveType) property.getType(); if (key.getExpression() != null && !(key.getExpression() instanceof Literal)) { throw new DataProviderException("Expression in key value is not supported yet!", HttpStatusCode.NOT_IMPLEMENTED); } Object keyValue = null; final String text = key.getAlias() == null ? key.getText() : ((Literal) key.getExpression()).getText(); if (Calendar.class.isAssignableFrom(value.getClass())) { keyValue = type.valueOfString(type.fromUriLiteral(text), property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), property.isUnicode(), Calendar.class); } else { keyValue = type.valueOfString(type.fromUriLiteral(text), property.isNullable(), property.getMaxLength(), property.getPrecision(), property.getScale(), property.isUnicode(), value.getClass()); } if (!value.equals(keyValue)) { found = false; break; } } if (found) { return entity; } } return null; } catch (final EdmPrimitiveTypeException e) { throw new DataProviderException("Wrong key!", HttpStatusCode.BAD_REQUEST, e); } }
Example 18
Source File: Util.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public static boolean entityMatchesAllKeys(EdmEntityType edmEntityType, Entity entity, List<UriParameter> keyParams) throws ODataApplicationException { // loop over all keys for (final UriParameter key : keyParams) { // key String keyName = key.getName(); String keyText = key.getText(); // Edm: we need this info for the comparison below EdmProperty edmKeyProperty = (EdmProperty) edmEntityType.getProperty(keyName); Boolean isNullable = edmKeyProperty.isNullable(); Integer maxLength = edmKeyProperty.getMaxLength(); Integer precision = edmKeyProperty.getPrecision(); Boolean isUnicode = edmKeyProperty.isUnicode(); Integer scale = edmKeyProperty.getScale(); // get the EdmType in order to compare EdmType edmType = edmKeyProperty.getType(); EdmPrimitiveType edmPrimitiveType = (EdmPrimitiveType) edmType; // Runtime data: the value of the current entity // don't need to check for null, this is done in olingo library Object valueObject = entity.getProperty(keyName).getValue(); // now need to compare the valueObject with the keyText String // this is done using the type.valueToString String valueAsString; try { valueAsString = edmPrimitiveType.valueToString(valueObject, isNullable, maxLength, precision, scale, isUnicode); } catch (EdmPrimitiveTypeException e) { throw new ODataApplicationException("Failed to retrieve String value", HttpStatusCode.INTERNAL_SERVER_ERROR .getStatusCode(), Locale.ENGLISH, e); } if (valueAsString == null) { return false; } boolean matches = valueAsString.equals(keyText); if (!matches) { // if any of the key properties is not found in the entity, we don't need to search further return false; } } return true; }
Example 19
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult serializerResult = serializer.primitive(serviceMetadata, edmPropertyType, property, options); InputStream propertyStream = serializerResult.getContent(); //4. configure the response object response.setContent(propertyStream); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); } else { // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }
Example 20
Source File: DemoPrimitiveProcessor.java From olingo-odata4 with Apache License 2.0 | 4 votes |
public void readPrimitive(ODataRequest request, ODataResponse response, UriInfo uriInfo, ContentType responseFormat) throws ODataApplicationException, SerializerException { // 1. Retrieve info from URI // 1.1. retrieve the info about the requested entity set List<UriResource> resourceParts = uriInfo.getUriResourceParts(); // Note: only in our example we can rely that the first segment is the EntitySet UriResourceEntitySet uriEntityset = (UriResourceEntitySet) resourceParts.get(0); EdmEntitySet edmEntitySet = uriEntityset.getEntitySet(); // the key for the entity List<UriParameter> keyPredicates = uriEntityset.getKeyPredicates(); // 1.2. retrieve the requested (Edm) property UriResourceProperty uriProperty = (UriResourceProperty)resourceParts.get(resourceParts.size() -1); // the last segment is the Property EdmProperty edmProperty = uriProperty.getProperty(); String edmPropertyName = edmProperty.getName(); // in our example, we know we have only primitive types in our model EdmPrimitiveType edmPropertyType = (EdmPrimitiveType) edmProperty.getType(); // 2. retrieve data from backend // 2.1. retrieve the entity data, for which the property has to be read Entity entity = storage.readEntityData(edmEntitySet, keyPredicates); if (entity == null) { // Bad request throw new ODataApplicationException("Entity not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 2.2. retrieve the property data from the entity Property property = entity.getProperty(edmPropertyName); if (property == null) { throw new ODataApplicationException("Property not found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ENGLISH); } // 3. serialize Object value = property.getValue(); if (value != null) { // 3.1. configure the serializer ODataSerializer serializer = odata.createSerializer(responseFormat); ContextURL contextUrl = ContextURL.with().entitySet(edmEntitySet).navOrPropertyPath(edmPropertyName).build(); PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextUrl).build(); // 3.2. serialize SerializerResult result = serializer.primitive(serviceMetadata, edmPropertyType, property, options); //4. configure the response object response.setContent(result.getContent()); response.setStatusCode(HttpStatusCode.OK.getStatusCode()); response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString()); }else{ // in case there's no value for the property, we can skip the serialization response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode()); } }