diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/EditLiteral.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/EditLiteral.java index c7d2c383e..3e2dc324f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/EditLiteral.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/EditLiteral.java @@ -5,10 +5,10 @@ package edu.cornell.mannlib.vitro.webapp.edit; import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.datatypes.RDFDatatype; import com.hp.hpl.jena.graph.Node;/** - * bdc34: I needed to have a representation of a rdf literal for + * bdc34: I needed to have a representation of a RDF literal for * editing. Jena seems to have a Model associated with the literals and - * has deprecated the creation of simple Literals as if they were data - * structures. So this code was writen. + * has depreciated the creation of simple Literals as if they were data + * structures. So this code was written. * * THESE MAY NOT BE USED AS LITERALS WITH THE JENA LIBRARY */ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationVTwo.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationVTwo.java index d73c5969b..b2b465b7f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationVTwo.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationVTwo.java @@ -93,14 +93,17 @@ public class EditConfigurationVTwo { /** When this is a DataPropertyStmt edit, the object is not used, the * DataPropertyStatement is retrieved using the subject, predicate and the * datapropKey. When this edit is for a ObjectPropertyStmt, - * object is the uri without the quoting < or >. + * object is the URI, it has no quoting or < or >. */ String object; + + /** + * This can be the variable name for the object of a statement in + * a object property or data property form. + */ String varNameForObject; Integer datapropKey=null; - String datapropValue; - /** urlPatternToReturnTo is the URL to use as the servlet to return to. * Usually it is "/individual" and entityToReturnTo will be added as a @@ -194,8 +197,7 @@ public class EditConfigurationVTwo { editConfig.setVarNameForObject(this.getVarNameForObject()); editConfig.setDatapropKey(this.getDatapropKey()); - //original set datapropValue, which in this case would be empty string but no way here - editConfig.setDatapropValue(this.datapropValue); + editConfig.setUrlPatternToReturnTo(this.getUrlPatternToReturnTo()); //n3 required @@ -686,11 +688,6 @@ public class EditConfigurationVTwo { this.datapropKey = datapropKey; } - //to allow for external setting - public void setDatapropValue(String datapropValue) { - this.datapropValue = datapropValue; - } - public String getSubjectUri() { return subjectUri; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java index c0beb70a5..c26cd7d2f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/ProcessRdfForm.java @@ -321,6 +321,7 @@ public class ProcessRdfForm { List optionalAsserts, List requiredRetracts, List optionalRetracts) { if( !log.isDebugEnabled() ) return; + log.debug(msg); logSubstitueN3( msg, requiredAsserts, "required assertions"); logSubstitueN3( msg, optionalAsserts, "optional assertions"); logSubstitueN3( msg, requiredRetracts, "required retractions"); @@ -328,7 +329,7 @@ public class ProcessRdfForm { } private void logSubstitueN3(String msg, List n3, String label){ - if( n3 == null) return; + if( n3 == null || n3.size() == 0) return; String out = label + ":\n"; for( String str : n3 ){ out += " " + str + "\n"; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDataPropertyFormGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDataPropertyFormGenerator.java index 6e7295feb..bea9a6984 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDataPropertyFormGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDataPropertyFormGenerator.java @@ -91,10 +91,13 @@ public class DefaultDataPropertyFormGenerator extends BaseEditConfigurationGener String subjectUri = editConfiguration.getSubjectUri(); String predicateUri = editConfiguration.getPredicateUri(); - Integer dataHash = editConfiguration.getDatapropKey(); + Integer dataHash = editConfiguration.getDatapropKey(); + + if( predicateUri == null ) + throw new Error("predicateUri was null"); DataProperty dataproperty = dataPropertyDao.getDataPropertyByURI( predicateUri ); - if( dataproperty == null ) + if( dataproperty == null && ! VitroVocabulary.LABEL.equals( predicateUri )) throw new Error("could not get data property for " + predicateUri); DataPropertyStatement dps = null; @@ -105,32 +108,46 @@ public class DefaultDataPropertyFormGenerator extends BaseEditConfigurationGener if (dps==null){ throw new Error("No match to existing data property \""+predicateUri+"\" statement for subject \""+subjectUri+"\" via key "+dataHash); }else{ - //Put data property statement's literal in scope //TODO: Check if multiple statements might affect this implementation? - editConfiguration.addLiteralInScope(literalVar, new EditLiteral(dps.getData(),dps.getDatatypeURI(), dps.getLanguage()) ); - - String statementDataType = null; - String statementLang = null; - - statementDataType = dps.getDatatypeURI(); - if( statementDataType == null ){ - log.debug("no range datatype uri set on data property statement when property's range datatype is "+dataproperty.getRangeDatatypeURI()+" in DefaultDataPropertyFormGenerator"); - } else { - log.debug("range datatype uri of ["+statementDataType+"] on data property statement in DefaultDataPropertyFormGenerator"); - } - statementLang = dps.getLanguage(); - if( statementLang == null ) { - log.debug("no language attribute on data property statement in DefaultDataPropertyFormGenerator"); - }else{ - log.debug("language attribute of ["+statementLang+"] on data property statement in DefaultDataPropertyFormGenerator"); - } - - + editConfiguration.addLiteralInScope( + editConfiguration.getVarNameForObject(), + new EditLiteral(dps.getData(),dps.getDatatypeURI(), dps.getLanguage()) ); + + dataTypeDebug( dps, dataproperty ); } } } + + + private static void dataTypeDebug(DataPropertyStatement dps, + DataProperty dataproperty) { + if( dps == null ) + return; + + String statementDataType = null; + String statementLang = null; + + statementLang = dps.getLanguage(); + if( statementLang == null ) { + log.debug("no language attribute on data property statement in DefaultDataPropertyFormGenerator"); + }else{ + log.debug("language attribute of ["+statementLang+"] on data property statement in DefaultDataPropertyFormGenerator"); + } + + if( dataproperty == null ) + return; + + statementDataType = dps.getDatatypeURI(); + if( statementDataType == null ){ + log.debug("no range datatype uri set on data property statement when property's range datatype is "+dataproperty.getRangeDatatypeURI()+" in DefaultDataPropertyFormGenerator"); + } else { + log.debug("range datatype uri of ["+statementDataType+"] on data property statement in DefaultDataPropertyFormGenerator"); + } + } + + } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDeleteGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDeleteGenerator.java index 9f2a777e2..bf261cb34 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDeleteGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DefaultDeleteGenerator.java @@ -130,8 +130,6 @@ public class DefaultDeleteGenerator implements EditConfigurationGenerator { private void processDataPropForm(VitroRequest vreq, EditConfigurationVTwo editConfiguration) { //set data prop value, data prop key str, editConfiguration.setDatapropKey( EditConfigurationUtils.getDataHash(vreq) ); - //original set datapropValue, which in this case would be empty string but no way here - editConfiguration.setDatapropValue(""); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java index 2f26a3817..4330e0614 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/RDFSLabelGenerator.java @@ -47,19 +47,13 @@ public class RDFSLabelGenerator implements EditConfigurationGenerator { private Log log = LogFactory.getLog(DefaultObjectPropertyFormGenerator.class); private String subjectUri = null; - private String predicateUri = null; - private String datapropKeyStr= null; - private int dataHash = 0; - private DataPropertyStatement dps = null; + private String predicateUri = null; + private Integer dataHash = null; + private String literalName = "label"; - + private String template = "rdfsLabelForm.ftl"; - private static HashMap defaultsForXSDtypes ; - static { - defaultsForXSDtypes = new HashMap(); - //defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","2001-01-01T12:00:00"); - defaultsForXSDtypes.put("http://www.w3.org/2001/XMLSchema#dateTime","#Unparseable datetime defaults to now"); - } + @Override public EditConfigurationVTwo getEditConfiguration(VitroRequest vreq, HttpSession session) { //Check if an edit configuration exists and return that, otherwise create a new one @@ -145,18 +139,13 @@ public class RDFSLabelGenerator implements EditConfigurationGenerator { private void initDataParameters(VitroRequest vreq, HttpSession session) { - dataHash = EditConfigurationUtils.getDataHash(vreq); - dps = EditConfigurationUtils.getDataPropertyStatement(vreq, session, dataHash, predicateUri); + dataHash = EditConfigurationUtils.getDataHash(vreq); } private void processDataPropForm(VitroRequest vreq, EditConfigurationVTwo editConfiguration) { //set data prop value, data prop key str, editConfiguration.setDatapropKey( EditConfigurationUtils.getDataHash(vreq) ); - editConfiguration.setVarNameForObject(literalName); - - //original set datapropValue, which in this case would be empty string but no way here - editConfiguration.setDatapropValue(""); - editConfiguration.setUrlPatternToReturnTo("/entity"); + editConfiguration.setVarNameForObject(literalName); } //Get N3 required @@ -333,10 +322,9 @@ public class RDFSLabelGenerator implements EditConfigurationGenerator { private void prepareForUpdate(VitroRequest vreq, HttpSession session, EditConfigurationVTwo editConfiguration) { //Here, retrieve model from Model model = (Model) session.getServletContext().getAttribute("jenaOntModel"); - if(datapropKeyStr != null && datapropKeyStr.trim().length() > 0 ) { - editConfiguration.prepareForDataPropUpdate(model, vreq.getWebappDaoFactory().getDataPropertyDao()); + if( editConfiguration.isDataPropertyUpdate() ){ + editConfiguration.prepareForDataPropUpdate(model, vreq.getWebappDaoFactory().getDataPropertyDao()); } - } } diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwoTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwoTest.java new file mode 100644 index 000000000..fcf524345 --- /dev/null +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/BasicValidationVTwoTest.java @@ -0,0 +1,47 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo; + + +import java.util.Collections; + +import junit.framework.Assert; + +import org.junit.Test; + +public class BasicValidationVTwoTest { + + + @SuppressWarnings("unchecked") + @Test + public void testHttpUrlValidate() { + BasicValidationVTwo bv = new BasicValidationVTwo(Collections.EMPTY_MAP); + String res; + res = bv.validate("httpUrl", "http://example.com/index"); + Assert.assertEquals(res, BasicValidationVTwo.SUCCESS); + + res = bv.validate("httpUrl", "http://example.com/index?bogus=skjd%20skljd&something=sdkf"); + Assert.assertEquals(res, BasicValidationVTwo.SUCCESS); + + res = bv.validate("httpUrl", "http://example.com/index#2.23?bogus=skjd%20skljd&something=sdkf"); + Assert.assertEquals(res, BasicValidationVTwo.SUCCESS); + } + + @SuppressWarnings("unchecked") + @Test + public void testEmptyValidate(){ + BasicValidationVTwo bv = new BasicValidationVTwo(Collections.EMPTY_MAP); + + Assert.assertEquals( + bv.validate("nonempty", null) + , BasicValidationVTwo.REQUIRED_FIELD_EMPTY_MSG); + + + Assert.assertEquals( + bv.validate("nonempty", "") + , BasicValidationVTwo.REQUIRED_FIELD_EMPTY_MSG); + + Assert.assertEquals( + bv.validate("nonempty", "some value") + , BasicValidationVTwo.SUCCESS); + } +} diff --git a/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtilsTest.java b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtilsTest.java new file mode 100644 index 000000000..7e66eae4a --- /dev/null +++ b/webapp/test/edu/cornell/mannlib/vitro/webapp/edit/n3editing/VTwo/EditConfigurationUtilsTest.java @@ -0,0 +1,36 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ +package edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo; + +import junit.framework.Assert; + +import org.junit.Before; +import org.junit.Test; + +import stubs.javax.servlet.http.HttpServletRequestStub; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; + +public class EditConfigurationUtilsTest { + + @Before + public void setUp() throws Exception { + } + + @Test + public void testGetEditKey() { + HttpServletRequestStub req = new HttpServletRequestStub(); + req.addParameter("datapropKey", "2343"); + + Integer hash = EditConfigurationUtils.getDataHash(new VitroRequest(req)); + Assert.assertNotNull(hash); + Assert.assertEquals(new Integer(2343), hash); + + + req = new HttpServletRequestStub(); + + hash = EditConfigurationUtils.getDataHash(new VitroRequest(req)); + Assert.assertNull( hash); + + + } + +} diff --git a/webapp/web/edit/editDatapropStmtRequestDispatch.jsp b/webapp/web/edit/editDatapropStmtRequestDispatch.jsp index 432e0372e..65c7f56d2 100644 --- a/webapp/web/edit/editDatapropStmtRequestDispatch.jsp +++ b/webapp/web/edit/editDatapropStmtRequestDispatch.jsp @@ -121,7 +121,7 @@ DataPropertyStatement dps = null; if( dataHash != 0) { Model model = (Model)application.getAttribute("jenaOntModel"); - dps = RdfLiteralHash.getPropertyStmtByHash(subject, predicateUri, dataHash, model); + dps = RdfLiteralHash.getPropertyStmtByHash(subject.getURI(), predicateUri, dataHash, model); if (dps==null) { log.error("No match to existing data property \""+predicateUri+"\" statement for subject \""+subjectUri+"\" via key "+datapropKeyStr); diff --git a/webapp/web/edit/processDatapropRdfForm.jsp b/webapp/web/edit/processDatapropRdfForm.jsp index bb5c3f59f..82ac534d3 100644 --- a/webapp/web/edit/processDatapropRdfForm.jsp +++ b/webapp/web/edit/processDatapropRdfForm.jsp @@ -374,7 +374,7 @@ and set a flag in the request to indicate "back button confusion" Model model = (Model)application.getAttribute("jenaOntModel"); int dpropHash = Integer.parseInt(editConfig.getDatapropKey()); - DataPropertyStatement dps = RdfLiteralHash.getPropertyStmtByHash(subject, editConfig.getPredicateUri(), dpropHash, model); + DataPropertyStatement dps = RdfLiteralHash.getPropertyStmtByHash(subject.getURI(), editConfig.getPredicateUri(), dpropHash, model); if (dps != null) return false;