/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE file at the root of the source
* tree and available online at
*
* https://github.com/keeps/roda
*/
/**
*
*/
package org.roda.wui.client.ingest.process;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.roda.core.data.common.RodaConstants;
import org.roda.core.data.exceptions.NotFoundException;
import org.roda.core.data.v2.index.facet.Facets;
import org.roda.core.data.v2.index.facet.SimpleFacetParameter;
import org.roda.core.data.v2.index.filter.Filter;
import org.roda.core.data.v2.index.filter.OneOfManyFilterParameter;
import org.roda.core.data.v2.index.filter.SimpleFilterParameter;
import org.roda.core.data.v2.index.select.SelectedItems;
import org.roda.core.data.v2.index.select.SelectedItemsAll;
import org.roda.core.data.v2.index.select.SelectedItemsFilter;
import org.roda.core.data.v2.index.select.SelectedItemsList;
import org.roda.core.data.v2.index.select.SelectedItemsNone;
import org.roda.core.data.v2.ip.AIP;
import org.roda.core.data.v2.ip.File;
import org.roda.core.data.v2.ip.IndexedAIP;
import org.roda.core.data.v2.ip.IndexedFile;
import org.roda.core.data.v2.ip.IndexedRepresentation;
import org.roda.core.data.v2.ip.Representation;
import org.roda.core.data.v2.jobs.Job;
import org.roda.core.data.v2.jobs.PluginInfo;
import org.roda.core.data.v2.jobs.PluginParameter;
import org.roda.core.data.v2.jobs.PluginParameter.PluginParameterType;
import org.roda.core.data.v2.jobs.PluginType;
import org.roda.core.data.v2.jobs.Report;
import org.roda.wui.client.browse.BrowserService;
import org.roda.wui.client.common.UserLogin;
import org.roda.wui.client.common.dialogs.Dialogs;
import org.roda.wui.client.common.lists.AIPList;
import org.roda.wui.client.common.lists.IngestJobReportList;
import org.roda.wui.client.common.lists.RepresentationList;
import org.roda.wui.client.common.lists.SimpleFileList;
import org.roda.wui.client.common.lists.SimpleJobReportList;
import org.roda.wui.client.common.lists.TransferredResourceList;
import org.roda.wui.client.common.lists.pagination.ListSelectionUtils;
import org.roda.wui.client.common.lists.utils.ClientSelectedItemsUtils;
import org.roda.wui.client.common.search.SearchPanel;
import org.roda.wui.client.common.utils.AsyncCallbackUtils;
import org.roda.wui.client.common.utils.HtmlSnippetUtils;
import org.roda.wui.client.common.utils.JavascriptUtils;
import org.roda.wui.client.common.utils.StringUtils;
import org.roda.wui.client.ingest.appraisal.IngestAppraisal;
import org.roda.wui.client.process.ActionProcess;
import org.roda.wui.client.process.IngestProcess;
import org.roda.wui.client.process.InternalProcess;
import org.roda.wui.client.process.Process;
import org.roda.wui.client.search.Search;
import org.roda.wui.common.client.HistoryResolver;
import org.roda.wui.common.client.tools.DescriptionLevelUtils;
import org.roda.wui.common.client.tools.FacetUtils;
import org.roda.wui.common.client.tools.HistoryUtils;
import org.roda.wui.common.client.tools.Humanize;
import org.roda.wui.common.client.tools.Humanize.DHMSFormat;
import org.roda.wui.common.client.tools.ListUtils;
import org.roda.wui.common.client.widgets.Toast;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import config.i18n.client.ClientMessages;
/**
* @author Luis Faria
*
*/
public class ShowJob extends Composite {
private static final int PERIOD_MILLIS = 10000;
public static final HistoryResolver RESOLVER = new HistoryResolver() {
@Override
public void resolve(List<String> historyTokens, final AsyncCallback<Widget> callback) {
if (historyTokens.size() == 1) {
String jobId = historyTokens.get(0);
BrowserService.Util.getInstance().retrieveJobBundle(jobId, new ArrayList<String>(),
new AsyncCallback<JobBundle>() {
@Override
public void onFailure(Throwable caught) {
if (caught instanceof NotFoundException) {
Toast.showError(messages.notFoundError(), messages.jobNotFound());
HistoryUtils.newHistory(Process.RESOLVER);
} else {
AsyncCallbackUtils.defaultFailureTreatment(caught);
}
}
@Override
public void onSuccess(JobBundle jobBundle) {
Map<String, PluginInfo> pluginsInfo = new HashMap<>();
for (PluginInfo pluginInfo : jobBundle.getPluginsInfo()) {
pluginsInfo.put(pluginInfo.getId(), pluginInfo);
}
ShowJob showJob = new ShowJob(jobBundle.getJob(), pluginsInfo);
callback.onSuccess(showJob);
}
});
} else if (historyTokens.size() > 1 && historyTokens.get(0).equals(ShowJobReport.RESOLVER.getHistoryToken())) {
ShowJobReport.RESOLVER.resolve(HistoryUtils.tail(historyTokens), callback);
} else {
HistoryUtils.newHistory(Process.RESOLVER);
callback.onSuccess(null);
}
}
@Override
public void isCurrentUserPermitted(AsyncCallback<Boolean> callback) {
// TODO check for show job permission
UserLogin.getInstance().checkRoles(new HistoryResolver[] {Process.RESOLVER}, false, callback);
}
@Override
public List<String> getHistoryPath() {
return ListUtils.concat(Process.RESOLVER.getHistoryPath(), getHistoryToken());
}
@Override
public String getHistoryToken() {
return "job";
}
};
interface MyUiBinder extends UiBinder<Widget, ShowJob> {
}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private static final ClientMessages messages = GWT.create(ClientMessages.class);
// empty to get all job information
private static final List<String> fieldsToReturn = new ArrayList<>();
private static final List<String> aipFieldsToReturn = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.AIP_LEVEL,
RodaConstants.AIP_TITLE);
private Job job;
private final Map<String, PluginInfo> pluginsInfo;
@UiField
Label name;
@UiField
Label creator;
@UiField
Label dateStarted;
@UiField
Label dateEndedLabel, dateEnded;
@UiField
Label duration;
@UiField
HTML progress;
@UiField
HTML status;
@UiField
Label stateDetailsLabel, stateDetailsValue;
@UiField
FlowPanel selectedListPanel;
@UiField
FlowPanel selectedList;
@UiField
Label plugin;
@UiField
FlowPanel pluginPanel;
@UiField
FlowPanel pluginOptions;
@UiField
FlowPanel reportListPanel;
@UiField
Label reportsLabel;
@UiField(provided = true)
SearchPanel ingestJobReportsSearchPanel;
@UiField(provided = true)
IngestJobReportList ingestJobReports;
@UiField(provided = true)
SearchPanel simpleJobReportsSearchPanel;
@UiField(provided = true)
SimpleJobReportList simpleJobReports;
@UiField
Button buttonAppraisal, buttonBack, buttonStop, buttonProcess;
@UiField(provided = true)
FlowPanel jobReportStatus;
@UiField(provided = true)
FlowPanel jobReportLastAction;
private final DateTimeFormat dateTimeFormat = DateTimeFormat.getFormat(RodaConstants.DEFAULT_DATETIME_FORMAT);
public ShowJob(Job job, Map<String, PluginInfo> pluginsInfo) {
this.job = job;
this.pluginsInfo = pluginsInfo;
boolean isIngest = false;
Facets facets = new Facets(new SimpleFacetParameter(RodaConstants.JOB_REPORT_PLUGIN_STATE),
new SimpleFacetParameter(RodaConstants.JOB_REPORT_PLUGIN_NAME));
Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.JOB_REPORT_JOB_ID, job.getUUID()));
if (job.getPluginType().equals(PluginType.INGEST)) {
ingestJobReports = new IngestJobReportList(
new Filter(new SimpleFilterParameter(RodaConstants.JOB_REPORT_JOB_ID, job.getId())), facets,
messages.reportList(), pluginsInfo, false);
ListSelectionUtils.bindBrowseOpener(ingestJobReports);
simpleJobReports = new SimpleJobReportList();
isIngest = true;
} else {
simpleJobReports = new SimpleJobReportList(
new Filter(new SimpleFilterParameter(RodaConstants.JOB_REPORT_JOB_ID, job.getId())), facets,
messages.reportList(), pluginsInfo, false);
ListSelectionUtils.bindBrowseOpener(simpleJobReports);
ingestJobReports = new IngestJobReportList();
}
ingestJobReportsSearchPanel = new SearchPanel(filter, RodaConstants.JOB_REPORT_SEARCH, true,
messages.jobProcessedSearchPlaceHolder(), false, false, false);
ingestJobReportsSearchPanel.setList(ingestJobReports);
simpleJobReportsSearchPanel = new SearchPanel(filter, RodaConstants.JOB_REPORT_SEARCH, true,
messages.jobProcessedSearchPlaceHolder(), false, false, false);
simpleJobReportsSearchPanel.setList(simpleJobReports);
jobReportStatus = new FlowPanel();
jobReportLastAction = new FlowPanel();
Map<String, FlowPanel> facetPanels = new HashMap<>();
facetPanels.put(RodaConstants.JOB_REPORT_PLUGIN_STATE, jobReportStatus);
facetPanels.put(RodaConstants.JOB_REPORT_PLUGIN_NAME, jobReportLastAction);
initWidget(uiBinder.createAndBindUi(this));
simpleJobReportsSearchPanel.setVisible(!isIngest);
simpleJobReports.setVisible(!isIngest);
ingestJobReportsSearchPanel.setVisible(isIngest);
ingestJobReports.setVisible(isIngest);
buttonProcess.setVisible(isIngest);
name.setText(job.getName());
creator.setText(job.getUsername());
dateStarted.setText(dateTimeFormat.format(job.getStartDate()));
update();
SelectedItems<?> selected = job.getSourceObjects();
selectedListPanel.setVisible(true);
if (isIngest) {
FacetUtils.bindFacets(ingestJobReports, facetPanels);
if (isJobRunning()) {
ingestJobReports.autoUpdate(PERIOD_MILLIS);
}
ingestJobReports.getSelectionModel().addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
Report jobReport = ingestJobReports.getSelectionModel().getSelectedObject();
if (jobReport != null) {
HistoryUtils.newHistory(ShowJobReport.RESOLVER, jobReport.getId());
}
}
});
showIngestSourceObjects(selected);
} else {
FacetUtils.bindFacets(simpleJobReports, facetPanels);
if (isJobRunning()) {
simpleJobReports.autoUpdate(PERIOD_MILLIS);
}
simpleJobReports.getSelectionModel().addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
Report jobReport = simpleJobReports.getSelectionModel().getSelectedObject();
if (jobReport != null) {
HistoryUtils.newHistory(ShowJobReport.RESOLVER, jobReport.getId());
}
}
});
showActionSourceObjects(selected);
}
PluginInfo pluginInfo = pluginsInfo.get(job.getPlugin());
if (pluginInfo != null) {
plugin.setText(messages.pluginLabelWithVersion(pluginInfo.getName(), pluginInfo.getVersion()));
if (pluginInfo.getParameters().isEmpty()) {
pluginPanel.setVisible(false);
pluginOptions.setVisible(false);
} else {
pluginPanel.setVisible(true);
pluginOptions.setVisible(true);
}
for (PluginParameter parameter : pluginInfo.getParameters()) {
if (PluginParameterType.BOOLEAN.equals(parameter.getType())) {
createBooleanLayout(parameter);
} else if (PluginParameterType.STRING.equals(parameter.getType())) {
createStringLayout(parameter);
} else if (PluginParameterType.PLUGIN_SIP_TO_AIP.equals(parameter.getType())) {
createPluginSipToAipLayout(parameter);
} else if (PluginParameterType.AIP_ID.equals(parameter.getType())) {
createSelectAipLayout(parameter);
} else {
createStringLayout(parameter);
}
}
} else {
plugin.setText(job.getPlugin());
pluginPanel.setVisible(false);
pluginOptions.setVisible(false);
}
}
@Override
protected void onDetach() {
if (autoUpdateTimer != null) {
autoUpdateTimer.cancel();
}
super.onDetach();
}
@Override
protected void onLoad() {
if (autoUpdateTimer != null && !autoUpdateTimer.isRunning() && isJobRunning()) {
autoUpdateTimer.scheduleRepeating(PERIOD_MILLIS);
}
JavascriptUtils.stickSidebar();
super.onLoad();
}
private boolean isJobRunning() {
return job != null && !job.isInFinalState();
}
private boolean isJobInFinalState() {
return job != null && job.isInFinalState();
}
private void showIngestSourceObjects(final SelectedItems<?> selected) {
if (selected != null) {
selectedList.clear();
selectedListPanel.setVisible(true);
if (ClientSelectedItemsUtils.isEmpty(selected) && isJobInFinalState()) {
selectedListPanel.setVisible(false);
} else if (selected instanceof SelectedItemsList) {
BrowserService.Util.getInstance().getListThreshold(new AsyncCallback<Integer>() {
@Override
public void onFailure(Throwable caught) {
AsyncCallbackUtils.defaultFailureTreatment(caught);
}
@Override
public void onSuccess(Integer threshold) {
List<String> ids = ((SelectedItemsList<?>) selected).getIds();
if (ids.size() > threshold) {
Label thresholdLabel = new Label(messages.thresholdExceeded(ids.size(), threshold));
selectedList.add(thresholdLabel);
} else {
Filter filter = new Filter(new OneOfManyFilterParameter(RodaConstants.INDEX_UUID, ids));
TransferredResourceList list = new TransferredResourceList(filter, null,
messages.transferredResourcesTitle(), false, 10, 10);
selectedList.add(list);
}
}
});
} else if (selected instanceof SelectedItemsFilter) {
Filter filter = ((SelectedItemsFilter<?>) selected).getFilter();
TransferredResourceList list = new TransferredResourceList(filter, null, messages.transferredResourcesTitle(),
false, 10, 10);
selectedList.add(list);
} else {
selectedListPanel.setVisible(false);
}
}
}
private void showActionSourceObjects(final SelectedItems<?> selected) {
if (selected != null) {
final boolean selectable = false;
final boolean justActive = true;
selectedList.clear();
if (selected instanceof SelectedItemsList) {
BrowserService.Util.getInstance().getListThreshold(new AsyncCallback<Integer>() {
@Override
public void onFailure(Throwable caught) {
AsyncCallbackUtils.defaultFailureTreatment(caught);
}
@Override
public void onSuccess(Integer threshold) {
List<String> ids = ((SelectedItemsList<?>) selected).getIds();
if (ids.isEmpty()) {
selectedListPanel.setVisible(false);
} else if (ids.size() > threshold) {
Label thresholdLabel = new Label(messages.thresholdExceeded(ids.size(), threshold));
selectedList.add(thresholdLabel);
} else {
Filter filter = new Filter(new OneOfManyFilterParameter(RodaConstants.INDEX_UUID, ids));
if (IndexedAIP.class.getName().equals(selected.getSelectedClass())) {
AIPList list = new AIPList(filter, justActive, null, messages.aipsTitle(), selectable, 10, 10);
selectedList.add(list);
} else if (IndexedRepresentation.class.getName().equals(selected.getSelectedClass())) {
RepresentationList list = new RepresentationList(filter, justActive, null,
messages.representationsTitle(), selectable, 10, 10);
selectedList.add(list);
} else if (IndexedFile.class.getName().equals(selected.getSelectedClass())) {
SimpleFileList list = new SimpleFileList(filter, justActive, null, messages.filesTitle(), selectable,
10, 10);
selectedList.add(list);
}
}
}
});
} else if (selected instanceof SelectedItemsFilter) {
Filter filter = ((SelectedItemsFilter<?>) selected).getFilter();
if (IndexedAIP.class.getName().equals(selected.getSelectedClass())) {
AIPList list = new AIPList(filter, justActive, null, messages.aipsTitle(), selectable, 10, 10);
selectedList.add(list);
} else if (IndexedRepresentation.class.getName().equals(selected.getSelectedClass())) {
RepresentationList list = new RepresentationList(filter, justActive, null, messages.representationsTitle(),
selectable, 10, 10);
selectedList.add(list);
} else if (IndexedFile.class.getName().equals(selected.getSelectedClass())) {
SimpleFileList list = new SimpleFileList(filter, justActive, null, messages.filesTitle(), selectable, 10, 10);
selectedList.add(list);
}
} else if (selected instanceof SelectedItemsAll || selected instanceof SelectedItemsNone) {
Label objectLabel = new Label();
objectLabel.addStyleName("value");
if (AIP.class.getName().equals(selected.getSelectedClass())
|| IndexedAIP.class.getName().equals(selected.getSelectedClass())) {
objectLabel.setText(messages.allIntellectualEntities());
} else if (Representation.class.getName().equals(selected.getSelectedClass())
|| IndexedRepresentation.class.getName().equals(selected.getSelectedClass())) {
objectLabel.setText(messages.allRepresentations());
} else if (File.class.getName().equals(selected.getSelectedClass())
|| IndexedFile.class.getName().equals(selected.getSelectedClass())) {
objectLabel.setText(messages.allFiles());
}
selectedList.add(objectLabel);
} else {
selectedListPanel.setVisible(false);
}
}
}
private void update() {
// set end date
dateEndedLabel.setVisible(job.getEndDate() != null);
dateEnded.setVisible(job.getEndDate() != null);
if (job.getEndDate() != null) {
dateEnded.setText(dateTimeFormat.format(job.getEndDate()));
}
// set duration
duration.setText(Humanize.durationInDHMS(job.getStartDate(), job.getEndDate(), DHMSFormat.LONG));
// set state
status.setHTML(HtmlSnippetUtils.getJobStateHtml(job));
// set state details
boolean hasStateDetails = StringUtils.isNotBlank(job.getStateDetails());
stateDetailsLabel.setVisible(hasStateDetails);
stateDetailsValue.setVisible(hasStateDetails);
if (hasStateDetails) {
stateDetailsValue.setText(job.getStateDetails());
}
// set counters
SafeHtmlBuilder b = new SafeHtmlBuilder();
b.append(SafeHtmlUtils.fromSafeConstant("<span class='label-default'>"));
b.append(messages.showJobProgressCompletionPercentage(job.getJobStats().getCompletionPercentage()));
b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
if (job.getJobStats().getSourceObjectsCount() > 0) {
b.append(SafeHtmlUtils.fromSafeConstant(" <span class='label-default'>"));
b.append(messages.showJobProgressTotalCount(job.getJobStats().getSourceObjectsCount()));
b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
}
if (job.getJobStats().getSourceObjectsProcessedWithSuccess() > 0) {
b.append(SafeHtmlUtils.fromSafeConstant(" <span class='label-success'>"));
b.append(messages.showJobProgressSuccessfulCount(job.getJobStats().getSourceObjectsProcessedWithSuccess()));
b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
}
if (job.getJobStats().getSourceObjectsProcessedWithFailure() > 0) {
b.append(SafeHtmlUtils.fromSafeConstant(" <span class='label-danger'>"));
b.append(messages.showJobProgressFailedCount(job.getJobStats().getSourceObjectsProcessedWithFailure()));
b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
}
if (job.getJobStats().getSourceObjectsBeingProcessed() > 0) {
b.append(SafeHtmlUtils.fromSafeConstant(" <span class='label-info'>"));
b.append(messages.showJobProgressProcessingCount(job.getJobStats().getSourceObjectsBeingProcessed()));
b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
}
if (job.getJobStats().getSourceObjectsWaitingToBeProcessed() > 0) {
b.append(SafeHtmlUtils.fromSafeConstant(" <span class='label-warning'>"));
b.append(messages.showJobProgressWaitingCount(job.getJobStats().getSourceObjectsWaitingToBeProcessed()));
b.append(SafeHtmlUtils.fromSafeConstant("</span>"));
}
progress.setHTML(b.toSafeHtml());
buttonStop.setText(messages.stopButton());
buttonStop.setVisible(!job.isInFinalState());
buttonStop.setEnabled(!job.isStopping());
buttonAppraisal
.setText(messages.appraisalTitle() + " (" + job.getJobStats().getOutcomeObjectsWithManualIntervention() + ")");
buttonAppraisal.setVisible(job.getJobStats().getOutcomeObjectsWithManualIntervention() > 0);
scheduleUpdateStatus();
}
private Timer autoUpdateTimer = null;
private void scheduleUpdateStatus() {
if (!job.isInFinalState()) {
if (autoUpdateTimer == null) {
autoUpdateTimer = new Timer() {
@Override
public void run() {
BrowserService.Util.getInstance().retrieve(Job.class.getName(), job.getId(), fieldsToReturn,
new AsyncCallback<Job>() {
@Override
public void onFailure(Throwable caught) {
AsyncCallbackUtils.defaultFailureTreatment(caught);
}
@Override
public void onSuccess(Job updatedJob) {
ShowJob.this.job = updatedJob;
update();
scheduleUpdateStatus();
}
});
}
};
}
autoUpdateTimer.schedule(PERIOD_MILLIS);
}
}
private void createSelectAipLayout(PluginParameter parameter) {
Label parameterName = new Label(parameter.getName());
final FlowPanel aipPanel = new FlowPanel();
final String value = job.getPluginParameters().containsKey(parameter.getId())
? job.getPluginParameters().get(parameter.getId()) : parameter.getDefaultValue();
if (value != null && !value.isEmpty()) {
BrowserService.Util.getInstance().retrieve(IndexedAIP.class.getName(), value, aipFieldsToReturn,
new AsyncCallback<IndexedAIP>() {
@Override
public void onFailure(Throwable caught) {
if (caught instanceof NotFoundException) {
Label itemTitle = new Label(value);
itemTitle.addStyleName("itemText");
aipPanel.clear();
aipPanel.add(itemTitle);
} else {
AsyncCallbackUtils.defaultFailureTreatment(caught);
}
}
@Override
public void onSuccess(IndexedAIP aip) {
Label itemTitle = new Label();
HTMLPanel itemIconHtmlPanel = DescriptionLevelUtils.getElementLevelIconHTMLPanel(aip.getLevel());
itemIconHtmlPanel.addStyleName("itemIcon");
itemTitle.setText(aip.getTitle() != null ? aip.getTitle() : aip.getId());
itemTitle.addStyleName("itemText");
aipPanel.clear();
aipPanel.add(itemIconHtmlPanel);
aipPanel.add(itemTitle);
}
});
} else {
HTMLPanel itemIconHtmlPanel = DescriptionLevelUtils.getTopIconHTMLPanel();
aipPanel.clear();
aipPanel.add(itemIconHtmlPanel);
}
pluginOptions.add(parameterName);
pluginOptions.add(aipPanel);
parameterName.addStyleName("form-label itemLabel");
aipPanel.addStyleName("itemPanel itemPanelShow");
}
private void createBooleanLayout(PluginParameter parameter) {
CheckBox checkBox = new CheckBox(parameter.getName());
String value = job.getPluginParameters().get(parameter.getId());
if (value == null) {
value = parameter.getDefaultValue();
}
checkBox.setValue("true".equals(value));
checkBox.setEnabled(false);
pluginOptions.add(checkBox);
addHelp(parameter.getDescription());
checkBox.addStyleName("form-checkbox");
}
private void createStringLayout(PluginParameter parameter) {
String value = job.getPluginParameters().get(parameter.getId());
if (value == null) {
value = parameter.getDefaultValue();
}
if (value != null && value.length() > 0) {
Label parameterLabel = new Label(parameter.getName());
Label parameterValue = new Label(value);
pluginOptions.add(parameterLabel);
pluginOptions.add(parameterValue);
parameterLabel.addStyleName("label");
addHelp(parameter.getDescription());
}
}
private void createPluginSipToAipLayout(PluginParameter parameter) {
String value = job.getPluginParameters().get(parameter.getId());
if (value == null) {
value = parameter.getDefaultValue();
}
if (StringUtils.isNotBlank(value)) {
Label pluginLabel = new Label(parameter.getName());
PluginInfo sipToAipPlugin = pluginsInfo.get(value);
RadioButton pluginValue;
pluginOptions.add(pluginLabel);
addHelp(parameter.getDescription());
if (sipToAipPlugin != null) {
pluginValue = new RadioButton(parameter.getId(),
messages.pluginLabelWithVersion(sipToAipPlugin.getName(), sipToAipPlugin.getVersion()));
pluginValue.setValue(true);
pluginValue.setEnabled(false);
pluginOptions.add(pluginValue);
addHelp(sipToAipPlugin.getDescription());
} else {
pluginValue = new RadioButton(parameter.getId(), value);
pluginValue.setValue(true);
pluginValue.setEnabled(false);
pluginOptions.add(pluginValue);
}
pluginLabel.addStyleName("label");
pluginValue.addStyleName("form-radiobutton");
}
}
private void addHelp(String description) {
if (description != null && description.length() > 0) {
Label pHelp = new Label(description);
pluginOptions.add(pHelp);
pHelp.addStyleName("form-help");
}
}
@UiHandler("buttonAppraisal")
void buttonAppraisalHandler(ClickEvent e) {
HistoryUtils.newHistory(IngestAppraisal.RESOLVER, RodaConstants.SEARCH_ITEMS, RodaConstants.INGEST_JOB_ID,
job.getId());
}
@UiHandler("buttonBack")
void buttonCancelHandler(ClickEvent e) {
cancel();
}
@UiHandler("buttonStop")
void buttonStopHandler(ClickEvent e) {
stop();
}
private void cancel() {
if (job.getPluginType().equals(PluginType.INGEST)) {
HistoryUtils.newHistory(IngestProcess.RESOLVER);
} else if (job.getPluginType().equals(PluginType.INTERNAL)) {
HistoryUtils.newHistory(InternalProcess.RESOLVER);
} else {
HistoryUtils.newHistory(ActionProcess.RESOLVER);
}
}
private void stop() {
Dialogs.showConfirmDialog(messages.jobStopConfirmDialogTitle(), messages.jobStopConfirmDialogMessage(),
messages.dialogCancel(), messages.dialogYes(), new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
// nothing to do
}
@Override
public void onSuccess(Boolean confirmed) {
if (confirmed) {
BrowserService.Util.getInstance().stopJob(job.getId(), new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
// FIXME 20160826 hsilva: do proper handling of the failure
}
@Override
public void onSuccess(Void result) {
// FIXME 20160826 hsilva: do proper handling of the success
}
});
}
}
});
}
@UiHandler("buttonProcess")
void buttonProcessHandler(ClickEvent e) {
if (job != null) {
HistoryUtils.newHistory(Search.RESOLVER, "items", "ingestJobId", job.getId());
}
}
}