diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DateTimeValueFormGenerator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DateTimeValueFormGenerator.java index d9324b864..fff16bbf8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DateTimeValueFormGenerator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/configuration/generators/DateTimeValueFormGenerator.java @@ -2,15 +2,24 @@ package edu.cornell.mannlib.vitro.webapp.edit.n3editing.configuration.generators; +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.List; import javax.servlet.http.HttpSession; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.vocabulary.XSD; + import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.DateTimeWithPrecisionVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationVTwo; import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.FieldVTwo; +import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; +import edu.cornell.mannlib.vitro.webapp.utils.generators.EditModeUtils; + public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator implements EditConfigurationGenerator { @@ -51,6 +60,9 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator VitroVocabulary.Precision.SECOND.uri(), VitroVocabulary.Precision.NONE.uri()))); + //Adding additional data, specifically edit mode + addFormSpecificData(conf, vreq); + return conf; } @@ -76,4 +88,18 @@ public class DateTimeValueFormGenerator extends BaseEditConfigurationGenerator "SELECT ?existingNode WHERE { \n" + "?subject <" + toDateTimeValue + "> ?existingNode . \n" + "?existingNode a <" + valueType + "> }"; -} + + +//Adding form specific data such as edit mode + public void addFormSpecificData(EditConfigurationVTwo editConfiguration, VitroRequest vreq) { + HashMap formSpecificData = new HashMap(); + formSpecificData.put("editMode", getEditMode(vreq).name().toLowerCase()); + editConfiguration.setFormSpecificData(formSpecificData); + } + + public EditMode getEditMode(VitroRequest vreq) { + List predicates = new ArrayList(); + predicates.add(dateTimeValue); + return EditModeUtils.getEditMode(vreq, predicates); + } +} \ No newline at end of file diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/generators/EditModeUtils.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/generators/EditModeUtils.java new file mode 100644 index 000000000..409953d50 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/utils/generators/EditModeUtils.java @@ -0,0 +1,79 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.utils.generators; + +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.edit.n3editing.VTwo.EditConfigurationUtils; +import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils; +import edu.cornell.mannlib.vitro.webapp.utils.FrontEndEditingUtils.EditMode; + +public class EditModeUtils { + private static Log log = LogFactory.getLog(EditModeUtils.class); + + + /* *************** Static utility methods used in role-based generators *********** */ + public static EditMode getEditMode(VitroRequest vreq, List possiblePredicates) { + //We're making some assumptions here: That there is only one role objec tot one activity object + //pairing, i.e. the same role object can't be related to a different activity object + //That said, there should only be one role to Activity predicate linking a role to an activity + //So if + Individual object = EditConfigurationUtils.getObjectIndividual(vreq); + boolean foundErrorMode = false; + int numberEditModes = 0; + int numberRepairModes = 0; + int numberPredicates = possiblePredicates.size(); + for(String predicate:possiblePredicates) { + EditMode mode = FrontEndEditingUtils.getEditMode(vreq, object, predicate); + //Any error mode should result in error + if(mode == EditMode.ERROR) { + foundErrorMode = true; + break; + } + if(mode == EditMode.EDIT) { + numberEditModes++; + } + else if(mode == EditMode.REPAIR) { + numberRepairModes++; + } + + } + + //if found an error or if more than one edit mode returned, incorrect + + if(foundErrorMode || numberEditModes > 1) + { + return EditMode.ERROR; + } + EditMode mode = EditMode.ADD; + //if exactly one edit mode found, then edit mode + if(numberEditModes == 1) { + mode = EditMode.EDIT; + } + //if all modes are repair, this means that all of them have zero statements returning + //which is incorrect + if(numberRepairModes == numberPredicates) { + mode = EditMode.REPAIR; + } + //otherwise all the modes are Add and Add will be returned + return mode; + } + + public static boolean isAddMode(EditMode mode) { + return (mode == EditMode.ADD); + } + + public static boolean isEditMode(EditMode mode) { + return (mode == EditMode.EDIT); + } + + public static boolean isRepairMode(EditMode mode) { + return (mode == EditMode.REPAIR); + } + +}