package com.github.anno4j.model;
import com.github.anno4j.Anno4j;
import com.github.anno4j.model.impl.ResourceObject;
import com.github.anno4j.model.impl.body.TextualBody;
import com.github.anno4j.model.impl.targets.SpecificResource;
import com.hp.hpl.jena.rdf.model.impl.ResourceImpl;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.Before;
import org.junit.Test;
import org.openrdf.idGenerator.IDGenerator;
import org.openrdf.model.Resource;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.object.RDFObject;
import org.openrdf.repository.object.behaviours.RDFObjectImpl;
import org.openrdf.repository.object.exceptions.ObjectPersistException;
import java.util.HashSet;
import static org.junit.Assert.*;
/**
* Test suite for the interfaces extending the CreationProvenance interface
*/
public class CreationProvenanceTest {
private Anno4j anno4j;
@Before
public void setUp() throws Exception {
this.anno4j = new Anno4j();
}
private final static String GOOD_DATE = "2015-01-28T12:00:00+01:00";
private final static String GOOD_DATE_2 = "2015-01-28T12:00:00+00:00";
private final static String BAD_DATE = "2015--01-28T12:00:00Z";
private final static String BAD_DATE2 = "2015-01-28T12:00:00";
private final static URIImpl RIGHT = new URIImpl("http://example.org/right");
private final static URIImpl RIGHT2 = new URIImpl("http://example.org/right2");
private final static URIImpl RIGHT3 = new URIImpl("http://example.org/right3");
@Test
public void testGoodDates() {
DateTimeFormatter format = ISODateTimeFormat.dateTimeNoMillis().withZoneUTC();
format.parseDateTime(GOOD_DATE);
format.parseDateTime(GOOD_DATE_2);
}
@Test(expected = IllegalArgumentException.class)
public void testBadDates() {
DateTimeFormatter format = ISODateTimeFormat.dateTimeNoMillis().withZoneUTC();
format.parseDateTime(BAD_DATE);
}
@Test
public void testGoodDates2() throws RepositoryException, IllegalAccessException, InstantiationException {
Annotation annotation = this.anno4j.createObject(Annotation.class);
annotation.setCreated(GOOD_DATE);
Annotation result = this.anno4j.findByID(Annotation.class, annotation.getResourceAsString());
assertEquals(GOOD_DATE, result.getCreated());
}
@Test(expected = ObjectPersistException.class)
public void testBadDate2() throws RepositoryException, IllegalAccessException, InstantiationException {
Annotation annotation = this.anno4j.createObject(Annotation.class);
annotation.setCreated(BAD_DATE);
}
@Test(expected = ObjectPersistException.class)
public void testBadDate3() throws RepositoryException, IllegalAccessException, InstantiationException {
Annotation annotation = this.anno4j.createObject(Annotation.class);
annotation.setModified(BAD_DATE2);
}
@Test
public void testSetModified() throws RepositoryException, IllegalAccessException, InstantiationException {
Annotation annotation = this.anno4j.createObject(Annotation.class);
String date = "2016-07-04T12:00:00Z";
annotation.setModified(date);
Annotation result = this.anno4j.findByID(Annotation.class, annotation.getResourceAsString());
assertEquals(date, result.getModified());
}
@Test
public void testSetModified2() throws RepositoryException, IllegalAccessException, InstantiationException {
int year = 2015;
int month = 12;
int day = 16;
int hours = 12;
int minutes = 0;
int seconds = 0;
String timezone = "UTC";
String timezone2 = "America/Argentina/Ushuaia";
SpecificResource spec = this.anno4j.createObject(SpecificResource.class);
spec.setModified(year, month, day, hours, minutes, seconds, timezone);
SpecificResource result = this.anno4j.findByID(SpecificResource.class, spec.getResourceAsString());
assertEquals("2015-12-16T12:00:00Z", result.getModified());
spec.setModified(year, month, day, hours, minutes, seconds, timezone2);
result = this.anno4j.findByID(SpecificResource.class, spec.getResourceAsString());
assertEquals("2015-12-16T12:00:00-03:00", result.getModified());
}
@Test
public void testRights() throws RepositoryException, IllegalAccessException, InstantiationException {
Annotation annotation = this.anno4j.createObject(Annotation.class);
TextualBody body = this.anno4j.createObject(TextualBody.class);
body.addRight(this.anno4j.createObject(ResourceObject.class, RIGHT));
SpecificResource target = this.anno4j.createObject(SpecificResource.class);
HashSet<ResourceObject> rights = new HashSet<>();
rights.add(this.anno4j.createObject(ResourceObject.class, RIGHT2));
rights.add(this.anno4j.createObject(ResourceObject.class, RIGHT3));
target.setRights(rights);
annotation.addBody(body);
annotation.addTarget(target);
Annotation result = this.anno4j.findByID(Annotation.class, annotation.getResourceAsString());
assertEquals(0, result.getRights().size());
assertEquals(1, result.getBodies().iterator().next().getRights().size());
assertEquals(2, ((SpecificResource) result.getTargets().toArray()[0]).getRights().size());
}
@Test
public void testCanonical() throws RepositoryException, IllegalAccessException, InstantiationException {
String canonicalURI = "http://somepage/canonical/";
Annotation annotation = this.anno4j.createObject(Annotation.class);
Annotation result = this.anno4j.findByID(Annotation.class, annotation.getResourceAsString());
assertEquals(null, result.getCanonical());
ResourceObject canonical = this.anno4j.createObject(ResourceObject.class);
canonical.setResourceAsString(canonicalURI);
annotation.setCanonical(canonical);
result = this.anno4j.findByID(Annotation.class, annotation.getResourceAsString());
assertEquals(canonicalURI, result.getCanonical().getResourceAsString());
}
@Test
public void testVia() throws RepositoryException, IllegalAccessException, InstantiationException {
String viaURI = "http://somepage/via1/";
ResourceObject via = this.anno4j.createObject(ResourceObject.class);
via.setResourceAsString(viaURI);
String viaURI2 = "http://somepage/via2/";
ResourceObject via2 = this.anno4j.createObject(ResourceObject.class);
via2.setResourceAsString(viaURI2);
String viaURI3 = "http://somepage/via3/";
ResourceObject via3 = this.anno4j.createObject(ResourceObject.class);
via3.setResourceAsString(viaURI3);
TextualBody body = this.anno4j.createObject(TextualBody.class);
TextualBody result = this.anno4j.findByID(TextualBody.class, body.getResourceAsString());
assertEquals(0, result.getVia().size());
body.addVia(via);
result = this.anno4j.findByID(TextualBody.class, body.getResourceAsString());
assertEquals(1, result.getVia().size());
assertEquals(viaURI, result.getVia().iterator().next().getResourceAsString());
HashSet<ResourceObject> vias = new HashSet<>();
vias.add(via2);
vias.add(via3);
body.setVia(vias);
result = this.anno4j.findByID(TextualBody.class, body.getResourceAsString());
assertEquals(2, result.getVia().size());
}
}