try { data.addAll((List<?>) retrieveData( uriInfo.getStartEntitySet(), uriInfo.getKeyPredicates(), uriInfo.getFunctionImport(), mapFunctionParameters(uriInfo.getFunctionImportParameters()), uriInfo.getNavigationSegments())); } catch (final ODataNotFoundException e) { data.clear(); final EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); final InlineCount inlineCountType = uriInfo.getInlineCount(); final Integer count = applySystemQueryOptions( entitySet, data, uriInfo.getFilter(), inlineCountType, uriInfo.getOrderBy(), uriInfo.getSkipToken(), uriInfo.getSkip(), uriInfo.getTop()); if (uriInfo.getOrderBy() == null && uriInfo.getSkipToken() == null && uriInfo.getSkip() == null && uriInfo.getTop() == null) { sortInDefaultOrder(entitySet, data); .inlineCountType(inlineCountType)
private static Integer getInlineCountForNonFilterQueryEntitySet(final List<Map<String, Object>> edmEntityList, final GetEntitySetUriInfo resultsView) { // when $skip and/or $top is present with $inlinecount, first get the total count Integer count = null; if (resultsView.getInlineCount() == InlineCount.ALLPAGES) { if (resultsView.getSkip() != null || resultsView.getTop() != null) { count = edmEntityList.size(); // Now update the list if (resultsView.getSkip() != null) { // Index checks to avoid IndexOutOfBoundsException if (resultsView.getSkip() > edmEntityList.size()) { edmEntityList.clear(); return count; } edmEntityList.subList(0, resultsView.getSkip()).clear(); } if (resultsView.getTop() != null && resultsView.getTop() >= 0 && resultsView.getTop() < edmEntityList.size()) { final List<Map<String, Object>> edmEntitySubList = new ArrayList<Map<String, Object>>(edmEntityList.subList(0, resultsView.getTop())); edmEntityList.retainAll(edmEntitySubList); } } }// Inlinecount of None is handled by default - null return count; }
protected String generateOrderByFileds() throws ODataJPARuntimeException, EdmException { if (entitySetView.getOrderBy() != null) { return ODataExpressionParser.parseToJPAOrderByExpression(entitySetView.getOrderBy(), getJPAEntityAlias()); } else if (entitySetView.getTop() != null || entitySetView.getSkip() != null || pagingRequested == true) { return ODataExpressionParser.parseKeyPropertiesToJPAOrderByExpression(entitySetView.getTargetEntitySet() .getEntityType().getKeyProperties(), getJPAEntityAlias()); } else { return null; } }
private List<Object> handlePaging(final Query query, final GetEntitySetUriInfo uriParserResultView) { JPAPageBuilder pageBuilder = new JPAPageBuilder(); pageBuilder.pageSize(oDataJPAContext.getPageSize()) .query(query) .skipToken(uriParserResultView.getSkipToken()); // $top/$skip with $inlinecount case handled in response builder to avoid multiple DB call if (uriParserResultView.getSkip() != null && uriParserResultView.getInlineCount() == null) { pageBuilder.skip(uriParserResultView.getSkip().intValue()); } if (uriParserResultView.getTop() != null && uriParserResultView.getInlineCount() == null) { pageBuilder.top(uriParserResultView.getTop().intValue()); } JPAPage page = pageBuilder.build(); oDataJPAContext.setPaging(page); return page.getPagedEntities(); }
@Override public IDataProviderResponse readExpandedEntitySet(GetEntitySetUriInfo 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 = readEntitySet(gwUriInfo, context); ArrayList<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>(); ExpandSelectTreeNode expandSelectTreeNode = UriParser.createExpandSelectTree(uriInfo.getSelect(), uriInfo.getExpand()); Map<String, ExpandSelectTreeNode> links = expandSelectTreeNode.getLinks(); for (Map<String, Object> responseEntity : response.getResultEntities()) { HashMap<String, Object> resultMap = new HashMap<String, Object>(); resultMap.putAll(responseEntity); EdmEntitySet entitySet = uriInfo.getTargetEntitySet(); List<KeyPredicate> keyPredicates = getKeyPredicates(entitySet.getEntityType(), resultMap); GWUriInfo singleUriInfo = new GWUriInfo((UriInfo) uriInfo, uriInfo.getStartEntitySet(), keyPredicates, uriInfo.getNavigationSegments(), uriInfo.getFilter()); for (Entry<String, ExpandSelectTreeNode> expandNodeEntry : links.entrySet()) { Object singleResult = getSingleNavigationPathResult(expandNodeEntry, entitySet, resultMap, singleUriInfo, context); resultMap.put(expandNodeEntry.getKey(), singleResult); } resultList.add(resultMap); } BaseDataProviderResponse baseResponse = new BaseDataProviderResponse(); baseResponse.setResultEntities(resultList); return baseResponse; }
EdmEntitySet entitySet = uriInfo.getStartEntitySet(); if (expanding) { entitySet = uriInfo.getTargetEntitySet(); if (uriInfo.getNavigationSegments() != null && uriInfo.getNavigationSegments().size() > 0) { entitySet = uriInfo.getTargetEntitySet(); QueryRequestImpl queryRequest = new QueryRequestImpl(null, entitySet.getName(), entityMetadata, context.getRequestHeaders(), context.getHttpMethod()); Expression filterTree = new ExpressionBuilderImplV2().buildForV2(uriInfo.getFilter()); queryRequest.setQueryExpression(filterTree); queryRequest.setServiceName(serviceName); if (expanding && (!uriInfo.getStartEntitySet().getName().equals(uriInfo.getTargetEntitySet().getName()))) { ((QueryRequestImpl) queryRequest).setSourceEntityName(uriInfo.getStartEntitySet().getName()); try { ((QueryRequestImpl) queryRequest).setSourceKeys(getKeys(uriInfo.getKeyPredicates())); } catch (Exception e1) { log.error("Error in fetching keys"); if (uriInfo.getNavigationSegments() != null && uriInfo.getNavigationSegments().size() > 0 && !expanding) { ((QueryRequestImpl) queryRequest).setSourceEntityName(uriInfo.getStartEntitySet().getName()); try { ((QueryRequestImpl) queryRequest).setSourceKeys(getKeys(uriInfo.getKeyPredicates())); } catch (Exception e1) { log.error("Error in fetching keys"); uriInfo.getTargetEntitySet().getEntityType());
throws ODataJPAModelException, ODataJPARuntimeException { if (uriParserResultView.isNew()) { List<Object> result = new ArrayList<Object>(); result.add(processNew((UriInfo) uriParserResultView)); if (uriParserResultView.getFunctionImport() != null) { return (List<Object>) process((GetFunctionImportUriInfo) uriParserResultView); InlineCount inlineCount = uriParserResultView.getInlineCount(); Integer top = uriParserResultView.getTop() == null ? 1 : uriParserResultView.getTop().intValue(); boolean hasNoAllPages = inlineCount == null ? true : !inlineCount.equals(InlineCount.ALLPAGES); if (top.intValue() == 0 && hasNoAllPages) { JPAEdmMapping mapping = (JPAEdmMapping) uriParserResultView.getTargetEntitySet().getEntityType().getMapping(); JPAQueryBuilder queryBuilder = new JPAQueryBuilder(oDataJPAContext); JPAQueryInfo queryInfo = queryBuilder.build(uriParserResultView); ODataJPATombstoneEntityListener listener = queryBuilder.getODataJPATombstoneEntityListener((UriInfo) uriParserResultView); Map<String, String> customQueryOptions = uriParserResultView.getCustomQueryOptions(); String deltaToken = null; if (customQueryOptions != null) { deltaToken = uriParserResultView.getCustomQueryOptions().get(DELTATOKEN);
if (resultsView.getInlineCount() != null) { if ((resultsView.getSkip() != null || resultsView.getTop() != null)) { count = resultsView.getInlineCount() == InlineCount.ALLPAGES ? edmEntityList.size() : null; entityFeedPropertiesBuilder.inlineCountType(resultsView.getInlineCount()); ExpandSelectTreeNode expandSelectTree = UriParser.createExpandSelectTree(resultsView.getSelect(), resultsView.getExpand()); JPAExpandCallBack.getCallbacks(serviceRoot, expandSelectTree, resultsView.getExpand());
edmEntityType = resultsView.getTargetEntitySet().getEntityType(); List<Map<String, Object>> edmEntityList = null; JPAEntityParser jpaResultParser = new JPAEntityParser(); final List<SelectItem> selectedItems = resultsView.getSelect(); if (selectedItems != null && !selectedItems.isEmpty()) { edmEntityList = edmEntityList = jpaResultParser.parse2EdmEntityList(jpaEntities, edmEntityType); expandList = resultsView.getExpand(); if (expandList != null && !expandList.isEmpty()) { int count = 0; EntityProvider.writeFeed(contentType, resultsView.getTargetEntitySet(), edmEntityList, feedProperties); odataResponse = ODataResponse.fromResponse(odataResponse).status(HttpStatusCodes.OK).build();
private String buildToken() { StringBuilder tokenBuilder = new StringBuilder(); if (baseUri != null) { tokenBuilder.append(baseUri); } try { if (resultsView != null) { tokenBuilder.append(resultsView.getTargetEntitySet().getName()); } } catch (EdmException e) { // Nothing } tokenBuilder.append(DELTA_TOKEN_STRING); if (deltaTokenValue != null) { tokenBuilder.append(deltaTokenValue); } return tokenBuilder.toString(); } }
this.gwlog.debug("readEntitySet: " + TraceUtil.getEntitySetLog(uriInfo.getStartEntitySet()) + ", content type = " + (contentType == null ? "<null>" : contentType)); if(uriInfo.getFunctionImport() != null && !uriInfo.getExpand().isEmpty() && getContext().isInBatchMode()){ throw new ODataNotAcceptableException(ODataNotAcceptableException.NOT_SUPPORTED_CONTENT_TYPE .addContent(contentType));
entityFeedPropertiesBuilder.clientCallbacks(resultsView.getClientCallbacks()); entityFeedPropertiesBuilder.callback(resultsView.getCallback()); entityFeedPropertiesBuilder.inlineCountType(resultsView.getInlineCount()); ExpandSelectTreeNode expandSelectTree = UriParser.createExpandSelectTree(resultsView.getSelect(), resultsView.getExpand()); JPAExpandCallBack.getCallbacks(odataJPAContext, serviceRoot, expandSelectTree, resultsView.getExpand());
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(entitySetView.getKeyPredicates(), entityAlias); EdmEntityType entityType = entitySetView.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 : entitySetView.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; }
if(uriInfo.getFunctionImport() != null || !uriInfo.getExpand().isEmpty() || context.isInBatchMode()){ throw new ODataNotAcceptableException(ODataNotAcceptableException.NOT_SUPPORTED_CONTENT_TYPE .addContent(contentType)); String fileName = uriInfo.getTargetEntitySet().getName()+".xlsx"; List<String> propNameList = getPropertyNames(resultEntries, uriInfo);
@Override public IDataProviderResponse readEntitySet(GetEntitySetUriInfo uriInfo, ODataContext context) throws ODataException { GetEntitySetUriInfo resolvedUriInfo = resolveCrossServiceNavigation((UriInfo) uriInfo, true, context); IDataProvider provider = getTargetDataProvider(resolvedUriInfo.getFunctionImport(), resolvedUriInfo.getStartEntitySet()); if (provider == null) { throw new DataProviderException(DataProviderException.NOT_IMPLEMENTED.addContent("readEntitySet"), context.getAcceptableLanguages().get(0)); } else { return provider.readEntitySet(resolvedUriInfo, context); } } @Override
@SuppressWarnings("unchecked") private List<String> getPropertyNames(List<Map<String, Object>> resultEntries, GetEntitySetUriInfo uriInfo) throws EdmException{ List<String> propNameList = new ArrayList<String>(); List<String> sPropList = new ArrayList<String>(); if(uriInfo.getSelect() != null && !uriInfo.getSelect().isEmpty()){ for(SelectItem sItem : uriInfo.getSelect()){ sPropList.add(sItem.getProperty().getName()); } } for(String entityName : resultEntries.get(0).keySet()){ if(sPropList.isEmpty() || sPropList.contains(entityName)){ if(resultEntries.get(0).get(entityName) instanceof Map){ Set<String> entityKeySet = ((Map<String, Object>)resultEntries.get(0).get(entityName)).keySet(); for(String entityKey : entityKeySet){ propNameList.add(entityName +" - "+entityKey); } }else{ propNameList.add(entityName); } } } return propNameList; }
@Override public IDataProviderResponse readExpandedEntitySet(GetEntitySetUriInfo uriInfo, ODataContext context) throws ODataException { logger.debug("Entering CXSDataProvider >> {readExpandedEntitySet}"); if (uriInfo.getExpand() != null) { expanding = true; } BaseDataProviderResponse response = (BaseDataProviderResponse) super.readExpandedEntitySet(uriInfo, context); logger.debug("Exiting CXSDataProvider >> {readExpandedEntitySet}"); return response; }
protected String generateWhereExpression() throws ODataException { if (entitySetView.getFilter() != null) { String whereExpression = ODataExpressionParser.parseToJPAWhereExpression( entitySetView.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; } }
@Override public ODataResponse readEntitySet(final GetEntitySetUriInfo uriParserResultView, final String contentType) throws ODataException { ODataResponse oDataResponse = null; try { oDataJPAContext.setODataContext(getContext()); List<Object> jpaEntities = jpaProcessor.process(uriParserResultView); InlineCount inlineCount = uriParserResultView.getInlineCount(); if (inlineCount != null && inlineCount.equals(InlineCount.ALLPAGES)) { ((UriInfoImpl) uriParserResultView).setCount(true); responseBuilder.setCount(jpaProcessor.process((GetEntitySetCountUriInfo) uriParserResultView)); } if (uriParserResultView.isNew()) { oDataResponse = responseBuilder.build((GetEntityUriInfo)uriParserResultView, jpaEntities.get(0), contentType); } else { oDataResponse = responseBuilder.build(uriParserResultView, jpaEntities, contentType); } } finally { close(); } return oDataResponse; }
private void setOrderBy(QueryRequest queryRequest, GetEntitySetUriInfo uriInfo) { OrderByExpressionImpl orderItem = null; if (uriInfo.getOrderBy() != null) { for (OrderExpression orderExpr : uriInfo.getOrderBy().getOrders()) { SortOrder sortOrder = orderExpr.getSortOrder(); String order = sortOrder.name(); boolean isDescending = order.equals("desc"); String expression = orderExpr.getExpression().getUriLiteral(); orderItem = new OrderByExpressionImpl(isDescending, expression); ((QueryRequestImpl) queryRequest).setOrderByOption(orderItem); } } }