# HG changeset patch
# User dwinter
# Date 1323332280 -3600
# Node ID 33d1589a61a7ad2bbe826ea4e35a13438087249b
initial
diff -r 000000000000 -r 33d1589a61a7 .classpath
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.classpath Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 33d1589a61a7 .project
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.project Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,36 @@
+
+
+ org.digitalhps.storage.triplestoreimplementation
+
+
+
+
+
+ org.eclipse.wst.jsdt.core.javascriptValidator
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff -r 000000000000 -r 33d1589a61a7 .settings/.jsdtscope
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/.jsdtscope Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 33d1589a61a7 .settings/org.eclipse.jdt.core.prefs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.jdt.core.prefs Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,12 @@
+#Mon Dec 05 19:22:10 CET 2011
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff -r 000000000000 -r 33d1589a61a7 .settings/org.eclipse.wst.common.component
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.wst.common.component Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 33d1589a61a7 .settings/org.eclipse.wst.common.project.facet.core.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.wst.common.project.facet.core.xml Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff -r 000000000000 -r 33d1589a61a7 .settings/org.eclipse.wst.jsdt.ui.superType.container
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.container Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff -r 000000000000 -r 33d1589a61a7 .settings/org.eclipse.wst.jsdt.ui.superType.name
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.wst.jsdt.ui.superType.name Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,1 @@
+Window
\ No newline at end of file
diff -r 000000000000 -r 33d1589a61a7 WebContent/META-INF/MANIFEST.MF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/WebContent/META-INF/MANIFEST.MF Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff -r 000000000000 -r 33d1589a61a7 WebContent/WEB-INF/web.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/WebContent/WEB-INF/web.xml Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,37 @@
+
+
+RESTfulJavaWebServices-Restlet
+
+org.restlet.application
+org.digitalhps.storage.triplestoreimplementation.restlet.RestServer
+
+
+
+
+
+
+org.digitalhps.storage.triplestoreimplementation.jaas.configFilePath
+file:///etc/jaasAuth.conf
+
+
+
+
+RestletServlet
+
+org.restlet.ext.servlet.ServerServlet
+
+
+
+
+
+RestletServlet
+/*
+
+
\ No newline at end of file
diff -r 000000000000 -r 33d1589a61a7 libs/log4j-1.2.15.jar
Binary file libs/log4j-1.2.15.jar has changed
diff -r 000000000000 -r 33d1589a61a7 libs/openrdf-sesame-2.3.2-onejar.jar
Binary file libs/openrdf-sesame-2.3.2-onejar.jar has changed
diff -r 000000000000 -r 33d1589a61a7 libs/org.json.jar
Binary file libs/org.json.jar has changed
diff -r 000000000000 -r 33d1589a61a7 libs/org.restlet.ext.jaas.jar
Binary file libs/org.restlet.ext.jaas.jar has changed
diff -r 000000000000 -r 33d1589a61a7 libs/org.restlet.ext.json.jar
Binary file libs/org.restlet.ext.json.jar has changed
diff -r 000000000000 -r 33d1589a61a7 libs/org.restlet.ext.servlet.jar
Binary file libs/org.restlet.ext.servlet.jar has changed
diff -r 000000000000 -r 33d1589a61a7 libs/org.restlet.jar
Binary file libs/org.restlet.jar has changed
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/annotations/RDFInstanceURL.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/annotations/RDFInstanceURL.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,9 @@
+package org.digitalhps.storage.triplestoreimplementation.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RDFInstanceURL {
+ String value();
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/annotations/RDFPredicate.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/annotations/RDFPredicate.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,9 @@
+package org.digitalhps.storage.triplestoreimplementation.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RDFPredicate {
+ String value();
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/annotations/RDFType.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/annotations/RDFType.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,9 @@
+package org.digitalhps.storage.triplestoreimplementation.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface RDFType {
+ String value();
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/events/CreationEvent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/events/CreationEvent.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,73 @@
+/**
+ * created on:06.12.2011
+ */
+package org.digitalhps.storage.triplestoreimplementation.events;
+
+import java.net.URI;
+import java.util.Date;
+
+import org.digitalhps.storage.objects.interfaces.elements.IActor;
+import org.digitalhps.storage.objects.interfaces.elements.ISourceReference;
+import org.digitalhps.storage.objects.interfaces.events.ICreationEvent;
+
+/**
+ * @author dwinter
+ *
+ */
+public class CreationEvent implements ICreationEvent {
+
+ /* (non-Javadoc)
+ * @see org.digitalhps.storage.objects.interfaces.elements.IElement#getId()
+ */
+ @Override
+ public URI getId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.digitalhps.storage.objects.interfaces.events.ICreationEvent#getSourceReference()
+ */
+ @Override
+ public ISourceReference getSourceReference() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.digitalhps.storage.objects.interfaces.events.ICreationEvent#getCreator()
+ */
+ @Override
+ public IActor getCreator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.digitalhps.storage.objects.interfaces.events.ICreationEvent#getCreationDate()
+ */
+ @Override
+ public Date getCreationDate() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.digitalhps.storage.objects.interfaces.events.ICreationEvent#getCreationPlace()
+ */
+ @Override
+ public String getCreationPlace() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ /* (non-Javadoc)
+ * @see org.digitalhps.storage.objects.interfaces.events.ICreationEvent#getPredecessors()
+ */
+ @Override
+ public ICreationEvent[] getPredecessors() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/events/Main.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/events/Main.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,46 @@
+package org.digitalhps.storage.triplestoreimplementation.events;
+
+import org.apache.log4j.Logger;
+import org.restlet.data.Form;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.Get;
+import org.restlet.resource.Options;
+import org.restlet.resource.ServerResource;
+
+
+
+public class Main extends ServerResource {
+
+private Logger logger = Logger.getRootLogger();
+
+ /**
+ * Erlaubt cross scripting bei Aufruf aus Javascript
+ * @param entity
+ */
+ @Options
+ public void doOptions(Representation entity) {
+ Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers");
+ if (responseHeaders == null) {
+ responseHeaders = new Form();
+ getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders);
+ }
+ responseHeaders.add("Access-Control-Allow-Origin", "*");
+ responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET");
+ responseHeaders.add("Access-Control-Allow-Headers", "Content-Type");
+ responseHeaders.add("Access-Control-Allow-Credentials", "false");
+ responseHeaders.add("Access-Control-Max-Age", "60");
+ }
+
+
+
+ @Get("html")
+ public Representation getHTML(){
+
+ Representation rep = new StringRepresentation("test");
+ return rep;
+
+ }
+
+}
+
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/events/RelationEvent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/events/RelationEvent.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,88 @@
+package org.digitalhps.storage.triplestoreimplementation.events;
+
+import java.net.URI;
+import java.util.Date;
+
+import org.digitalhps.storage.objects.interfaces.elements.IActor;
+import org.digitalhps.storage.objects.interfaces.elements.IRelation;
+import org.digitalhps.storage.objects.interfaces.elements.ISourceReference;
+import org.digitalhps.storage.objects.interfaces.events.ICreationEvent;
+import org.digitalhps.storage.objects.interfaces.events.IRelationEvent;
+import org.digitalhps.storage.triplestoreimplementation.annotations.RDFPredicate;
+import org.digitalhps.storage.triplestoreimplementation.annotations.RDFType;
+import org.digitalhps.storage.triplestoreimplementation.annotations.RDFInstanceURL;
+
+@RDFType("test://relationEvent")
+@RDFInstanceURL("test://relationEvent/")
+public class RelationEvent implements IRelationEvent {
+
+ @RDFPredicate("test://has_source")
+ public String sourceReference;
+
+ @RDFPredicate("test://has_creator")
+ public String creator;
+
+ @RDFPredicate("test://has_creationDate")
+ public String creationDate;
+
+ @RDFPredicate("test://has_creationPlace")
+ public String creationPlace;
+
+ @RDFPredicate("test://has_creationPredecessors")
+ public RelationEvent[] predecessors;
+
+ @RDFPredicate("test://has_id") // FIXME das sollte eigentlich die uri der ressource im triplestore sein, daher kein predicate
+ public String id;
+
+ @RDFPredicate("test://has_relation")
+ public String relation;
+
+ @Override
+ public ISourceReference getSourceReference() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public IActor getCreator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getCreationDate() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getCreationPlace() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ICreationEvent[] getPredecessors() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public URI getId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public IRelation getRelation() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public IActor getRelationCreator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/exceptions/JSONToObjectTransformException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/exceptions/JSONToObjectTransformException.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,10 @@
+package org.digitalhps.storage.triplestoreimplementation.exceptions;
+
+public class JSONToObjectTransformException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 8370631682450250333L;
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/exceptions/JSONandClassMissmatchException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/exceptions/JSONandClassMissmatchException.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,5 @@
+package org.digitalhps.storage.triplestoreimplementation.exceptions;
+
+public class JSONandClassMissmatchException extends Exception {
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/exceptions/ObjectToJSONTransformException.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/exceptions/ObjectToJSONTransformException.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,10 @@
+package org.digitalhps.storage.triplestoreimplementation.exceptions;
+
+public class ObjectToJSONTransformException extends Exception {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = 564885965525175495L;
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/handler/events/CreationEvent.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/handler/events/CreationEvent.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,50 @@
+package org.digitalhps.storage.triplestoreimplementation.handler.events;
+
+import java.net.URI;
+import java.util.Date;
+
+import org.digitalhps.storage.objects.interfaces.elements.IActor;
+import org.digitalhps.storage.objects.interfaces.elements.ISourceReference;
+import org.digitalhps.storage.objects.interfaces.events.ICreationEvent;
+
+public class CreationEvent implements ICreationEvent {
+
+ public CreationEvent(){};
+
+ @Override
+ public URI getId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ISourceReference getSourceReference() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public IActor getCreator() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getCreationDate() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getCreationPlace() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ICreationEvent[] getPredecessors() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/handler/events/RelationEvents.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/handler/events/RelationEvents.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,251 @@
+/**
+ * Manage Relationsevents in the Triplestore
+ * @see {org.digitalhps.storage.objects.interfaces.events.IRelationEvent}
+ *
+ * @author dwinter
+ *
+ */
+
+package org.digitalhps.storage.triplestoreimplementation.handler.events;
+
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Calendar;
+
+import org.apache.log4j.Logger;
+import org.digitalhps.storage.triplestoreimplementation.annotations.RDFPredicate;
+import org.digitalhps.storage.triplestoreimplementation.annotations.RDFInstanceURL;
+import org.digitalhps.storage.triplestoreimplementation.annotations.RDFType;
+
+import org.digitalhps.storage.triplestoreimplementation.events.RelationEvent;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.JSONToObjectTransformException;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.JSONandClassMissmatchException;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.ObjectToJSONTransformException;
+import org.digitalhps.storage.triplestoreimplementation.utils.JSONTools;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.openrdf.repository.RepositoryException;
+import org.restlet.data.Form;
+import org.restlet.data.MediaType;
+import org.restlet.data.Status;
+import org.restlet.ext.json.JsonRepresentation;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.Get;
+import org.restlet.resource.Options;
+import org.restlet.resource.Post;
+import org.restlet.resource.ServerResource;
+
+
+import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException;
+import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler;
+import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler.Quadruple;
+
+
+public class RelationEvents extends ServerResource {
+
+ public static String RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+ private Logger logger = Logger.getRootLogger();
+
+ /**
+ * Erlaubt cross scripting bei Aufruf aus Javascript
+ * @param entity
+ */
+ @Options
+ public void doOptions(Representation entity) {
+ Form responseHeaders = (Form) getResponse().getAttributes().get("org.restlet.http.headers");
+ if (responseHeaders == null) {
+ responseHeaders = new Form();
+ getResponse().getAttributes().put("org.restlet.http.headers", responseHeaders);
+ }
+ responseHeaders.add("Access-Control-Allow-Origin", "*");
+ responseHeaders.add("Access-Control-Allow-Methods", "POST,OPTIONS,GET");
+ responseHeaders.add("Access-Control-Allow-Headers", "Content-Type");
+ responseHeaders.add("Access-Control-Allow-Credentials", "false");
+ responseHeaders.add("Access-Control-Max-Age", "60");
+ }
+
+
+ @Get("html")
+ public Representation getHTML(){
+ setStatus(Status.SERVER_ERROR_NOT_IMPLEMENTED);
+ Representation rep = new StringRepresentation("not implemented yet");
+ return rep;
+
+ }
+
+ @Post
+ public Representation doPost(Representation entity) {
+
+ if (entity.getMediaType().equals(MediaType.APPLICATION_JSON)){
+ return handleJSON(entity);
+ }
+ setStatus(Status.CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE);
+ return null;
+
+ }
+
+
+ public Representation handleJSON(Representation entity) {
+ JsonRepresentation retRep;
+ try {
+ retRep = new JsonRepresentation(entity);
+ } catch (IOException e) {
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ e.printStackTrace();
+ return null;
+ }
+
+
+ //RelationEvent re = new RelationEvent();
+ JSONObject jo;
+
+
+ try {
+ jo = retRep.getJsonObject();
+ } catch (JSONException e) {
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ e.printStackTrace();
+ return null;
+ }
+ RelationEvent re;
+ try {
+ re = (RelationEvent) JSONTools.createObject(RelationEvent.class, jo);
+ } catch (JSONToObjectTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ return null;
+ } catch (JSONandClassMissmatchException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ return null;
+ }
+
+
+
+ try {
+ writeEventToTripleStore(re, true);
+ } catch (TripleStoreHandlerException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ } catch (ObjectToJSONTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (RepositoryException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ JSONObject retObject;
+ try {
+ retObject = (JSONObject) JSONTools.transformToJson(re);
+ } catch (ObjectToJSONTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ return null;
+ }
+ return new JsonRepresentation(retObject);
+ }
+
+
+
+ public String writeEventToTripleStore(Object re, boolean forceCreation) throws TripleStoreHandlerException, ObjectToJSONTransformException, RepositoryException {
+
+ //FIXME implement force creation = false, dann sollte nur geprueft werden, ob es im Triplestore schone ein Object
+ //mit der id die im Object abgespeichert ist gibt.
+ // schon im triplestore
+
+ //TripleStoreHandler th = new TripleStoreHandler("XX", "YY", "ZZ");
+
+ if (re==null)
+ return null;
+ ArrayList quadruples = new ArrayList();
+
+ String instanceUrlBase=re.getClass().getAnnotation(RDFInstanceURL.class).value();
+ String type=re.getClass().getAnnotation(RDFType.class).value();
+
+
+ String instanceUrl=createRessourceURL(instanceUrlBase, "annots");
+
+ quadruples.add(new TripleStoreHandler.Quadruple(instanceUrl, RDF+"type", type, "file://xx"));
+
+ Class>cls = re.getClass();
+
+ Field[] fs=cls.getFields();
+
+ for(int i=0;i T = field.getType();
+ String fieldName=field.getName();
+ Object fieldValue;
+ try {
+ fieldValue = field.get(re);
+ } catch (IllegalArgumentException e) {
+ throw new ObjectToJSONTransformException();
+ } catch (IllegalAccessException e) {
+ throw new ObjectToJSONTransformException();
+ }
+
+ if (fieldValue==null)
+ continue;
+
+ //van only be string, an object or an array.
+ if (String.class.isInstance(fieldValue)){
+ quadruples.add(new TripleStoreHandler.LiteralQuadruple(instanceUrl, predicate, (String)fieldValue, "file://xx"));
+ } else if (!T.isArray()){
+ addToQuadruples(quadruples,instanceUrl,predicate,fieldValue);
+ } else {
+ for (int j=0;j quadruples,
+ String instanceUrl, String predicate, Object fieldValue) throws TripleStoreHandlerException, ObjectToJSONTransformException, RepositoryException {
+
+ //erzeuge oder hole url
+ String subInstanceUrl = writeEventToTripleStore(fieldValue,false);
+ quadruples.add(new TripleStoreHandler.Quadruple(instanceUrl, predicate, subInstanceUrl, "file://xx"));
+
+
+
+ }
+
+
+ /**
+ * Erzeuge eine urn aus der aktullen Zeit in millis
+ * @return
+ */
+ private String createRessourceURL(String urlBase,String prefix) {
+
+
+
+
+ Calendar cal = Calendar.getInstance();
+
+ long time = cal.getTimeInMillis();
+
+ return String.format("%s%s%s", urlBase,prefix,time);
+
+
+
+ }
+}
\ No newline at end of file
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/restlet/MyCallBackHandler.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/restlet/MyCallBackHandler.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,48 @@
+package org.digitalhps.storage.triplestoreimplementation.restlet;
+
+import java.io.IOException;
+
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.ConfirmationCallback;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.TextOutputCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+
+public class MyCallBackHandler implements CallbackHandler {
+
+
+ private String username;
+ private String password;
+
+ public MyCallBackHandler(String username, String password) {
+ this.username=username;
+ this.password=password;
+ }
+
+ @Override
+ public void handle(Callback[] callbacks) throws IOException,
+ UnsupportedCallbackException {
+ for (int i = 0; i < callbacks.length; i++) {
+ if (callbacks[i] instanceof TextOutputCallback) {
+
+ // do nothing
+ } else if (callbacks[i] instanceof NameCallback) {
+
+ NameCallback nc = (NameCallback)callbacks[i];
+ nc.setName(username);
+
+ } else if (callbacks[i] instanceof PasswordCallback) {
+
+ PasswordCallback nc = (PasswordCallback)callbacks[i];
+ nc.setPassword(password.toCharArray());
+ } else {
+ throw new UnsupportedCallbackException
+ (callbacks[i], "Unrecognized Callback");
+ }
+ }
+
+ }
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/restlet/RestServer.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/restlet/RestServer.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,172 @@
+package org.digitalhps.storage.triplestoreimplementation.restlet;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.security.auth.Subject;
+import javax.security.auth.login.Configuration;
+import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
+
+import org.apache.log4j.BasicConfigurator;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.digitalhps.storage.triplestoreimplementation.events.Main;
+import org.restlet.Application;
+import org.restlet.Context;
+import org.restlet.Request;
+import org.restlet.Response;
+import org.restlet.Restlet;
+import org.restlet.data.ChallengeScheme;
+import org.restlet.data.ClientInfo;
+import org.restlet.ext.jaas.JaasVerifier;
+import org.restlet.routing.Router;
+import org.restlet.security.ChallengeAuthenticator;
+import org.restlet.security.User;
+
+import com.sun.security.auth.login.ConfigFile;
+
+public class RestServer extends Application {
+
+ private ChallengeAuthenticator authenticator;
+
+
+ public RestServer(Context parentContext){
+ super(parentContext);
+
+ Logger rl = Logger.getRootLogger();
+ BasicConfigurator.configure();
+ rl.setLevel(Level.DEBUG);
+ }
+
+
+ /** Erzeuge einen Authenticator
+ * @return
+ */
+ private ChallengeAuthenticator createAuthenticator() {
+ Context context = getContext();
+ boolean optional = true;
+ ChallengeScheme challengeScheme = ChallengeScheme.HTTP_BASIC;
+ String realm = "Annotation Service";
+
+ JaasVerifier verifier = new JaasVerifier("BasicJaasAuthenticationApplication");
+
+
+ Configuration jaasConfig;
+ jaasConfig = createConfiguration();
+
+
+ verifier.setConfiguration(jaasConfig);
+ verifier.setUserPrincipalClassName("com.sun.security.auth.UserPrincipal");
+
+ ChallengeAuthenticator auth = new ChallengeAuthenticator(context, optional, challengeScheme, realm, verifier) {
+ @Override
+ protected boolean authenticate(Request request, Response response) {
+ if (request.getChallengeResponse() == null) {
+ return false;
+ } else {
+ return super.authenticate(request, response);
+ }
+ }
+ };
+
+ return auth;
+ }
+
+ /**
+ * Konfiguration fŸr den Authentificator in Jaas. Pfad zum JAAS-Konfigurationsfile liegt im Context-Parameter
+ * "de.mpiwg.itgroup.annotationManager.jaas.configFilePath".
+ * @return
+ */
+ protected Configuration createConfiguration() {
+ Configuration jaasConfig;
+ URI confUri;
+
+ Context context = getContext();
+ String configFilePath = context.getParameters().getFirstValue("org.digitalhps.storage.triplestoreimplementation.jaas.configFilePath");
+
+
+ try {
+ confUri = new URI(configFilePath);
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ confUri = null;
+ }
+
+ jaasConfig= new ConfigFile(confUri);
+ return jaasConfig;
+ }
+
+
+ /**
+ * Authentifiziere den Benutzer aus dem Request (BasicAuthenfication)
+ * @param request
+ * @param response
+ * @return
+ */
+ public boolean authenticate(Request request, Response response) {
+ if (!request.getClientInfo().isAuthenticated()) {
+ authenticator.challenge(response, false);
+ return false;
+ }
+
+ if(request.getClientInfo().getUser()==null) //FIXME sometimes ist authenticated true, but no user
+ {
+ authenticator.challenge(response, false);
+ return false;
+ }
+
+
+ return true;
+ }
+
+ /**
+ * Authentifiziere den Benutzer
+ *
+ * @param username
+ * @param password
+ * @param request
+ * @return
+ */
+ public boolean authenticate(String username, String password,Request request) {
+ LoginContext lc;
+
+ try {
+ Configuration conf = createConfiguration();
+
+ lc = new LoginContext("BasicJaasAuthenticationApplication", null, new MyCallBackHandler(username,password),conf);
+ lc.login();
+ } catch (LoginException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return false;
+ }
+
+ Subject subject = lc.getSubject();
+ ClientInfo clientInfo = new ClientInfo();
+ User user = new User(username);
+ clientInfo.setAuthenticated(true);
+ clientInfo.setUser(user);
+
+ request.setClientInfo(clientInfo);
+ return true;
+ }
+
+
+ public synchronized Restlet createInboundRoot(){
+
+ this.authenticator = createAuthenticator();
+
+ Router router = new Router(getContext());
+
+ router.attach("/",Main.class);
+
+
+ authenticator.setNext(router);
+ return authenticator;
+
+
+
+ }
+}
+
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/tests/EventsTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/tests/EventsTest.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,84 @@
+package org.digitalhps.storage.triplestoreimplementation.tests;
+
+
+import org.digitalhps.storage.triplestoreimplementation.events.CreationEvent;
+import org.digitalhps.storage.triplestoreimplementation.events.RelationEvent;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.JSONToObjectTransformException;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.JSONandClassMissmatchException;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.ObjectToJSONTransformException;
+import org.digitalhps.storage.triplestoreimplementation.handler.events.RelationEvents;
+import org.digitalhps.storage.triplestoreimplementation.utils.JSONTools;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.openrdf.repository.RepositoryException;
+import org.restlet.ext.json.JsonRepresentation;
+import org.restlet.representation.Representation;
+
+import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException;
+
+
+public class EventsTest {
+
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+ RelationEvents relEv = new RelationEvents();
+
+ CreationEvent ce = new CreationEvent();
+ System.out.println(ce.getId());
+ String source = "{\"sourceReference\":\"sr\"," +
+ " \"predecessors\":[{\"id\":\"1\"},{\"id\":\"1\"}] "+
+ "}";
+
+ System.out.println(source);
+ JSONObject map;
+ try {
+ map = new JSONObject(source);
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return;
+ }
+
+ Object ob;
+ try {
+ ob = JSONTools.createObject(RelationEvent.class, map);
+ } catch (JSONandClassMissmatchException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return;
+ } catch (JSONToObjectTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return;
+ }
+ Object ret;
+ try {
+ ret = JSONTools.transformToJson(ob);
+ } catch (ObjectToJSONTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return;
+ }
+
+ System.out.println(ret);
+ Representation example = new JsonRepresentation(map);
+ relEv.handleJSON(example);
+ System.out.println(relEv);
+
+ try {
+ relEv.writeEventToTripleStore(ob, false);
+ } catch (RepositoryException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (TripleStoreHandlerException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (ObjectToJSONTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+}
diff -r 000000000000 -r 33d1589a61a7 src/org/digitalhps/storage/triplestoreimplementation/utils/JSONTools.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/org/digitalhps/storage/triplestoreimplementation/utils/JSONTools.java Thu Dec 08 09:18:00 2011 +0100
@@ -0,0 +1,272 @@
+package org.digitalhps.storage.triplestoreimplementation.utils;
+
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.util.Iterator;
+
+import org.digitalhps.storage.triplestoreimplementation.exceptions.JSONToObjectTransformException;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.JSONandClassMissmatchException;
+import org.digitalhps.storage.triplestoreimplementation.exceptions.ObjectToJSONTransformException;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.restlet.data.Status;
+
+/**
+ * Tools zum Umwandlen von Java-Objekten in JSON und umgekehrt
+ *
+ * @author dwinter
+ *
+ */
+public class JSONTools {
+
+ /**
+ * @param inputObject Nimmt ein Java object und Ÿbersetzen des Felder des Objectes in JSON, dazu mŸssen die Felder "public" sein.
+ * @return JSONArray oder JSONObject je nach Type des inputObjectes (Arrays werden in Arrays Ÿbersetzt), Null wird in ein leeres JSONObject Ÿbersetzt.
+ * @throws ObjectToJSONTransformException
+ */
+ static public Object transformToJson(Object inputObject) throws ObjectToJSONTransformException {
+
+ if (inputObject==null) // special case, generate empty object.
+ return new JSONObject();
+
+ Object ret=null;
+ Class>cls = inputObject.getClass();
+
+
+ if (!cls.isArray()){ // kein Array
+
+ JSONObject retObject = new JSONObject();
+ Field[] fs=cls.getFields();
+
+ for(int i=0;i T = field.getType();
+ String fieldName=field.getName();
+
+
+ Object fieldValue;
+ try {
+ fieldValue = field.get(inputObject);
+ } catch (IllegalArgumentException e) {
+ throw new ObjectToJSONTransformException();
+ } catch (IllegalAccessException e) {
+ throw new ObjectToJSONTransformException();
+ }
+
+
+ //van only be string, an object or an array.
+ if (String.class.isInstance(fieldValue)){
+ try {
+ retObject.put(fieldName, (String)fieldValue);
+ } catch (JSONException e) {
+ throw new ObjectToJSONTransformException();
+ }
+
+ } else if (!T.isArray()) { //field is not an array}
+ JSONObject jsonsubObject = (JSONObject) transformToJson(fieldValue);
+
+ try {
+ retObject.put(fieldName, jsonsubObject);
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ } else if (T.isArray()){ // Feldwert ist ein Array
+ JSONArray ja = new JSONArray();
+ if (fieldValue!=null){
+
+ for (int j=0;j cls, Object jsonObject) throws JSONandClassMissmatchException, JSONToObjectTransformException {
+
+ Object newObject;
+
+ try {
+ newObject = cls.newInstance();
+ } catch (InstantiationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return null;
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return null;
+ }
+
+ if (JSONObject.class.isInstance(jsonObject)){
+
+ if (cls.isArray()){
+ throw new JSONandClassMissmatchException();
+ }
+
+ JSONObject jo = (JSONObject)jsonObject;
+
+
+ Iterator keys = jo.keys();
+ while (keys.hasNext()){
+ String key=(String) keys.next();
+
+
+
+ Field f;
+ try {
+ f = cls.getField(key);
+ } catch (SecurityException e) {
+ throw new JSONToObjectTransformException();
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace(); // Feld fehlt, dieses kann ignoriert werden.
+ continue;
+ }
+
+ Class> T = f.getType();
+ String name= T.getName();
+
+
+ //van only be string, an object or an array.
+ if (name.equals("java.lang.String")){
+ String value;
+ try {
+ value = jo.getString(key);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ throw new JSONToObjectTransformException();
+ }
+ try {
+ f.set(newObject,value);
+ } catch (IllegalArgumentException e) {
+ throw new JSONToObjectTransformException();
+ } catch (IllegalAccessException e) {
+ throw new JSONToObjectTransformException();
+ }
+ } else if (!T.isArray()) { // Feld ist kein Array und kein String}
+ JSONObject jsonsubObject;
+ try {
+ jsonsubObject = jo.getJSONObject(key);
+ } catch (JSONException e) {
+ throw new JSONToObjectTransformException();
+ }
+ Class> c = T.getClass();
+ Object newObject2=createObject(c,jsonsubObject);
+ try {
+ f.set(newObject, newObject2);
+ } catch (IllegalArgumentException e) {
+ throw new JSONToObjectTransformException();
+ } catch (IllegalAccessException e) {
+ throw new JSONToObjectTransformException();
+ }
+
+ } else if (T.isArray()){ // Feld is ein array
+ JSONArray ja;
+ Class> c = T.getComponentType();
+ Object objects;
+
+ int objectCounter=0;
+ try {
+ ja = jo.getJSONArray(key);
+ objects= Array.newInstance(c, ja.length());
+
+
+ } catch (JSONException e) {
+ throw new JSONToObjectTransformException();
+ }
+
+
+ for (int i=0;i