@Override public ODataResponse readEntity(final GetEntityUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final ExpandSelectTreeNode expandSelectTreeNode = UriParser.createExpandSelectTree(uriInfo.getSelect(), uriInfo.getExpand()); ODataResponse odr = ODataResponse.fromResponse(writeEntry(uriInfo.getTargetEntitySet(), expandSelectTreeNode, data, contentType)) .build(); return odr; }
@Override public IDataProviderResponse readExpandedEntity(GetEntityUriInfo uriInfo, ODataContext context) throws ODataException { GWUriInfo gwUriInfo = new GWUriInfo((UriInfo) uriInfo, uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getNavigationSegments(), uriInfo.getFilter()); gwUriInfo.setExpand(new ArrayList<ArrayList<NavigationPropertySegment>>()); gwUriInfo.setSelect(new ArrayList<SelectItem>()); IDataProviderResponse response = readEntity(gwUriInfo, context); HashMap<String, Object> resultMap = new HashMap<String, Object>(); resultMap.putAll(response.getResultEntity()); ExpandSelectTreeNode expandSelectTreeNode = UriParser.createExpandSelectTree(uriInfo.getSelect(), uriInfo.getExpand()); Map<String, ExpandSelectTreeNode> links = expandSelectTreeNode.getLinks(); EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); for (Entry<String, ExpandSelectTreeNode> expandNodeEntry : links.entrySet()) { Object singleResult = getSingleNavigationPathResult(expandNodeEntry, entitySet, resultMap, (UriInfo) uriInfo, context); resultMap.put(expandNodeEntry.getKey(), singleResult); } BaseDataProviderResponse baseResponse = new BaseDataProviderResponse(); baseResponse.setResultEntity(resultMap); return baseResponse; }
@Override public IDataProviderResponse readEntity(GetEntityUriInfo uriInfo, ODataContext context) throws ODataException { GetEntityUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("readEntity"), context.getAcceptableLanguages().get(0)); } else { return provider.readEntity(resolvedUriInfo, context); } }
private ReadRequest getReadRequestFromODataRequest(ODataContext context, GetEntityUriInfo uriInfo, EntityMetadata em) { Map<String, Object> keyPredicatesMap = EdmHelperV2.convertKeyPredicatesToMap(uriInfo.getKeyPredicates()); ReadRequestImpl request = new ReadRequestImpl(null, em.getName(), em, context.getRequestHeaders(), keyPredicatesMap, "GET"); // Support for sap:addressable to identify parent/child entity navigation. // Based on 'sourceEntityName' value user will code in before** exits to.. // 1. Control navigation to happen only from parent to child // 2. Block accessing child entity directly. List<NavigationSegment> navigationSegments = uriInfo.getNavigationSegments(); if (!navigationSegments.isEmpty()) { request.setSourceKeys(keyPredicatesMap); try { request.setSourceEntityName(uriInfo.getStartEntitySet().getName()); } catch (EdmException e) { request.setSourceEntityName(null); logger.info(e.getMessage()); } } return request; }
EdmEntitySet entitySet = uriInfo.getStartEntitySet(); if (expanding) { entitySet = uriInfo.getTargetEntitySet(); if (uriInfo.getNavigationSegments() != null && uriInfo.getNavigationSegments().size() > 0) { entitySet = uriInfo.getTargetEntitySet(); Map<String, Object> keys = getKeys(uriInfo.getKeyPredicates()); ReadResponseImpl readResponse = null; ReadRequestImpl readRequest = new ReadRequestImpl(null, entitySet.getName(), entityMetadata, context.getRequestHeaders(), keys, context.getHttpMethod()); if (expanding && (!uriInfo.getStartEntitySet().getName().equals(uriInfo.getTargetEntitySet().getName()))) { ((ReadRequestImpl) readRequest).setSourceEntityName(uriInfo.getStartEntitySet().getName()); try { ((ReadRequestImpl) readRequest).setSourceKeys(getKeys(uriInfo.getKeyPredicates())); } catch (Exception e1) { log.error("Error in fetching keys"); if (uriInfo.getNavigationSegments() != null && uriInfo.getNavigationSegments().size() > 0 && !expanding) { ((ReadRequestImpl) readRequest).setSourceEntityName(uriInfo.getStartEntitySet().getName()); try { ((ReadRequestImpl) readRequest).setSourceKeys(getKeys(uriInfo.getKeyPredicates())); ((ReadRequestImpl) readRequest).setKeys(getKeys(uriInfo.getNavigationSegments().get(0).getKeyPredicates())); } catch (Exception e1) { log.error("Error in fetching keys"); uriInfo.getTargetEntitySet().getEntityType());
edmEntityType = resultsView.getTargetEntitySet().getEntityType(); Map<String, Object> edmPropertyValueMap = null; final List<SelectItem> selectedItems = resultsView.getSelect(); if (selectedItems != null && !selectedItems.isEmpty()) { edmPropertyValueMap = jpaResultParser.parse2EdmPropertyValueMap(jpaEntity, buildSelectItemList(selectedItems, resultsView .getTargetEntitySet().getEntityType()), edmEntityType); } else { edmPropertyValueMap = jpaResultParser.parse2EdmPropertyValueMap(jpaEntity, edmEntityType); expandList = resultsView.getExpand(); if (expandList != null && !expandList.isEmpty()) { HashMap<String, Object> navigationMap = feedProperties = getEntityProviderProperties(oDataJPAContext, resultsView); if (resultsView.getTargetType() instanceof EdmEntityType) { odataResponse = EntityProvider.writeEntry(contentType, resultsView.getTargetEntitySet(), edmPropertyValueMap, feedProperties); } else { EdmProperty property = ((UriInfoImpl) resultsView).getPropertyPath().get(0);
edmEntityType = resultsView.getTargetEntitySet().getEntityType(); Map<String, Object> edmPropertyValueMap = null; final List<SelectItem> selectedItems = resultsView.getSelect(); if (selectedItems != null && !selectedItems.isEmpty()) { edmPropertyValueMap = jpaResultParser.parse2EdmPropertyValueMap(jpaEntity, buildSelectItemList(selectedItems, resultsView .getTargetEntitySet().getEntityType())); } else { edmPropertyValueMap = jpaResultParser.parse2EdmPropertyValueMap(jpaEntity, edmEntityType); expandList = resultsView.getExpand(); if (expandList != null && !expandList.isEmpty()) { HashMap<String, Object> navigationMap = feedProperties = getEntityProviderProperties(oDataJPAContext, resultsView); odataResponse = EntityProvider.writeEntry(contentType, resultsView.getTargetEntitySet(), edmPropertyValueMap, feedProperties);
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { if (entityView != null) { try { setType(JPQLContextType.SELECT_SINGLE); EdmEntityType entityType = entityView.getTargetEntitySet().getEntityType(); EdmMapping mapping = entityType.getMapping(); if (mapping != null) { setJPAEntityName(mapping.getInternalName()); } else { setJPAEntityName(entityType.getName()); } setJPAEntityAlias(generateJPAEntityAlias()); setKeyPredicates(entityView.getKeyPredicates()); setSelectExpression(generateSelectExpression()); } catch (EdmException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e); } } return JPQLSelectSingleContext.this; }
@Override public IDataProviderResponse readExpandedEntity(GetEntityUriInfo uriInfo, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); if (dataProvider !=null){ return dataProvider.readExpandedEntity(uriInfo, context); } else return null; }
this.gwlog.debug("readEntity: " + TraceUtil.getEntitySetLog(uriInfo.getStartEntitySet()) + ", content type = " + (contentType == null ? "<null>" : contentType)); Map<String, Object> sapStatMap = null; IDataProviderResponse dataProviderResponse; if (uriInfo.getFunctionImport() == null) { if (uriInfo.getExpand().isEmpty()) { if (getContext().isInBatchMode()) { IReadEntityParameter parameter = new ReadEntityParameter(
private static EntityProviderWriteProperties getEntityProviderProperties(final ODataJPAContext odataJPAContext, final GetEntityUriInfo resultsView) throws ODataJPARuntimeException { ODataEntityProviderPropertiesBuilder entityFeedPropertiesBuilder = null; ExpandSelectTreeNode expandSelectTree = null; try { entityFeedPropertiesBuilder = EntityProviderWriteProperties.serviceRoot(odataJPAContext.getODataContext().getPathInfo().getServiceRoot()); expandSelectTree = UriParser.createExpandSelectTree(resultsView.getSelect(), resultsView.getExpand()); entityFeedPropertiesBuilder.expandSelectTree(expandSelectTree); entityFeedPropertiesBuilder.clientCallbacks(resultsView.getClientCallbacks()); entityFeedPropertiesBuilder.callback(resultsView.getCallback()); entityFeedPropertiesBuilder.callbacks(JPAExpandCallBack.getCallbacks(odataJPAContext, odataJPAContext.getODataContext() .getPathInfo().getServiceRoot(), expandSelectTree, resultsView.getExpand())); } catch (ODataException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e); } return entityFeedPropertiesBuilder.build(); }
private static EntityProviderWriteProperties getEntityProviderProperties(final ODataJPAContext odataJPAContext, final GetEntityUriInfo resultsView) throws ODataJPARuntimeException { ODataEntityProviderPropertiesBuilder entityFeedPropertiesBuilder = null; ExpandSelectTreeNode expandSelectTree = null; try { entityFeedPropertiesBuilder = EntityProviderWriteProperties.serviceRoot(odataJPAContext.getODataContext().getPathInfo().getServiceRoot()); expandSelectTree = UriParser.createExpandSelectTree(resultsView.getSelect(), resultsView.getExpand()); entityFeedPropertiesBuilder.expandSelectTree(expandSelectTree); entityFeedPropertiesBuilder.callbacks(JPAExpandCallBack.getCallbacks(odataJPAContext.getODataContext() .getPathInfo().getServiceRoot(), expandSelectTree, resultsView.getExpand())); } catch (ODataException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.INNER_EXCEPTION, e); } return entityFeedPropertiesBuilder.build(); }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { try { setType(JPQLContextType.JOIN_SINGLE); setJPAJoinClause(generateJoinClauses()); if (!jpaJoinClauses.isEmpty()) { JPAJoinClause joinClause = jpaJoinClauses.get(jpaJoinClauses.size() - 1); setJPAEntityName(joinClause.getEntityName()); setJPAEntityAlias(joinClause.getEntityRelationShipAlias()); } setKeyPredicates(entityView.getKeyPredicates()); setSelectExpression(generateSelectExpression()); ODataExpressionParser.reInitializePositionalParameters(); } catch (EdmException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, e); } return JPQLJoinSelectSingleContext.this; }
@Override public IDataProviderResponse readExpandedEntity(GetEntityUriInfo uriInfo, ODataContext context) throws ODataException { logger.debug("Entering CXSDataProvider >> {readExpandedEntity}"); if (uriInfo.getExpand() != null) { expanding = true; } BaseDataProviderResponse response = (BaseDataProviderResponse) super.readExpandedEntity(uriInfo, context); logger.debug("Exiting CXSDataProvider >> {readExpandedEntitySet}"); return response; }
protected String generateWhereExpression() throws ODataException { if (entityView.getFilter() != null) { String whereExpression = ODataExpressionParser.parseToJPAWhereExpression( entityView.getFilter(), getJPAEntityAlias()); Map<String, Map<Integer, Object>> parameterizedExpressionMap = new HashMap<String, Map<Integer,Object>>(); parameterizedExpressionMap.put(whereExpression, ODataExpressionParser.getPositionalParameters()); ODataParameterizedWhereExpressionUtil.setParameterizedQueryMap(parameterizedExpressionMap); ODataExpressionParser.reInitializePositionalParameters(); return whereExpression; } ODataExpressionParser.reInitializePositionalParameters(); return null; }
protected List<JPAJoinClause> generateJoinClauses() throws ODataJPARuntimeException, EdmException { List<JPAJoinClause> jpaOuterJoinClauses = new ArrayList<JPAJoinClause>(); JPAJoinClause jpaOuterJoinClause = null; String joinCondition = null; String entityAlias = generateJPAEntityAlias(); joinCondition = ODataExpressionParser.parseKeyPredicates(entityView.getKeyPredicates(), entityAlias); EdmEntityType entityType = entityView.getStartEntitySet().getEntityType(); Mapping mapping = (Mapping) entityType.getMapping(); String entityTypeName = null; if (mapping != null) { entityTypeName = mapping.getInternalName(); } else { entityTypeName = entityType.getName(); } jpaOuterJoinClause = new JPAJoinClause(entityTypeName, entityAlias, null, null, joinCondition, JPAJoinClause.JOIN.INNER); jpaOuterJoinClauses.add(jpaOuterJoinClause); for (NavigationSegment navigationSegment : entityView.getNavigationSegments()) { EdmNavigationProperty navigationProperty = navigationSegment.getNavigationProperty(); String relationShipAlias = generateRelationShipAlias(); joinCondition = ODataExpressionParser.parseKeyPredicates(navigationSegment.getKeyPredicates(), relationShipAlias); jpaOuterJoinClause = new JPAJoinClause(getFromEntityName(navigationProperty), entityAlias, getRelationShipName(navigationProperty), relationShipAlias, joinCondition, JPAJoinClause.JOIN.INNER); jpaOuterJoinClauses.add(jpaOuterJoinClause); } return jpaOuterJoinClauses; }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { if (entityView != null) { try { setType(JPQLContextType.SELECT_SINGLE); EdmEntityType entityType = entityView.getTargetEntitySet().getEntityType(); EdmMapping mapping = entityType.getMapping(); if (mapping != null) { setJPAEntityName(mapping.getInternalName()); } else { setJPAEntityName(entityType.getName()); } setJPAEntityAlias(generateJPAEntityAlias()); setKeyPredicates(entityView.getKeyPredicates()); setSelectExpression(generateSelectExpression()); } catch (EdmException e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL.addContent(e.getMessage()), e); } } return JPQLSelectSingleContext.this; }
/** * read Entity */ @Override public IDataProviderResponse readEntity(GetEntityUriInfo uriInfo, ODataContext context) throws ODataException { IDataProvider dataProvider = null; String targetEntitySet = uriInfo.getTargetEntitySet().getEntityType().getNamespace()+"."+uriInfo.getTargetEntitySet().getName(); dataProvider = getDataProvider(targetEntitySet); try{ if (dataProvider !=null) { return dataProvider.readEntity(uriInfo, context); } else return null; } catch (ODataException e) { logger.error("Error in readEntity",e); throw new ODataException(e.getMessage(),e); } }
@Override public JPQLContext build() throws ODataJPAModelException, ODataJPARuntimeException { try { setType(JPQLContextType.JOIN_SINGLE); setJPAJoinClause(generateJoinClauses()); if (!jpaJoinClauses.isEmpty()) { JPAJoinClause joinClause = jpaJoinClauses.get(jpaJoinClauses.size() - 1); setJPAEntityName(joinClause.getEntityName()); setJPAEntityAlias(joinClause.getEntityRelationShipAlias()); } setKeyPredicates(entityView.getKeyPredicates()); setSelectExpression(generateSelectExpression()); setWhereExpression(generateWhereExpression()); ODataExpressionParser.reInitializePositionalParameters(); } catch (Exception e) { throw ODataJPARuntimeException.throwException(ODataJPARuntimeException.GENERAL, e); } return JPQLJoinSelectSingleContext.this; }
@Override public ODataResponse readEntity(final GetEntityUriInfo uriInfo, final String contentType) throws ODataException { final Object data = retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments()); if (!appliesFilter(data, uriInfo.getFilter())) { throw new ODataNotFoundException(ODataNotFoundException.ENTITY); } final ExpandSelectTreeNode expandSelectTreeNode = UriParser.createExpandSelectTree(uriInfo.getSelect(), uriInfo.getExpand()); ODataResponse odr = ODataResponse.fromResponse(writeEntry(uriInfo.getTargetEntitySet(), expandSelectTreeNode, data, contentType)) .build(); return odr; }