/** * 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.common.actions; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.roda.core.data.exceptions.RequestNotValidException; import org.roda.core.data.v2.index.select.SelectedItems; import org.roda.core.data.v2.ip.DIPFile; import org.roda.wui.common.client.tools.RestUtils; import com.google.gwt.core.client.GWT; import com.google.gwt.safehtml.shared.SafeUri; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Widget; import config.i18n.client.ClientMessages; public class DisseminationFileActions extends AbstractActionable<DIPFile> { private static final DisseminationFileActions INSTANCE = new DisseminationFileActions(); private static final ClientMessages messages = GWT.create(ClientMessages.class); private static final Set<DisseminationFileAction> POSSIBLE_ACTIONS_ON_SINGLE_DISSEMINATION_FILE = new HashSet<>( Arrays.asList(DisseminationFileAction.values())); private static final Set<DisseminationFileAction> POSSIBLE_ACTIONS_ON_MULTIPLE_DISSEMINATION_FILES = new HashSet<>(); private DisseminationFileActions() { // do nothing } public enum DisseminationFileAction implements Actionable.Action<DIPFile> { DOWNLOAD; } public static DisseminationFileActions get() { return INSTANCE; } @Override public boolean canAct(Actionable.Action<DIPFile> action, DIPFile dip) { return POSSIBLE_ACTIONS_ON_SINGLE_DISSEMINATION_FILE.contains(action); } @Override public boolean canAct(Actionable.Action<DIPFile> action, SelectedItems<DIPFile> selectedItems) { return POSSIBLE_ACTIONS_ON_MULTIPLE_DISSEMINATION_FILES.contains(action); } @Override public void act(Actionable.Action<DIPFile> action, DIPFile disseminationFile, AsyncCallback<ActionImpact> callback) { if (DisseminationFileAction.DOWNLOAD.equals(action)) { download(disseminationFile, callback); } else { callback.onFailure(new RequestNotValidException("Unsupported action in this context: " + action)); } } /** * Act on multiple files from different representations */ @Override public void act(Actionable.Action<DIPFile> action, SelectedItems<DIPFile> selectedItems, AsyncCallback<ActionImpact> callback) { callback.onFailure(new RequestNotValidException("Unsupported action in this context: " + action)); } // ACTIONS private void download(DIPFile disseminationFile, AsyncCallback<ActionImpact> callback) { SafeUri downloadUri = RestUtils.createDipFileDownloadUri(disseminationFile.getUUID()); if (downloadUri != null) { Window.Location.assign(downloadUri.asString()); } callback.onSuccess(ActionImpact.NONE); } @Override public Widget createActionsLayout(DIPFile disseminationFile, AsyncCallback<ActionImpact> callback) { FlowPanel layout = createLayout(); // MANAGEMENT addTitle(layout, messages.disseminationFile(), disseminationFile, DisseminationFileAction.DOWNLOAD); // DOWNLOAD,REMOVE addButton(layout, messages.downloadButton(), DisseminationFileAction.DOWNLOAD, disseminationFile, ActionImpact.NONE, callback, "btn-download"); return layout; } @Override public Widget createActionsLayout(SelectedItems<DIPFile> disseminationFiles, AsyncCallback<ActionImpact> callback) { // MANAGEMENT // addTitle(layout, messages.disseminationFile()); return createLayout(); } }