package org.openrdf.repository.object;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import junit.framework.Test;
import org.openrdf.annotations.Iri;
import org.openrdf.annotations.Matching;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.vocabulary.OWL;
import org.openrdf.repository.object.base.ObjectRepositoryTestCase;
public class AnonymousConceptTest extends ObjectRepositoryTestCase {
public static Test suite() throws Exception {
return ObjectRepositoryTestCase.suite(AnonymousConceptTest.class);
}
@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.TYPE })
public @interface oneOf {
@Iri(OWL.NAMESPACE + "oneOf")
String[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.TYPE })
public @interface unionOf {
@Iri(OWL.NAMESPACE + "unionOf")
Class<?>[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.TYPE })
public @interface intersectionOf {
@Iri(OWL.NAMESPACE + "intersectionOf")
Class<?>[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target( { ElementType.TYPE })
public @interface complementOf {
@Iri(OWL.NAMESPACE + "complementOf")
Class<?> value();
}
@Iri("urn:test:Nothing")
public interface Nothing {
}
@Iri("urn:test:MyThing")
public interface MyThing {
}
@Iri("urn:test:AConcept")
public interface AConcept {
}
@Iri("urn:test:MyOtherConcept")
public interface MyOtherConcept extends MyConcept {
}
@Iri("urn:test:AnotherConcept")
public interface AnotherConcept extends MyConcept {
}
@Iri("urn:test:MyConcept")
public interface MyConcept {
String hello();
}
public static class MyClass implements MyConcept {
public String hello() {
return "world";
}
}
@Matching("/main_resource")
public interface AnonyoumsMatchesConcept extends MyConcept {
}
@oneOf("http://localhost/one")
public interface AnonyoumsOneOfConcept extends MyConcept {
}
@unionOf( { MyOtherConcept.class, AnotherConcept.class })
public interface AnonyoumsUnionConcept extends MyConcept {
}
@intersectionOf( { MyThing.class, AConcept.class })
public interface AnonyoumsIntersectionConcept extends MyConcept {
}
@complementOf(Nothing.class)
public interface AnonyoumsComplementConcept extends MyConcept {
}
public void testMatches() throws Exception {
tearDown();
config.addConcept(MyConcept.class);
config.addBehaviour(MyClass.class);
config.addConcept(AnonyoumsMatchesConcept.class);
setUp();
URIImpl id = new URIImpl("http://localhost/main_resource");
Object main = con.getObject(id);
assertTrue(main instanceof AnonyoumsMatchesConcept);
assertTrue(main instanceof MyConcept);
assertEquals(((MyConcept) main).hello(), "world");
}
public void testOneOf() throws Exception {
tearDown();
config.addConcept(MyConcept.class);
config.addBehaviour(MyClass.class);
config.addConcept(AnonyoumsOneOfConcept.class);
setUp();
URIImpl id = new URIImpl("http://localhost/one");
Object main = con.getObject(id);
assertTrue(main instanceof AnonyoumsOneOfConcept);
assertTrue(main instanceof MyConcept);
assertEquals(((MyConcept) main).hello(), "world");
}
public void testUnionOf() throws Exception {
tearDown();
config.addConcept(MyOtherConcept.class);
config.addConcept(AnotherConcept.class);
config.addConcept(MyConcept.class);
config.addBehaviour(MyClass.class);
config.addConcept(AnonyoumsUnionConcept.class);
setUp();
URIImpl id = new URIImpl("urn:test:my-concept");
Object main = con.getObject(id);
main = con.addDesignation(main, MyOtherConcept.class);
assertTrue(main instanceof AnonyoumsUnionConcept);
assertTrue(main instanceof MyConcept);
assertFalse(main instanceof AnotherConcept);
assertEquals(((MyConcept) main).hello(), "world");
}
public void testIntersectionOf() throws Exception {
tearDown();
config.addConcept(MyThing.class);
config.addConcept(AConcept.class);
config.addConcept(MyConcept.class);
config.addBehaviour(MyClass.class);
config.addConcept(AnonyoumsIntersectionConcept.class);
setUp();
URIImpl id = new URIImpl("urn:test:my-concept");
Object main = con.getObject(id);
main = con.addDesignation(main, MyThing.class);
main = con.addDesignation(main, AConcept.class);
assertTrue(main instanceof AnonyoumsIntersectionConcept);
assertTrue(main instanceof MyConcept);
assertEquals(((MyConcept) main).hello(), "world");
}
public void testComplementOf() throws Exception {
tearDown();
config.addConcept(Nothing.class);
config.addConcept(MyConcept.class);
config.addBehaviour(MyClass.class);
config.addConcept(AnonyoumsComplementConcept.class);
setUp();
URIImpl id = new URIImpl("urn:test:something");
Object main = con.getObject(id);
assertTrue(main instanceof AnonyoumsComplementConcept);
assertTrue(main instanceof MyConcept);
assertEquals(((MyConcept) main).hello(), "world");
}
}