org.roda.wui.client.common.slider.DisseminationsSliderHelper.java Source code

Java tutorial

Introduction

Here is the source code for org.roda.wui.client.common.slider.DisseminationsSliderHelper.java

Source

/**
 * 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.slider;

import java.util.Arrays;
import java.util.List;

import org.roda.core.data.common.RodaConstants;
import org.roda.core.data.v2.index.IndexResult;
import org.roda.core.data.v2.index.IsIndexed;
import org.roda.core.data.v2.index.facet.Facets;
import org.roda.core.data.v2.index.filter.Filter;
import org.roda.core.data.v2.index.filter.SimpleFilterParameter;
import org.roda.core.data.v2.index.sort.SortParameter;
import org.roda.core.data.v2.index.sort.Sorter;
import org.roda.core.data.v2.index.sublist.Sublist;
import org.roda.core.data.v2.ip.IndexedAIP;
import org.roda.core.data.v2.ip.IndexedDIP;
import org.roda.core.data.v2.ip.IndexedFile;
import org.roda.core.data.v2.ip.IndexedRepresentation;
import org.roda.wui.client.browse.BrowserService;
import org.roda.wui.client.common.actions.Actionable;
import org.roda.wui.client.common.actions.DisseminationActions;
import org.roda.wui.client.common.popup.CalloutPopup;
import org.roda.wui.client.common.popup.CalloutPopup.CalloutPosition;
import org.roda.wui.client.common.utils.AsyncCallbackUtils;
import org.roda.wui.client.common.utils.StringUtils;
import org.roda.wui.common.client.tools.HistoryUtils;
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.event.dom.client.ClickHandler;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.safehtml.shared.SafeHtmlUtils;
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.FocusPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.UIObject;

import config.i18n.client.ClientMessages;

public class DisseminationsSliderHelper {

    private static final ClientMessages messages = GWT.create(ClientMessages.class);

    private DisseminationsSliderHelper() {
        // do nothing
    }

    private static void updateDisseminationsSliderPanel(final IndexedAIP aip,
            final SliderPanel disseminationsSliderPanel) {
        Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.DIP_AIP_UUIDS, aip.getUUID()));
        updateDisseminations(filter, disseminationsSliderPanel);
    }

    private static void updateDisseminationsSliderPanel(IndexedRepresentation representation,
            final SliderPanel disseminationsSliderPanel) {
        Filter filter = new Filter(
                new SimpleFilterParameter(RodaConstants.DIP_REPRESENTATION_UUIDS, representation.getUUID()));
        updateDisseminations(filter, disseminationsSliderPanel);
    }

    private static void updateDisseminationsSliderPanel(IndexedFile file,
            final SliderPanel disseminationsSliderPanel) {
        Filter filter = new Filter(new SimpleFilterParameter(RodaConstants.DIP_FILE_UUIDS, file.getUUID()));
        updateDisseminations(filter, disseminationsSliderPanel);
    }

    private static void updateDisseminations(Filter filter, final SliderPanel disseminationsSliderPanel) {
        Sorter sorter = new Sorter(new SortParameter(RodaConstants.DIP_DATE_CREATED, true));
        Sublist sublist = new Sublist(0, 100);
        Facets facets = Facets.NONE;
        String localeString = LocaleInfo.getCurrentLocale().getLocaleName();
        boolean justActive = true;

        List<String> dipFields = Arrays.asList(RodaConstants.INDEX_UUID, RodaConstants.DIP_ID,
                RodaConstants.DIP_TITLE, RodaConstants.DIP_DESCRIPTION, RodaConstants.DIP_DELETE_EXTERNAL_URL,
                RodaConstants.DIP_OPEN_EXTERNAL_URL);

        BrowserService.Util.getInstance().find(IndexedDIP.class.getName(), filter, sorter, sublist, facets,
                localeString, justActive, dipFields, new AsyncCallback<IndexResult<IndexedDIP>>() {

                    @Override
                    public void onFailure(Throwable caught) {
                        AsyncCallbackUtils.defaultFailureTreatment(caught);
                    }

                    @Override
                    public void onSuccess(IndexResult<IndexedDIP> result) {
                        updateDisseminationsSliderPanel(result.getResults(), disseminationsSliderPanel);
                    }
                });
    }

    private static void updateDisseminationsSliderPanel(List<IndexedDIP> dips,
            SliderPanel disseminationsSliderPanel) {

        disseminationsSliderPanel.clear();
        disseminationsSliderPanel.addTitle(new Label(messages.viewRepresentationFileDisseminationTitle()));

        if (dips.isEmpty()) {
            Label dipEmpty = new Label(messages.browseFileDipEmpty());
            disseminationsSliderPanel.addContent(dipEmpty);
            dipEmpty.addStyleName("dip-empty");
        } else {
            for (final IndexedDIP dip : dips) {
                disseminationsSliderPanel.addContent(createDisseminationPanel(dip));
            }
        }
    }

    private static FlowPanel createDisseminationPanel(final IndexedDIP dip) {
        FlowPanel layout = new FlowPanel();

        // open layout
        FlowPanel leftLayout = new FlowPanel();
        Label titleLabel = new Label(dip.getTitle());
        Label descriptionLabel = new Label(dip.getDescription());

        leftLayout.add(titleLabel);
        leftLayout.add(descriptionLabel);

        FocusPanel openFocus = new FocusPanel(leftLayout);
        layout.add(openFocus);

        // options
        HTML optionsIcon = new HTML(SafeHtmlUtils.fromSafeConstant("<i class='fa fa-ellipsis-v'></i>"));
        final FocusPanel optionsButton = new FocusPanel(optionsIcon);

        optionsButton.addStyleName("lightbtn");
        optionsIcon.addStyleName("lightbtn-icon");
        optionsButton.setTitle(messages.browseFileDipDelete());

        optionsButton.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                showActions(dip, optionsButton);
            }
        });

        layout.add(optionsButton);

        titleLabel.addStyleName("dipTitle");
        descriptionLabel.addStyleName("dipDescription");
        layout.addStyleName("dip");
        leftLayout.addStyleName("dip-left");
        openFocus.addStyleName("dip-focus");
        optionsButton.addStyleName("dip-options");

        openFocus.addClickHandler(new ClickHandler() {

            @Override
            public void onClick(ClickEvent event) {
                BrowserService.Util.getInstance().showDIPEmbedded(new AsyncCallback<Boolean>() {
                    @Override
                    public void onFailure(Throwable caught) {
                        AsyncCallbackUtils.defaultFailureTreatment(caught);
                    }

                    @Override
                    public void onSuccess(Boolean showEmbedded) {
                        if (StringUtils.isNotBlank(dip.getOpenExternalURL()) && !showEmbedded) {
                            Window.open(dip.getOpenExternalURL(), "_blank", "");
                            Toast.showInfo(messages.browseFileDipOpenedExternalURL(), dip.getOpenExternalURL());
                        } else {
                            HistoryUtils.openBrowse(dip);
                        }
                    }
                });
            }

        });

        return layout;
    }

    protected static <T extends IsIndexed> void updateDisseminationsObjectSliderPanel(final T object,
            final SliderPanel disseminationsSliderPanel) {
        if (object instanceof IndexedAIP) {
            updateDisseminationsSliderPanel((IndexedAIP) object, disseminationsSliderPanel);
        } else if (object instanceof IndexedRepresentation) {
            updateDisseminationsSliderPanel((IndexedRepresentation) object, disseminationsSliderPanel);
        } else if (object instanceof IndexedFile) {
            updateDisseminationsSliderPanel((IndexedFile) object, disseminationsSliderPanel);
        } else {
            // do nothing
        }
    }

    protected static void showActions(final IndexedDIP dip, final UIObject actionsButton) {
        final CalloutPopup actionsPopup = new CalloutPopup();

        if (actionsPopup.isShowing()) {
            actionsPopup.hide();
        } else {
            AsyncCallback<Actionable.ActionImpact> callback = new AsyncCallback<Actionable.ActionImpact>() {

                @Override
                public void onFailure(Throwable caught) {
                    AsyncCallbackUtils.defaultFailureTreatment(caught);
                }

                @Override
                public void onSuccess(Actionable.ActionImpact impact) {
                    if (!Actionable.ActionImpact.NONE.equals(impact)) {
                        // update
                    }
                    actionsPopup.hide();
                }
            };

            actionsPopup.setWidget(DisseminationActions.get().createActionsLayout(dip, callback));
            actionsPopup.showRelativeTo(actionsButton, CalloutPosition.TOP_RIGHT);
        }

    }

}