teichmann@5861: /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
teichmann@5861: * Software engineering by Intevation GmbH
teichmann@5861: *
teichmann@5993: * This file is Free Software under the GNU AGPL (>=v3)
teichmann@5861: * and comes with ABSOLUTELY NO WARRANTY! Check out the
teichmann@5993: * documentation coming with Dive4Elements River for details.
teichmann@5861: */
teichmann@5861:
teichmann@5835: package org.dive4elements.river.client.client.ui;
ingo@275:
gernotbelger@9190: import java.util.ArrayList;
ingo@275: import java.util.List;
sascha@2931: import java.util.MissingResourceException;
ingo@275:
gernotbelger@9190: import org.dive4elements.river.client.client.Config;
gernotbelger@9190: import org.dive4elements.river.client.client.FLYSConstants;
teichmann@5835: import org.dive4elements.river.client.shared.model.Collection;
teichmann@5835: import org.dive4elements.river.client.shared.model.ExportMode;
teichmann@5835: import org.dive4elements.river.client.shared.model.Facet;
ingo@275:
gernotbelger@9190: import com.google.gwt.core.client.GWT;
gernotbelger@9190: import com.smartgwt.client.types.Alignment;
gernotbelger@9190: import com.smartgwt.client.widgets.Canvas;
gernotbelger@9190: import com.smartgwt.client.widgets.Label;
gernotbelger@9190: import com.smartgwt.client.widgets.form.DynamicForm;
gernotbelger@9190: import com.smartgwt.client.widgets.form.fields.FormItem;
gernotbelger@9190: import com.smartgwt.client.widgets.form.fields.TextAreaItem;
gernotbelger@9190: import com.smartgwt.client.widgets.layout.HLayout;
gernotbelger@9190: import com.smartgwt.client.widgets.layout.VLayout;
ingo@275:
ingo@275: /**
ingo@275: * A panel that displays an download icon for all available export modes of a
ingo@275: * Collection.
ingo@275: *
ingo@275: * @author Ingo Weinzierl
ingo@275: */
ingo@275: public class ExportPanel extends VLayout {
ingo@275:
gernotbelger@9190: private static final String LABEL_URL_SEPARATOR = ";";// always sync with server (InundationDurationState)
gernotbelger@9190: /** The message class that provides i18n strings. */
ingo@275: protected FLYSConstants MSG = GWT.create(FLYSConstants.class);
ingo@275:
gernotbelger@9190: protected Collection c;
ingo@275: protected List exports;
ingo@275:
gernotbelger@9190: /** This layout will store a list of available export types. */
ingo@275: protected HLayout container;
ingo@275:
gernotbelger@9190: public ExportPanel(final Collection c, final List exports) {
ingo@275: super();
ingo@275:
gernotbelger@9190: this.c = c;
gernotbelger@9190: this.exports = exports;
ingo@275: this.container = new HLayout();
ingo@275:
gernotbelger@9190: final Label title = new Label(this.MSG.dataexport());
ingo@275: title.setHeight(15);
ingo@275: title.setStyleName("fontNormalSmallUnderlined");
ingo@275:
ingo@275: addMember(title);
ingo@275: addMember(createExportItems());
gernotbelger@9190: addMember(createVlayoutExportItems());
ingo@277: setHeight(45);
ingo@275: setMembersMargin(5);
ingo@275: }
ingo@275:
gernotbelger@9190: private VLayout createVlayoutExportItems() {
gernotbelger@9190: final VLayout layout = new VLayout();
gernotbelger@9190: final DynamicForm form1 = new DynamicForm();
gernotbelger@9190: form1.setColWidths("10%");
gernotbelger@9190: form1.setWidth(400);
gernotbelger@9190: form1.setAlign(Alignment.LEFT);
gernotbelger@9190: final List items = new ArrayList();
gernotbelger@9190: for (final ExportMode mode : this.exports) {
gernotbelger@9190: final String name = mode.getName();
gernotbelger@9190: final List facets = mode.getFacets();
gernotbelger@9190:
gernotbelger@9190: for (int i = 0; i < facets.size(); i++) {
gernotbelger@9190: final Facet facet = facets.get(i);
gernotbelger@9190: final String facetName = facet.getName();
gernotbelger@9190:
gernotbelger@9190: if (!facetName.equals("wms_url"))
gernotbelger@9190: continue;
gernotbelger@9190: if ("wms_url".equals(facetName))
gernotbelger@9190: items.add(createUrlLine(facet.getDescription(), i));
gernotbelger@9190: }
gernotbelger@9190: }
gernotbelger@9190: form1.setFields(items.toArray(new FormItem[items.size()]));
gernotbelger@9190: layout.addMember(form1);
gernotbelger@9190: return layout;
gernotbelger@9190: }
gernotbelger@9190:
gernotbelger@9190: private FormItem createUrlLine(final String labelAndUrl, final int count) {
gernotbelger@9190:
gernotbelger@9190: final String[] labelAndurlSplit = labelAndUrl.split(LABEL_URL_SEPARATOR);
gernotbelger@9190: if (labelAndurlSplit.length == 2) {
gernotbelger@9190:
gernotbelger@9190: final TextAreaItem label = new TextAreaItem();
gernotbelger@9190: label.setTitle(labelAndurlSplit[0]);
gernotbelger@9190:
gernotbelger@9190: label.setWrapTitle(true);
gernotbelger@9190: label.setTitleColSpan(3);
gernotbelger@9190: label.setColSpan(7);
gernotbelger@9190: label.setWidth(250);
gernotbelger@9190:
gernotbelger@9190: label.setTitleAlign(Alignment.LEFT);
gernotbelger@9190:
gernotbelger@9190: label.setValue(labelAndurlSplit[1]);
gernotbelger@9190: label.setCanEdit(false);
gernotbelger@9190:
gernotbelger@9190: return label;
gernotbelger@9190: }
gernotbelger@9190: return null;
gernotbelger@9190: }
ingo@275:
ingo@275: /**
ingo@275: * This method is used to create an item (created by createExportButton) for
ingo@275: * each facet for each export mode.
ingo@275: *
ingo@275: * @return a horizontal list of buttons.
ingo@275: */
ingo@275: protected HLayout createExportItems() {
gernotbelger@9190: final HLayout layout = new HLayout();
ingo@275:
gernotbelger@9190: for (final ExportMode mode : this.exports) {
gernotbelger@9190: final String name = mode.getName();
gernotbelger@9190: final List facets = mode.getFacets();
ingo@275:
gernotbelger@9190: for (final Facet facet : facets) {
gernotbelger@9190: final String facetName = facet.getName();
gernotbelger@9190:
gernotbelger@9190: if (name.equals("fix_wq_curve_at_export"))
raimund@3525: continue;
gernotbelger@9190:
rrenkert@4912: String filename = name;
gernotbelger@9190: if (name.equals("computed_dischargecurve_at_export"))
rrenkert@4912: filename = "dischargecurve";
gernotbelger@9190:
gernotbelger@9190: if ("wms_url".equals(facetName))
gernotbelger@9190: continue;
gernotbelger@9190:
gernotbelger@9190: layout.addMember(createExportButton(name, facetName, filename));
ingo@275: }
ingo@275: }
ingo@275:
ingo@275: return layout;
ingo@275: }
ingo@275:
ingo@275: /**
ingo@275: * This method is used to create a button (with click handler) for a
ingo@275: * concrete export mode / type.
ingo@275: *
gernotbelger@9190: * @param name
gernotbelger@9190: * The name of the export.
gernotbelger@9190: * @param facet
gernotbelger@9190: * The name of the export type (e.g. CSV, WST).
ingo@275: *
ingo@275: * @return an image with click handler.
ingo@275: */
gernotbelger@9190: protected Canvas createExportButton(final String name, final String facet, final String filename) {
gernotbelger@9190: String url = getExportUrl(name, facet, filename);
rrenkert@5144: String imgUrl = GWT.getHostPageBaseURL();
rrenkert@5144: if (facet.equals("pdf")) {
gernotbelger@9190: imgUrl += this.MSG.downloadPDF();
gernotbelger@9190: } else if (facet.equals("at")) {
gernotbelger@9190: imgUrl += this.MSG.downloadAT();
gernotbelger@9190: } else if (facet.equals("wst")) {
gernotbelger@9190: imgUrl += this.MSG.downloadWST();
gernotbelger@9190: } else if (facet.equals("csv")) {
gernotbelger@9190: url += "&encoding=UTF-8";
gernotbelger@9190: imgUrl += this.MSG.downloadCSV();
gernotbelger@9190: } else {
gernotbelger@9190: imgUrl += this.MSG.imageSave();
rrenkert@5144: }
gernotbelger@9190: final ImgLink link = new ImgLink(imgUrl, url, 30, 30);
ingo@1343: link.setTooltip(getTooltipText(name, facet));
ingo@275:
ingo@1343: return link;
ingo@275: }
ingo@275:
ingo@275: /**
ingo@275: * Creates the URL used to trigger an export.
ingo@275: *
gernotbelger@9190: * @param name
gernotbelger@9190: * The name of the export.
gernotbelger@9190: * @param facet
gernotbelger@9190: * The name of the export type (e.g. CSV, WST).
ingo@275: *
ingo@275: * @return the export URL.
ingo@275: */
gernotbelger@9190: protected String getExportUrl(final String name, final String facet, final String filename) {
gernotbelger@9190: final Config config = Config.getInstance();
ingo@275:
ingo@275: String url = GWT.getModuleBaseURL();
ingo@275: url += "export";
gernotbelger@9190: url += "?uuid=" + this.c.identifier();
rrenkert@4912: url += "&name=" + filename;
ingo@275: url += "&mode=" + name;
ingo@275: url += "&type=" + facet;
ingo@275: url += "&server=" + config.getServerUrl();
ingo@275: url += "&locale=" + config.getLocale();
ingo@275:
ingo@275: return url;
ingo@275: }
ingo@433:
ingo@433: /**
ingo@433: * Creates a text used as tooltip for a specific export and type.
ingo@433: *
gernotbelger@9190: * @param name
gernotbelger@9190: * The name of the export.
gernotbelger@9190: * @param facet
gernotbelger@9190: * The name of the export type (e.g. CSV, WST).
ingo@433: *
ingo@433: * @return a tooltip text.
ingo@433: */
gernotbelger@9190: protected String getTooltipText(final String name, final String facet) {
sascha@2931: try {
gernotbelger@9190: return this.MSG.getString(name) + " | " + this.MSG.getString(facet);
sascha@2931: }
gernotbelger@9190: catch (final MissingResourceException mre) {
sascha@2931: return name + " | " + facet;
sascha@2931: }
ingo@433: }
ingo@275: }
ingo@275: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :