changeset 2983:725470fc57d2

Add "Manage themes" button to ChartToolbar and MapToolbar. flys-client/trunk@4991 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Christian Lins <christian.lins@intevation.de>
date Fri, 13 Jul 2012 11:31:25 +0000
parents d2a54ae0016b
children 06d999e95615
files flys-client/ChangeLog flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties flys-client/src/main/java/de/intevation/flys/client/client/ui/CollectionView.java flys-client/src/main/java/de/intevation/flys/client/client/ui/MainMenu.java flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapToolbar.java flys-client/src/main/java/de/intevation/flys/client/server/auth/was/Signature.java
diffstat 12 files changed, 242 insertions(+), 137 deletions(-) [+]
line wrap: on
line diff
--- a/flys-client/ChangeLog	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/ChangeLog	Fri Jul 13 11:31:25 2012 +0000
@@ -1,3 +1,22 @@
+2012-07-13	Christian Lins <christian.lins@intevation.de>
+
+	* src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties,
+	  src/main/java/de/intevation/flys/client/client/FLYSConstants.java,
+	  src/main/java/de/intevation/flys/client/client/FLYSConstants.properties,
+	  src/main/java/de/intevation/flys/client/client/ui/MainMenu.java,
+	  src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java,
+	  src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java,
+	  src/main/java/de/intevation/flys/client/client/ui/map/MapToolbar.java,
+	  src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java,
+	  src/main/java/de/intevation/flys/client/client/ui/CollectionView.java,
+	  src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties:
+	  Add "Manage Themes" button to ChartToolbar and MapToolbar to toggle themes window.
+
+	* pom.xml:
+	  Remove gwt-dev from dependencies as it contains an ancient Apache Commons Codec version
+	  and add a recent version of it as separate dependency.
+	  This fixes the nasty eclipse compile errors with Base64 class etc.
+
 2012-07-13  Raimund Renkert <raimund.renkert@intevation.de>
 
 	* src/main/java/de/intevation/flys/client/client/ui/chart/OverviewOutputTab.java:
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.java	Fri Jul 13 11:31:25 2012 +0000
@@ -284,6 +284,8 @@
 
     String removeTheme();
 
+    String manageThemes();
+
     String label_ok();
 
     String label_cancel();
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants.properties	Fri Jul 13 11:31:25 2012 +0000
@@ -73,6 +73,7 @@
 activateTheme = Activate
 deactivateTheme = Deactivate
 removeTheme = Remove
+manageThemes = Manage themes
 label_ok = Ok
 label_cancel = Cancel
 cancelCalculationLabel = Stop the current calculation.
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_de.properties	Fri Jul 13 11:31:25 2012 +0000
@@ -73,6 +73,7 @@
 activateTheme = Aktivieren
 deactivateTheme = Deaktivieren
 removeTheme = Entfernen
+manageThemes = Themen verwalten
 label_ok = Ok
 label_cancel = Abbrechen
 cancelCalculationLabel = Aktuelle Berechnung abbrechen.
--- a/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/FLYSConstants_en.properties	Fri Jul 13 11:31:25 2012 +0000
@@ -73,6 +73,7 @@
 activateTheme = Activate
 deactivateTheme = Deactivate
 removeTheme = Remove
+manageThemes = Manage themes
 label_ok = Ok
 label_cancel = Cancel
 cancelCalculationLabel = Stop the current calculation.
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/CollectionView.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/CollectionView.java	Fri Jul 13 11:31:25 2012 +0000
@@ -1,15 +1,7 @@
 package de.intevation.flys.client.client.ui;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.rpc.AsyncCallback;
-
 import com.smartgwt.client.util.SC;
 import com.smartgwt.client.widgets.Window;
 import com.smartgwt.client.widgets.events.CloseClickEvent;
@@ -19,6 +11,29 @@
 import com.smartgwt.client.widgets.tab.TabSet;
 import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
 
+import de.intevation.flys.client.client.Config;
+import de.intevation.flys.client.client.FLYS;
+import de.intevation.flys.client.client.FLYSConstants;
+import de.intevation.flys.client.client.event.CollectionChangeEvent;
+import de.intevation.flys.client.client.event.CollectionChangeHandler;
+import de.intevation.flys.client.client.event.HasCollectionChangeHandlers;
+import de.intevation.flys.client.client.event.HasOutputModesChangeHandlers;
+import de.intevation.flys.client.client.event.OutputModesChangeEvent;
+import de.intevation.flys.client.client.event.OutputModesChangeHandler;
+import de.intevation.flys.client.client.event.ParameterChangeEvent;
+import de.intevation.flys.client.client.event.ParameterChangeHandler;
+import de.intevation.flys.client.client.services.AddArtifactService;
+import de.intevation.flys.client.client.services.AddArtifactServiceAsync;
+import de.intevation.flys.client.client.services.ArtifactService;
+import de.intevation.flys.client.client.services.ArtifactServiceAsync;
+import de.intevation.flys.client.client.services.CollectionAttributeService;
+import de.intevation.flys.client.client.services.CollectionAttributeServiceAsync;
+import de.intevation.flys.client.client.services.CreateCollectionService;
+import de.intevation.flys.client.client.services.CreateCollectionServiceAsync;
+import de.intevation.flys.client.client.services.DescribeCollectionService;
+import de.intevation.flys.client.client.services.DescribeCollectionServiceAsync;
+import de.intevation.flys.client.client.services.LoadArtifactService;
+import de.intevation.flys.client.client.services.LoadArtifactServiceAsync;
 import de.intevation.flys.client.shared.model.Artifact;
 import de.intevation.flys.client.shared.model.ArtifactDescription;
 import de.intevation.flys.client.shared.model.Collection;
@@ -28,29 +43,12 @@
 import de.intevation.flys.client.shared.model.ReportMode;
 import de.intevation.flys.client.shared.model.User;
 
-import de.intevation.flys.client.client.Config;
-import de.intevation.flys.client.client.FLYS;
-import de.intevation.flys.client.client.FLYSConstants;
-import de.intevation.flys.client.client.event.HasCollectionChangeHandlers;
-import de.intevation.flys.client.client.event.HasOutputModesChangeHandlers;
-import de.intevation.flys.client.client.event.CollectionChangeEvent;
-import de.intevation.flys.client.client.event.CollectionChangeHandler;
-import de.intevation.flys.client.client.event.OutputModesChangeEvent;
-import de.intevation.flys.client.client.event.OutputModesChangeHandler;
-import de.intevation.flys.client.client.event.ParameterChangeEvent;
-import de.intevation.flys.client.client.event.ParameterChangeHandler;
-import de.intevation.flys.client.client.services.ArtifactService;
-import de.intevation.flys.client.client.services.ArtifactServiceAsync;
-import de.intevation.flys.client.client.services.AddArtifactService;
-import de.intevation.flys.client.client.services.AddArtifactServiceAsync;
-import de.intevation.flys.client.client.services.CollectionAttributeService;
-import de.intevation.flys.client.client.services.CollectionAttributeServiceAsync;
-import de.intevation.flys.client.client.services.CreateCollectionService;
-import de.intevation.flys.client.client.services.CreateCollectionServiceAsync;
-import de.intevation.flys.client.client.services.DescribeCollectionService;
-import de.intevation.flys.client.client.services.DescribeCollectionServiceAsync;
-import de.intevation.flys.client.client.services.LoadArtifactService;
-import de.intevation.flys.client.client.services.LoadArtifactServiceAsync;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
 
 
 /**
@@ -218,8 +216,8 @@
      * This method handles the initial layout stuff.
      */
     protected void init() {
-        setWidth(750);
-        setHeight(600);
+        setWidth(950);
+        setHeight(650);
 
         layout.setWidth100();
 
@@ -253,11 +251,13 @@
             locale,
             ownerId,
             new AsyncCallback<Collection>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     GWT.log("Could not create the new collection.");
                     SC.warn(messages.getString(caught.getMessage()));
                 }
 
+                @Override
                 public void onSuccess(Collection collection) {
                     GWT.log("Successfully created a new collection.");
                     setCollection(collection);
@@ -276,6 +276,7 @@
      *
      * @param handler The new CollectionChangeHandler.
      */
+    @Override
     public void addCollectionChangeHandler(CollectionChangeHandler handler) {
         if (handler != null) {
             handlers.add(handler);
@@ -288,6 +289,7 @@
      *
      * @param handler The new OutputModesChangeHandler.
      */
+    @Override
     public void addOutputModesChangeHandler(OutputModesChangeHandler handler) {
         if (handler != null) {
             outHandlers.add(handler);
@@ -373,6 +375,7 @@
      *
      * @param event The ParameterChangeEvent.
      */
+    @Override
     public void onParameterChange(ParameterChangeEvent event) {
         GWT.log("CollectionView.onParameterChange");
         setArtifact(event.getNewValue());
@@ -392,12 +395,14 @@
 
             describeCollectionService.describe(c.identifier(), locale,
                 new AsyncCallback<Collection>() {
+                    @Override
                     public void onFailure(Throwable caught) {
                         GWT.log("Could not DESCRIBE collection.");
                         SC.warn(messages.getString(caught.getMessage()));
                     }
 
 
+                    @Override
                     public void onSuccess(Collection newCollection) {
                         GWT.log("Successfully DESCRIBED collection.");
                         boolean loaded = true;
@@ -459,6 +464,7 @@
     }
 
 
+    @Override
     public void onCollectionChange(CollectionChangeEvent event) {
         if (artifactsQueue > 0) {
             GWT.log("Do not update UI because we are still loading Artifacts.");
@@ -483,6 +489,7 @@
     }
 
 
+    @Override
     public void onOutputModesChange(OutputModesChangeEvent event) {
         clearOutputTabs();
         OutputMode[] outs = event.getOutputModes();
@@ -586,6 +593,7 @@
     }
 
 
+    @Override
     public void onCloseClick(CloseClickEvent event) {
         if (collection != null) {
             flys.closeProject(collection.identifier());
@@ -605,11 +613,13 @@
         addArtifactService.add(
             collection, artifact, locale,
             new AsyncCallback<Collection>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     GWT.log("An error occured while adding artifact.");
                     SC.warn(messages.getString(caught.getMessage()));
                 }
 
+                @Override
                 public void onSuccess(Collection newCollection) {
                     GWT.log("Successfully added artifacts.");
                     setCollection(newCollection, true);
@@ -628,6 +638,7 @@
 
         updater.update(collection, locale,
             new AsyncCallback<Collection>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     newRecommendations.removeAllElements();
                     setCollection(collection);
@@ -636,6 +647,7 @@
                     // TODO POPUP WARNING
                 }
 
+                @Override
                 public void onSuccess(Collection newCol) {
                     GWT.log("Successfully saved recommendations.");
                     newRecommendations.removeAllElements();
@@ -678,11 +690,13 @@
             null,
             locale,
             new AsyncCallback<Artifact[]>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     GWT.log("Error loading recommendations: " +
                         caught.getMessage());
                 }
 
+                @Override
                 public void onSuccess(Artifact[] artifacts) {
                     GWT.log("Loaded artifacts: " + artifacts.length);
                     addRecommendationsToCollection();
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/MainMenu.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/MainMenu.java	Fri Jul 13 11:31:25 2012 +0000
@@ -3,7 +3,6 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.i18n.client.LocaleInfo;
 import com.google.gwt.user.client.Window;
-
 import com.smartgwt.client.types.Alignment;
 import com.smartgwt.client.util.BooleanCallback;
 import com.smartgwt.client.util.SC;
@@ -24,7 +23,7 @@
 public class MainMenu extends HLayout {
 
     /** The interface that provides i18n messages. */
-    private FLYSConstants messages = GWT.create(FLYSConstants.class);
+    private final FLYSConstants messages = GWT.create(FLYSConstants.class);
 
     /** An instance to FLYS.*/
     protected FLYS flys;
@@ -66,6 +65,7 @@
         info        = new Button(messages.info());
 
         newProject.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 GWT.log("Clicked 'New Project' button.");
                 createNewProject();
@@ -73,6 +73,7 @@
         });
 
         projectList.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 GWT.log("Clicked 'Open ProjectList' button.");
                 ProjectList list = getFlys().getProjectList();
@@ -84,6 +85,7 @@
         });
 
         logout.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 GWT.log("Clicked 'logout' button.");
                 GWT.log("IMPLEMENT the 'logout' function.");
@@ -91,6 +93,7 @@
         });
 
         language.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 LocaleInfo info            = LocaleInfo.getCurrentLocale();
                 final String currentLocale = info.getLocaleName();
@@ -100,6 +103,7 @@
 
                 SC.confirm(messages.warning(), messages.warning_language(),
                     new BooleanCallback() {
+                        @Override
                         public void execute(Boolean value) {
                             if (value) {
                                 switchLanguage(currentLocale, newLocale);
@@ -110,6 +114,7 @@
         });
 
         info.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 GWT.log("Clicked 'info' button.");
                 GWT.log("IMPLEMENT the 'open info panel' function.");
@@ -226,8 +231,6 @@
     protected void switchLanguage(String currentLocale, String newLocale) {
         String newLocation = Window.Location.getHref();
 
-        String oldLocation = newLocation;
-
         if (newLocation.endsWith("/")) {
             newLocation = newLocation.substring(0, newLocation.length()-1);
         }
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartOutputTab.java	Fri Jul 13 11:31:25 2012 +0000
@@ -1,44 +1,40 @@
 package de.intevation.flys.client.client.ui.chart;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Stack;
-
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.rpc.AsyncCallback;
-
 import com.smartgwt.client.types.Overflow;
-
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.Img;
-
+import com.smartgwt.client.widgets.events.ResizedEvent;
+import com.smartgwt.client.widgets.events.ResizedHandler;
 import com.smartgwt.client.widgets.layout.HLayout;
 import com.smartgwt.client.widgets.layout.VLayout;
 
-import com.smartgwt.client.widgets.events.ResizedEvent;
-import com.smartgwt.client.widgets.events.ResizedHandler;
-
+import de.intevation.flys.client.client.Config;
+import de.intevation.flys.client.client.event.OutputParameterChangeEvent;
+import de.intevation.flys.client.client.event.OutputParameterChangeHandler;
+import de.intevation.flys.client.client.event.PanEvent;
+import de.intevation.flys.client.client.event.PanHandler;
+import de.intevation.flys.client.client.event.RedrawRequestEvent;
+import de.intevation.flys.client.client.event.RedrawRequestEvent.Type;
+import de.intevation.flys.client.client.event.RedrawRequestHandler;
+import de.intevation.flys.client.client.event.ZoomEvent;
+import de.intevation.flys.client.client.event.ZoomHandler;
+import de.intevation.flys.client.client.services.ChartInfoService;
+import de.intevation.flys.client.client.services.ChartInfoServiceAsync;
+import de.intevation.flys.client.client.ui.CollectionView;
+import de.intevation.flys.client.client.ui.OutputTab;
 import de.intevation.flys.client.shared.Transform2D;
 import de.intevation.flys.client.shared.model.Axis;
 import de.intevation.flys.client.shared.model.ChartInfo;
 import de.intevation.flys.client.shared.model.Collection;
 import de.intevation.flys.client.shared.model.OutputMode;
 import de.intevation.flys.client.shared.model.ZoomObj;
-import de.intevation.flys.client.client.Config;
-import de.intevation.flys.client.client.event.OutputParameterChangeEvent;
-import de.intevation.flys.client.client.event.OutputParameterChangeHandler;
-import de.intevation.flys.client.client.event.PanEvent;
-import de.intevation.flys.client.client.event.PanHandler;
-import de.intevation.flys.client.client.event.RedrawRequestHandler;
-import de.intevation.flys.client.client.event.RedrawRequestEvent;
-import de.intevation.flys.client.client.event.RedrawRequestEvent.Type;
-import de.intevation.flys.client.client.event.ZoomEvent;
-import de.intevation.flys.client.client.event.ZoomHandler;
-import de.intevation.flys.client.client.services.ChartInfoService;
-import de.intevation.flys.client.client.services.ChartInfoServiceAsync;
-import de.intevation.flys.client.client.ui.CollectionView;
-import de.intevation.flys.client.client.ui.OutputTab;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
 
 
 /**
@@ -166,12 +162,18 @@
     }
 
 
+    public void toggleThemePanel() {
+        this.left.setVisible(!left.isVisible());
+    }
+
+
     /**
      * This method is called after the chart panel has resized. It removes the
      * chart - if existing - and requests a new one with adjusted size.
      *
      * @param event The resize event.
      */
+    @Override
     public void onResized(ResizedEvent event) {
         updateChartPanel();
         updateChartInfo();
@@ -180,6 +182,7 @@
 
     /** For RESET type of events, just reset the ranges, otherwise do a
      * complete refresh of panel, info and collection. */
+    @Override
     public void onRedrawRequest(RedrawRequestEvent event) {
         if (event.getType() == Type.RESET) {
             resetRanges();
@@ -198,6 +201,7 @@
      *
      * @param event The OutputParameterChangeEvent.
      */
+    @Override
     public void onOutputParameterChanged(OutputParameterChangeEvent event) {
         updateChartInfo();
         updateChartPanel();
@@ -209,6 +213,7 @@
      *
      * @param evt The ZoomEvent that stores the coordinates for zooming.
      */
+    @Override
     public void onZoom(ZoomEvent evt) {
         zoomStack.push(new ZoomObj(zoom[0], zoom[1], zoom[2], zoom[3]));
 
@@ -282,6 +287,7 @@
     }
 
 
+    @Override
     public void onPan(PanEvent event) {
         if (chartInfo == null) {
             return;
@@ -451,10 +457,12 @@
             mode.getName(),
             getChartAttributes(),
             new AsyncCallback<ChartInfo>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     GWT.log("ChartInfo ERROR: " + caught.getMessage());
                 }
 
+                @Override
                 public void onSuccess(ChartInfo chartInfo) {
                     setChartInfo(chartInfo);
                 }
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/chart/ChartToolbar.java	Fri Jul 13 11:31:25 2012 +0000
@@ -1,7 +1,6 @@
 package de.intevation.flys.client.client.ui.chart;
 
 import com.google.gwt.core.client.GWT;
-
 import com.smartgwt.client.widgets.Button;
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.ImgButton;
@@ -30,34 +29,20 @@
 
     public static final int PANEL_HEIGHT = 30;
 
-    protected ChartOutputTab chartTab;
-
+    protected Button manageThemes;
     protected Button datacage;
-
     protected ImgLink downloadPNG;
-
     protected ImgLink downloadPDF;
-
     protected ImgLink downloadSVG;
-
     protected Canvas downloadCSV;
-
     protected MousePositionPanel position;
-
     protected ZoomboxControl zoombox;
-
     protected ImgButton zoomToMaxExtent;
-
     protected ImgButton historyBack;
-
     protected ImgButton zoomOut;
-
     protected ImgButton chartProperties;
-
     protected Button addPoints;
-
     protected Button addWSP;
-
     protected PanControl panControl;
 
 
@@ -65,7 +50,7 @@
     public ChartToolbar(ChartOutputTab chartTab) {
         super(chartTab);
 
-        this.chartTab   = chartTab;
+        manageThemes    = new Button(MSG.manageThemes());
         datacage        = new Button(MSG.databasket());
         position        = new MousePositionPanel(chartTab);
         zoombox         = new ZoomboxControl(chartTab, MSG.zoom_in());
@@ -76,11 +61,12 @@
         chartProperties = new ImgButton();
         addPoints       = new Button(MSG.points());
 
-        if (this.chartTab.getMode().getName().equals("cross_section")) {
+        if (chartTab.getMode().getName().equals("cross_section")) {
             addWSP = new Button(MSG.addWSPButton());
             addWSP.setTooltip(MSG.addWSPTooltip());
             final ChartOutputTab finalChartTab = chartTab;
             addWSP.addClickHandler(new ClickHandler() {
+                @Override
                 public void onClick(ClickEvent ce) {
                     new ManualWSPEditor(finalChartTab.getView().getCollection(),
                         finalChartTab, finalChartTab.getMode().getName()).show();
@@ -88,13 +74,23 @@
         }
 
         addPoints.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 openPointWindow();
             }
         });
         addPoints.setTooltip(MSG.addPointsTooltip());
 
+        manageThemes.addClickHandler(new ClickHandler() {
+
+            @Override
+            public void onClick(ClickEvent event) {
+                getChartOutputTab().toggleThemePanel();
+            }
+        });
+
         datacage.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 GWT.log("Clicked 'datacage' button.");
                 openDatacageWindow((ChartOutputTab) getOutputTab());
@@ -134,6 +130,7 @@
         zoomToMaxExtent.setSrc(baseUrl + MSG.zoom_all());
         adjustImageButton(zoomToMaxExtent);
         zoomToMaxExtent.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 getChartOutputTab().resetRanges();
                 // Relink the export buttons.
@@ -145,6 +142,7 @@
         zoomOut.setSrc(baseUrl + MSG.zoom_out());
         adjustImageButton(zoomOut);
         zoomOut.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 getChartOutputTab().zoomOut(10);
                 // Relink the export buttons.
@@ -156,6 +154,7 @@
         historyBack.setSrc(baseUrl + MSG.zoom_back());
         adjustImageButton(historyBack);
         historyBack.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 getChartOutputTab().zoomOut();
                 // Relink the export buttons.
@@ -167,6 +166,7 @@
         zoombox.addZoomHandler(chartTab);
         zoombox.addZoomHandler(this);
         zoombox.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 panControl.deselect();
             }
@@ -175,6 +175,7 @@
 
         panControl.addPanHandler(chartTab);
         panControl.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 zoombox.deselect();
             }
@@ -184,6 +185,7 @@
         chartProperties.setSrc(baseUrl + MSG.properties_ico());
         adjustImageButton(chartProperties);
         chartProperties.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 openPropertiesEditor();
             }
@@ -192,6 +194,7 @@
 
         initLayout();
         addResizedHandler(new ResizedHandler() {
+            @Override
             public void onResized(ResizedEvent e) {
                 if (getVisibleWidth() < 740) {
                     setHeight(55);
@@ -217,8 +220,8 @@
     }
 
 
-    public ChartOutputTab getChartOutputTab() {
-        return chartTab;
+    private ChartOutputTab getChartOutputTab() {
+        return (ChartOutputTab)getOutputTab();
     }
 
 
@@ -234,6 +237,7 @@
         datacage.setWidth("95px");
         position.setWidth("200px");
 
+        addMember(manageThemes);
         addMember(datacage);
         addMember(downloadPNG);
         addMember(downloadPDF);
@@ -247,7 +251,7 @@
         addMember(chartProperties);
         addMember(addPoints);
 
-        if (this.chartTab.getMode().getName().equals("cross_section")) {
+        if (getChartOutputTab().getMode().getName().equals("cross_section")) {
             addMember(addWSP);
         }
 
@@ -267,13 +271,14 @@
 
     /** Open editor for custom points. */
     protected void openPointWindow() {
-        if (this.chartTab.getMode().getName().equals("historical_discharge")) {
+        ChartOutputTab chartTab = getChartOutputTab();
+        if (chartTab.getMode().getName().equals("historical_discharge")) {
             new ManualDatePointsEditor(chartTab.getView().getCollection(),
-                this.chartTab, this.chartTab.getMode().getName()).show();
+                chartTab, chartTab.getMode().getName()).show();
         }
         else {
             new ManualPointsEditor(chartTab.getView().getCollection(),
-                this.chartTab, this.chartTab.getMode().getName()).show();
+                chartTab, chartTab.getMode().getName()).show();
         }
     }
 
@@ -283,7 +288,9 @@
      * correct zoom values are included in the request when clicked.
      * @param evt ignored.
      */
+    @Override
     public void onZoom(ZoomEvent evt) {
+        ChartOutputTab chartTab = getChartOutputTab();
         downloadPNG.setSource(chartTab.getExportUrl(-1, -1, "png"));
         downloadPDF.setSource(chartTab.getExportUrl(-1, -1, "pdf"));
         downloadSVG.setSource(chartTab.getExportUrl(-1, -1, "svg"));
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapOutputTab.java	Fri Jul 13 11:31:25 2012 +0000
@@ -1,35 +1,31 @@
 package de.intevation.flys.client.client.ui.map;
 
-import java.util.List;
-
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.HorizontalPanel;
 import com.google.gwt.user.client.ui.Widget;
-
 import com.smartgwt.client.util.SC;
 import com.smartgwt.client.widgets.Canvas;
 import com.smartgwt.client.widgets.events.ResizedEvent;
 import com.smartgwt.client.widgets.events.ResizedHandler;
 import com.smartgwt.client.widgets.layout.HLayout;
 import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tab.events.TabSelectedEvent;
 import com.smartgwt.client.widgets.tab.events.TabSelectedHandler;
-import com.smartgwt.client.widgets.tab.events.TabSelectedEvent;
 
-import org.gwtopenmaps.openlayers.client.Bounds;
-import org.gwtopenmaps.openlayers.client.Map;
-import org.gwtopenmaps.openlayers.client.event.VectorFeatureAddedListener;
-import org.gwtopenmaps.openlayers.client.event.VectorFeatureAddedListener.FeatureAddedEvent;
-import org.gwtopenmaps.openlayers.client.event.VectorFeatureRemovedListener;
-import org.gwtopenmaps.openlayers.client.event.VectorFeatureRemovedListener.FeatureRemovedEvent;
-import org.gwtopenmaps.openlayers.client.feature.VectorFeature;
-import org.gwtopenmaps.openlayers.client.format.GeoJSON;
-import org.gwtopenmaps.openlayers.client.layer.Layer;
-import org.gwtopenmaps.openlayers.client.layer.Vector;
-import org.gwtopenmaps.openlayers.client.layer.WMS;
-import org.gwtopenmaps.openlayers.client.layer.WMSParams;
-import org.gwtopenmaps.openlayers.client.layer.WMSOptions;
-
+import de.intevation.flys.client.client.Config;
+import de.intevation.flys.client.client.FLYSConstants;
+import de.intevation.flys.client.client.event.RedrawRequestEvent;
+import de.intevation.flys.client.client.event.RedrawRequestHandler;
+import de.intevation.flys.client.client.services.LoadArtifactService;
+import de.intevation.flys.client.client.services.LoadArtifactServiceAsync;
+import de.intevation.flys.client.client.services.MapOutputService;
+import de.intevation.flys.client.client.services.MapOutputServiceAsync;
+import de.intevation.flys.client.client.services.StepForwardService;
+import de.intevation.flys.client.client.services.StepForwardServiceAsync;
+import de.intevation.flys.client.client.ui.CollectionView;
+import de.intevation.flys.client.client.ui.OutputTab;
+import de.intevation.flys.client.client.ui.ThemePanel;
 import de.intevation.flys.client.shared.model.Artifact;
 import de.intevation.flys.client.shared.model.ArtifactDescription;
 import de.intevation.flys.client.shared.model.AttributedTheme;
@@ -40,25 +36,25 @@
 import de.intevation.flys.client.shared.model.DefaultData;
 import de.intevation.flys.client.shared.model.DefaultDataItem;
 import de.intevation.flys.client.shared.model.MapConfig;
+import de.intevation.flys.client.shared.model.OutputMode;
 import de.intevation.flys.client.shared.model.Recommendation;
 import de.intevation.flys.client.shared.model.Theme;
 import de.intevation.flys.client.shared.model.ThemeList;
-import de.intevation.flys.client.shared.model.OutputMode;
 import de.intevation.flys.client.shared.model.WMSLayer;
 
-import de.intevation.flys.client.client.Config;
-import de.intevation.flys.client.client.FLYSConstants;
-import de.intevation.flys.client.client.services.LoadArtifactService;
-import de.intevation.flys.client.client.services.LoadArtifactServiceAsync;
-import de.intevation.flys.client.client.services.StepForwardService;
-import de.intevation.flys.client.client.services.StepForwardServiceAsync;
-import de.intevation.flys.client.client.services.MapOutputService;
-import de.intevation.flys.client.client.services.MapOutputServiceAsync;
-import de.intevation.flys.client.client.event.RedrawRequestHandler;
-import de.intevation.flys.client.client.event.RedrawRequestEvent;
-import de.intevation.flys.client.client.ui.CollectionView;
-import de.intevation.flys.client.client.ui.OutputTab;
-import de.intevation.flys.client.client.ui.ThemePanel;
+import java.util.List;
+
+import org.gwtopenmaps.openlayers.client.Bounds;
+import org.gwtopenmaps.openlayers.client.Map;
+import org.gwtopenmaps.openlayers.client.event.VectorFeatureAddedListener;
+import org.gwtopenmaps.openlayers.client.event.VectorFeatureRemovedListener;
+import org.gwtopenmaps.openlayers.client.feature.VectorFeature;
+import org.gwtopenmaps.openlayers.client.format.GeoJSON;
+import org.gwtopenmaps.openlayers.client.layer.Layer;
+import org.gwtopenmaps.openlayers.client.layer.Vector;
+import org.gwtopenmaps.openlayers.client.layer.WMS;
+import org.gwtopenmaps.openlayers.client.layer.WMSOptions;
+import org.gwtopenmaps.openlayers.client.layer.WMSParams;
 
 
 public class MapOutputTab
@@ -88,6 +84,7 @@
 
     protected MapToolbar controlPanel;
     protected ThemePanel themePanel;
+    protected Canvas     themePanelCanvas;
     protected Widget     mapPanel;
 
     protected FloodMap floodMap;
@@ -104,10 +101,12 @@
         collectionView.registerTabHandler(this);
 
         mapService.doOut(collection, new AsyncCallback<MapConfig>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     GWT.log("MAP ERROR: " + caught.getMessage());
                 }
 
+                @Override
                 public void onSuccess(MapConfig c) {
                     GWT.log("MAP SUCCESS!");
 
@@ -144,7 +143,7 @@
         hlayout.setWidth100();
         hlayout.setMembersMargin(2);
 
-        final Canvas themePanelWrapper = createThemePanel();
+        this.themePanelCanvas = createThemePanel();
 
         controlPanel = createControlPanel();
         mapPanel     = floodMap.getMapWidget();
@@ -153,16 +152,17 @@
         layout.setHeight("99%");
         layout.add(mapPanel);
 
-        hlayout.addMember(themePanelWrapper);
+        hlayout.addMember(themePanelCanvas);
         hlayout.addMember(layout);
 
         rootLayout.addMember(controlPanel);
         rootLayout.addMember(hlayout);
 
         hlayout.addResizedHandler(new ResizedHandler() {
+            @Override
             public void onResized(ResizedEvent e) {
                 Integer height = hlayout.getHeight();
-                Integer width  = hlayout.getWidth() - themePanelWrapper.getWidth();
+                Integer width  = hlayout.getWidth() - themePanelCanvas.getWidth();
 
                 height = height * 99 / 100;
                 width  = width  * 99 / 100;
@@ -182,6 +182,7 @@
         Vector vector = floodMap.getBarrierLayer();
         vector.addVectorFeatureAddedListener(
             new VectorFeatureAddedListener() {
+                @Override
                 public void onFeatureAdded(FeatureAddedEvent e) {
                     saveBarriers();
                 }
@@ -190,6 +191,7 @@
 
         vector.addVectorFeatureRemovedListener(
             new VectorFeatureRemovedListener() {
+                @Override
                 public void onFeatureRemoved(FeatureRemovedEvent e) {
                     saveBarriers();
                 }
@@ -246,10 +248,12 @@
     @Override
     public void onRedrawRequest(RedrawRequestEvent event) {
         mapService.doOut(collection, new AsyncCallback<MapConfig>() {
+            @Override
             public void onFailure(Throwable caught) {
                 GWT.log("MAP ERROR: " + caught.getMessage());
             }
 
+            @Override
             public void onSuccess(MapConfig c) {
                 GWT.log("We want to refresh the map now!");
                 themePanel.updateCollection();
@@ -407,8 +411,8 @@
 
         AttributedTheme at = (AttributedTheme) theme;
 
-        String type      = at.getAttr("name");
-        String desc      = at.getAttr("description");
+        //String type      = at.getAttr("name");
+        //String desc      = at.getAttr("description");
         String url       = at.getAttr("url");
         String layers    = at.getAttr("layers");
 
@@ -454,11 +458,13 @@
             mode,
             this,
             new MapThemePanel.ActivateCallback() {
+                @Override
                 public void activate(Theme theme, boolean active) {
                     activateTheme(theme, active);
                 }
             },
             new MapThemePanel.ThemeMovedCallback() {
+                @Override
                 public void onThemeMoved(Theme theme, int oldIdx, int newIdx) {
                     // this code synchronizes the ThemePanel and the OpenLayers
                     // internal order of layers.
@@ -479,6 +485,7 @@
                 }
             },
             new MapThemePanel.LayerZoomCallback() {
+                @Override
                 public void onLayerZoom(Theme theme, String extent) {
                     Bounds zoomTo = boundsFromString(extent);
 
@@ -530,11 +537,13 @@
 
         feedService.go(locale, getArtifact(), new Data[] { data },
             new AsyncCallback<Artifact>() {
+                @Override
                 public void onFailure(Throwable caught) {
                     GWT.log("Could not save barrier geometries: " +
                         caught.getMessage());
                 }
 
+                @Override
                 public void onSuccess(Artifact artifact) {
                     GWT.log("Successfully saved barrier geometries.");
                 }
@@ -543,6 +552,7 @@
     }
 
 
+    @Override
     public void onTabSelected(TabSelectedEvent tse) {
         if(floodMap == null) {
             return;
@@ -555,5 +565,9 @@
             floodMap.activateScaleLine(false);
         }
     }
+
+    public void toogleThemePanel() {
+        this.themePanelCanvas.setVisible(!themePanelCanvas.isVisible());
+    }
 }
 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapToolbar.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/client/ui/map/MapToolbar.java	Fri Jul 13 11:31:25 2012 +0000
@@ -1,7 +1,6 @@
 package de.intevation.flys.client.client.ui.map;
 
 import com.google.gwt.core.client.GWT;
-
 import com.smartgwt.client.types.Alignment;
 import com.smartgwt.client.types.SelectionType;
 import com.smartgwt.client.util.SC;
@@ -11,9 +10,15 @@
 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.events.ResizedEvent;
 import com.smartgwt.client.widgets.events.ResizedHandler;
+import com.smartgwt.client.widgets.layout.HLayout;
+
+import de.intevation.flys.client.client.FLYSConstants;
+import de.intevation.flys.client.client.ui.ImgLink;
+import de.intevation.flys.client.client.ui.Toolbar;
+import de.intevation.flys.client.client.utils.EnableDisableCmd;
+import de.intevation.flys.client.shared.model.Collection;
 
 import org.gwtopenmaps.openlayers.client.Bounds;
 import org.gwtopenmaps.openlayers.client.Map;
@@ -21,19 +26,11 @@
 import org.gwtopenmaps.openlayers.client.control.SelectFeature;
 import org.gwtopenmaps.openlayers.client.control.SelectFeatureOptions;
 import org.gwtopenmaps.openlayers.client.control.ZoomBox;
+import org.gwtopenmaps.openlayers.client.event.MapZoomListener;
 import org.gwtopenmaps.openlayers.client.feature.VectorFeature;
 import org.gwtopenmaps.openlayers.client.layer.Vector;
 import org.gwtopenmaps.openlayers.client.util.Attributes;
 
-import org.gwtopenmaps.openlayers.client.event.MapZoomListener;
-
-import de.intevation.flys.client.client.FLYSConstants;
-import de.intevation.flys.client.client.ui.Toolbar;
-import de.intevation.flys.client.client.ui.ImgLink;
-import de.intevation.flys.client.client.utils.EnableDisableCmd;
-import de.intevation.flys.client.shared.model.ThemeList;
-import de.intevation.flys.client.shared.model.Collection;
-
 
 /**
  * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
@@ -50,6 +47,7 @@
     protected SelectFeature  selectFeature;
     protected GetFeatureInfo getFeatureInfo;
 
+    protected Button manageThemesButton;
     protected Button datacageButton;
 
     protected ImgButton addWMSButton;
@@ -109,6 +107,9 @@
         epsgLabel       = createEPSGLabel();
 
         if (mapTab != null) {
+            manageThemesButton = createManageThemesControl();
+            addMember(manageThemesButton);
+
             datacageButton = createDatacageControl();
             addMember(datacageButton);
 
@@ -139,6 +140,7 @@
         addMember(createRightPanel());
 
         addResizedHandler(new ResizedHandler() {
+            @Override
             public void onResized(ResizedEvent e) {
                 if (getVisibleWidth() < 656) {
                     setHeight(55);
@@ -267,6 +269,7 @@
         btn.setShowRollOverIcon(false);
         btn.setSelected(false);
         btn.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent e) {
                 if (btn.isSelected()) {
                     cmd.enable();
@@ -295,6 +298,7 @@
 
     protected ImgButton createMaxExtentControl() {
         ImgButton zoomToMax = createButton(MSG.zoom_all(), new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 floodMap.getMap().zoomToMaxExtent();
             }
@@ -310,6 +314,7 @@
         zoomBox = new ZoomBox();
 
         EnableDisableCmd cmd = new EnableDisableCmd() {
+            @Override
             public void enable() {
                 activatePan(false);
                 activateDrawFeature(false);
@@ -319,6 +324,7 @@
                 activateZoomBox(true);
             }
 
+            @Override
             public void disable() {
                 activateZoomBox(false);
             }
@@ -336,6 +342,7 @@
 
     protected ImgButton createZoomOutControl() {
         ImgButton zoomOut = createButton(MSG.zoom_out(), new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 Map map   = floodMap.getMap();
                 int level = map.getZoom();
@@ -357,6 +364,7 @@
         getMap().addControl(pan);
 
         EnableDisableCmd cmd = new EnableDisableCmd() {
+            @Override
             public void enable() {
                 activateZoomBox(false);
                 activateDrawFeature(false);
@@ -366,6 +374,7 @@
                 activatePan(true);
             }
 
+            @Override
             public void disable() {
                 activatePan(false);
             }
@@ -380,6 +389,7 @@
 
     protected DrawControl createDrawControl() {
         EnableDisableCmd cmd = new EnableDisableCmd() {
+            @Override
             public void enable() {
                 activateZoomBox(false);
                 activatePan(false);
@@ -388,6 +398,7 @@
                 activateMeasureControl(false);
             }
 
+            @Override
             public void disable() {
                 activateDrawFeature(false);
             }
@@ -408,12 +419,14 @@
         // this doesn't work here. After a feature has been selected, the layer
         // still has no selected features.
         opts.onSelect(new SelectFeature.SelectFeatureListener() {
+            @Override
             public void onFeatureSelected(VectorFeature feature) {
                 floodMap.selectFeature(feature);
             }
         });
 
         opts.onUnSelect(new SelectFeature.UnselectFeatureListener() {
+            @Override
             public void onFeatureUnselected(VectorFeature feature) {
                 floodMap.disableFeature(feature);
             }
@@ -423,6 +436,7 @@
         getMap().addControl(selectFeature);
 
         EnableDisableCmd cmd = new EnableDisableCmd() {
+            @Override
             public void enable() {
                 activateDrawFeature(false);
                 activatePan(false);
@@ -431,6 +445,7 @@
                 activateMeasureControl(false);
             }
 
+            @Override
             public void disable() {
                 activateSelectFeature(false);
                 floodMap.disableFeatures();
@@ -446,6 +461,7 @@
 
     protected ImgButton createRemoveFeatureControl() {
         ImgButton remove = createButton(MSG.removeFeature(),new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 Vector          barriers = floodMap.getBarrierLayer();
                 VectorFeature[] features = barriers.getFeatures();
@@ -476,6 +492,7 @@
 
     protected ImgButton createElevationControl() {
         ImgButton btn = createButton(MSG.adjustElevation(), new ClickHandler() {
+            @Override
             public void onClick(ClickEvent evt) {
                 Vector          barriers = floodMap.getBarrierLayer();
                 VectorFeature[] features = barriers.getFeatures();
@@ -527,6 +544,7 @@
 
     protected MeasureControl createMeasureControl() {
         EnableDisableCmd cmd = new EnableDisableCmd() {
+            @Override
             public void enable() {
                 activateDrawFeature(false);
                 activatePan(false);
@@ -535,6 +553,7 @@
                 activateGetFeatureInfo(false);
             }
 
+            @Override
             public void disable() {
                 // do nothing
             }
@@ -547,6 +566,7 @@
     protected Button createDatacageControl() {
         Button btn = new Button(MSG.databasket());
         btn.addClickHandler(new ClickHandler() {
+            @Override
             public void onClick(ClickEvent evt) {
                 openDatacageWindow((MapOutputTab) getOutputTab());
             }
@@ -562,7 +582,7 @@
             return null;
         }
 
-        ThemeList tl = ot.getCollection().getThemeList("floodmap");
+        //ThemeList tl = ot.getCollection().getThemeList("floodmap");
 
         getFeatureInfo = new GetFeatureInfo(
             getMap(),
@@ -570,6 +590,7 @@
             "gml");
 
         EnableDisableCmd cmd = new EnableDisableCmd() {
+            @Override
             public void enable() {
                 activateDrawFeature(false);
                 activatePan(false);
@@ -579,6 +600,7 @@
                 activateGetFeatureInfo(true);
             }
 
+            @Override
             public void disable() {
                 activateGetFeatureInfo(false);
             }
@@ -591,10 +613,24 @@
     }
 
 
+    protected Button createManageThemesControl() {
+        Button btn = new Button(MSG.manageThemes());
+        btn.addClickHandler(new ClickHandler() {
+
+            @Override
+            public void onClick(ClickEvent event) {
+                ((MapOutputTab)getOutputTab()).toogleThemePanel();
+            }
+        });
+        return btn;
+    }
+
+
     protected ImgButton createWMSControl() {
         final String srs = floodMap.getRiverProjection();
 
         ImgButton add = createButton(MSG.addWMS(), new ClickHandler() {
+            @Override
             public void onClick(ClickEvent event) {
                 MapOutputTab ot = (MapOutputTab) getOutputTab();
                 new ExternalWMSWindow(ot, srs).start();
--- a/flys-client/src/main/java/de/intevation/flys/client/server/auth/was/Signature.java	Fri Jul 13 10:09:20 2012 +0000
+++ b/flys-client/src/main/java/de/intevation/flys/client/server/auth/was/Signature.java	Fri Jul 13 11:31:25 2012 +0000
@@ -7,7 +7,6 @@
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.log4j.Logger;
-
 import org.jdom.Element;
 
 public class Signature {
@@ -19,7 +18,7 @@
     private static final String XML_SIG_SIGNATURE_RSA_SHA1 =
         "http://www.w3.org/2000/09/xmldsig#rsa-sha1";
 
-    private Element signature;
+    private final Element signature;
     private Certificate cert;
     private byte[] value;
     private byte[] digestvalue;

http://dive4elements.wald.intevation.org