Java tutorial
/** * Copyright (C) 2012-2014 52North Initiative for Geospatial Open Source * Software GmbH * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 2 as publishedby the Free * Software Foundation. * * If the program is linked with libraries which are licensed under one of the * following licenses, the combination of the program with the linked library is * not considered a "derivative work" of the program: * * - Apache License, version 2.0 * - Apache Software License, version 1.0 * - GNU Lesser General Public License, version 3 * - Mozilla Public License, versions 1.0, 1.1 and 2.0 * - Common Development and Distribution License (CDDL), version 1.0 * * Therefore the distribution of the program linked with libraries licensed under * the aforementioned licenses, is permitted by the copyright holders if the * distribution is compliant with both the GNU General Public License version 2 * and the aforementioned licenses. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. */ package org.n52.client.ui; import static com.google.gwt.http.client.URL.encodeQueryString; import static com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat.ISO_8601; import static org.n52.client.sos.data.TimeseriesDataStore.getTimeSeriesDataStore; import static org.n52.client.sos.i18n.SosStringsAccessor.i18n; import java.util.Date; import org.n52.client.bus.EventBus; import org.n52.client.ctrl.TimeManager; import org.n52.client.sos.ctrl.SosDataManager; import org.n52.client.sos.event.data.UpdateSOSMetadataEvent; import org.n52.client.sos.legend.TimeseriesLegendData; import org.n52.client.util.ClientUtils; import org.n52.ext.ExternalToolsException; import org.n52.ext.link.AccessLinkFactory; import org.n52.ext.link.sos.TimeRange; import org.n52.ext.link.sos.TimeSeriesParameters; import org.n52.ext.link.sos.TimeSeriesPermalinkBuilder; import org.n52.shared.serializable.pojos.TimeseriesRenderingOptions; import org.n52.shared.serializable.pojos.sos.SOSMetadata; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Window; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.Cursor; import com.smartgwt.client.widgets.HTMLPane; import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.Layout; import com.smartgwt.client.widgets.layout.VLayout; public class Header extends HLayout { private String elemID; public static com.google.gwt.user.client.ui.Label requestCounter; public Header(String id) { this.elemID = id; generateHeader(); } private void generateHeader() { setStyleName("n52_sensorweb_client_headerContainer"); setBackgroundImage("../img/52n_bg.png"); setAutoHeight(); addMember(getHomeLabel()); Layout rightLayout = new VLayout(); Layout linkLayout = new HLayout(); linkLayout.setStyleName("n52_sensorweb_client_linkBlock"); linkLayout.setAlign(Alignment.RIGHT); // linkLayout.addMember(getVersionInfo()); // linkLayout.addMember(getSeparator()); // temporary button for metadata reset //linkLayout.addMember(getMetadatareset()); //linkLayout.addMember(getSeparator()); linkLayout.addMember(getPermalinkLink()); linkLayout.addMember(getSeparator()); linkLayout.addMember(getHelpLink()); linkLayout.addMember(getSeparator()); linkLayout.addMember(getAddBookmarkLink()); linkLayout.addMember(getSeparator()); linkLayout.addMember(getImprintLink()); linkLayout.addMember(getSeparator()); linkLayout.addMember(getCopyrightLink()); rightLayout.addMember(linkLayout); if (ClientUtils.isSesEnabled()) { rightLayout.addMember(createLoginInfo()); } addMember(rightLayout); } private Label getMetadatareset() { Label label = getHeaderLinkLabel("reset Metadata"); label.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Toaster.getToasterInstance().addMessage("Update protected services"); EventBus.getMainEventBus().fireEvent(new UpdateSOSMetadataEvent()); } }); return label; } private Layout getHomeLabel() { Layout layout = new VLayout(); layout.setStyleName("n52_sensorweb_client_logoBlock"); Img homeLabel = new Img("../img/client-logo.png", 289, 55); homeLabel.setStyleName("n52_sensorweb_client_logo"); homeLabel.setCursor(Cursor.POINTER); homeLabel.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String url = "http://52north.org/communities/sensorweb/"; Window.open(url, "_blank", ""); } }); layout.addMember(homeLabel); return layout; } private Label getVersionInfo() { String version = "foobar"; Label versionLabel = getHeaderLinkLabel("Version: " + version); versionLabel.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { Window.open("version-info.txt", "_blank", ""); } }); return versionLabel; } private Label getCopyrightLink() { DateTimeFormat dateFormatter = DateTimeFormat.getFormat("yyyy"); String year = dateFormatter.format(new Date()); Label copyright = getHeaderLinkLabel("© 52°North, GmbH " + year); copyright.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { String url = "http://www.52north.org"; Window.open(url, "_blank", ""); } }); return copyright; } private Label getAddBookmarkLink() { Label addToFavorites = getHeaderLinkLabel(i18n.addToBookmarks()); addToFavorites.addClickHandler(new ClickHandler() { public void onClick(ClickEvent evt) { addToFavorites(); } }); return addToFavorites; } private Label getPermalinkLink() { Label restart = getHeaderLinkLabel(i18n.permalink()); restart.addClickHandler(new ClickHandler() { public void onClick(ClickEvent evt) { String currentUrl = Window.Location.getHref(); String permalink = createPermaLink(currentUrl); Window.Location.assign(addDesignOptions(permalink)); } private String addDesignOptions(String permalink) { TimeseriesLegendData[] ts = getTimeSeriesDataStore().getTimeSeriesSorted(); if (ts == null || ts.length == 0) { return permalink; } StringBuilder options = new StringBuilder(); for (TimeseriesLegendData timeSeries : ts) { TimeseriesRenderingOptions renderingOptions = new TimeseriesRenderingOptions(); renderingOptions.setColor(timeSeries.getColor()); renderingOptions.setLineWidth(timeSeries.getLineWidth()); options.append(renderingOptions.asJson()).append(","); } // delete last commas options.deleteCharAt(options.length() - 1); StringBuilder sb = new StringBuilder(permalink); String urlEncodedValue = encodeQueryString(options.toString()); sb.append("&").append("options=").append(urlEncodedValue); return sb.toString(); } }); return restart; } private LoginHeaderLayout createLoginInfo() { return new LoginHeaderLayout(); } private boolean hasLocaleParameter(String value) { return value != null && !value.isEmpty(); } private boolean isEnglishLocale(String value) { return value != null && value.equals("en"); } private boolean isGermanLocale(String value) { return value != null && value.equals("de"); } private Label getHelpLink() { Label help = getHeaderLinkLabel(i18n.help()); help.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(com.smartgwt.client.widgets.events.ClickEvent event) { String helpUrl = GWT.getHostPageBaseURL() + i18n.helpPath(); Window.open(helpUrl, "", ""); } }); return help; } private Label getImprintLink() { Label imprint = getHeaderLinkLabel(i18n.Impressum()); imprint.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { com.smartgwt.client.widgets.Window w = new com.smartgwt.client.widgets.Window(); w.setTitle(i18n.Impressum()); w.setWidth(450); w.setHeight(460); w.centerInPage(); w.setIsModal(true); VLayout layout = new VLayout(); HTMLPane pane = new HTMLPane(); pane.setContentsURL(i18n.imprintPath()); layout.setStyleName("n52_sensorweb_client_imprint_content"); layout.addMember(pane); w.addItem(layout); w.show(); } }); return imprint; } private Label getHeaderLinkLabel(String labelText) { Label label = new Label(labelText); label.setStyleName("n52_sensorweb_client_headerlink"); label.setAutoWidth(); label.setWrap(false); return label; } private Label getSeparator() { Label pipe = new Label("|"); pipe.setStyleName("n52_sensorweb_client_pipe"); pipe.setAutoWidth(); return pipe; } private String createPermaLink(String baseUrl) { TimeseriesLegendData[] ts = getTimeSeriesDataStore().getTimeSeriesSorted(); if (ts == null || ts.length == 0) { return baseUrl; } TimeSeriesPermalinkBuilder builder = new TimeSeriesPermalinkBuilder(); for (TimeseriesLegendData timeSeries : ts) { TimeSeriesParameters parameters = createTimeSeriesParameters(timeSeries); parameters.setTimeRange(createTimeRange()); builder.addParameters(parameters); } try { AccessLinkFactory factory = builder.build(); return factory.createAccessURL(baseUrl).toString(); } catch (ExternalToolsException e) { Toaster.getToasterInstance().addErrorMessage("Malformed base URL: " + baseUrl); return baseUrl; } } private TimeRange createTimeRange() { Date start = new Date(TimeManager.getInst().getBegin()); Date end = new Date(TimeManager.getInst().getEnd()); DateTimeFormat format = DateTimeFormat.getFormat(ISO_8601); return TimeRange.createTimeRange(format.format(start), format.format(end)); } private TimeSeriesParameters createTimeSeriesParameters(TimeseriesLegendData timeSeries) { String sos = timeSeries.getSosUrl(); String offering = timeSeries.getOfferingId(); String procedure = timeSeries.getProcedureId(); String phenomenon = timeSeries.getPhenomenonId(); String feature = timeSeries.getFeatureId(); SOSMetadata metadata = SosDataManager.getDataManager().getServiceMetadata(sos); String sosVersion = metadata.getSosVersion(); return new TimeSeriesParameters(sos, sosVersion, offering, procedure, phenomenon, feature); } // Calls native javascript function addbookmark listed in Client.html private native void addToFavorites() /*-{ $wnd.addBookmark(); }-*/; }