[OLINGO-1191] Code Improvements
This commit is contained in:
parent
b07a7cfe26
commit
f3919036ae
|
@ -175,9 +175,8 @@ public class EntityReferencesITCase extends AbstractParamTecSvcITCase {
|
||||||
getClient().getRetrieveRequestFactory()
|
getClient().getRetrieveRequestFactory()
|
||||||
.getEntityRequest(uri)
|
.getEntityRequest(uri)
|
||||||
.execute();
|
.execute();
|
||||||
fail();
|
|
||||||
} catch (ODataClientErrorException e) {
|
} catch (ODataClientErrorException e) {
|
||||||
assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), e.getStatusLine().getStatusCode());
|
assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), e.getStatusLine().getStatusCode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,136 @@
|
||||||
|
/*
|
||||||
|
* 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.fit.tecsvc.http;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.olingo.client.api.ODataClient;
|
||||||
|
import org.apache.olingo.commons.api.http.HttpMethod;
|
||||||
|
import org.apache.olingo.commons.api.http.HttpStatusCode;
|
||||||
|
import org.apache.olingo.fit.AbstractBaseTestITCase;
|
||||||
|
import org.apache.olingo.fit.tecsvc.TecSvcConst;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class EmptyNavigationPropertiesITCase extends AbstractBaseTestITCase {
|
||||||
|
|
||||||
|
private static final String SERVICE_URI = TecSvcConst.BASE_URI + "/";
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void emptyNavigationManyFollowedByToOne() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESAllPrim(32767)/NavPropertyETTwoPrimMany(32767)"
|
||||||
|
+ "/NavPropertyETAllPrimOne?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void emptyNavigationManyFollowedByToMany() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESAllPrim(32767)/NavPropertyETTwoPrimMany(32767)"
|
||||||
|
+ "/NavPropertyETAllPrimMany?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void nonemptyNavigationManyFollowedByEmptyToOne() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESAllPrim(32767)/NavPropertyETTwoPrimMany(-365)"
|
||||||
|
+ "/NavPropertyETAllPrimOne?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void emptyNavigationOneFollowedByToMany() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESTwoPrim(32766)/NavPropertyETAllPrimOne"
|
||||||
|
+ "/NavPropertyETTwoPrimMany?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void nonemptyNavigationManyFollowedByToManyNonExistingKey() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESAllPrim(32767)/NavPropertyETTwoPrimMany(-365)"
|
||||||
|
+ "/NavPropertyETAllPrimMany(123)?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void emptyNavigationOne() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESTwoPrim(32766)/NavPropertyETAllPrimOne?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NO_CONTENT.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void nonExistingEntityToNavigationOne() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESAllPrim(12345)/NavPropertyETTwoPrimOne?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.NOT_FOUND.getStatusCode(), connection.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void emptyNavigationMany() throws Exception {
|
||||||
|
URL url = new URL(SERVICE_URI + "ESAllPrim(-32768)/NavPropertyETTwoPrimMany?$format=json");
|
||||||
|
|
||||||
|
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||||
|
connection.setRequestMethod(HttpMethod.GET.name());
|
||||||
|
connection.connect();
|
||||||
|
|
||||||
|
assertEquals(HttpStatusCode.OK.getStatusCode(), connection.getResponseCode());
|
||||||
|
assertNotNull(IOUtils.toString(connection.getInputStream()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ODataClient getClient() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -189,6 +189,8 @@ public abstract class TechnicalProcessor implements Processor {
|
||||||
}
|
}
|
||||||
|
|
||||||
int navigationCount = 0;
|
int navigationCount = 0;
|
||||||
|
int navigationResCount = getNavigationResourceCount(resourcePaths);
|
||||||
|
Link previous = null;
|
||||||
while (++navigationCount < readAtMostNavigations
|
while (++navigationCount < readAtMostNavigations
|
||||||
&& resourcePaths.get(navigationCount) instanceof UriResourceNavigation) {
|
&& resourcePaths.get(navigationCount) instanceof UriResourceNavigation) {
|
||||||
final UriResourceNavigation uriNavigationResource = (UriResourceNavigation) resourcePaths.get(navigationCount);
|
final UriResourceNavigation uriNavigationResource = (UriResourceNavigation) resourcePaths.get(navigationCount);
|
||||||
|
@ -205,13 +207,28 @@ public abstract class TechnicalProcessor implements Processor {
|
||||||
EdmEntityType edmEntityType = getEntityTypeBasedOnNavPropertyTypeCast(uriNavigationResource);
|
EdmEntityType edmEntityType = getEntityTypeBasedOnNavPropertyTypeCast(uriNavigationResource);
|
||||||
entity = edmEntityType != null ? dataProvider.readDataFromEntity(edmEntityType, key) : entity;
|
entity = edmEntityType != null ? dataProvider.readDataFromEntity(edmEntityType, key) : entity;
|
||||||
if (entity == null) {
|
if (entity == null) {
|
||||||
throw new ODataApplicationException("Nothing found.", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT);
|
if (key.isEmpty() && (previous != null || navigationResCount == 1)) {
|
||||||
|
throw new ODataApplicationException("No Content", HttpStatusCode.NO_CONTENT.getStatusCode(), Locale.ROOT);
|
||||||
|
} else {
|
||||||
|
throw new ODataApplicationException("Not Found", HttpStatusCode.NOT_FOUND.getStatusCode(), Locale.ROOT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
previous = link;
|
||||||
|
}
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private int getNavigationResourceCount(List<UriResource> resourcePaths) {
|
||||||
|
int count = 0;
|
||||||
|
for (UriResource resource : resourcePaths) {
|
||||||
|
if (resource instanceof UriResourceNavigation) {
|
||||||
|
count ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
private EdmEntityType getEntityTypeBasedOnNavPropertyTypeCast(UriResourceNavigation uriNavigationResource) {
|
private EdmEntityType getEntityTypeBasedOnNavPropertyTypeCast(UriResourceNavigation uriNavigationResource) {
|
||||||
if (uriNavigationResource.getTypeFilterOnCollection() != null) {
|
if (uriNavigationResource.getTypeFilterOnCollection() != null) {
|
||||||
return (EdmEntityType) uriNavigationResource.getTypeFilterOnCollection();
|
return (EdmEntityType) uriNavigationResource.getTypeFilterOnCollection();
|
||||||
|
|
Loading…
Reference in New Issue