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 :