Skip to content

Instantly share code, notes, and snippets.

@raprasad
Created January 9, 2017 16:22
Show Gist options
  • Select an option

  • Save raprasad/e714c99ec1731d41442cffd27e875397 to your computer and use it in GitHub Desktop.

Select an option

Save raprasad/e714c99ec1731d41442cffd27e875397 to your computer and use it in GitHub Desktop.
hacked, non-compiling file to use as starting point months from now
/*
* 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.datasetutility;
import edu.harvard.iq.dataverse.DataFile;
import edu.harvard.iq.dataverse.DataFileServiceBean;
import edu.harvard.iq.dataverse.Dataset;
import edu.harvard.iq.dataverse.DatasetServiceBean;
import edu.harvard.iq.dataverse.EjbDataverseEngine;
import edu.harvard.iq.dataverse.PermissionServiceBean;
import edu.harvard.iq.dataverse.authorization.users.User;
import edu.harvard.iq.dataverse.engine.command.DataverseRequest;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.impl.CreateDatasetCommand;
import edu.harvard.iq.dataverse.engine.command.impl.UpdateDatasetCommand;
import edu.harvard.iq.dataverse.ingest.IngestServiceBean;
import edu.harvard.iq.dataverse.util.SystemConfig;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.EJBException;
import javax.ws.rs.core.Response;
/**
*
* @author rmp553
*/
public class UpdateFileMetadataHelper {
private static final Logger logger = Logger.getLogger(UpdateFileMetadataHelper.class.getCanonicalName());
// -----------------------------------
// For error handling
// -----------------------------------
private boolean errorFound;
private List<String> errorMessages;
private Response.Status httpErrorCode; // optional
// -----------------------------------
// All the needed EJBs, passed to the constructor
// -----------------------------------
private IngestServiceBean ingestService;
private DatasetServiceBean datasetService;
private DataFileServiceBean fileService;
private PermissionServiceBean permissionService;
private EjbDataverseEngine commandEngine;
private SystemConfig systemConfig;
// -----------------------------------
// Instance variables directly added
// -----------------------------------
private Dataset dataset; // constructor (for add, not replace)
private DataverseRequest dvRequest; // constructor
private InputStream newFileInputStream; // step 20
private String newFileName; // step 20
private String newFileContentType; // step 20
// -- Optional
private DataFile fileToReplace; // step 25
private User user;
/**
* MAIN CONSTRUCTOR -- minimal requirements
*
* @param dataset
* @param ingestService
* @param datasetService
* @param dvRequest
*/
public UpdateFileMetadataHelper(DataverseRequest dvRequest,
DatasetServiceBean datasetService,
DataFileServiceBean fileService,
PermissionServiceBean permissionService,
EjbDataverseEngine commandEngine,
SystemConfig systemConfig) {
// ---------------------------------
// make sure DataverseRequest isn't null and has a user
// ---------------------------------
if (dvRequest == null) {
throw new NullPointerException("dvRequest cannot be null");
}
if (dvRequest.getUser() == null) {
throw new NullPointerException("dvRequest cannot have a null user");
}
// ---------------------------------
// make sure services aren't null
// ---------------------------------
if (datasetService == null) {
throw new NullPointerException("datasetService cannot be null");
}
if (fileService == null) {
throw new NullPointerException("fileService cannot be null");
}
if (permissionService == null) {
throw new NullPointerException("ingestService cannot be null");
}
if (commandEngine == null) {
throw new NullPointerException("commandEngine cannot be null");
}
if (systemConfig == null) {
throw new NullPointerException("systemConfig cannot be null");
}
// ---------------------------------
this.datasetService = datasetService;
this.fileService = fileService;
this.permissionService = permissionService;
this.commandEngine = commandEngine;
this.systemConfig = systemConfig;
initErrorHandling();
// Initiate instance vars
this.dataset = null;
this.dvRequest = dvRequest;
this.user = dvRequest.getUser();
}
public boolean updateFileMetadata(Long dataFileId, OptionalFileParams optionalFileParams) {
// Check for Null
//
if (dataFileId == null) {
this.addError("The dataFileId is null");
return false;
}
if (optionalFileParams == null) {
this.addError("optionalFileParams is null");
return false;
}
// Does the file exist?
//
DataFile existingFile = fileService.find(dataFileId);
if (existingFile == null) {
this.addError("File not found by id: " + dataFileId);
return false;
}
// Do we have permission to update this file
//
// NEED TO ADD THIS SO WORKING WITH DRAFT
//workingVersion = dataset.getEditVersion();
Dataset workingDataset = existingFile.getOwner().getEditVersion();
UpdateDatasetCommand updateDatasetCommand = new UpdateDatasetCommand(workingDataset, dvRequest);
if (!permissionService.isUserAllowedOn(user, updateDatasetCommand, workingDataset)) {
this.addError("You do not have permissin to edit this file");
return false;
}
// REDO THIS TO UPDATE THE FILE IN THE workingDataset
// Update description, categories, tags, etc
//
try {
optionalFileParams.addOptionalParams(existingFile);
} catch (DataFileTagException ex) {
Logger.getLogger(UpdateFileMetadataHelper.class.getName()).log(Level.SEVERE, null, ex);
addError(ex.getMessage());
return false;
}
try {
// Submit the update dataset command
// and update the local dataset object
//
dataset = commandEngine.submit(update_cmd);
} catch (CommandException ex) {
this.addErrorSevere(getBundleErr("add.command_engine_error"));
logger.severe(ex.getMessage());
return false;
}catch (EJBException ex) {
this.addErrorSevere("add.ejb_exception (see logs)");
logger.severe(ex.getMessage());
return false;
}
} // end: updateFileMetadata
/*
* Initialize error handling vars
*/
private void initErrorHandling() {
this.errorFound = false;
this.errorMessages = new ArrayList<>();
this.httpErrorCode = null;
}
/**
* Was an error found?
*
* @return
*/
public boolean hasError() {
return this.errorFound;
}
/**
* Add error message
*
* @param errMsg
*/
private void addError(String errMsg) {
if (errMsg == null) {
throw new NullPointerException("errMsg cannot be null");
}
this.errorFound = true;
logger.fine(errMsg);
this.errorMessages.add(errMsg);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment