diff --git a/webapp/config/default.log4j.properties b/webapp/config/default.log4j.properties
index d0f36b7cf..ee1eb7d60 100644
--- a/webapp/config/default.log4j.properties
+++ b/webapp/config/default.log4j.properties
@@ -36,3 +36,6 @@ log4j.rootLogger=INFO, AllAppender
log4j.logger.org.apache.catalina=INFO
log4j.logger.edu.cornell.mannlib.vitro.webapp.ConfigurationProperties=INFO
log4j.logger.edu.cornell.mannlib.vitro.webapp.filestorage.updater.FileStorageUpdater=INFO
+
+log4j.logger.edu.cornell.mannlib.vitro.webapp.search.controller=DEBUG
+
diff --git a/webapp/config/web.xml b/webapp/config/web.xml
index bc0f7d4d1..abfc24005 100644
--- a/webapp/config/web.xml
+++ b/webapp/config/web.xml
@@ -1143,7 +1143,16 @@
primitiveRdfEdit
/edit/primitiveRdfEdit
-
+
+
+ primitiveRdfDelete
+ edu.cornell.mannlib.vitro.webapp.controller.edit.PrimitiveRdfDelete
+
+
+ primitiveRdfDelete
+ /edit/primitiveRdfDelete
+
+
fetch
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfDelete.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfDelete.java
new file mode 100644
index 000000000..fa06d65a1
--- /dev/null
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfDelete.java
@@ -0,0 +1,51 @@
+package edu.cornell.mannlib.vitro.webapp.controller.edit;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
+import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
+import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
+import edu.cornell.mannlib.vitro.webapp.utils.StringUtils;
+import freemarker.template.Configuration;
+
+public class PrimitiveRdfDelete extends PrimitiveRdfEdit {
+
+ private static final long serialVersionUID = 1L;
+ private static final Log log = LogFactory.getLog(PrimitiveRdfDelete.class);
+
+ protected void processRequest(VitroRequest vreq, HttpServletResponse response) {
+
+ String uriToDelete = vreq.getParameter("deletion");
+ if (StringUtils.isEmpty(uriToDelete)) {
+ doError(response, "No individual specified for deletion", 500);
+ return;
+ }
+
+ // Check permissions
+ // The permission-checking code should be inherited from superclass
+ boolean hasPermission = true;
+
+ if( !hasPermission ){
+ //if not okay, send error message
+ doError(response,"Insufficent permissions.",HttpStatus.SC_UNAUTHORIZED);
+ return;
+ }
+
+ WebappDaoFactory wdf = vreq.getWebappDaoFactory();
+ IndividualDao idao = wdf.getIndividualDao();
+ int result = idao.deleteIndividual(uriToDelete);
+ if (result == 1) {
+ doError(response, "Error deleting individual", 500);
+ }
+ }
+
+}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java
index 44563bcdd..a8adf577c 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEdit.java
@@ -4,11 +4,14 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit;
import java.io.IOException;
import java.io.StringReader;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.List;
import java.util.Map;
import java.util.Set;
+import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -25,6 +28,8 @@ import com.hp.hpl.jena.shared.Lock;
import edu.cornell.mannlib.vedit.beans.LoginFormBean;
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreeMarkerHttpServlet;
+import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao;
+import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
import edu.cornell.mannlib.vitro.webapp.dao.jena.DependentResourceDeleteJena;
import edu.cornell.mannlib.vitro.webapp.dao.jena.event.EditEvent;
import edu.cornell.mannlib.vitro.webapp.edit.n3editing.EditN3Utils;
@@ -32,34 +37,34 @@ import freemarker.template.Configuration;
public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
- @Override
- protected String getBody(VitroRequest vreq, Map body, Configuration config) {
-// boolean loggedIn = checkLoginStatus(request, response);
-// if( !loggedIn){
-// doError(response,"You must be logged in to use this servlet.",HttpStatus.SC_UNAUTHORIZED);
-// return;
-// }
- return mergeBodyToTemplate("primitiveRdfEdit.ftl",new HashMap(), config);
- }
+ @Override
+ protected String getBody(VitroRequest vreq, Map body, Configuration config) {
+// boolean loggedIn = checkLoginStatus(request, response);
+// if( !loggedIn){
+// doError(response,"You must be logged in to use this servlet.",HttpStatus.SC_UNAUTHORIZED);
+// return;
+// }
+ return mergeBodyToTemplate("primitiveRdfEdit.ftl",new HashMap(), config);
+ }
- @Override
- protected String getTitle(String siteName) {
- return "RDF edit";
- }
+ @Override
+ protected String getTitle(String siteName) {
+ return "RDF edit";
+ }
- @Override
- public void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
-
+ @Override
+ public void doPost(HttpServletRequest request,
+ HttpServletResponse response) throws ServletException, IOException {
+
VitroRequest vreq = new VitroRequest(request);
- boolean loggedIn = checkLoginStatus(request, response);
- if( !loggedIn){
- doError(response,"You must be logged in to use this servlet.",HttpStatus.SC_UNAUTHORIZED);
- return;
- }
-
+ boolean loggedIn = checkLoginStatus(request, response);
+ if( !loggedIn){
+ doError(response,"You must be logged in to use this servlet.",HttpStatus.SC_UNAUTHORIZED);
+ return;
+ }
+
// PolicyIface policy = RequestPolicyList.getPolicies( request );
//
// if( policy == null || ( policy instanceof PolicyList && ((PolicyList)policy).size() == 0 )){
@@ -80,149 +85,159 @@ public class PrimitiveRdfEdit extends FreeMarkerHttpServlet{
// return;
// }
+ processRequest(vreq, response);
+
+ }
+
+ protected void processRequest(VitroRequest vreq, HttpServletResponse response) {
/* Predefined values for RdfFormat are "RDF/XML",
* "N-TRIPLE", "TURTLE" (or "TTL") and "N3". null represents
* the default language, "RDF/XML". "RDF/XML-ABBREV" is a synonym for "RDF/XML" */
- String format = request.getParameter("RdfFormat");
- if( format == null )
- format = "N3";
- if ( ! ("N-TRIPLE".equals(format) || "TURTLE".equals(format) || "TTL".equals(format)
- || "N3".equals(format)|| "RDF/XML-ABBREV".equals(format) || "RDF/XML".equals(format) )){
- doError(response,"RdfFormat was not recoganized.",500);
- return;
- }
-
- //parse RDF
- Set additions= null;
- try {
- additions = parseRdfParam(request.getParameterValues("additions"),format);
- } catch (Exception e) {
- doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
- return;
- }
-
- Set retractions = null;
- try {
- retractions = parseRdfParam(request.getParameterValues("retractions"),format);
- } catch (Exception e) {
- doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
- return;
- }
-
- //check permissions
- //TODO: (bdc34)This is not yet implemented, must check the IDs against the policies for permissons before doing an edit!
- boolean hasPermission = true;
-
- if( !hasPermission ){
- //if not okay, send error message
- doError(response,"Insufficent permissions.",HttpStatus.SC_UNAUTHORIZED);
- }
-
- if( hasPermission ){
- String editorUri = EditN3Utils.getEditorUri(vreq,request.getSession(false),getServletContext());
- try {
- processChanges( additions, retractions, getWriteModel(request),getQueryModel(request), editorUri);
- } catch (Exception e) {
- doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR);
- }
- }
- }
-
- protected void processChanges(Set additions, Set retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
- Model a = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel();
- for(Model m : additions)
- a.add(m);
-
- Model r = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel();
- for(Model m : retractions)
- r.add(m);
-
- procesChanges(a,r,writeModel,queryModel,editorURI);
- }
-
- protected void procesChanges(Model additions, Model retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
- /*
- * Do a diff on the additions and retractions and then only add the delta to the jenaOntModel.
- */
- Model assertionsAdded = additions.difference( retractions );
- Model assertionsRetracted = retractions.difference( additions );
+ String format = vreq.getParameter("RdfFormat");
+ if( format == null )
+ format = "N3";
+ if ( ! ("N-TRIPLE".equals(format) || "TURTLE".equals(format) || "TTL".equals(format)
+ || "N3".equals(format)|| "RDF/XML-ABBREV".equals(format) || "RDF/XML".equals(format) )){
+ doError(response,"RdfFormat was not recognized.",500);
+ return;
+ }
+
+ //parse RDF
+ Set additions= null;
+ try {
+ additions = parseRdfParam(vreq.getParameterValues("additions"),format);
+ } catch (Exception e) {
+ doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
+ return;
+ }
+
+ Set retractions = null;
+ try {
+ retractions = parseRdfParam(vreq.getParameterValues("retractions"),format);
+ } catch (Exception e) {
+ doError(response,"Error reading RDF, set log level to debug for this class to get error messages in the server logs.",HttpStatus.SC_BAD_REQUEST);
+ return;
+ }
+
+
+ //check permissions
+ //TODO: (bdc34)This is not yet implemented, must check the IDs against the policies for permissons before doing an edit!
+ // rjy7 put policy check in separate method so subclasses can inherit
+ boolean hasPermission = true;
+
+ if( !hasPermission ){
+ //if not okay, send error message
+ doError(response,"Insufficent permissions.",HttpStatus.SC_UNAUTHORIZED);
+ return;
+ }
+
+ ServletContext sc = getServletContext();
+ String editorUri = EditN3Utils.getEditorUri(vreq, vreq.getSession(false), sc);
+ try {
+ processChanges( additions, retractions, getWriteModel(vreq),getQueryModel(vreq), editorUri);
+ } catch (Exception e) {
+ doError(response,e.getMessage(),HttpStatus.SC_INTERNAL_SERVER_ERROR);
+ }
- Model depResRetractions =
- DependentResourceDeleteJena
- .getDependentResourceDeleteForChange(assertionsAdded, assertionsRetracted, queryModel);
- assertionsRetracted.add( depResRetractions );
-
- Lock lock = null;
- try{
- lock = writeModel.getLock();
- lock.enterCriticalSection(Lock.WRITE);
- writeModel.getBaseModel().notifyEvent(new EditEvent(editorURI,true));
- writeModel.add( assertionsAdded );
- writeModel.remove( assertionsRetracted );
- }catch(Throwable t){
- throw new Exception("Error while modifying model \n" + t.getMessage());
- }finally{
- writeModel.getBaseModel().notifyEvent(new EditEvent(editorURI,false));
- lock.leaveCriticalSection();
}
-}
-
- /**
- * Convert the values from a parameters into RDF models.
- * @param parameters - the result of request.getParameters(String)
- * @param format - a valid format string for Jena's Model.read()
- * @return
- * @throws Exception
- */
- protected Set parseRdfParam(String[] parameters, String format) throws Exception{
- Set models = new HashSet();
- for( String param : parameters){
- try{
- StringReader reader = new StringReader(param);
- Model model = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel();
- model.read(reader, null, format);
- models.add(model);
- }catch(Error ex){
- log.error("Error reading RDF as " + format + " in " + param);
- throw new Exception("Error reading RDF, set log level to debug for this class to get error messages in the sever logs.");
- }
- }
- return models;
- }
-
- private void doError(HttpServletResponse response, String errorMsg,int httpstatus){
- response.setStatus(httpstatus);
- try {
- response.getWriter().write(errorMsg);
- } catch (IOException e) {
- log.debug("IO exception during output",e );
- }
- }
-
- protected OntModel getWriteModel(HttpServletRequest request){
- HttpSession session = request.getSession(false);
- if( session == null || session.getAttribute("jenaOntModel") == null )
- return (OntModel)getServletContext().getAttribute("jenaOntModel");
- else
- return (OntModel)session.getAttribute("jenaOntModel");
- }
-
- protected OntModel getQueryModel(HttpServletRequest request){
- return getWriteModel(request);
- }
-
- Log log = LogFactory.getLog(PrimitiveRdfEdit.class.getName());
+ protected void processChanges(Set additions, Set retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
+ Model a = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel();
+ for(Model m : additions)
+ a.add(m);
+
+ Model r = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel();
+ for(Model m : retractions)
+ r.add(m);
+
+ processChanges(a,r,writeModel,queryModel,editorURI);
+
+ }
+
+ protected void processChanges(Model additions, Model retractions, OntModel writeModel, OntModel queryModel, String editorURI ) throws Exception{
+ /*
+ * Do a diff on the additions and retractions and then only add the delta to the jenaOntModel.
+ */
+ Model assertionsAdded = additions.difference( retractions );
+ Model assertionsRetracted = retractions.difference( additions );
+
+ Model depResRetractions =
+ DependentResourceDeleteJena
+ .getDependentResourceDeleteForChange(assertionsAdded, assertionsRetracted, queryModel);
+ assertionsRetracted.add( depResRetractions );
+
+ Lock lock = null;
+ try{
+ lock = writeModel.getLock();
+ lock.enterCriticalSection(Lock.WRITE);
+ writeModel.getBaseModel().notifyEvent(new EditEvent(editorURI,true));
+ writeModel.add( assertionsAdded );
+ writeModel.remove( assertionsRetracted );
+ }catch(Throwable t){
+ throw new Exception("Error while modifying model \n" + t.getMessage());
+ }finally{
+ writeModel.getBaseModel().notifyEvent(new EditEvent(editorURI,false));
+ lock.leaveCriticalSection();
+ }
+ }
+
- static public boolean checkLoginStatus(HttpServletRequest request, HttpServletResponse response){
+ /**
+ * Convert the values from a parameters into RDF models.
+ * @param parameters - the result of request.getParameters(String)
+ * @param format - a valid format string for Jena's Model.read()
+ * @return
+ * @throws Exception
+ */
+ protected Set parseRdfParam(String[] parameters, String format) throws Exception{
+ Set models = new HashSet();
+ for( String param : parameters){
+ try{
+ StringReader reader = new StringReader(param);
+ Model model = com.hp.hpl.jena.rdf.model.ModelFactory.createDefaultModel();
+ model.read(reader, null, format);
+ models.add(model);
+ }catch(Error ex){
+ log.error("Error reading RDF as " + format + " in " + param);
+ throw new Exception("Error reading RDF, set log level to debug for this class to get error messages in the sever logs.");
+ }
+ }
+ return models;
+ }
+
+ protected void doError(HttpServletResponse response, String errorMsg,int httpstatus){
+ response.setStatus(httpstatus);
+ try {
+ response.getWriter().write(errorMsg);
+ } catch (IOException e) {
+ log.debug("IO exception during output",e );
+ }
+ }
+
+ protected OntModel getWriteModel(HttpServletRequest request){
+ HttpSession session = request.getSession(false);
+ if( session == null || session.getAttribute("jenaOntModel") == null )
+ return (OntModel)getServletContext().getAttribute("jenaOntModel");
+ else
+ return (OntModel)session.getAttribute("jenaOntModel");
+ }
+
+ protected OntModel getQueryModel(HttpServletRequest request){
+ return getWriteModel(request);
+ }
+
+ Log log = LogFactory.getLog(PrimitiveRdfEdit.class.getName());
+
+
+ static public boolean checkLoginStatus(HttpServletRequest request, HttpServletResponse response){
LoginFormBean loginBean = (LoginFormBean) request.getSession().getAttribute("loginHandler");
if (loginBean == null){
- return false;
- } else {
- return true;
+ return false;
+ } else {
+ return true;
}
- }
+ }
}
diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java
index 67004aaf4..d944e6c97 100644
--- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java
+++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/AutocompleteController.java
@@ -226,12 +226,16 @@ public class AutocompleteController extends FreeMarkerHttpServlet implements Sea
// Run the search term through the query parser so that it gets normalized in the same
// way the index is normalized.
- QueryParser queryParser = new QueryParser(Entity2LuceneDoc.term.NAME, analyzer);
- query = queryParser.parse(querystr + "*");
-
+// QueryParser queryParser = new QueryParser(Entity2LuceneDoc.term.NAMEUNSTEMMED, analyzer);
+// query = queryParser.parse(querystr + "*");
+
+ querystr = querystr.toLowerCase();
{
BooleanQuery boolQuery = new BooleanQuery();
- boolQuery.add(query, BooleanClause.Occur.MUST);
+ boolQuery.add(
+ new WildcardQuery(new Term(Entity2LuceneDoc.term.NAME, querystr + '*')),
+ BooleanClause.Occur.MUST);
+ //boolQuery.add(query, BooleanClause.Occur.MUST);
Object param = request.getParameter("type");
boolQuery.add( new TermQuery(
new Term(Entity2LuceneDoc.term.RDFTYPE,
diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEditTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEditTest.java
index 987790506..c1215997e 100644
--- a/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEditTest.java
+++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/controller/edit/PrimitiveRdfEditTest.java
@@ -11,10 +11,17 @@ import org.junit.Before;
import org.junit.Test;
import com.hp.hpl.jena.ontology.OntModel;
+import com.hp.hpl.jena.ontology.OntModelSpec;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;
+import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory;
+import edu.cornell.mannlib.vitro.webapp.dao.jena.WebappDaoFactoryJena;
+
public class PrimitiveRdfEditTest {
+
+ OntModel testModel;
+ WebappDaoFactory wdf;
private String testN3a =
" \"1000cm3\" ." +
@@ -25,18 +32,12 @@ public class PrimitiveRdfEditTest {
@Before
- public void setUp() throws Exception {
- }
+ public void setUp() throws Exception { }
@Test
public void testProcessChanges() throws Exception {
OntModel writeModel = ModelFactory.createOntologyModel();
-
- String testN3a =
- " \"1000cm3\" ." +
- " \"919cm3\" ." ;
- String testN3b =
- " ." ;
+
int totalStmts = 3;
PrimitiveRdfEdit pre = new PrimitiveRdfEdit();
diff --git a/webapp/web/templates/freemarker/body/primitiveRdfEdit.ftl b/webapp/web/templates/freemarker/body/primitiveRdfEdit.ftl
index 0bc4d9612..ed34c67a2 100644
--- a/webapp/web/templates/freemarker/body/primitiveRdfEdit.ftl
+++ b/webapp/web/templates/freemarker/body/primitiveRdfEdit.ftl
@@ -3,11 +3,16 @@