Skip to content

Commit

Permalink
#4610 Dual Mode Fix Renders and add Rsync capability
Browse files Browse the repository at this point in the history
  • Loading branch information
sekmiller committed Jul 13, 2018
1 parent 175ab87 commit 8dffc46
Show file tree
Hide file tree
Showing 6 changed files with 257 additions and 72 deletions.
107 changes: 102 additions & 5 deletions src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@
import edu.harvard.iq.dataverse.datasetutility.FileReplaceException;
import edu.harvard.iq.dataverse.datasetutility.FileReplacePageHelper;
import edu.harvard.iq.dataverse.dataaccess.ImageThumbConverter;
import edu.harvard.iq.dataverse.datacapturemodule.DataCaptureModuleUtil;
import edu.harvard.iq.dataverse.datacapturemodule.ScriptRequestResponse;
import edu.harvard.iq.dataverse.dataset.DatasetThumbnail;
import edu.harvard.iq.dataverse.engine.command.Command;
import edu.harvard.iq.dataverse.engine.command.exception.CommandException;
import edu.harvard.iq.dataverse.engine.command.impl.DeleteDataFileCommand;
import edu.harvard.iq.dataverse.engine.command.impl.RequestRsyncScriptCommand;
import edu.harvard.iq.dataverse.engine.command.impl.UpdateDatasetCommand;
import edu.harvard.iq.dataverse.engine.command.impl.UpdateDatasetThumbnailCommand;
import edu.harvard.iq.dataverse.ingest.IngestRequest;
Expand Down Expand Up @@ -65,6 +68,8 @@
import java.util.logging.Level;
import javax.faces.event.AjaxBehaviorEvent;
import javax.faces.event.FacesEvent;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.primefaces.context.RequestContext;

Expand Down Expand Up @@ -114,7 +119,8 @@ public enum FileEditMode {
@Inject PermissionsWrapper permissionsWrapper;
@Inject FileDownloadHelper fileDownloadHelper;
@Inject ProvPopupFragmentBean provPopupFragmentBean;

@Inject
SettingsWrapper settingsWrapper;
private final DateFormat displayDateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM);

private Dataset dataset = new Dataset();
Expand Down Expand Up @@ -531,7 +537,7 @@ public String init() {
logger.fine("The page is called with " + selectedFileIdsList.size() + " file ids.");

populateFileMetadatas();

setUpRsync();
// and if no filemetadatas can be found for the specified file ids
// and version id - same deal, send them to the "not found" page.
// (at least for now; ideally, we probably want to show them a page
Expand Down Expand Up @@ -832,7 +838,10 @@ private String getBundleString(String msgName){
return ResourceBundle.getBundle("Bundle").getString(msgName);
}


public void deleteFilesCompleted(){

}

public void deleteFiles() {
logger.info("entering bulk file delete (EditDataFilesPage)");
if (isFileReplaceOperation()){
Expand Down Expand Up @@ -986,18 +995,23 @@ public void deleteFiles() {
if (markedForDelete.getDataFile().getStorageIdentifier().equals(dfn.getStorageIdentifier())) {
nfIt.remove();
}
}
}

}
}


if (fileNames != null) {
if(newFiles.isEmpty()){
fileMetadatas = new ArrayList<>();
}
String successMessage = getBundleString("file.deleted.success");
logger.fine(successMessage);
successMessage = successMessage.replace("{0}", fileNames);
JsfHelper.addFlashMessage(successMessage);

}

}

public String saveWithTermsOfUse() {
Expand Down Expand Up @@ -1672,12 +1686,95 @@ public void uploadStarted() {
// uploadStarted() is triggered by PrimeFaces <p:upload onStart=... when an upload is
// started. It will be called *once*, even if it is a multiple file upload
// (either through drag-and-drop or select menu).

logger.fine("upload started");

uploadInProgress = true;
}


private Boolean hasRsyncScript = false;
public Boolean isHasRsyncScript() {
return hasRsyncScript;
}

public void setHasRsyncScript(Boolean hasRsyncScript) {
this.hasRsyncScript = hasRsyncScript;
}

private void setUpRsync() {
if (DataCaptureModuleUtil.rsyncSupportEnabled(settingsWrapper.getValueForKey(SettingsServiceBean.Key.UploadMethods))) {
try {
ScriptRequestResponse scriptRequestResponse = commandEngine.submit(new RequestRsyncScriptCommand(dvRequestService.getDataverseRequest(), dataset));
logger.fine("script: " + scriptRequestResponse.getScript());
if (scriptRequestResponse.getScript() != null && !scriptRequestResponse.getScript().isEmpty()) {
setRsyncScript(scriptRequestResponse.getScript());
rsyncScriptFilename = "upload-" + workingVersion.getDataset().getIdentifier() + ".bash";
setHasRsyncScript(true);
} else {
setHasRsyncScript(false);
}
} catch (RuntimeException ex) {
logger.warning("Problem getting rsync script: " + ex.getLocalizedMessage());
} catch (CommandException cex) {
logger.warning("Problem getting rsync script (Command Exception): " + cex.getLocalizedMessage());
}
}
}

public void downloadRsyncScript() {

String bibFormatDowload = new BibtexCitation(workingVersion).toString();
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
response.setContentType("application/download");

String contentDispositionString;

contentDispositionString = "attachment;filename=" + rsyncScriptFilename;
response.setHeader("Content-Disposition", contentDispositionString);

try {
ServletOutputStream out = response.getOutputStream();
out.write(getRsyncScript().getBytes());
out.flush();
ctx.responseComplete();
} catch (IOException e) {
String error = "Problem getting bytes from rsync script: " + e;
logger.warning(error);
return;
}

// If the script has been successfully downloaded, lock the dataset:
String lockInfoMessage = "script downloaded";
DatasetLock lock = datasetService.addDatasetLock(dataset.getId(), DatasetLock.Reason.DcmUpload, session.getUser() != null ? ((AuthenticatedUser)session.getUser()).getId() : null, lockInfoMessage);
if (lock != null) {
dataset.addLock(lock);
} else {
logger.log(Level.WARNING, "Failed to lock the dataset (dataset id={0})", dataset.getId());
}

}

/**
* The contents of the script.
*/
private String rsyncScript = "";

public String getRsyncScript() {
return rsyncScript;
}

public void setRsyncScript(String rsyncScript) {
this.rsyncScript = rsyncScript;
}

private String rsyncScriptFilename;

public String getRsyncScriptFilename() {
return rsyncScriptFilename;
}


public void uploadFinished() {
// This method is triggered from the page, by the <p:upload ... onComplete=...
// attribute.
Expand Down
14 changes: 14 additions & 0 deletions src/main/java/edu/harvard/iq/dataverse/SettingsWrapper.java
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,20 @@ public String getSupportTeamName() {
public boolean isRootDataverseThemeDisabled() {
return isTrueForKey(Key.DisableRootDataverseTheme, false);
}

public String getDropBoxKey() {

String configuredDropBoxKey = System.getProperty("dataverse.dropbox.key");
if (configuredDropBoxKey != null) {
return configuredDropBoxKey;
}
return "";
}

public Boolean isHasDropBoxKey() {

return !getDropBoxKey().isEmpty();
}

}

15 changes: 9 additions & 6 deletions src/main/webapp/dataset.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -198,13 +198,13 @@
<span class="glyphicon glyphicon-pencil"/> #{bundle['dataset.editBtn']} <span class="caret"></span>
</button>
<ul class="dropdown-menu pull-right text-left" role="menu">
<ui:fragment rendered="#{!settingsWrapper.rsyncUpload}">
<!-- show upload files button to support dual mode -->
<li>
<h:outputLink value="/editdatafiles.xhtml?datasetId=#{DatasetPage.dataset.id}&#38;mode=UPLOAD">
<h:outputText value="#{bundle['dataset.editBtn.itemLabel.upload']}"/>
</h:outputLink>
</li>
</ui:fragment>

<li>
<p:commandLink id="editMetadata" actionListener="#{DatasetPage.edit('METADATA')}" update="@form,:datasetForm,:messagePanel" oncomplete="javascript:post_edit_metadata()">
<f:setPropertyActionListener target="#{DatasetPage.selectedTabIndex}" value="0" />
Expand Down Expand Up @@ -560,8 +560,10 @@
</script>
</p:fragment>

<ui:fragment id="uploadFilesOnCreateTab" rendered="#{!DatasetPage.workingVersion.deaccessioned and
<ui:fragment id="uploadFilesOnCreateTab" rendered="#{!DatasetPage.workingVersion.deaccessioned and
(DatasetPage.editMode == 'CREATE')}">
<ui:remove>
<!-- Removing this because it is now included in editFilesFragment with render logic therein -->
<div jsf:rendered="#{settingsWrapper.rsyncUpload}" data-widget="content" class="ui-tabs ui-widget ui-widget-content ui-corner-all ui-hidden-container ui-tabs-top" id="datasetForm:tabView">
<!-- Create-Upload Disabled // Static Tab Layout -->
<ul role="tablist" class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all">
Expand All @@ -576,15 +578,16 @@
</div>
<!-- END: Create-Upload Disabled // Static Tab Layout -->
</div>

<ui:fragment rendered="#{!settingsWrapper.rsyncUpload}">
</ui:remove>

<ui:include src="editFilesFragment.xhtml">
<ui:param name="datasetPage" value="true"/>
<ui:param name="dataverse" value="#{DatasetPage.dataset.owner}"/>
<ui:param name="dataset" value="#{DatasetPage.dataset}"/>
<ui:param name="version" value="#{DatasetPage.workingVersion}"/>
<ui:param name="createDataset" value="true"/>
</ui:include>
</ui:fragment>

</ui:fragment>

<p:tabView id="tabView" widgetVar="content" activeIndex="#{DatasetPage.selectedTabIndex}"
Expand Down
Loading

0 comments on commit 8dffc46

Please sign in to comment.