diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java index f8e01c112..c4ec9d8bd 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/FrontEndEditingUtils.java @@ -5,6 +5,11 @@ package edu.cornell.mannlib.vitro.webapp.utils; import java.util.Arrays; import java.util.List; +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import com.hp.hpl.jena.rdf.model.Literal; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.RDFNode; @@ -13,10 +18,14 @@ import com.hp.hpl.jena.rdf.model.StmtIterator; import com.hp.hpl.jena.vocabulary.XSD; import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; +import edu.cornell.mannlib.vitro.webapp.dao.jena.ObjectPropertyDaoJena; public class FrontEndEditingUtils { + private static final Log log = LogFactory.getLog(FrontEndEditingUtils.class); + // NB List includes only those properties currently editable from the front end. private static final List VITRO_NS_DATA_PROPS = Arrays.asList(VitroVocabulary.BLURB, VitroVocabulary.CITATION, @@ -32,7 +41,9 @@ public class FrontEndEditingUtils { VitroVocabulary.PRIMARY_LINK ); - + public static enum EditMode { + ADD, EDIT, REPAIR, ERROR; + } public static String getVitroNsPropDatatypeUri(String propName) { //Resource datatype = propName == TIMEKEY ? XSD.dateTime : XSD.xstring; //return datatype.getURI(); @@ -94,5 +105,31 @@ public class FrontEndEditingUtils { return value; } + + /* Determine whether a property editing form is in add, edit, or repair mode. */ + public static EditMode getEditMode(HttpServletRequest request, String relatedPropertyUri) { + EditMode mode = EditMode.ADD; + Individual obj = (Individual)request.getAttribute("object"); + if( obj != null){ + List stmts = obj.getObjectPropertyStatements(relatedPropertyUri); + if( stmts != null){ + if( stmts.size() > 1 ){ + mode = EditMode.ERROR; // Multiple roleIn statements, yuck. + log.debug("Multiple statements found for property " + relatedPropertyUri + ". Setting edit mode to ERROR."); + }else if( stmts.size() == 0 ){ + mode = EditMode.REPAIR; // need to repair the role node + log.debug("No statements found for property " + relatedPropertyUri + ". Setting edit mode to REPAIR."); + }else if(stmts.size() == 1 ){ + mode = EditMode.EDIT; // editing single statement + log.debug("Single statement found for property " + relatedPropertyUri + ". Setting edit mode to EDIT."); + } + } else { + log.debug("Statements null for property " + relatedPropertyUri + " . Setting edit mode to ADD."); + } + } else { + log.debug("No object. Setting edit mode to ADD."); + } + return mode; + } }