# 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")); + + Classcls = 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; + Classcls = 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