diff --git a/src/main/java/Bundle.properties b/src/main/java/Bundle.properties
index 23a2ff888d6..919277cc9a2 100644
--- a/src/main/java/Bundle.properties
+++ b/src/main/java/Bundle.properties
@@ -232,6 +232,7 @@ dataverse.delete.success=Your dataverse has been deleted.
dataverse.delete.failure=This dataverse was not able to be deleted.
dataverse.create.success=You have successfully created your dataverse! To learn more about what you can do with your dataverse, check out the User Guide.
dataverse.create.failure=This dataverse was not able to be created.
+dataverse.create.authenticatedUsersOnly=Only authenticated users can create dataverses.
dataverse.update.success=You have successfully updated your dataverse!
dataverse.update.failure=This dataverse was not able to be updated.
@@ -596,6 +597,7 @@ dataset.cite.whyCite.tip=If you use these data, please add this citation to your
dataset.cite.downloadBtn=Download Citation
dataset.cite.downloadBtn.xml=EndNote XML
dataset.cite.downloadBtn.ris=RIS Format
+dataset.create.authenticatedUsersOnly=Only authenticated users can create datasets.
dataset.deaccession.reason=Deaccession Reason:
dataset.beAccessedAt=The dataset can now be accessed at:
dataset.keywordDisplay.title=Keyword
diff --git a/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java
index 8431736ff55..cbdff71f799 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DataFileServiceBean.java
@@ -10,9 +10,11 @@
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.GuestUser;
import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.UUID;
+import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -135,16 +137,20 @@ public List findByDatasetId(Long studyId) {
Sure, we don't have *studies* any more, in 4.0; it's a tribute
to the past. -- L.A.
*/
- Query query = em.createQuery("select object(o) from DataFile as o where o.dataset.id =:studyId order by o.id");
+ Query query = em.createQuery("select o from DataFile o where o.owner.id = :studyId order by o.id");
query.setParameter("studyId", studyId);
return query.getResultList();
}
public List findIngestsInProgress() {
- Query query = em.createQuery("select object(o) from DataFile as o where o.ingestStatus =:scheduledStatusCode or o.ingestStatus =:progressStatusCode order by o.id");
- query.setParameter("scheduledStatusCode", DataFile.INGEST_STATUS_SCHEDULED);
- query.setParameter("progressStatusCode", DataFile.INGEST_STATUS_INPROGRESS);
- return query.getResultList();
+ if ( em.isOpen() ) {
+ Query query = em.createQuery("select object(o) from DataFile as o where o.ingestStatus =:scheduledStatusCode or o.ingestStatus =:progressStatusCode order by o.id");
+ query.setParameter("scheduledStatusCode", DataFile.INGEST_STATUS_SCHEDULED);
+ query.setParameter("progressStatusCode", DataFile.INGEST_STATUS_INPROGRESS);
+ return query.getResultList();
+ } else {
+ return Collections.emptyList();
+ }
}
public DataTable findDataTableByFileId(Long fileId) {
@@ -181,25 +187,24 @@ public void generateStorageIdentifier(DataFile dataFile) {
}
public String generateStorageIdentifier() {
- String storageIdentifier = null;
UUID uid = UUID.randomUUID();
- logger.fine("UUID value: "+uid.toString());
+ logger.log(Level.FINE, "UUID value: {0}", uid.toString());
// last 6 bytes, of the random UUID, in hex:
String hexRandom = uid.toString().substring(24);
- logger.fine("UUID (last 6 bytes, 12 hex digits): "+hexRandom);
+ logger.log(Level.FINE, "UUID (last 6 bytes, 12 hex digits): {0}", hexRandom);
String hexTimestamp = Long.toHexString(new Date().getTime());
- logger.fine("(not UUID) timestamp in hex: "+hexTimestamp);
+ logger.log(Level.FINE, "(not UUID) timestamp in hex: {0}", hexTimestamp);
- storageIdentifier = hexTimestamp + "-" + hexRandom;
+ String storageIdentifier = hexTimestamp + "-" + hexRandom;
- logger.fine("timestamp/UUID hybrid: "+storageIdentifier);
+ logger.log(Level.FINE, "timestamp/UUID hybrid: {0}", storageIdentifier);
return storageIdentifier;
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
index f6c1b2a13ae..ef6ab6ef1af 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DatasetPage.java
@@ -1,13 +1,7 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
package edu.harvard.iq.dataverse;
import edu.harvard.iq.dataverse.authorization.AuthenticationServiceBean;
import edu.harvard.iq.dataverse.authorization.Permission;
-import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUser;
import edu.harvard.iq.dataverse.authorization.providers.builtin.BuiltinUserServiceBean;
import edu.harvard.iq.dataverse.authorization.users.ApiToken;
import edu.harvard.iq.dataverse.authorization.users.User;
@@ -1333,7 +1327,7 @@ public String save() {
*/
try {
Long idToRemove = fmd.getId(); ///dfn.getId();
- logger.info("deleting file, filemetadata id " + idToRemove);
+ logger.log(Level.INFO, "deleting file, filemetadata id {0}", idToRemove);
// finally, check if this file is being used as the default thumbnail
// for its dataset:
@@ -1390,8 +1384,13 @@ public String save() {
try {
if (editMode == EditMode.CREATE) {
workingVersion.setLicense(DatasetVersion.License.CC0);
- if(selectedTemplate != null){
- cmd = new CreateDatasetCommand(dataset, session.getUser(), false, null, selectedTemplate);
+ if ( selectedTemplate != null ) {
+ if ( session.getUser().isAuthenticated() ) {
+ cmd = new CreateDatasetCommand(dataset, (AuthenticatedUser) session.getUser(), false, null, selectedTemplate);
+ } else {
+ JH.addMessage(FacesMessage.SEVERITY_FATAL, JH.localize("dataset.create.authenticatedUsersOnly"));
+ return null;
+ }
} else {
cmd = new CreateDatasetCommand(dataset, session.getUser());
}
@@ -1407,15 +1406,15 @@ public String save() {
}
} catch (EJBException ex) {
StringBuilder error = new StringBuilder();
- error.append(ex + " ");
- error.append(ex.getMessage() + " ");
+ error.append(ex).append(" ");
+ error.append(ex.getMessage()).append(" ");
Throwable cause = ex;
- while (cause.getCause() != null) {
+ while (cause.getCause()!= null) {
cause = cause.getCause();
- error.append(cause + " ");
- error.append(cause.getMessage() + " ");
+ error.append(cause).append(" ");
+ error.append(cause.getMessage()).append(" ");
}
- logger.fine("Couldn't save dataset: " + error.toString());
+ logger.log(Level.FINE, "Couldn''t save dataset: {0}", error.toString());
populateDatasetUpdateFailureMessage();
return null;
} catch (CommandException ex) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/DataversePage.java b/src/main/java/edu/harvard/iq/dataverse/DataversePage.java
index 3461e6e5d35..de939bcf1ca 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DataversePage.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DataversePage.java
@@ -1,8 +1,3 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
package edu.harvard.iq.dataverse;
import edu.harvard.iq.dataverse.UserNotification.Type;
@@ -514,9 +509,14 @@ public String save(String message) {
//TODO change to Create - for now the page is expecting INFO instead.
Boolean create;
if (dataverse.getId() == null) {
- dataverse.setOwner(ownerId != null ? dataverseService.find(ownerId) : null);
- create = Boolean.TRUE;
- cmd = new CreateDataverseCommand(dataverse, session.getUser(), facets.getTarget(), listDFTIL);
+ if ( session.getUser().isAuthenticated() ) {
+ dataverse.setOwner(ownerId != null ? dataverseService.find(ownerId) : null);
+ create = Boolean.TRUE;
+ cmd = new CreateDataverseCommand(dataverse, (AuthenticatedUser) session.getUser(), facets.getTarget(), listDFTIL);
+ } else {
+ JH.addMessage(FacesMessage.SEVERITY_FATAL, JH.localize("dataverse.create.authenticatedUsersOnly"));
+ return null;
+ }
} else {
create=Boolean.FALSE;
cmd = new UpdateDataverseCommand(dataverse, facets.getTarget(), featuredDataverses.getTarget(), session.getUser(), listDFTIL);
diff --git a/src/main/java/edu/harvard/iq/dataverse/DvObject.java b/src/main/java/edu/harvard/iq/dataverse/DvObject.java
index 691edbff833..f504203d1cb 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DvObject.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DvObject.java
@@ -50,7 +50,7 @@ public String visit(DataFile df) {
private Long id;
@ManyToOne(cascade = CascadeType.MERGE)
- private DvObjectContainer owner;
+ private DvObject owner;
private Timestamp publicationDate;
@@ -85,6 +85,7 @@ public Timestamp getModificationTime() {
/**
* modificationTime is used for comparison with indexTime so we know if the
* Solr index is stale.
+ * @param modificationTime
*/
public void setModificationTime(Timestamp modificationTime) {
this.modificationTime = modificationTime;
@@ -97,6 +98,7 @@ public Timestamp getIndexTime() {
/**
* indexTime is used for comparison with modificationTime so we know if the
* Solr index is stale.
+ * @param indexTime
*/
public void setIndexTime(Timestamp indexTime) {
this.indexTime = indexTime;
@@ -123,7 +125,7 @@ protected void setOwner(DvObjectContainer newOwner) {
}
public DvObjectContainer getOwner() {
- return owner;
+ return (DvObjectContainer)owner;
}
public Long getId() {
diff --git a/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java b/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java
index 9e4a032df61..e40eb1c2a3a 100644
--- a/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java
+++ b/src/main/java/edu/harvard/iq/dataverse/DvObjectContainer.java
@@ -1,13 +1,13 @@
package edu.harvard.iq.dataverse;
-import javax.persistence.Entity;
+import javax.persistence.MappedSuperclass;
/**
* A {@link DvObject} that can contain other {@link DvObject}s.
*
* @author michael
*/
-@Entity
+@MappedSuperclass
public abstract class DvObjectContainer extends DvObject {
public void setOwner(Dataverse owner) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/BatchImport.java b/src/main/java/edu/harvard/iq/dataverse/api/BatchImport.java
index 286f87b75f3..a955d437c0d 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/BatchImport.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/BatchImport.java
@@ -8,13 +8,12 @@
import edu.harvard.iq.dataverse.api.imports.ImportException;
import edu.harvard.iq.dataverse.api.imports.ImportUtil.ImportType;
+import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
-import edu.harvard.iq.dataverse.util.ImportLogger;
import java.io.IOException;
import javax.ejb.EJB;
import javax.ejb.Stateless;
-import javax.inject.Inject;
import javax.json.JsonObjectBuilder;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
@@ -107,7 +106,7 @@ public Response getImport(@QueryParam("path") String fileDir, @QueryParam("ident
private Response startBatchJob( String fileDir, String parentIdtf, String apiKey, ImportType importType) {
- User u = findUserByApiToken(apiKey);
+ AuthenticatedUser u = findUserByApiToken(apiKey);
if (u == null) {
return badApiKey(apiKey);
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java
index 916e66886e0..9560762725d 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/BatchServiceBean.java
@@ -1,18 +1,12 @@
-/*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
package edu.harvard.iq.dataverse.api;
import edu.harvard.iq.dataverse.Dataverse;
import edu.harvard.iq.dataverse.DataverseServiceBean;
import edu.harvard.iq.dataverse.api.imports.ImportException;
import edu.harvard.iq.dataverse.api.imports.ImportUtil;
-import edu.harvard.iq.dataverse.authorization.users.User;
+import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.util.ImportLogger;
import java.io.File;
-import java.io.IOException;
import javax.ejb.Asynchronous;
import javax.ejb.EJB;
import javax.ejb.Stateless;
@@ -35,7 +29,7 @@ public class BatchServiceBean {
ImportLogger importLogger;
@Asynchronous
- public void processFilePath(String fileDir, String parentIdtf, User u, Dataverse owner, ImportUtil.ImportType importType) throws ImportException {
+ public void processFilePath(String fileDir, String parentIdtf, AuthenticatedUser u, Dataverse owner, ImportUtil.ImportType importType) throws ImportException {
importLogger.getLogger().info("BEGIN IMPORT");
JsonArrayBuilder status = Json.createArrayBuilder();
@@ -59,7 +53,7 @@ public void processFilePath(String fileDir, String parentIdtf, User u, Dataverse
}
- public JsonArrayBuilder handleDirectory(User u, File dir, ImportUtil.ImportType importType) throws ImportException{
+ public JsonArrayBuilder handleDirectory(AuthenticatedUser u, File dir, ImportUtil.ImportType importType) throws ImportException{
JsonArrayBuilder status = Json.createArrayBuilder();
Dataverse owner = dataverseService.findByAlias(dir.getName());
if (owner == null) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
index 85987baa936..416fdc638e4 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java
@@ -118,7 +118,7 @@ public Response addDataverse( String body, @PathParam("identifier") String paren
dc.setDataverse(d);
}
- User u = findUserOrDie( apiKey );
+ AuthenticatedUser u = findUserOrDie( apiKey );
d = execCommand( new CreateDataverseCommand(d, u, null, null), "Creating Dataverse" );
return createdResponse( "/dvs/"+d.getAlias(), json(d) );
} catch ( WrappedResponse ww ) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/api/ImportServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/ImportServiceBean.java
index 6a3508e502e..18c05ef7f3d 100644
--- a/src/main/java/edu/harvard/iq/dataverse/api/ImportServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/api/ImportServiceBean.java
@@ -23,6 +23,7 @@
import edu.harvard.iq.dataverse.api.imports.ImportDDI;
import edu.harvard.iq.dataverse.api.imports.ImportException;
import edu.harvard.iq.dataverse.api.imports.ImportUtil.ImportType;
+import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.impl.CreateDatasetCommand;
@@ -60,69 +61,67 @@
*/
@Stateless
public class ImportServiceBean {
-@EJB
- protected EjbDataverseEngine engineSvc;
- @EJB
+
+ @EJB
+ protected EjbDataverseEngine engineSvc;
+ @EJB
DatasetServiceBean datasetService;
@EJB
DataverseServiceBean dataverseService;
@EJB
DatasetFieldServiceBean datasetfieldService;
-
+
@EJB
MetadataBlockServiceBean metadataBlockService;
@EJB
- SettingsServiceBean settingsService;
- @EJB ImportLogger importLogger;
+ SettingsServiceBean settingsService;
+ @EJB
+ ImportLogger importLogger;
@TransactionAttribute(REQUIRES_NEW)
- public Dataverse createDataverse(File dir, User u) throws ImportException {
- Dataverse d = new Dataverse();
- Dataverse root = dataverseService.findByAlias("root");
- d.setOwner(root);
- d.setAlias(dir.getName());
- d.setName(dir.getName());
- d.setAffiliation("affiliation");
- d.setPermissionRoot(false);
- d.setDescription("description");
- d.setDataverseType(Dataverse.DataverseType.RESEARCHERS);
- DataverseContact dc = new DataverseContact();
- dc.setContactEmail("pete@mailinator.com");
- ArrayList dcList = new ArrayList<>();
- dcList.add(dc);
- d.setDataverseContacts(dcList);
- try {
- d = engineSvc.submit(new CreateDataverseCommand(d, u, null, null));
- } catch (EJBException ex) {
- Throwable cause = ex;
- StringBuilder sb = new StringBuilder();
- sb.append("Error creating dataverse.");
- while (cause.getCause() != null) {
- cause = cause.getCause();
- if (cause instanceof ConstraintViolationException) {
- ConstraintViolationException constraintViolationException = (ConstraintViolationException) cause;
- for (ConstraintViolation> violation : constraintViolationException.getConstraintViolations()) {
- sb.append(" Invalid value: <<<").append(violation.getInvalidValue()).append(">>> for ").append(violation.getPropertyPath()).append(" at ").append(violation.getLeafBean()).append(" - ").append(violation.getMessage());
- }
- }
+ public Dataverse createDataverse(File dir, AuthenticatedUser u) throws ImportException {
+ Dataverse d = new Dataverse();
+ Dataverse root = dataverseService.findByAlias("root");
+ d.setOwner(root);
+ d.setAlias(dir.getName());
+ d.setName(dir.getName());
+ d.setAffiliation("affiliation");
+ d.setPermissionRoot(false);
+ d.setDescription("description");
+ d.setDataverseType(Dataverse.DataverseType.RESEARCHERS);
+ DataverseContact dc = new DataverseContact();
+ dc.setContactEmail("pete@mailinator.com");
+ ArrayList dcList = new ArrayList<>();
+ dcList.add(dc);
+ d.setDataverseContacts(dcList);
+ try {
+ d = engineSvc.submit(new CreateDataverseCommand(d, u, null, null));
+ } catch (EJBException ex) {
+ Throwable cause = ex;
+ StringBuilder sb = new StringBuilder();
+ sb.append("Error creating dataverse.");
+ while (cause.getCause() != null) {
+ cause = cause.getCause();
+ if (cause instanceof ConstraintViolationException) {
+ ConstraintViolationException constraintViolationException = (ConstraintViolationException) cause;
+ for (ConstraintViolation> violation : constraintViolationException.getConstraintViolations()) {
+ sb.append(" Invalid value: <<<").append(violation.getInvalidValue()).append(">>> for ").append(violation.getPropertyPath()).append(" at ").append(violation.getLeafBean()).append(" - ").append(violation.getMessage());
}
- importLogger.getLogger().log(Level.SEVERE, sb.toString());
- System.out.println("Error creating dataverse: " + sb.toString());
- throw new ImportException(sb.toString());
- } catch (Exception e) {
- throw new ImportException(e.getMessage());
}
- return d;
-
- }
-
-
-
-
-
+ }
+ importLogger.getLogger().log(Level.SEVERE, sb.toString());
+ System.out.println("Error creating dataverse: " + sb.toString());
+ throw new ImportException(sb.toString());
+ } catch (Exception e) {
+ throw new ImportException(e.getMessage());
+ }
+ return d;
+
+ }
+
@TransactionAttribute(REQUIRES_NEW)
public JsonObjectBuilder handleFile(User u, Dataverse owner, File file, ImportType importType) throws ImportException {
-
+
System.out.println("handling file: " + file.getAbsolutePath());
String ddiXMLToParse;
try {
@@ -132,25 +131,26 @@ public JsonObjectBuilder handleFile(User u, Dataverse owner, File file, ImportTy
importLogger.getLogger().info("completed doImport " + file.getParentFile().getName() + "/" + file.getName());
return status;
} catch (ImportException ex) {
- importLogger.getLogger().info("Import Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + ex.getMessage());
+ importLogger.getLogger().info("Import Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + ex.getMessage());
return Json.createObjectBuilder().add("message", "Import Exception processing file " + file.getParentFile().getName() + "/" + file.getName() + ", msg:" + ex.getMessage());
} catch (Exception e) {
- String msg = "Unexpected Error in handleFile(), file:" + file.getParentFile().getName() + "/" + file.getName();
- importLogger.getLogger().log(Level.SEVERE,msg, e);
+ String msg = "Unexpected Error in handleFile(), file:" + file.getParentFile().getName() + "/" + file.getName();
+ importLogger.getLogger().log(Level.SEVERE, msg, e);
throw new ImportException("Unexpected Error in handleFile(), file:" + file.getParentFile().getName() + "/" + file.getName(), e);
}
}
- public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, ImportType importType) throws ImportException {
-
+
+ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, ImportType importType) throws ImportException {
+
String status = "";
Long createdId = null;
DatasetDTO dsDTO = null;
- try {
+ try {
ImportDDI importDDI = new ImportDDI(importType);
dsDTO = importDDI.doImport(xmlToParse);
} catch (XMLStreamException e) {
- throw new ImportException("XMLStreamException" + e);
+ throw new ImportException("XMLStreamException" + e);
}
// convert DTO to Json,
Gson gson = new GsonBuilder().setPrettyPrinting().create();
@@ -162,7 +162,7 @@ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, Im
JsonParser parser = new JsonParser(datasetfieldService, metadataBlockService, settingsService);
parser.setLenient(!importType.equals(ImportType.NEW));
Dataset ds = parser.parseDataset(obj);
-
+
// For ImportType.NEW, if the user supplies a global identifier, and it's not a protocol
// we support, it will be rejected.
if (importType.equals(ImportType.NEW)) {
@@ -170,7 +170,7 @@ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, Im
throw new ImportException("Could not register id " + ds.getGlobalId() + ", protocol not supported");
}
}
-
+
ds.setOwner(owner);
ds.getLatestVersion().setDatasetFields(ds.getLatestVersion().initDatasetFields());
@@ -188,16 +188,16 @@ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, Im
// if required values are missing.
String errMsg = "Error importing data:";
for (ConstraintViolation v : violations) {
- errMsg+=" "+v.getMessage();
+ errMsg += " " + v.getMessage();
}
throw new ImportException(errMsg);
}
}
-
+
// Check data against validation constraints
// If we are migrating and dataset contact email is invalid, then set it to NA
Set invalidViolations = ds.getVersions().get(0).validate();
- if( !invalidViolations.isEmpty()) {
+ if (!invalidViolations.isEmpty()) {
if (importType.equals(ImportType.MIGRATION)) {
for (ConstraintViolation v : invalidViolations) {
DatasetFieldValue f = ((DatasetFieldValue) v.getRootBean());
@@ -205,21 +205,21 @@ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, Im
f.setValue(DatasetField.NA_VALUE);
}
}
- }
+ }
}
-
+
Dataset existingDs = datasetService.findByGlobalId(ds.getGlobalId());
if (existingDs != null) {
if (importType.equals(ImportType.HARVEST)) {
// For harvested datasets, there should always only be one version.
// We will replace the current version with the imported version.
- if (existingDs.getVersions().size()!=1) {
- throw new ImportException("Error importing Harvested Dataset, existing dataset has "+ existingDs.getVersions().size() + " versions");
+ if (existingDs.getVersions().size() != 1) {
+ throw new ImportException("Error importing Harvested Dataset, existing dataset has " + existingDs.getVersions().size() + " versions");
}
- engineSvc.submit(new DestroyDatasetCommand(existingDs,u));
+ engineSvc.submit(new DestroyDatasetCommand(existingDs, u));
Dataset managedDs = engineSvc.submit(new CreateDatasetCommand(ds, u, false, importType));
- status = " updated dataset, id=" + managedDs.getId() + ".";
+ status = " updated dataset, id=" + managedDs.getId() + ".";
} else {
// If we are adding a new version to an existing dataset,
// check that the version number isn't already in the dataset
@@ -228,11 +228,11 @@ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, Im
throw new ImportException("VersionNumber " + ds.getLatestVersion().getVersionNumber() + " already exists in dataset " + existingDs.getGlobalId());
}
}
- DatasetVersion dsv = engineSvc.submit(new CreateDatasetVersionCommand(u, existingDs, ds.getVersions().get(0)));
- status = " created datasetVersion, id=" + dsv.getId() + ".";
- createdId = dsv.getId();
+ DatasetVersion dsv = engineSvc.submit(new CreateDatasetVersionCommand(u, existingDs, ds.getVersions().get(0)));
+ status = " created datasetVersion, id=" + dsv.getId() + ".";
+ createdId = dsv.getId();
}
-
+
} else {
Dataset managedDs = engineSvc.submit(new CreateDatasetCommand(ds, u, false, importType));
status = " created dataset, id=" + managedDs.getId() + ".";
@@ -240,18 +240,17 @@ public JsonObjectBuilder doImport(User u, Dataverse owner, String xmlToParse, Im
}
} catch (JsonParseException ex) {
-
- importLogger.getLogger().info("Error parsing datasetVersion: " + ex.getMessage());
+
+ importLogger.getLogger().info("Error parsing datasetVersion: " + ex.getMessage());
throw new ImportException("Error parsing datasetVersion: " + ex.getMessage(), ex);
- } catch(CommandException ex) {
- importLogger.getLogger().info("Error excuting Create dataset command: " + ex.getMessage());
+ } catch (CommandException ex) {
+ importLogger.getLogger().info("Error excuting Create dataset command: " + ex.getMessage());
throw new ImportException("Error excuting dataverse command: " + ex.getMessage(), ex);
}
return Json.createObjectBuilder().add("message", status).add("id", createdId);
- }
- private static class MyCustomFormatter extends Formatter {
+ }
-
+ private static class MyCustomFormatter extends Formatter {
@Override
@@ -271,8 +270,6 @@ public String format(LogRecord record) {
}
-
-
}
}
diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUser.java b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUser.java
index d15e0b7a8a0..fee91effbe9 100644
--- a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUser.java
+++ b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/builtin/BuiltinUser.java
@@ -2,7 +2,6 @@
import edu.harvard.iq.dataverse.ValidateEmail;
import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo;
-import edu.harvard.iq.dataverse.authorization.RoleAssigneeDisplayInfo;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
@@ -13,7 +12,6 @@
import javax.persistence.NamedQuery;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
-import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
/**
@@ -45,19 +43,6 @@ public class BuiltinUser implements Serializable {
@Column( unique = true )
private String userName;
- /**
- * @todo Why are we storing email both here *and* in the authenticateduser
- * table? Is this a holdover from when this was the only user table? Yes, it
- * probably is. Here are places in the system that rely on the email address
- * being in this table:
- *
- * - password reset
- *
- * If this field is kept (probably shouldn't be) at least add a uniqueness
- * constraint per https://github.com/IQSS/dataverse/issues/845
- * @NotNull
- * @Column(nullable = false, unique=true)
- */
@NotBlank(message = "Please enter a valid email address.")
@ValidateEmail(message = "Please enter a valid email address.")
private String email;
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDatasetCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDatasetCommand.java
index 0f3a96b438d..7e341273b45 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDatasetCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDatasetCommand.java
@@ -11,6 +11,7 @@
import edu.harvard.iq.dataverse.api.imports.ImportUtil;
import edu.harvard.iq.dataverse.api.imports.ImportUtil.ImportType;
import edu.harvard.iq.dataverse.authorization.Permission;
+import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
@@ -68,7 +69,7 @@ public CreateDatasetCommand(Dataset theDataset, User user, boolean registrationR
this.template=null;
}
- public CreateDatasetCommand(Dataset theDataset, User user, boolean registrationRequired, ImportUtil.ImportType importType, Template template) {
+ public CreateDatasetCommand(Dataset theDataset, AuthenticatedUser user, boolean registrationRequired, ImportUtil.ImportType importType, Template template) {
super(user, theDataset.getOwner());
this.theDataset = theDataset;
this.registrationRequired = registrationRequired;
@@ -79,7 +80,6 @@ public CreateDatasetCommand(Dataset theDataset, User user, boolean registrationR
@Override
public Dataset execute(CommandContext ctxt) throws CommandException {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-hh.mm.ss");
- logger.log(Level.INFO, "start " + formatter.format(new Date().getTime()));
if ( importType!=ImportType.MIGRATION && !ctxt.datasets().isUniqueIdentifier(theDataset.getIdentifier(), theDataset.getProtocol(), theDataset.getAuthority(), theDataset.getDoiSeparator()) ) {
throw new IllegalCommandException(String.format("Dataset with identifier '%s', protocol '%s' and authority '%s' already exists",
@@ -102,10 +102,8 @@ public Dataset execute(CommandContext ctxt) throws CommandException {
throw new IllegalCommandException(validationFailedString, this);
}
- logger.log(Level.INFO, "after validation " + formatter.format(new Date().getTime()));
- // FIXME - need to revisit this. Either
- // theDataset.setCreator(getUser());
- // if, at all, we decide to keep it.
+ logger.log(Level.INFO, "after validation " + formatter.format(new Date().getTime())); // TODO remove
+ theDataset.setCreator((AuthenticatedUser) getUser());
theDataset.setCreateDate(new Timestamp(new Date().getTime()));
diff --git a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDataverseCommand.java b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDataverseCommand.java
index 5073590c65e..02725db9a39 100644
--- a/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDataverseCommand.java
+++ b/src/main/java/edu/harvard/iq/dataverse/engine/command/impl/CreateDataverseCommand.java
@@ -6,7 +6,7 @@
import edu.harvard.iq.dataverse.authorization.DataverseRole;
import edu.harvard.iq.dataverse.RoleAssignment;
import edu.harvard.iq.dataverse.authorization.Permission;
-import edu.harvard.iq.dataverse.authorization.users.User;
+import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.engine.command.AbstractCommand;
import edu.harvard.iq.dataverse.engine.command.CommandContext;
import edu.harvard.iq.dataverse.engine.command.RequiredPermissions;
@@ -31,7 +31,7 @@ public class CreateDataverseCommand extends AbstractCommand {
private final List facetList;
public CreateDataverseCommand(Dataverse created,
- User aUser, List facetList, List inputLevelList) {
+ AuthenticatedUser aUser, List facetList, List inputLevelList) {
super(aUser, created.getOwner());
this.created = created;
if (facetList != null) {
@@ -60,8 +60,7 @@ public Dataverse execute(CommandContext ctxt) throws CommandException {
}
if (created.getCreator() == null) {
- // FIXME Is the "creator" concept being carried over from 3.x?
-// created.setCreator(getUser());
+ created.setCreator((AuthenticatedUser) getUser());
}
if (created.getDataverseType() == null) {
diff --git a/src/main/java/edu/harvard/iq/dataverse/ingest/IngestServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/ingest/IngestServiceBean.java
index 9abe5d03ce7..78a146ed4e2 100644
--- a/src/main/java/edu/harvard/iq/dataverse/ingest/IngestServiceBean.java
+++ b/src/main/java/edu/harvard/iq/dataverse/ingest/IngestServiceBean.java
@@ -118,6 +118,7 @@
import java.util.zip.ZipException;
import java.util.zip.ZipInputStream;
import javax.annotation.PostConstruct;
+import javax.ejb.EJBException;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import org.apache.commons.io.FileUtils;
@@ -180,27 +181,31 @@ public class IngestServiceBean {
@PostConstruct
public void init() {
logger.info("Initializing the Ingest Service.");
- List ingestsInProgress = fileService.findIngestsInProgress();
- if (ingestsInProgress != null && ingestsInProgress.size() > 0) {
- logger.info("Ingest Service: " + ingestsInProgress.size()+" files are in the queue.");
- // go through the queue, remove the "ingest in progress" flags and the
- // any dataset locks found:
- Iterator dfit = ingestsInProgress.iterator();
- while (dfit.hasNext()) {
- DataFile datafile = (DataFile)dfit.next();
- logger.info("Ingest Service: removing ingest-in-progress status on datafile "+datafile.getId());
- datafile.setIngestDone();
- datafile = fileService.save(datafile);
-
- if (datafile.getOwner() != null && datafile.getOwner().isLocked()) {
- if (datafile.getOwner().getId() != null) {
- logger.fine("Ingest Servioce: removing lock on dataset "+datafile.getOwner().getId());
- datasetService.removeDatasetLock(datafile.getOwner().getId());
+ try {
+ List ingestsInProgress = fileService.findIngestsInProgress();
+ if (ingestsInProgress != null && ingestsInProgress.size() > 0) {
+ logger.log(Level.INFO, "Ingest Service: {0} files are in the queue.", ingestsInProgress.size());
+ // go through the queue, remove the "ingest in progress" flags and the
+ // any dataset locks found:
+ Iterator dfit = ingestsInProgress.iterator();
+ while (dfit.hasNext()) {
+ DataFile datafile = (DataFile)dfit.next();
+ logger.log(Level.INFO, "Ingest Service: removing ingest-in-progress status on datafile {0}", datafile.getId());
+ datafile.setIngestDone();
+ datafile = fileService.save(datafile);
+
+ if (datafile.getOwner() != null && datafile.getOwner().isLocked()) {
+ if (datafile.getOwner().getId() != null) {
+ logger.log(Level.FINE, "Ingest Servioce: removing lock on dataset {0}", datafile.getOwner().getId());
+ datasetService.removeDatasetLock(datafile.getOwner().getId());
+ }
}
}
+ } else {
+ logger.info("Ingest Service: zero files in the ingest queue.");
}
- } else {
- logger.info("Ingest Service: zero files in the ingest queue.");
+ } catch ( EJBException ex ) {
+ logger.log(Level.WARNING, "Error initing the IngestServiceBean: {0}", ex.getMessage());
}
}