diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java index bf3d0cb00..bbb419da8 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/FedoraDatastreamController.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.security.MessageDigest; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; @@ -20,6 +21,7 @@ import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; @@ -27,8 +29,21 @@ import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.joda.time.DateTime; +import com.hp.hpl.jena.datatypes.BaseDatatype; +import com.hp.hpl.jena.datatypes.xsd.XSDDatatype; +import com.hp.hpl.jena.datatypes.xsd.XSDDateTime; +import com.hp.hpl.jena.ontology.DatatypeProperty; +import com.hp.hpl.jena.ontology.ObjectProperty; import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; +import com.hp.hpl.jena.vocabulary.XSD; +import com.hp.hpl.jena.rdf.model.Statement; +import com.hp.hpl.jena.rdf.model.Model; +import com.hp.hpl.jena.rdf.model.Resource; +import com.ibm.icu.util.Calendar; import edu.cornell.mannlib.vitro.webapp.ConfigurationProperties; import edu.cornell.mannlib.vitro.webapp.beans.DataProperty; @@ -42,6 +57,9 @@ import fedora.client.FedoraClient; import fedora.common.Constants; import fedora.server.management.FedoraAPIM; import fedora.server.types.gen.Datastream; +import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; +import edu.cornell.mannlib.vedit.beans.LoginFormBean; + /** * Handles a request to change a datastream in a fedora repository. @@ -62,13 +80,28 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons private boolean configured = false; private boolean connected = false; - private static final int DEFAULT_MAX_SIZE = 1024 * 1024 * 50; + private static final int DEFAULT_MAX_SIZE = 1024 * 1024 * 50;//Shoudl this be changed to 1 GB to be consistent private static final String DEFAULT_FILE_URI_PREFIX = "http://vivo.library.cornell.edu/ns/0.1#individual"; private static final String DEFAULT_BASE_DIR = "/usr/local/vitrofiles"; private static String fileUriPrefix = DEFAULT_FILE_URI_PREFIX; private static String baseDirectoryForFiles = DEFAULT_BASE_DIR; private static int maxFileSize = DEFAULT_MAX_SIZE; + protected String contentTypeProperty = VitroVocabulary.CONTENT_TYPE; + protected String fileSizeProperty = VitroVocabulary.FILE_SIZE; + protected String fileNameProperty = VitroVocabulary.FILE_NAME; + protected String fileLocationProperty = VitroVocabulary.FILE_LOCATION; + protected String fileLabelProperty = RDFS.label.getURI(); + protected String checksumNodeProperty = "";//Object property linking file to check sum node object + protected String checksumNodeDateTimeProperty = ""; + protected String checksumNodeValueProperty = ""; + protected String checksumDataProperty = ""; //is there a vitro equivalent? + + protected String deleteNs = ""; + protected String individualPrefix = ""; + protected String fedoraNs = VitroVocabulary.VITRO_FEDORA; + + /** * The get will present a form to the user. */ @@ -110,17 +143,19 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons //get URI for file individual if( req.getParameter("uri") == null || "".equals(req.getParameter("uri"))) throw new FdcException("No file uri specified in request"); - - String fileUri = req.getParameter("uri"); + boolean isDelete = (req.getParameter("delete") != null && "true".equals(req.getParameter("delete"))); + + String fileUri = req.getParameter("uri"); //check if file individual has a fedora:PID for a data stream IndividualDao iwDao = vreq.getWebappDaoFactory().getIndividualDao(); Individual entity = iwDao.getIndividualByURI(fileUri); if( entity == null ) throw new FdcException( "No entity found in system for file uri " + fileUri); - + //System.out.println("Entity == null:" + (entity == null)); //get the fedora PID + //System.out.println("entity data property " + entity.getDataPropertyMap().get(VitroVocabulary.FEDORA_PID)); if( entity.getDataPropertyMap().get(VitroVocabulary.FEDORA_PID ) == null ) throw new FdcException( "No fedora:pid found in system for file uri " + fileUri); List stmts = entity.getDataPropertyMap().get(VitroVocabulary.FEDORA_PID).getDataPropertyStatements(); @@ -133,25 +168,57 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons break; } } + //System.out.println("pid is " + pid + " and comparison is " + (pid == null)); if( pid == null ) throw new FdcException( "No fedora:pid found in system for file uri " + fileUri); req.setAttribute("pid", pid); req.setAttribute("fileUri", fileUri); + //get current file name to use on form + req.setAttribute("fileName", entity.getName()); - //check if the data stream exists in the fedora repository - Datastream ds = apim.getDatastream(pid,DEFAULT_DSID,null); - if( ds == null ) - throw new FdcException("There was no datastream in the " + - "repository for " + pid + " " + DEFAULT_DSID); - req.setAttribute("dsid", DEFAULT_DSID); - - //get current file name to use on form - req.setAttribute("fileName", entity.getName()); - - //forward to form - req.setAttribute("bodyJsp","/fileupload/datastreamModification.jsp"); - RequestDispatcher rd = req.getRequestDispatcher(Controllers.BASIC_JSP); - rd.forward(req, res); + if(isDelete) + { + //Execute a 'deletion', i.e. unlink dataset and file, without removing file + //Also save deletion as a deleteEvent entity which can later be queried + + String datasetUri = null; + //Get dataset uri by getting the fromDataSet property + edu.cornell.mannlib.vitro.webapp.beans.ObjectProperty fromDataSet = entity.getObjectPropertyMap().get(fedoraNs + "fromDataSet"); + if(fromDataSet != null) + { + List fromDsStmts = fromDataSet.getObjectPropertyStatements(); + if(fromDsStmts.size() > 0) { + datasetUri = fromDsStmts.get(0).getObjectURI(); + //System.out.println("object uri should be " + datasetUri); + } else { + //System.out.println("No matching dataset uri could be found"); + } + } else { + //System.out.println("From dataset is null"); + } + + req.setAttribute("dataseturi", datasetUri); + boolean success = deleteFile(req, entity, iwDao, sessionOntModel); + req.setAttribute("deletesuccess", (success)?"success":"error"); + req.setAttribute("bodyJsp", "/edit/fileDeleteConfirm.jsp"); + RequestDispatcher rd = req.getRequestDispatcher(Controllers.BASIC_JSP); + rd.forward(req, res); + } + else{ + //check if the data stream exists in the fedora repository + Datastream ds = apim.getDatastream(pid,DEFAULT_DSID,null); + if( ds == null ) + throw new FdcException("There was no datastream in the " + + "repository for " + pid + " " + DEFAULT_DSID); + req.setAttribute("dsid", DEFAULT_DSID); + + + + //forward to form + req.setAttribute("bodyJsp","/fileupload/datastreamModification.jsp"); + RequestDispatcher rd = req.getRequestDispatcher(Controllers.BASIC_JSP); + rd.forward(req, res); + } }catch(FdcException ex){ req.setAttribute("errors", ex.getMessage()); RequestDispatcher rd = req.getRequestDispatcher("/edit/fileUploadError.jsp"); @@ -176,7 +243,7 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons throw new FdcException("There was an error processing the " + "parameters of your request."); } - + // get files or parameter values Map> queryParameters =new HashMap>(); Map> fileStreams = new HashMap>(); @@ -249,7 +316,7 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons fileUri = queryParameters.get("fileUri").get(0); } boolean useNewName=false; - if( "true".equals(queryParameters.get("useNewName"))){ + if( "true".equals(queryParameters.get("useNewName"))){System.out.println("Use new name parameter is true"); useNewName = true; } if( pId == null || pId.length() == 0 ) @@ -308,6 +375,9 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons } File uploadedFile = new File(saveLocation); + //System.out.println("Uploaded file path " + uploadedFile.getPath() + " - get file?" + uploadedFile.getName()); + String uploadedFileLocation = uploadedFile.getAbsolutePath(); + try { fileRes.write(uploadedFile); } catch (Exception ex) { @@ -319,7 +389,7 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons //upload to temp area on fedora File file = new File(saveLocation); String uploadFileUri = fedora.uploadFile( file ); - + // System.out.println("Fedora upload temp = upload file uri is " + uploadFileUri); String md5 = md5hashForFile( file ); md5 = md5.toLowerCase(); @@ -337,37 +407,127 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons //update properties like checksum, file size, and content type WebappDaoFactory wdf = vreq.getWebappDaoFactory(); - - DataProperty contentType = wdf.getDataPropertyDao().getDataPropertyByURI(VitroVocabulary.CONTENT_TYPE); - wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, contentType); - DataPropertyStatement dps = new DataPropertyStatementImpl(); - dps.setIndividualURI(fileEntity.getURI()); - dps.setDatapropURI(VitroVocabulary.CONTENT_TYPE); - dps.setData(fileRes.getContentType()); - wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + DataPropertyStatement dps = null; + DataProperty contentType = wdf.getDataPropertyDao().getDataPropertyByURI(this.contentTypeProperty); + if(contentType != null) + { + System.out.println("Setting content type to " + fileRes.getContentType()); + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, contentType); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(fileEntity.getURI()); + dps.setDatapropURI(VitroVocabulary.CONTENT_TYPE); + dps.setData(fileRes.getContentType()); + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + } - DataProperty fileSize = wdf.getDataPropertyDao().getDataPropertyByURI(VitroVocabulary.FILE_SIZE); - wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, fileSize); - dps = new DataPropertyStatementImpl(); - dps.setIndividualURI(fileEntity.getURI()); - dps.setDatapropURI(VitroVocabulary.FILE_SIZE); - dps.setData(Long.toString(fileRes.getSize())); - wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + DataProperty fileSize = wdf.getDataPropertyDao().getDataPropertyByURI(this.fileSizeProperty); + if(fileSize != null) + { + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, fileSize); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(fileEntity.getURI()); + dps.setDatapropURI(VitroVocabulary.FILE_SIZE); + dps.setData(Long.toString(fileRes.getSize())); + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + //System.out.println("Updated file size with " + fileRes.getSize()); + } - DataProperty checksumDp = wdf.getDataPropertyDao().getDataPropertyByURI("http://datastar.mannlib.cornell.edu/ns/core/0.1#checksum"); - //DataProperty checksumDp = wdf.getDataPropertyDao().getDataPropertyByURI(DataStarVocabulary.CHECSUM); - wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, checksumDp); - dps = new DataPropertyStatementImpl(); - dps.setIndividualURI(fileEntity.getURI()); - dps.setDatapropURI(checksumDp.getURI()); - dps.setData(checksum); - wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); - -// entDao().insertNewDataPropertyStatement(dps); - //if user checked "use name of new file" and maybe change the rdfs:label + DataProperty checksumDp = wdf.getDataPropertyDao().getDataPropertyByURI(this.checksumDataProperty); + if(checksumDp != null) + { + //System.out.println("Checksum data property is also not null"); + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, checksumDp); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(fileEntity.getURI()); + dps.setDatapropURI(checksumDp.getURI()); + dps.setData(checksum); + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + } + + //I'm leaving if statement out for now as the above properties are obviously being replaced as well + //if( "true".equals(useNewName)){ + //Do we need to encapuslate in this if OR is this path always for replacing a file + //TODO: Put in check to see if file name has changed and only execute these statements if file name has changed + DataProperty fileNameProperty = wdf.getDataPropertyDao().getDataPropertyByURI(this.fileNameProperty); + if(fileNameProperty != null) { + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, fileNameProperty); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(fileEntity.getURI()); + dps.setDatapropURI(fileNameProperty.getURI()); + dps.setData(originalName); //This follows the pattern of the original file upload - the name returned from the uploaded file object + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + //System.out.println("File name property is not null = " + fileNameProperty.getURI() + " updating to " + originalName); + } else { + //System.out.println("file name property is null"); + } + + //This doesn't seem to be settable as a data property - how else could we set this? + /* + DataProperty fileLocationProperty = wdf.getDataPropertyDao().getDataPropertyByURI(this.fileLocationProperty); + if(fileLocationProperty != null) { + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(fileEntity, fileLocationProperty); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(fileEntity.getURI()); + dps.setDatapropURI(fileLocationProperty.getURI()); + dps.setData(saveLocation); //This follows the pattern of the original file upload - the name returned from the uploaded file object + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + } else { + System.out.println("File location property is null"); + } + */ + + //Need to also update the check sum node - how would we do that + //Find checksum node related to this particular file uri, then go ahead and update two specific fields + //ObjectProperty checksumNode = wdf.getObjectPropertyDao().getObjectPropertyByURI(this.checksumNodeProperty); + //if(checksumNode != null) { + // System.out.println("Check sum node is not equal to null"); + // fileEntity. + //} + ListcsNodeStatements = fileEntity.getObjectPropertyMap().get(this.checksumNodeProperty).getObjectPropertyStatements(); + if(csNodeStatements.size() == 0) { + System.out.println("No object property statements correspond to this property"); + } else { + ObjectPropertyStatement cnodeStatement = csNodeStatements.get(0); + String cnodeUri = cnodeStatement.getObjectURI(); + //System.out.println("Checksum node uri is " + cnodeUri); + + Individual checksumNodeObject = iwDao.getIndividualByURI(cnodeUri); + + DataProperty checksumDateTime = wdf.getDataPropertyDao().getDataPropertyByURI(this.checksumNodeDateTimeProperty); + if(checksumDateTime != null) { + String newDatetime = sessionOntModel.createTypedLiteral(new DateTime()).getString(); + //Review how to update date time + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(checksumNodeObject, checksumDateTime); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(checksumNodeObject.getURI()); + dps.setDatapropURI(checksumDateTime.getURI()); + dps.setData(newDatetime); + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + + } + DataProperty checksumNodeValue = wdf.getDataPropertyDao().getDataPropertyByURI(this.checksumDataProperty); + if(checksumNodeValue != null) { + wdf.getDataPropertyStatementDao().deleteDataPropertyStatementsForIndividualByDataProperty(checksumNodeObject, checksumNodeValue); + dps = new DataPropertyStatementImpl(); + dps.setIndividualURI(checksumNodeObject.getURI()); + dps.setDatapropURI(checksumNodeValue.getURI()); + dps.setData(checksum); //Same as fileName above - change if needed + wdf.getDataPropertyStatementDao().insertNewDataPropertyStatement(dps); + } + + } + + //Assumes original entity name is equal to the location - as occurs with regular file upload + String originalEntityName = fileEntity.getName(); + if(originalEntityName != originalName) { + //System.out.println("Setting file entity to name of uploaded file"); + fileEntity.setName(originalName); + } else { + //System.out.println("Conditional for file entity name and uploaded name is saying same"); + } + iwDao.updateIndividual(fileEntity); + //} - - req.setAttribute("fileUri", fileUri); req.setAttribute("originalFileName", fileEntity.getName()); req.setAttribute("checksum", checksum); @@ -390,6 +550,86 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons } } + //Delete method + public boolean deleteFile(HttpServletRequest req, Individual entity, IndividualDao iwDao, OntModel sessionOntModel) { + boolean success = false; + String fileUri = entity.getURI(); + //Create uri based on milliseconds etc.? + Calendar c = Calendar.getInstance(); + long timeMs = c.getTimeInMillis(); + //Cuirrent date + SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); + String formattedDeleteDate = dateTime.format(c.getTime()); + String deleteEventName = "deleteEvent" + timeMs; + //System.out.println("Delete event name is " +deleteEventName + " - delete time is " + formattedDeleteDate); + + //Get current user + HttpSession session = req.getSession(true); + LoginFormBean loginBean = (LoginFormBean) session.getAttribute("loginHandler"); + String userURI = loginBean.getUserURI(); + //System.out.println("Current logged in user uri is " + userURI); + + //Update model + sessionOntModel.enterCriticalSection(true); + + try { + + //Dataset Uri + String datasetUri = (String) req.getAttribute("dataseturi"); + //System.out.println("Dataset uri is " + datasetUri); + //Remove the actual relationships: dsr:hasFile and fedora:fromDataSet + ObjectProperty hasFileProperty = sessionOntModel.getObjectProperty(fedoraNs + "hasFile"); + + ObjectProperty fromDatasetProperty = sessionOntModel.getObjectProperty(fedoraNs + "fromDataSet"); + if(hasFileProperty != null) { + //System.out.println("Has file property does exist"); + sessionOntModel.remove(sessionOntModel.createStatement(sessionOntModel.getResource(datasetUri), hasFileProperty, sessionOntModel.getResource(fileUri))); + } else{ + //System.out.println("Has file property does not exist"); + } + + if(fromDatasetProperty != null) { + //System.out.println("From dataset property exists "); + sessionOntModel.remove(sessionOntModel.createStatement(sessionOntModel.getResource(fileUri), fromDatasetProperty, sessionOntModel.getResource(datasetUri))); + } else{ + //System.out.println("From dataset property does not exist"); + } + + + //Create delete event entity and update with the correct information + //Type of Event + Resource deleteEventType = sessionOntModel.createResource(deleteNs + "DeleteEvent"); + //Individual event + Resource eventIndividual = sessionOntModel.createResource(individualPrefix + deleteEventName); + //Event is of type DeleteEvent + Statement rType = sessionOntModel.createStatement(eventIndividual, com.hp.hpl.jena.vocabulary.RDF.type, deleteEventType); + sessionOntModel.add(rType); + //Add properties to individual - deleteDateTime, deletedBy, forDataSet, forFile + DatatypeProperty dateTimeProp = sessionOntModel.createDatatypeProperty(deleteNs + "deleteDateTime"); + dateTimeProp.setRange(XSD.dateTime); + + ObjectProperty deletedByProp = sessionOntModel.createObjectProperty(deleteNs + "deletedBy"); + ObjectProperty forDatasetProp = sessionOntModel.createObjectProperty(deleteNs + "forDataset"); + ObjectProperty forFileProp = sessionOntModel.createObjectProperty(deleteNs + "forFile"); + //Need to make sure date time property is set to correct xsd:DateTime + //XSDDateTime now = new XSDDateTime(c); + //XSDDateTime now = new XSDDateTime(java.util.Calendar.getInstance()); + eventIndividual.addProperty(dateTimeProp, sessionOntModel.createTypedLiteral(formattedDeleteDate, XSDDatatype.XSDdateTime)); + //eventIndividual.addProperty(dateTimeProp, sessionOntModel.createTypedLiteral(now, XSDDatatype.XSDdateTime)); + eventIndividual.addProperty(deletedByProp, sessionOntModel.getResource(userURI)); + if(datasetUri != null){ + //System.out.println("Dataset uri is " + datasetUri); + eventIndividual.addProperty(forDatasetProp, sessionOntModel.getResource(datasetUri)); + } + eventIndividual.addProperty(forFileProp, sessionOntModel.getResource(fileUri)); + success = true; + + } finally { + sessionOntModel.leaveCriticalSection(); + } + return success; + } + public void init() throws ServletException { super.init(); @@ -407,7 +647,7 @@ public class FedoraDatastreamController extends VitroHttpServlet implements Cons maxFileSize = DEFAULT_MAX_SIZE; } } - + private void setup(OntModel model, ServletContext context) { this.configurationStatus = ""; StringBuffer status = new StringBuffer(""); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java index 78271ea88..ff6bcec9a 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/edit/N3MultiPartUpload.java @@ -224,7 +224,7 @@ public class N3MultiPartUpload extends VitroHttpServlet { : "request is for a new file object"); /** *************************************************** */ String uploadFileName = ""; - if (requestIsAnUpdate) {System.out.println("Currently existing file resource edit not supported"); + if (requestIsAnUpdate) { log.error("Editing an existing file resource is not supported by N3MultiPartUpload.java "); request.setAttribute("errors", "Editing an existing file resource is not supported."); RequestDispatcher rd = request @@ -260,6 +260,11 @@ public class N3MultiPartUpload extends VitroHttpServlet { + requiredFieldAssertions.get(fileItemKey)); } + //DEBUG + System.out.println("build assertions for field " + + fileItemKey + " and file " + + fileItem.getName() + "\n" + + requiredFieldAssertions.get(fileItemKey)); //Save upload file name for use in email confirmation uploadFileName = fileItem.getName(); } catch (Exception e) { @@ -295,6 +300,12 @@ public class N3MultiPartUpload extends VitroHttpServlet { } } + + //DEBUG to see what statements are being added + StmtIterator it = assertionModel.listStatements(); + while(it.hasNext()){ + System.out.println("NEXT Statement:" + it.nextStatement().toString() ); + } /* ****** do PostUpload if there is one ******* */ boolean postUploadSuccess = false; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java index 517ec6f40..fff4c4e5b 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/DataPropertyStatementDaoJena.java @@ -128,7 +128,7 @@ public class DataPropertyStatementDaoJena extends JenaBaseDao implements DataPro } public void deleteDataPropertyStatementsForIndividualByDataProperty(Individual individual, DataProperty dataProperty) { - this.deleteDataPropertyStatementsForIndividualByDataProperty(individual.getURI(), dataProperty.getURI()); + this.deleteDataPropertyStatementsForIndividualByDataProperty(individual.getURI(), dataProperty.getURI()); } public Collection getDataPropertyStatementsForIndividualByDataPropertyURI(Individual entity, diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java index ee27da535..b5a3801fb 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/edit/n3editing/EditConfiguration.java @@ -1,6 +1,7 @@ /* $This file is distributed under the terms of the license in /doc/license.txt$ */ package edu.cornell.mannlib.vitro.webapp.edit.n3editing; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -8,6 +9,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Calendar; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; @@ -32,6 +34,9 @@ import edu.cornell.mannlib.vitro.webapp.auth.identifier.UserToIndIdentifierFacto import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; import edu.cornell.mannlib.vitro.webapp.edit.EditLiteral; +import com.hp.hpl.jena.datatypes.xsd.XSDDatatype; +import com.hp.hpl.jena.datatypes.xsd.XSDDateTime; +import com.hp.hpl.jena.datatypes.BaseDatatype; /** * Represents a set of fields on a form and how parameters from a from @@ -224,7 +229,12 @@ public class EditConfiguration { if( getSparqlForAdditionalLiteralsInScope() != null && getSparqlForAdditionalLiteralsInScope().containsKey("currentTime") && USE_SYSTEM_VALUE.equals(getSparqlForAdditionalLiteralsInScope().get("currentTime"))){ - getLiteralsInScope().put("currentTime", ResourceFactory.createTypedLiteral(new Date())); + //Updating so that this is represented as an XSD Date Time literal - to allow for comparison later + //Currently it appears that this is only used for file upload + //getLiteralsInScope().put("currentTime", ResourceFactory.createTypedLiteral(new Date())); + SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + String formattedDate = dateTime.format(Calendar.getInstance().getTime()); + getLiteralsInScope().put("currentTime", ResourceFactory.createTypedLiteral(formattedDate, XSDDatatype.XSDdateTime)); } /* editing user */ diff --git a/webapp/web/fileupload/datastreamModification.jsp b/webapp/web/fileupload/datastreamModification.jsp index 0fc0d9ebe..b68c8f6e0 100644 --- a/webapp/web/fileupload/datastreamModification.jsp +++ b/webapp/web/fileupload/datastreamModification.jsp @@ -18,6 +18,7 @@ - + + diff --git a/webapp/web/siteAdmin/customReports.jsp b/webapp/web/siteAdmin/customReports.jsp index 53831cb4d..005fc9113 100644 --- a/webapp/web/siteAdmin/customReports.jsp +++ b/webapp/web/siteAdmin/customReports.jsp @@ -6,7 +6,8 @@

Reports

<% } %>