org.roda.wui.common.client.tools.RestUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.roda.wui.common.client.tools.RestUtils.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.common.client.tools;

import java.util.ArrayList;
import java.util.List;

import org.roda.core.data.common.RodaConstants;
import org.roda.core.data.v2.index.FindRequest;
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.sort.Sorter;
import org.roda.core.data.v2.index.sublist.Sublist;
import org.roda.core.data.v2.ip.IndexedFile;

import com.github.nmorel.gwtjackson.client.ObjectMapper;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.URL;
import com.google.gwt.i18n.client.LocaleInfo;
import com.google.gwt.safehtml.shared.SafeUri;
import com.google.gwt.safehtml.shared.UriUtils;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormPanel.SubmitEvent;
import com.google.gwt.user.client.ui.FormPanel.SubmitHandler;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.RootPanel;

public class RestUtils {

    private RestUtils() {
        // do nothing
    }

    public static SafeUri createAIPDownloadUri(String aipId) {

        // api/v1/aips/{aip_id}/?acceptFormat=zip
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_AIPS).append(URL.encodeQueryString(aipId)).append(RodaConstants.API_SEP);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_ZIP);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createAIPPartDownloadUri(String aipId, String part) {

        // api/v1/aips/{aip_id}/{part}
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_AIPS).append(URL.encodeQueryString(aipId)).append(RodaConstants.API_SEP)
                .append(URL.encodeQueryString(part));

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createRepresentationDownloadUri(String aipId, String representationId) {

        // api/v1/representations/{aip_id}/{representation_id}/?acceptFormat=zip
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_REPRESENTATIONS).append(URL.encodeQueryString(aipId))
                .append(RodaConstants.API_SEP).append(URL.encodeQueryString(representationId))
                .append(RodaConstants.API_SEP);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_ZIP);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createRepresentationPartDownloadUri(String aipId, String representationId, String part) {

        // api/v1/representations/{aip_id}/{representation_id}/{part}
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_REPRESENTATIONS).append(URL.encodeQueryString(aipId))
                .append(RodaConstants.API_SEP).append(URL.encodeQueryString(representationId))
                .append(RodaConstants.API_SEP).append(URL.encodeQueryString(part));

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createRepresentationFileDownloadUri(String fileUuid) {

        // api/v1/files/{file_uuid}?acceptFormat=bin
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_FILES).append(URL.encodeQueryString(fileUuid));
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_BIN);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createDipDownloadUri(String dipUUID) {

        // api/v1/dips/{dip_uuid}?acceptFormat=zip
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_DIPS).append(URL.encodeQueryString(dipUUID));
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_ZIP);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createDipFileDownloadUri(String dipFileUUID) {

        // api/v1/dipfiles/{file_uuid}?acceptFormat=bin
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_DIPFILES).append(URL.encodeQueryString(dipFileUUID));
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_BIN);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createDescriptiveMetadataDownloadUri(String aipId) {

        // api/v1/aips/{aip_id}/descriptive_metadata/?acceptFormat=zip
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_AIPS).append(URL.encodeQueryString(aipId)).append(RodaConstants.API_SEP)
                .append(RodaConstants.API_DESCRIPTIVE_METADATA).append(RodaConstants.API_SEP);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_ZIP);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createDescriptiveMetadataDownloadUri(String aipId, String descId) {
        return createDescriptiveMetadataDownloadUri(aipId, descId, null);
    }

    public static SafeUri createDescriptiveMetadataDownloadUri(String aipId, String descId, String versionId) {

        // api/v1/aips/{aip_id}/descriptive_metadata/{descId}?acceptFormat=xml&version_id={versionId}
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_AIPS).append(URL.encodeQueryString(aipId)).append(RodaConstants.API_SEP)
                .append(RodaConstants.API_DESCRIPTIVE_METADATA).append(RodaConstants.API_SEP).append(descId);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_BIN);

        if (versionId != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_VERSION_ID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(versionId);
        }

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createDescriptiveMetadataHTMLUri(String aipId, String descId) {
        return createDescriptiveMetadataHTMLUri(aipId, descId, null);
    }

    public static SafeUri createDescriptiveMetadataHTMLUri(String aipId, String descId, String versionId) {
        // api/v1/aips/{aip_id}/descriptive_metadata/{descId}?acceptFormat=html&version_id={versionId}
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_AIPS).append(URL.encodeQueryString(aipId)).append(RodaConstants.API_SEP)
                .append(RodaConstants.API_DESCRIPTIVE_METADATA).append(RodaConstants.API_SEP).append(descId);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_HTML);

        if (versionId != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_VERSION_ID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(versionId);
        }

        // locale
        b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_KEY_LANG)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(LocaleInfo.getCurrentLocale().getLocaleName());

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createPreservationMetadataDownloadUri(String aipId) {

        // api/v1/aips/{aip_id}/preservation_metadata/?acceptFormat=zip
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_AIPS).append(URL.encodeQueryString(aipId)).append(RodaConstants.API_SEP)
                .append(RodaConstants.API_PRESERVATION_METADATA).append(RodaConstants.API_SEP);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_ZIP);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static String createRepresentationPreservationMetadataUri(String aipId, String representationId,
            int startAgent, int limitAgent, int startEvent, int limitEvent, int startFile, int limitFile) {
        // api/v1/representations/{aip_id}/{representation_id}/descriptive_metadata/?acceptFormat=zip
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_REPRESENTATIONS).append(URL.encodeQueryString(aipId))
                .append(RodaConstants.API_SEP).append(URL.encodeQueryString(representationId))
                .append(RodaConstants.API_SEP).append(RodaConstants.API_PRESERVATION_METADATA)
                .append(RodaConstants.API_SEP);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_ZIP);

        // start and limits
        b.append(RodaConstants.API_QUERY_SEP).append("startAgent").append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(startAgent);
        b.append(RodaConstants.API_QUERY_SEP).append("limitAgent").append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(limitAgent);
        b.append(RodaConstants.API_QUERY_SEP).append("startEvent").append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(startEvent);
        b.append(RodaConstants.API_QUERY_SEP).append("limitEvent").append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(limitEvent);
        b.append(RodaConstants.API_QUERY_SEP).append("startFile").append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(startFile);
        b.append(RodaConstants.API_QUERY_SEP).append("limitFile").append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(limitFile);

        // locale
        b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_KEY_LANG)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(LocaleInfo.getCurrentLocale().getLocaleName());

        return b.toString();
    }

    public static SafeUri createRepresentationDescriptiveMetadataDownloadUri(String aipId, String representationId,
            String descId) {
        return createRepresentationDescriptiveMetadataDownloadUri(aipId, representationId, descId, null);
    }

    public static SafeUri createRepresentationDescriptiveMetadataDownloadUri(String aipId, String representationId,
            String descId, String versionId) {
        // api/v1/representations/{aip_id}/{representation_id}/descriptive_metadata/{descId}?acceptFormat=xml&version_id={versionId}
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_REPRESENTATIONS).append(URL.encodeQueryString(aipId))
                .append(RodaConstants.API_SEP).append(URL.encodeQueryString(representationId))
                .append(RodaConstants.API_SEP).append(RodaConstants.API_DESCRIPTIVE_METADATA)
                .append(RodaConstants.API_SEP).append(descId);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_BIN);

        if (versionId != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_VERSION_ID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(versionId);
        }

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createRepresentationDescriptiveMetadataHTMLUri(String aipId, String representationId,
            String descId) {
        return createRepresentationDescriptiveMetadataHTMLUri(aipId, representationId, descId, null);
    }

    public static SafeUri createRepresentationDescriptiveMetadataHTMLUri(String aipId, String representationId,
            String descId, String versionId) {
        // api/v1/representations/{aip_id}/{representation_id}/descriptive_metadata/{descId}?acceptFormat=html&version_id={versionId}
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_REPRESENTATIONS).append(URL.encodeQueryString(aipId))
                .append(RodaConstants.API_SEP).append(URL.encodeQueryString(representationId))
                .append(RodaConstants.API_SEP).append(RodaConstants.API_DESCRIPTIVE_METADATA)
                .append(RodaConstants.API_SEP).append(descId);
        // accept format attribute
        b.append(RodaConstants.API_QUERY_START).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_HTML);

        if (versionId != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_VERSION_ID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(versionId);
        }

        // locale
        b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_KEY_LANG)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(LocaleInfo.getCurrentLocale().getLocaleName());

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createPreservationEventDetailsHTMLUri(String eventId, String aipId,
            String representationUUID, String fileUUID) {
        // api/v1/events?id={event_id}&aipId={aip_id}&representationUUID={representationUUID}&fileUUID={fileUUID}&onlyDetails=true&acceptFormat=html&lang={lang}
        StringBuilder b = new StringBuilder();

        b.append(RodaConstants.API_REST_V1_EVENTS).append(RodaConstants.API_QUERY_START)
                .append(RodaConstants.API_QUERY_PARAM_ID).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(URL.encodeQueryString(eventId));

        if (aipId != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_PATH_PARAM_AIP_ID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(URL.encodeQueryString(aipId));
        }

        if (representationUUID != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_PATH_PARAM_REPRESENTATION_UUID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                    .append(URL.encodeQueryString(representationUUID));
        }

        if (fileUUID != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_PATH_PARAM_FILE_UUID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(URL.encodeQueryString(fileUUID));
        }

        b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_ONLY_DETAILS)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(URL.encodeQueryString(Boolean.toString(true)));

        b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(URL.encodeQueryString(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_HTML));

        b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_KEY_LANG)
                .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(LocaleInfo.getCurrentLocale().getLocaleName());

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static String createTransferredResourceUploadUri(String parentUUID, String locale) {
        // api/v1/transfers/?parentUUID={parentUUID}&locale={locale}&commit=true
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_RESOURCES);

        if (parentUUID != null || locale != null) {
            b.append(RodaConstants.API_QUERY_START);
        }

        if (parentUUID != null) {
            b.append(RodaConstants.TRANSFERRED_RESOURCE_PARENT_UUID).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                    .append(parentUUID);
        }

        if (parentUUID != null && locale != null) {
            b.append(RodaConstants.API_QUERY_SEP);
        }

        if (locale != null) {
            b.append(RodaConstants.LOCALE).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(locale)
                    .append(RodaConstants.API_QUERY_SEP);
        }

        b.append(RodaConstants.API_QUERY_PARAM_COMMIT).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append("True");
        return b.toString();
    }

    public static String createFileUploadUri(IndexedFile folder, String details) {
        // api/v1/files?aipId={aipId}&representationId={representationdId}&folder={folder[0]}&folder={folder[1]}&details={details}

        List<String> directory = new ArrayList<>(folder.getPath());
        directory.add(folder.getId());
        return createFileUploadUri(folder.getAipId(), folder.getRepresentationId(), directory, details);
    }

    public static String createFileUploadUri(String aipId, String representationId, List<String> directory,
            String details) {
        // api/v1/files?aipId={aipId}&representationId={representationdId}&folder={folder[0]}&folder={folder[1]}&details={details}

        StringBuilder b = new StringBuilder();

        // base uri
        b.append(RodaConstants.API_REST_V1_FILES).append(RodaConstants.API_QUERY_START);
        b.append(RodaConstants.API_PATH_PARAM_AIP_ID).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(URL.encodeQueryString(aipId));
        b.append(RodaConstants.API_QUERY_SEP);
        b.append(RodaConstants.API_PATH_PARAM_REPRESENTATION_ID).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(URL.encodeQueryString(representationId));
        b.append(RodaConstants.API_QUERY_SEP);

        for (String folderPath : directory) {
            b.append(RodaConstants.API_PATH_PARAM_FOLDER).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                    .append(URL.encodeQueryString(folderPath));
            b.append(RodaConstants.API_QUERY_SEP);
        }
        b.append(RodaConstants.API_QUERY_PARAM_DETAILS).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(details);

        return b.toString();
    }

    public static SafeUri createTransferredResourceDownloadUri(String resourceId) {
        // api/v1/transferred/{transferred_resource_uuid}?acceptFormat=bin
        StringBuilder b = new StringBuilder();
        // base uri
        b.append(RodaConstants.API_REST_V1_RESOURCES).append(resourceId).append(RodaConstants.API_QUERY_START)
                .append(RodaConstants.API_QUERY_KEY_ACCEPT_FORMAT).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(RodaConstants.API_QUERY_VALUE_ACCEPT_FORMAT_BIN);

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static SafeUri createThemeResourceUri(String resourceId, String defaultResourceId, boolean inline) {
        // api/v1/theme/?resource_id={resourceId}&default_resource_od={defaultResourceId}
        StringBuilder b = new StringBuilder();

        b.append(RodaConstants.API_REST_V1_THEME).append(RodaConstants.API_QUERY_START)
                .append(RodaConstants.API_QUERY_PARAM_RESOURCE_ID).append(RodaConstants.API_QUERY_ASSIGN_SYMBOL)
                .append(resourceId);

        if (defaultResourceId != null) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_DEFAULT_RESOURCE_ID)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(defaultResourceId);
        }

        if (inline) {
            b.append(RodaConstants.API_QUERY_SEP).append(RodaConstants.API_QUERY_PARAM_INLINE)
                    .append(RodaConstants.API_QUERY_ASSIGN_SYMBOL).append(inline);
        }

        return UriUtils.fromSafeConstant(b.toString());
    }

    public static interface FindRequestMapper extends ObjectMapper<FindRequest> {
    }

    private static FindRequestMapper FIND_REQUEST_MAPPER = GWT.create(FindRequestMapper.class);

    public static <T extends IsIndexed> void requestCSVExport(Class<T> classToReturn, Filter filter, Sorter sorter,
            Sublist sublist, Facets facets, boolean onlyActive, boolean exportFacets, String filename) {
        // api/v1/index/findFORM?type=csv

        String url = RodaConstants.API_REST_V1_INDEX + "findFORM";
        FindRequest request = new FindRequest(classToReturn.getName(), filter, sorter, sublist, facets, onlyActive,
                exportFacets, filename);

        final FormPanel form = new FormPanel();
        form.setAction(URL.encode(url));
        form.setMethod(FormPanel.METHOD_POST);
        form.setEncoding(FormPanel.ENCODING_URLENCODED);
        FlowPanel layout = new FlowPanel();
        form.setWidget(layout);
        layout.add(new Hidden("findRequest", FIND_REQUEST_MAPPER.write(request)));
        layout.add(new Hidden("type", "csv"));

        form.setVisible(false);
        RootPanel.get().add(form);

        // using submit instead of submit completed because Chrome doesn't created
        // the other event
        form.addSubmitHandler(new SubmitHandler() {

            @Override
            public void onSubmit(SubmitEvent event) {

                Timer timer = new Timer() {

                    @Override
                    public void run() {
                        RootPanel.get().remove(form);
                    }
                };

                // remove form 10 seconds in the future
                timer.schedule(10000);
            }
        });

        form.submit();
    }

}