public void castStringToGuidWithCompelxProperty(List<String> coloumnNames, List<Map<String, Object>> resultEntitySet , EdmStructuralType entityType){ for(int i=0; i<resultEntitySet.size(); i++ ){ for(String columnName : coloumnNames){ Object data = resultEntitySet.get(i).get(columnName) ; if(data != null && data instanceof String ){ resultEntitySet.get(i).put(columnName, UUID.fromString((String) data)); }else if(data != null && data instanceof Map ){ try { //Handle Complex type String complexTypeName = entityType.getProperty(columnName).getType().getName(); Map<String, Object> complexData = (Map<String, Object>)data; castStringToGuidWithCompelxProperty( complexPropWithUUID.get(complexTypeName) , Arrays.asList(complexData) , (EdmStructuralType) entityType.getProperty(columnName).getType() ); } catch (EdmException e) { } } } } }
private List<String> flattenOutProperties(EdmStructuralType type) throws EdmException { List<String> propertyNames = type.getPropertyNames(); List<String> flattenedPropertyNames = new ArrayList<String>(); for(String prop : propertyNames) { EdmTyped edmProp = type.getProperty(prop); if (edmProp.getType() instanceof EdmComplexType) { EdmComplexType complexType = (EdmComplexType) edmProp.getType(); String cpName = edmProp.getName(); for(String s : flattenOutProperties(complexType)) { flattenedPropertyNames.add(cpName + '.' + s); } }else { flattenedPropertyNames.add(prop); } } return flattenedPropertyNames; }
@Override public ElementType getElementType(String elementName) { try { if(entityType.getProperty(elementName).getType().getKind().equals(EdmTypeKind.COMPLEX)) return ElementType.STRUCTURED_TYPE; } catch (EdmException e) { return null; } return ElementType.SIMPLE_TYPE; }
@Override public EdmURIBuilder appendFunctionImportSegment(EdmFunctionImport functionImport) { try { state = functionImport.getReturnType() != null ? (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY && functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY ? SegmentType.FUNCTIONIMPORT_MANY : SegmentType.FUNCTIONIMPORT) : SegmentType.FUNCTIONIMPORT; segments.add(new Segment(state, functionImport.getName())); } catch (EdmException e) { throw new RuntimeException("Unexpected EDM Exception: ", e);//NOSONAR } return this; }
/** * Create an {@link EntityPropertyInfo} based on given {@link EdmFunctionImport} * * @param functionImport * for which the {@link EntityPropertyInfo} is created. * @return created {@link EntityPropertyInfo} * @throws EntityProviderException * if create of {@link EntityPropertyInfo} something goes wrong (e.g. exceptions during * access of {@link EdmFunctionImport}). */ public static EntityPropertyInfo create(final EdmFunctionImport functionImport) throws EntityProviderException { try { EntityInfoAggregator eia = new EntityInfoAggregator(); return eia.createEntityPropertyInfo(functionImport, functionImport.getReturnType().getType()); } catch (EdmException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } }
/** * Create an {@link EntityPropertyInfo} based on given {@link EdmFunctionImport} * * @param functionImport * for which the {@link EntityPropertyInfo} is created. * @return created {@link EntityPropertyInfo} * @throws EntityProviderException * if create of {@link EntityPropertyInfo} something goes wrong (e.g. exceptions during * access of {@link EdmFunctionImport}). */ public static EntityPropertyInfo create(final EdmFunctionImport functionImport) throws EntityProviderException { try { EntityInfoAggregator eia = new EntityInfoAggregator(); return eia.createEntityPropertyInfo(functionImport, functionImport.getReturnType().getType()); } catch (EdmException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } }
/** * Create an {@link EntityPropertyInfo} based on given {@link EdmFunctionImport} * * @param functionImport * for which the {@link EntityPropertyInfo} is created. * @return created {@link EntityPropertyInfo} * @throws EntityProviderException * if create of {@link EntityPropertyInfo} something goes wrong (e.g. exceptions during * access of {@link EdmFunctionImport}). */ public static EntityPropertyInfo create(final EdmFunctionImport functionImport) throws EntityProviderException { try { EntityInfoAggregator eia = new EntityInfoAggregator(); return eia.createEntityPropertyInfo(functionImport, functionImport.getReturnType().getType()); } catch (EdmException e) { throw new EntityProviderException(EntityProviderException.COMMON, e); } }
protected void validateEdmPropertyOfStructuredType(final EdmStructuralType parentType, final PropertyExpressionImpl property, final Token propertyToken) throws ExpressionParserException, ExpressionParserInternalError { try { String propertyName = property.getUriLiteral(); EdmTyped edmProperty = parentType.getProperty(propertyName); if (edmProperty != null) { property.setEdmProperty(edmProperty); property.setEdmType(edmProperty.getType()); } else { // Tested with TestParserExceptions.TestPMvalidateEdmProperty CASE 3 throw FilterParserExceptionImpl.createPROPERTY_NAME_NOT_FOUND_IN_TYPE(parentType, property, propertyToken, curExpression); } } catch (EdmException e) { // not Tested, should not occur throw ExpressionParserInternalError.createERROR_ACCESSING_EDM(e); } }
@Override public Object readFunctionImport(final EdmFunctionImport functionImport, InputStream content, final EntityProviderReadProperties properties) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { return new XmlEntityConsumer().readEntry(functionImport.getEntitySet(), content, properties); } else { final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new XmlEntityConsumer().readCollection(info, content, properties) : new XmlEntityConsumer().readProperty(info, content, properties).get(info.getName()); } } catch (final EdmException e) { throw new EntityProviderException(e.getMessageReference(), e); } } }
@Override public Object readFunctionImport(final EdmFunctionImport functionImport, InputStream content, final EntityProviderReadProperties properties) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { return new XmlEntityConsumer().readEntry(functionImport.getEntitySet(), content, properties); } else { final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new XmlEntityConsumer().readCollection(info, content, properties) : new XmlEntityConsumer().readProperty(info, content, properties).get(info.getName()); } } catch (final EdmException e) { throw new EntityProviderException(e.getMessageReference(), e); } } }
private String getEtagPropertyName(UriInfo uriInfo) throws EdmException { String etagPropName = ""; EdmEntityType originEntityType = uriInfo.getTargetEntitySet().getEntityType(); List<String> propertyNames = originEntityType.getPropertyNames(); for (String name : propertyNames) { EdmTyped edmTyped = originEntityType.getProperty(name); EdmTypeKind typeKind = edmTyped.getType().getKind(); if (EdmTypeKind.SIMPLE.equals(typeKind)) { EdmProperty edmProperty = (EdmProperty) edmTyped; EdmFacets facet = edmProperty.getFacets(); if(null != facet && null != facet.getConcurrencyMode() && facet.getConcurrencyMode() == EdmConcurrencyMode.Fixed ) { etagPropName = getTechnicalName(edmTyped);; break; } } } return etagPropName; } private String getTechnicalName(Object edmMappable)
@Override public ODataResponse writeFunctionImport(final EdmFunctionImport functionImport, final Object data, final EntityProviderWriteProperties properties) throws EntityProviderException { try { final EdmType type = functionImport.getReturnType().getType(); final boolean isCollection = functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY; if (type.getKind() == EdmTypeKind.ENTITY) { @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) data; return writeEntry(functionImport.getEntitySet(), map, properties); } final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); if (isCollection) { return writeCollection(info, (List<?>) data); } else { return writeSingleTypedElement(info, data); } } catch (EdmException e) { throw new EntityProviderProducerException(e.getMessageReference(), e); } }
@Override public ODataResponse writeFunctionImport(final EdmFunctionImport functionImport, final Object data, final EntityProviderWriteProperties properties) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { @SuppressWarnings("unchecked") Map<String, Object> map = (Map<String, Object>) data; return writeEntry(functionImport.getEntitySet(), map, properties); } final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); if (functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY) { return writeCollection(info, (List<?>) data); } else { return writeSingleTypedElement(info, data); } } catch (final EdmException e) { throw new EntityProviderProducerException(e.getMessageReference(), e); } }
@Override public Object readFunctionImport(final EdmFunctionImport functionImport, final InputStream content, final EntityProviderReadProperties properties) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new JsonEntityConsumer().readFeed(functionImport.getEntitySet(), content, properties) : new JsonEntityConsumer().readEntry(functionImport.getEntitySet(), content, properties); } else { final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new JsonEntityConsumer().readCollection(info, content, properties) : new JsonEntityConsumer().readProperty(info, content, properties).get(info.getName()); } } catch (final EdmException e) { throw new EntityProviderException(e.getMessageReference(), e); } }
@Override public Object readFunctionImport(final EdmFunctionImport functionImport, final InputStream content, final EntityProviderReadProperties properties) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new JsonEntityConsumer().readFeed(functionImport.getEntitySet(), content, properties) : new JsonEntityConsumer().readEntry(functionImport.getEntitySet(), content, properties); } else { final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new JsonEntityConsumer().readCollection(info, content, properties) : new JsonEntityConsumer().readProperty(info, content, properties).get(info.getName()); } } catch (final EdmException e) { throw new EntityProviderException(e.getMessageReference(), e); } }
@Override public Object readFunctionImport(EdmFunctionImport functionImport, EntityStream content) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new XmlEntityDeserializer().readFeed(functionImport.getEntitySet(), content) : new XmlEntityDeserializer().readEntry(functionImport.getEntitySet(), content); } else { final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new XmlEntityDeserializer().readCollection(info, content) : new XmlEntityDeserializer().readProperty(info, content).get(info.getName()); } } catch (final EdmException e) { throw new EntityProviderException(e.getMessageReference(), e); } } }
@Override public Object readFunctionImport(EdmFunctionImport functionImport, EntityStream content) throws EntityProviderException { try { if (functionImport.getReturnType().getType().getKind() == EdmTypeKind.ENTITY) { return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new JsonEntityDeserializer().readFeed(functionImport.getEntitySet(), content) : new JsonEntityDeserializer().readEntry(functionImport.getEntitySet(), content); } else { final EntityPropertyInfo info = EntityInfoAggregator.create(functionImport); return functionImport.getReturnType().getMultiplicity() == EdmMultiplicity.MANY ? new JsonEntityDeserializer().readCollection(info, content) : new JsonEntityDeserializer().readProperty(info, content).get(info.getName()); } } catch (final EdmException e) { throw new EntityProviderException(e.getMessageReference(), e); } } }
@Override public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriInfo, final String contentType) throws ODataException { final EdmFunctionImport functionImport = uriInfo.getFunctionImport(); final EdmSimpleType type = (EdmSimpleType) functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()), null); if (data == null) { throw new ODataNotFoundException(ODataHttpException.COMMON); } ODataResponse response; if (type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance()) { response = EntityProvider.writeBinary(((BinaryData) data).getMimeType(), ((BinaryData) data).getData()); } else { final String value = type.valueToString(data, EdmLiteralKind.DEFAULT, null); response = EntityProvider.writeText(value == null ? "" : value); } return ODataResponse.fromResponse(response).build(); }
@Override public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriInfo, final String contentType) throws ODataException { final EdmFunctionImport functionImport = uriInfo.getFunctionImport(); final EdmSimpleType type = (EdmSimpleType) functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()), null); if (data == null) { throw new ODataNotFoundException(ODataHttpException.COMMON); } ODataResponse response; if (type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance()) { response = EntityProvider.writeBinary(((BinaryData) data).getMimeType(), ((BinaryData) data).getData()); } else { final String value = type.valueToString(data, EdmLiteralKind.DEFAULT, null); response = EntityProvider.writeText(value == null ? "" : value); } return ODataResponse.fromResponse(response).build(); }
@Override public ODataResponse executeFunctionImportValue(final GetFunctionImportUriInfo uriInfo, final String contentType) throws ODataException { final EdmFunctionImport functionImport = uriInfo.getFunctionImport(); final EdmSimpleType type = (EdmSimpleType) functionImport.getReturnType().getType(); final Object data = dataSource.readData( functionImport, mapFunctionParameters(uriInfo.getFunctionImportParameters()), null); if (data == null) { throw new ODataNotFoundException(ODataHttpException.COMMON); } ODataResponse response; if (type == EdmSimpleTypeKind.Binary.getEdmSimpleTypeInstance()) { response = EntityProvider.writeBinary(((BinaryData) data).getMimeType(), ((BinaryData) data).getData()); } else { final String value = type.valueToString(data, EdmLiteralKind.DEFAULT, null); response = EntityProvider.writeText(value == null ? "" : value); } return ODataResponse.fromResponse(response).build(); }