# HG changeset patch
# User dwinter
# Date 1325504548 -3600
# Node ID aae47a713589ee9b88524b571996a982d5c55083
# Parent dfd72ea936ffec5302d2b2cb59d17f6c8509ce9d
editing
diff -r dfd72ea936ff -r aae47a713589 .classpath
--- a/.classpath Thu Dec 29 15:19:29 2011 +0100
+++ b/.classpath Mon Jan 02 12:42:28 2012 +0100
@@ -12,6 +12,7 @@
+
diff -r dfd72ea936ff -r aae47a713589 .settings/org.eclipse.wst.common.component
--- a/.settings/org.eclipse.wst.common.component Thu Dec 29 15:19:29 2011 +0100
+++ b/.settings/org.eclipse.wst.common.component Mon Jan 02 12:42:28 2012 +0100
@@ -12,9 +12,6 @@
uses
-
- uses
-
uses
@@ -135,6 +132,15 @@
uses
+
+ uses
+
+
+ uses
+
+
+ uses
+
diff -r dfd72ea936ff -r aae47a713589 libs/org.json.jar
Binary file libs/org.json.jar has changed
diff -r dfd72ea936ff -r aae47a713589 libs/org.restlet.ext.jaas.jar
Binary file libs/org.restlet.ext.jaas.jar has changed
diff -r dfd72ea936ff -r aae47a713589 libs/org.restlet.ext.json.jar
Binary file libs/org.restlet.ext.json.jar has changed
diff -r dfd72ea936ff -r aae47a713589 src/de/mpiwg/itgroup/metaDataManagerRestlet/RestServer.java
--- a/src/de/mpiwg/itgroup/metaDataManagerRestlet/RestServer.java Thu Dec 29 15:19:29 2011 +0100
+++ b/src/de/mpiwg/itgroup/metaDataManagerRestlet/RestServer.java Mon Jan 02 12:42:28 2012 +0100
@@ -1,19 +1,33 @@
package de.mpiwg.itgroup.metaDataManagerRestlet;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.login.Configuration;
+
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
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.ext.jaas.JaasVerifier;
import org.restlet.routing.Router;
import org.restlet.routing.Template;
import org.restlet.routing.TemplateRoute;
+import org.restlet.security.ChallengeAuthenticator;
+
+import com.sun.security.auth.login.ConfigFile;
import de.mpiwg.itgroup.metaDataManagerRestlet.pid.PIDcreator;
import de.mpiwg.itgroup.metaDataManagerRestlet.ui.GeneralInfo;
import de.mpiwg.itgroup.metaDataManagerRestlet.ui.SearchPersons;
import de.mpiwg.itgroup.metadataManager.indexMeta.server.IndexMetaProvider;
+import de.mpiwg.itgroup.nimanager.edit.Editor;
import de.mpiwg.itgroup.nimanager.persons.PersonByNameService;
import de.mpiwg.itgroup.nimanager.persons.PersonByIDService;
import de.mpiwg.itgroup.nimanager.persons.PersonListService;
@@ -34,7 +48,74 @@
}
+
+ private ChallengeAuthenticator authenticator;
+ private CallbackHandler callbackHandler;
+
+ /** 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");
+ //JaasVerifier verifier = new JaasVerifier("DummyAuthentication");
+
+ 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("de.mpiwg.itgroup.jaas.configFilePath");
+
+
+ try {
+ confUri = new URI(configFilePath);
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ confUri = null;
+ }
+
+ jaasConfig= new ConfigFile(confUri);
+ return jaasConfig;
+ }
+
+
+
+
+
public synchronized Restlet createInboundRoot(){
+ this.authenticator = createAuthenticator();
+
Router router = new Router(getContext());
router.attach("/",GeneralInfo.class);
@@ -45,11 +126,38 @@
router.attach("/person/id/{personId}",PersonService.class);
router.attach("/person/id/{personId}/{graphId}",PersonService.class);
router.attach("/ids",PersonByIDService.class);
+ router.attach("/edit",Editor.class);
TemplateRoute route = router.attach("/indexMeta", IndexMetaProvider.class);
route.setMatchingMode(Template.MODE_STARTS_WITH);
+ authenticator.setNext(router);
+ return authenticator;
+
+
- return router;
}
+
+ /**
+ * 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;
+ }
+
}
diff -r dfd72ea936ff -r aae47a713589 src/de/mpiwg/itgroup/nimanager/edit/Editor.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/de/mpiwg/itgroup/nimanager/edit/Editor.java Mon Jan 02 12:42:28 2012 +0100
@@ -0,0 +1,316 @@
+package de.mpiwg.itgroup.nimanager.edit;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+import org.apache.log4j.lf5.util.StreamUtils;
+import org.openrdf.model.Statement;
+import org.openrdf.repository.RepositoryException;
+import org.openrdf.repository.RepositoryResult;
+import org.restlet.Context;
+import org.restlet.data.ClientInfo;
+import org.restlet.data.Form;
+import org.restlet.data.MediaType;
+import org.restlet.data.Status;
+import org.restlet.engine.component.ChildContext;
+import org.restlet.representation.Representation;
+import org.restlet.representation.StringRepresentation;
+import org.restlet.resource.Get;
+import org.restlet.resource.Post;
+import org.restlet.resource.ServerResource;
+import org.restlet.security.User;
+
+import de.mpiwg.itgroup.metaDataManagerRestlet.RestServer;
+import de.mpiwg.itgroup.triplestoremanager.exceptions.TripleStoreHandlerException;
+import de.mpiwg.itgroup.triplestoremanager.owl.MetaDataHandler;
+import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler;
+import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler.LiteralQuadruple;
+import de.mpiwg.itgroup.triplestoremanager.owl.TripleStoreHandler.Quadruple;
+import edu.stanford.smi.protegex.owl.model.impl.DefaultRDFProperty;
+import edu.stanford.smi.protege.model.DefaultCls;
+/**
+ * @author dwinter
+ *
+ * Edit an Entity defined by OWL modell
+ */
+public class Editor extends ServerResource {
+
+ private String NAMED_ENTITIES_ONTOLOGIE_URL = "http://ontologies.mpiwg-berlin.mpg.de/authorities/namedIdentities";
+ private String VIRTUOSO_PW;
+ private String VIRTUOSO_USER;
+ private String virtuoso_server_url;
+ private String TRIPLE_INDEX_PATH;
+ private Logger rl = Logger.getRootLogger();
+ private MetaDataHandler mh;
+ private TripleStoreHandler th;
+ private String editGraph="file:///personEdits.rdf";
+
+
+ public Editor (){
+ ChildContext context = (ChildContext)Context.getCurrent();
+ virtuoso_server_url = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.virtuoso.url");
+ VIRTUOSO_PW = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.virtuoso.pw");
+ VIRTUOSO_USER = context.getParameters().getFirstValue("de.mpwig.itgroup.personSearch.virtuoso.user");
+ rl.setLevel(Level.DEBUG);
+ try {
+ th = TripleStoreHandler.getInstance(virtuoso_server_url, VIRTUOSO_USER, VIRTUOSO_PW);
+
+ //th = new TripleStoreHandler(virtuoso_server_url, VIRTUOSO_USER, VIRTUOSO_PW);
+ } catch (TripleStoreHandlerException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ mh = MetaDataHandler.getInstance();
+ }
+
+ public Editor(String serverUrl,String User, String PW){
+ virtuoso_server_url = serverUrl;
+ VIRTUOSO_PW = PW;
+ VIRTUOSO_USER = User;
+
+ try {
+ th = TripleStoreHandler.getInstance(virtuoso_server_url, VIRTUOSO_USER, VIRTUOSO_PW);
+ //th = new TripleStoreHandler(virtuoso_server_url, VIRTUOSO_USER, VIRTUOSO_PW);
+ } catch (TripleStoreHandlerException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ mh = MetaDataHandler.getInstance();
+ }
+ /**
+ * Hole alle Properties eines Instance wie definiert in OWL.
+ * @param instance
+ * @return
+ */
+ private HashMap getProperties(String instance, List NSFilter){
+ RepositoryResult stmts;
+ HashMap retMap = new HashMap();
+ try {
+ stmts= th.getStatements(instance, "http://www.w3.org/1999/02/22-rdf-syntax-ns#type", null);
+ } catch (RepositoryException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return null;
+ }
+ try {
+ while(stmts.hasNext()){
+ Statement stmt = stmts.next();
+ addPropsOfType(retMap,stmt.getObject().stringValue(),instance, NSFilter);
+ }
+ } catch (RepositoryException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return null;
+ }
+
+
+ return retMap;
+ }
+ private void addPropsOfType(HashMap retMap,
+ String cls, String instance, List NSfilter) {
+
+// Set props = mh.getAssociatedPropsForClass(cls);
+// Iterator propsIt = props.iterator();
+// while (propsIt.hasNext()){
+// Object prop = propsIt.next();
+//
+//
+// }
+ Collection props = mh.getAssociatedPropsForClass(cls);
+
+ // filter namespaces
+ if (NSfilter!=null){
+
+ Object[] propsCopy = props.toArray();
+ for (Object prop:propsCopy){
+ if (DefaultRDFProperty.class.isInstance(prop)){
+ DefaultRDFProperty rdfProp = (DefaultRDFProperty)prop;
+ rl.debug(rdfProp.getNamespace());
+ if (!NSfilter.contains(rdfProp.getNamespace())){ // nicht im filter
+ props.remove(prop);
+ }
+ }
+ }
+ }
+
+ Map newProps;
+ try {
+ newProps = th.getJenaRDFValues(props, instance, mh.getOwlModel(),true);
+ } catch (RepositoryException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return;
+ }
+
+ retMap.putAll(newProps);
+
+
+ }
+
+ @Post
+ public Representation postHTML(Representation entity){
+ User user = handleBasicAuthentification(entity);
+ if (user==null){
+ setStatus(Status.CLIENT_ERROR_UNAUTHORIZED);
+ return null;
+ }
+
+ Form form = new Form(entity);
+
+ String id = form.getFirstValue("id");
+ if (id==null){
+ setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
+ return new StringRepresentation("Parameter ID missing");
+ }
+
+ String type = form.getFirstValue("type");
+ if (type==null){
+ setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
+ return new StringRepresentation("Parameter type missing");
+ }
+
+
+ ArrayList quads = new ArrayList();
+ ArrayList deleteQuads = new ArrayList();
+ Map formMap = form.getValuesMap();
+ for (String key: formMap.keySet()){
+ if (isDataTypeProperty(key,type)){
+ String value=formMap.get(key);
+
+ //remove white space
+ value=StringUtils.stripEnd(value, null);
+ value=StringUtils.stripStart(value, null);
+
+ if (value!=null && !value.equals("")){ //not empty
+ deleteQuads.add(new LiteralQuadruple(id, key, null, editGraph));
+ quads.add(new LiteralQuadruple(id, key, formMap.get(key), editGraph));
+ }
+ }
+ }
+ try {
+ th.remove(deleteQuads);
+ th.write(quads);
+ } catch (RepositoryException e) {
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ e.printStackTrace();
+ return null;
+ } catch (TripleStoreHandlerException e) {
+ setStatus(Status.SERVER_ERROR_INTERNAL);
+ e.printStackTrace();
+ return null;
+ }
+
+ return new StringRepresentation("written");
+
+ }
+
+ /**
+ * Checks if the
+ * @param key
+ * @param value
+ * @return
+ */
+ private boolean isDataTypeProperty(String key,String type) {
+
+
+ Collection props = mh.getAssociatedPropsForClass(type);
+
+
+ Object[] propsCopy = props.toArray();
+ for (Object prop:propsCopy){
+ if (DefaultRDFProperty.class.isInstance(prop)){
+ DefaultRDFProperty rdfProp = (DefaultRDFProperty)prop;
+ rl.debug(rdfProp.getNamespace());
+ if (rdfProp.getName().equals(key)){
+ rl.debug(rdfProp);
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+
+ @Get("html")
+ public Representation getHTML(Representation entity){
+ Form form = getRequest().getResourceRef().getQueryAsForm();
+
+
+ String id =form.getValuesMap().get("id");
+ try {
+ id = URLDecoder.decode(id, "utf-8");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ e.printStackTrace();
+ setStatus(Status.SERVER_ERROR_INTERNAL, "REPOSITORY ERROR");
+ return new StringRepresentation(
+ "Unsupported encoding",
+ MediaType.TEXT_HTML);
+
+ }
+ id=StringUtils.stripEnd(id, null);
+ id=StringUtils.stripStart(id, null);
+
+ ArrayList NSFilter = new ArrayList();
+ NSFilter.add("http://xmlns.com/foaf/0.1/"); // only foaf
+ HashMap props = getProperties(id, NSFilter);
+
+
+ ArrayList NSFilterRDF = new ArrayList();
+ NSFilterRDF.add("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); // only foaf
+ HashMap propsRDF = getProperties(id, NSFilterRDF);
+
+ String RDFtype = ((DefaultCls)(propsRDF.get("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"))).getName();
+
+
+ String retString="";
+ return new StringRepresentation(retString,MediaType.TEXT_HTML);
+
+ }
+
+
+ private User handleBasicAuthentification(Representation entity) {
+ RestServer restServer = (RestServer) getApplication();
+ if (!restServer.authenticate(getRequest(), getResponse())) {
+ // Not authenticated
+ return null;
+ }
+
+ ClientInfo ci = getRequest().getClientInfo();
+ rl.debug(ci);
+ return getRequest().getClientInfo().getUser();
+
+ }
+
+ public static void main(String args[]) {
+ Logger.getRootLogger().setLevel(Level.DEBUG);
+ Editor ed = new Editor("jdbc:virtuoso://virtuoso.mpiwg-berlin.mpg.de:1111","dba","wa55er");
+ ArrayList NSFilter = new ArrayList();
+ NSFilter.add("http://xmlns.com/foaf/0.1/"); // only foaf
+ HashMap props = ed.getProperties("http://ontologies.mpiwg-berlin.mpg.de/tempObjects/person/370868",NSFilter);
+ System.out.println(props);
+
+ }
+}