blob: 5e824ea4eab7f83de1ae44bbc67f603fc2e5b1f3 [file] [log] [blame]
/*
* Copyright 2016 The Apache Software Foundation.
*
* Licensed 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.odata2.annotation.processor.core.edm;
import org.apache.olingo.odata2.api.annotation.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.annotation.edm.EdmEntityType;
import org.apache.olingo.odata2.api.annotation.edm.EdmKey;
import org.apache.olingo.odata2.api.annotation.edm.EdmNavigationProperty;
import org.apache.olingo.odata2.api.annotation.edm.EdmNavigationProperty.Multiplicity;
import org.apache.olingo.odata2.api.annotation.edm.EdmProperty;
import org.apache.olingo.odata2.api.exception.ODataException;
import org.apache.olingo.odata2.api.uri.PathSegment;
import org.apache.olingo.odata2.core.ODataPathSegmentImpl;
import org.apache.olingo.odata2.core.edm.provider.EdmImplProv;
import org.apache.olingo.odata2.core.uri.UriParserImpl;
import org.junit.Ignore;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import static java.util.Collections.EMPTY_MAP;
public class AnnotationEdmProviderNamespacesTest {
/**
* Test with namespace in path segment
*/
@SuppressWarnings("unchecked")
@Test
public void testTwoWayNavigationAB() throws Exception {
UriParserImpl uriParser = createUriParser(A.class, B.class, C.class, D.class);
PathSegment ps1 = new ODataPathSegmentImpl("AB.AA('1')", EMPTY_MAP);
PathSegment ps2 = new ODataPathSegmentImpl("B", EMPTY_MAP);
uriParser.parse(Arrays.asList(ps1, ps2), EMPTY_MAP);
}
/**
* Test with manual set default namespace for edm
* (160211_mibo): This can actual not work because the option to manually set the default namespace is missing.
* However this test could be used to test the option to manually set the default namespace.
*/
@SuppressWarnings("unchecked")
@Test
@Ignore("Currently not implemented")
public void testTwoWayNavigationABWithDefaultNamespaceSetManual() throws Exception {
UriParserImpl uriParser = createUriParser(A.class, B.class, C.class, D.class);
PathSegment ps1 = new ODataPathSegmentImpl("AA('1')", EMPTY_MAP);
PathSegment ps2 = new ODataPathSegmentImpl("B", EMPTY_MAP);
uriParser.parse(Arrays.asList(ps1, ps2), EMPTY_MAP);
}
/**
* Test with namespace in path segment
*/
@SuppressWarnings("unchecked")
@Test
public void testTwoWayNavigationCD() throws Exception {
UriParserImpl uriParser = createUriParser(C.class, D.class, A.class, B.class);
PathSegment ps1 = new ODataPathSegmentImpl("CD.CC('1')", EMPTY_MAP);
PathSegment ps2 = new ODataPathSegmentImpl("D", EMPTY_MAP);
uriParser.parse(Arrays.asList(ps1, ps2), EMPTY_MAP);
}
/**
* Test with namespace in path segment
*/
@SuppressWarnings("unchecked")
@Test
public void testTwoWayNavigationBug_DefaultEntityContainerGeneratedOnWrongEntities1() throws Exception {
UriParserImpl uriParser = createUriParser(A.class, B.class, C.class, D.class);
PathSegment ps1 = new ODataPathSegmentImpl("CD.CC('1')", EMPTY_MAP);
PathSegment ps2 = new ODataPathSegmentImpl("D", EMPTY_MAP);
uriParser.parse(Arrays.asList(ps1, ps2), EMPTY_MAP);
}
/**
* Test with namespace in path segment
*/
@SuppressWarnings("unchecked")
@Test
public void testTwoWayNavigationBug_DefaultEntityContainerGeneratedOnWrongEntities2() throws Exception {
UriParserImpl uriParser = createUriParser(C.class, D.class, A.class, B.class);
PathSegment ps1 = new ODataPathSegmentImpl("AB.AA('1')", EMPTY_MAP);
PathSegment ps2 = new ODataPathSegmentImpl("B", EMPTY_MAP);
uriParser.parse(Arrays.asList(ps1, ps2), EMPTY_MAP);
}
private UriParserImpl createUriParser(Class<?> ... annotatedClasses) throws ODataException {
AnnotationEdmProvider provider = new AnnotationEdmProvider(Arrays.asList(annotatedClasses));
EdmImplProv edm = new EdmImplProv(provider);
return new UriParserImpl(edm);
}
@EdmEntityType(name = "A", namespace = "AB")
@EdmEntitySet(name = "AA", container = "AB")
private class A {
@EdmKey
@EdmProperty
String id;
@EdmNavigationProperty(toMultiplicity = Multiplicity.ZERO_OR_ONE, toType = B.class)
B b;
}
@EdmEntityType(name = "B", namespace = "AB")
@EdmEntitySet(container = "AB")
private class B {
@EdmNavigationProperty(toMultiplicity = Multiplicity.MANY, toType = A.class)
List<A> a;
}
@EdmEntityType(name = "C", namespace = "CD")
@EdmEntitySet(name = "CC", container = "CD")
private class C {
@EdmKey
@EdmProperty
String id;
@EdmNavigationProperty(toMultiplicity = Multiplicity.ZERO_OR_ONE, toType = D.class)
D d;
}
@EdmEntityType(name = "D", namespace = "CD")
@EdmEntitySet(container = "CD")
private class D {
@EdmNavigationProperty(toMultiplicity = Multiplicity.MANY, toType = C.class)
List<C> c;
}
}