Merge branch 'OLINGO-687'
This commit is contained in:
commit
36e09cf190
|
@ -20,6 +20,16 @@ package org.apache.olingo.server.api.uri;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.CountOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.ExpandOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.FilterOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.FormatOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.OrderByOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.SelectOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.SkipOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.SkipTokenOption;
|
||||||
|
import org.apache.olingo.server.api.uri.queryoption.TopOption;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used for URI info kind {@link UriInfoKind#crossjoin} to describe URIs like
|
* Used for URI info kind {@link UriInfoKind#crossjoin} to describe URIs like
|
||||||
* http://.../serviceroot/$crossjoin(...)
|
* http://.../serviceroot/$crossjoin(...)
|
||||||
|
@ -30,5 +40,49 @@ public interface UriInfoCrossjoin {
|
||||||
* @return List of entity set names
|
* @return List of entity set names
|
||||||
*/
|
*/
|
||||||
List<String> getEntitySetNames();
|
List<String> getEntitySetNames();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $expand option
|
||||||
|
*/
|
||||||
|
ExpandOption getExpandOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $filter option
|
||||||
|
*/
|
||||||
|
FilterOption getFilterOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $format option
|
||||||
|
*/
|
||||||
|
FormatOption getFormatOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $count option
|
||||||
|
*/
|
||||||
|
CountOption getCountOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $orderby option
|
||||||
|
*/
|
||||||
|
OrderByOption getOrderByOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $select option
|
||||||
|
*/
|
||||||
|
SelectOption getSelectOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $skip option
|
||||||
|
*/
|
||||||
|
SkipOption getSkipOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $skiptoken option
|
||||||
|
*/
|
||||||
|
SkipTokenOption getSkipTokenOption();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Object containing information of the $top option
|
||||||
|
*/
|
||||||
|
TopOption getTopOption();
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,6 +110,41 @@ public class RequestURLHierarchyVisitor implements RequestURLVisitor {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(UriInfoCrossjoin info) {
|
public void visit(UriInfoCrossjoin info) {
|
||||||
|
if (info.getFilterOption() != null) {
|
||||||
|
visit(info.getFilterOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.getCountOption() != null) {
|
||||||
|
visit(info.getCountOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(info.getOrderByOption() != null) {
|
||||||
|
visit(info.getOrderByOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.getSkipOption() != null) {
|
||||||
|
visit(info.getSkipOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.getTopOption() != null) {
|
||||||
|
visit(info.getTopOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.getExpandOption() != null) {
|
||||||
|
visit(info.getExpandOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(info.getSelectOption() != null) {
|
||||||
|
visit(info.getSelectOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.getFormatOption() != null) {
|
||||||
|
visit(info.getFormatOption());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.getSkipTokenOption() != null) {
|
||||||
|
visit(info.getSkipTokenOption());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -728,7 +728,8 @@ public class TripPinServiceTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCrossJoin() throws Exception {
|
public void testCrossJoin() throws Exception {
|
||||||
String editUrl = baseURL + "/$crossjoin(People,Airlines)";
|
String editUrl = baseURL + "/$crossjoin(People,Airlines)?$filter="+
|
||||||
|
Encoder.encode("People/UserName eq Airlines/AirlineCode");
|
||||||
HttpResponse response = httpGET(editUrl, 200);
|
HttpResponse response = httpGET(editUrl, 200);
|
||||||
EntityUtils.consumeQuietly(response.getEntity());
|
EntityUtils.consumeQuietly(response.getEntity());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1063,7 +1063,22 @@ public class UriParseTreeVisitor extends UriParserBaseVisitor<Object> {
|
||||||
UriInfoImpl crossJoin = new UriInfoImpl().setKind(UriInfoKind.crossjoin);
|
UriInfoImpl crossJoin = new UriInfoImpl().setKind(UriInfoKind.crossjoin);
|
||||||
|
|
||||||
for (OdataIdentifierContext obj : ctx.vlODI) {
|
for (OdataIdentifierContext obj : ctx.vlODI) {
|
||||||
crossJoin.addEntitySetName(obj.getText());
|
String odi = obj.getText();
|
||||||
|
crossJoin.addEntitySetName(odi);
|
||||||
|
|
||||||
|
EdmEntitySet edmEntitySet = edmEntityContainer.getEntitySet(odi);
|
||||||
|
if (edmEntitySet == null) {
|
||||||
|
throw wrap(new UriParserSemanticException("Expected EntityTypeName",
|
||||||
|
UriParserSemanticException.MessageKeys.UNKNOWN_PART, odi));
|
||||||
|
}
|
||||||
|
|
||||||
|
EdmEntityType type = edmEntitySet.getEntityType();
|
||||||
|
if (type == null) {
|
||||||
|
throw wrap(new UriParserSemanticException("Expected EntityTypeName",
|
||||||
|
UriParserSemanticException.MessageKeys.UNKNOWN_ENTITY_TYPE, odi));
|
||||||
|
}
|
||||||
|
// contextUriInfo = uriInfo;
|
||||||
|
context.contextTypes.push(new TypeInformation(type, true));
|
||||||
}
|
}
|
||||||
|
|
||||||
context.contextUriInfo = crossJoin;
|
context.contextUriInfo = crossJoin;
|
||||||
|
|
Loading…
Reference in New Issue