blob: 96be8a448e03f133b718a5e5d6f3bded55ac93ff [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.olingo.server.core;
import java.util.List;
import org.apache.olingo.commons.api.edm.EdmEntityType;
import org.apache.olingo.server.api.uri.UriInfo;
import org.apache.olingo.server.api.uri.UriInfoAll;
import org.apache.olingo.server.api.uri.UriInfoBatch;
import org.apache.olingo.server.api.uri.UriInfoCrossjoin;
import org.apache.olingo.server.api.uri.UriInfoEntityId;
import org.apache.olingo.server.api.uri.UriInfoKind;
import org.apache.olingo.server.api.uri.UriInfoMetadata;
import org.apache.olingo.server.api.uri.UriInfoResource;
import org.apache.olingo.server.api.uri.UriInfoService;
import org.apache.olingo.server.api.uri.UriResource;
import org.apache.olingo.server.api.uri.UriResourceAction;
import org.apache.olingo.server.api.uri.UriResourceComplexProperty;
import org.apache.olingo.server.api.uri.UriResourceCount;
import org.apache.olingo.server.api.uri.UriResourceEntitySet;
import org.apache.olingo.server.api.uri.UriResourceFunction;
import org.apache.olingo.server.api.uri.UriResourceIt;
import org.apache.olingo.server.api.uri.UriResourceLambdaAll;
import org.apache.olingo.server.api.uri.UriResourceLambdaAny;
import org.apache.olingo.server.api.uri.UriResourceLambdaVariable;
import org.apache.olingo.server.api.uri.UriResourceNavigation;
import org.apache.olingo.server.api.uri.UriResourcePrimitiveProperty;
import org.apache.olingo.server.api.uri.UriResourceRef;
import org.apache.olingo.server.api.uri.UriResourceRoot;
import org.apache.olingo.server.api.uri.UriResourceSingleton;
import org.apache.olingo.server.api.uri.UriResourceValue;
import org.apache.olingo.server.api.uri.queryoption.CountOption;
import org.apache.olingo.server.api.uri.queryoption.DeltaTokenOption;
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.IdOption;
import org.apache.olingo.server.api.uri.queryoption.OrderByOption;
import org.apache.olingo.server.api.uri.queryoption.SearchOption;
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;
public class RequestURLHierarchyVisitor implements RequestURLVisitor {
private UriInfo uriInfo;
public UriInfo getUriInfo() {
return this.uriInfo;
}
@Override
public void visit(UriInfo info) {
this.uriInfo = info;
UriInfoKind kind = info.getKind();
switch (kind) {
case all:
visit(info.asUriInfoAll());
break;
case batch:
visit(info.asUriInfoBatch());
break;
case crossjoin:
visit(info.asUriInfoCrossjoin());
break;
case entityId:
visit(info.asUriInfoEntityId());
break;
case metadata:
visit(info.asUriInfoMetadata());
break;
case resource:
visit(info.asUriInfoResource());
break;
case service:
visit(info.asUriInfoService());
break;
}
}
@Override
public void visit(UriInfoService info) {
}
@Override
public void visit(UriInfoAll info) {
}
@Override
public void visit(UriInfoBatch info) {
}
@Override
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
public void visit(UriInfoEntityId info) {
visit(info.getSelectOption());
if (info.getExpandOption() != null) {
visit(info.getExpandOption());
}
if (info.getFormatOption() != null) {
visit(info.getFormatOption());
}
if (info.getIdOption() != null) {
visit(info.getIdOption(), info.getEntityTypeCast());
}
}
@Override
public void visit(UriInfoMetadata info) {
}
@Override
public void visit(UriInfoResource info) {
List<UriResource> parts = info.getUriResourceParts();
for (UriResource resource : parts) {
switch (resource.getKind()) {
case action:
visit((UriResourceAction) resource);
break;
case complexProperty:
visit((UriResourceComplexProperty) resource);
break;
case count:
visit((UriResourceCount) resource);
break;
case entitySet:
visit((UriResourceEntitySet) resource);
break;
case function:
visit((UriResourceFunction) resource);
break;
case it:
visit((UriResourceIt) resource);
break;
case lambdaAll:
visit((UriResourceLambdaAll) resource);
break;
case lambdaAny:
visit((UriResourceLambdaAny) resource);
break;
case lambdaVariable:
visit((UriResourceLambdaVariable) resource);
break;
case navigationProperty:
visit((UriResourceNavigation) resource);
break;
case ref:
visit((UriResourceRef) resource);
break;
case root:
visit((UriResourceRoot) resource);
break;
case primitiveProperty:
visit((UriResourcePrimitiveProperty) resource);
break;
case singleton:
visit((UriResourceSingleton) resource);
break;
case value:
visit((UriResourceValue) resource);
break;
}
}
// http://docs.oasis-open.org/odata/odata/v4.0/os/part1-protocol/odata-v4.0-os-part1-protocol.html#_Toc372793682
if (info.getSearchOption() != null) {
visit(info.getSearchOption());
}
if (info.getFilterOption() != null) {
visit(info.getFilterOption());
}
if (info.getCountOption() != null) {
visit(info.getCountOption());
}
visit(info.getOrderByOption());
if (info.getSkipOption() != null) {
visit(info.getSkipOption());
}
if (info.getTopOption() != null) {
visit(info.getTopOption());
}
if (info.getExpandOption() != null) {
visit(info.getExpandOption());
}
visit(info.getSelectOption());
if (info.getFormatOption() != null) {
visit(info.getFormatOption());
}
if (info.getIdOption() != null) {
visit(info.getIdOption(), null);
}
if (info.getSkipTokenOption() != null) {
visit(info.getSkipTokenOption());
}
if (info.getDeltaTokenOption() != null) {
visit(info.getDeltaTokenOption());
}
}
@Override
public void visit(ExpandOption option) {
}
@Override
public void visit(FilterOption info) {
}
@Override
public void visit(FormatOption info) {
}
@Override
public void visit(IdOption info, EdmEntityType type) {
}
@Override
public void visit(CountOption info) {
}
@Override
public void visit(OrderByOption option) {
}
@Override
public void visit(SearchOption option) {
}
@Override
public void visit(SelectOption option) {
}
@Override
public void visit(SkipOption option) {
}
@Override
public void visit(SkipTokenOption option) {
}
@Override
public void visit(TopOption option) {
}
@Override
public void visit(UriResourceCount option) {
}
@Override
public void visit(UriResourceRef info) {
}
@Override
public void visit(DeltaTokenOption option) {
}
@Override
public void visit(UriResourceRoot info) {
}
@Override
public void visit(UriResourceValue info) {
}
@Override
public void visit(UriResourceAction info) {
}
@Override
public void visit(UriResourceEntitySet info) {
}
@Override
public void visit(UriResourceFunction info) {
}
@Override
public void visit(UriResourceIt info) {
}
@Override
public void visit(UriResourceLambdaAll info) {
}
@Override
public void visit(UriResourceLambdaAny info) {
}
@Override
public void visit(UriResourceLambdaVariable info) {
}
@Override
public void visit(UriResourceNavigation info) {
}
@Override
public void visit(UriResourceSingleton info) {
}
@Override
public void visit(UriResourceComplexProperty info) {
}
@Override
public void visit(UriResourcePrimitiveProperty info) {
}
}