Mercurial > dive4elements > gnv-client
changeset 1144:f444cfce0b3d
dummy merge for repo head
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:15:22 +0200 |
parents | 597163195dc9 (diff) 11d8cc2deb92 (current diff) |
children | dfe1ac687c7f |
files | gnv/src/main/webapp/styles/calendar-blue.css |
diffstat | 451 files changed, 15863 insertions(+), 1860 deletions(-) [+] |
line wrap: on
line diff
--- a/doc/ChangeLog Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/ChangeLog Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,70 @@ +2012-07-05 Felix Wolfsteller <felix.wolfsteller@intevation.de> + + * README: New file with minimal instructions how to build the + documentation. + +2010-08-13 Tim Englich <tim@intevation.de> + + * admin-manual/installation-artifact-server.tex, + admin-manual/operating-the-system.tex, + admin-manual/installation-base.tex, + admin-manual/installation-webclient.tex: + Added corrections and wishes of the training on the installation + which was given to the BSH. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * admin-manual/installation-base.tex: Some refactoring of the proxy + installation. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * config-manual/general_settings.tex: Removed section 'Adding new + Languages'. This section should be placed in an own file. + + * config-manual/adding_new_languages.tex: New file for section 'Adding new + Languages'. + + * config-manual/config-manual.tex: Include section 'Adding new Languages'. + +2010-06-29 Tim Englich <tim@intevation.de> + + * admin-manual/installation-base.tex: + Added Section which explains how to install the proxy-script + which is required for the OpenLayers-Client which is integrated in the + GNV-Web-Client. + +2010-06-29 Tim Englich <tim@intevation.de> + + * config-manual/general_settings.tex: + Added section with the description how to add a new + language to the system into the config-manual. + +2010-06-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * licenses/overview.txt: Overview of external libs and its licenses. + 2010-05-12 Hans Plum <hans@intevation.de> + Tagging as Version 1.0 + +2010-05-12 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.tex, + config-manual/model_of_transitions.tex, + config-manual/title.tex, + config-manual/generating_maps.tex, + config-manual/general_settings.tex, + config-manual/miscellanea.tex, + config-manual/Makefile, + config-manual/administering_artifact-server.tex: + Adapted titlepage to admin manual. Replaced with public Makefile + according to admin manual. (XXX) Added some workaround linebreaks with + typewriter sections + +2010-05-12 Hans Plum <hans@intevation.de> + + * config-manual/config-manual.tex, config-manual/model_of_transitions.tex, config-manual/generating_maps.tex,
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/README Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,11 @@ +To build pdf documentation, call `make` with the documents name without the +".tex" extension, e.g. + + cd admin-manual + make installation-admin-manual + +will result in + + installation-admin-manual.pdf + +.
--- a/doc/admin-manual/installation-artifact-server.tex Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/admin-manual/installation-artifact-server.tex Fri Sep 28 12:15:22 2012 +0200 @@ -17,6 +17,7 @@ \begin{lstlisting} cd /var/log mkdir artifacts + chown -r root:artifacts artifacts chmod 770 artifacts chmod g+s artifacts \end{lstlisting} @@ -85,7 +86,8 @@ Integrate artifact-server in startup-process of operating system: \begin{lstlisting} - cp -i /opt/artifact-server/bin/debian/artifact-server /etc/init.d/ + cp -i /opt/artifact-server/install/debian/artifact-server/artifact-server-init-scipt + /etc/init.d/artifact-server chmod +x /etc/init.d/artifact-server update-rc.d artifact-server defaults \end{lstlisting} @@ -115,14 +117,14 @@ 19509 Jps 19441 App - cat /var/run/artifact-server + cat /var/run/artifact-server.pid \end{lstlisting} Task: Compare the running process numbers. 2. Network: Check if the artifact-server opens a TCP-port (default: 8181) \begin{lstlisting} - netstat -nltp + netstat -nltp | grep 8181 # Check for an entry like: tcp 0 0 127.0.0.1:8181 0.0.0.0:* LISTEN 18648/java
--- a/doc/admin-manual/installation-base.tex Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/admin-manual/installation-base.tex Fri Sep 28 12:15:22 2012 +0200 @@ -54,6 +54,21 @@ {\em Hint}: Configuring of partitions, firewalls, etc. for the system is out of the scope of this documentation. +\subsection{Preparations} + +In some steps it is required to use templates wich are packed in +\verb+ artifact-server-$VERSION.tar.bz2+ to get access to those files. + +Please extract the tar.bz2 file as explained in +Chapter~\ref{ref:artifact-server-install}, + p.~\pageref{ref:artifact-server-install}. + +The complete document use the system-variable \verb+$ARTIFACT_SERVER_HOME+ +to refer the root-directory of the Artifac-Server. +It might be helpful to export this variable using the following command: + +\verb+ export ARTIFACT_SERVER_HOME=/opt/artifact-server+ + \subsection{Java Environment} \subsubsection*{Installation Sun Java 6} @@ -76,8 +91,10 @@ Install Sun Java 6 and its dependencies by executing the following: -\verb+ apt-get install sun-java6-jdk+ - +\begin{lstlisting} + apt-get update + apt-get install sun-java6-jdk +\end{lstlisting} \subsubsection*{Install Native Components for Java6 (optional)} @@ -130,8 +147,8 @@ Check if a version of 1.6.0* has been set. Check: \begin{lstlisting} - java version "1.6.0_12" - Java(TM) SE Runtime Environment (build 1.6.0_12-b04) + java version "1.6.0_20-b02" + Java(TM) SE Runtime Environment (build 1.6.0_20-b02) Java HotSpot(TM) Server VM (build 11.2-b01, mixed mode) \end{lstlisting} @@ -153,6 +170,9 @@ \verb+/etc/default/tomcat5.5+: \begin{lstlisting} + - #JAVA_HOME="/usr/lib/jvm/java-6-sun/" + + JAVA_HOME="/usr/lib/jvm/java-6-sun/" + - #JAVA_OPTS="-Djava.awt.headless=true -Xmx128M" + JAVA_OPTS="-Djava.awt.headless=true -Xmx1024m -server" @@ -245,7 +265,7 @@ After finishing the configuration, enable the module in Apache WebServer: \verb+ a2enmod jk+ and restart the server -\verb+ /etc/init.d/apache restart+. +\verb+ /etc/init.d/apache2 restart+. \subsubsection*{Publish the site in Apache WebServer} @@ -263,7 +283,7 @@ Enable the specific site (VirtualHost) in Apache WebServer: \begin{lstlisting} - cp -i $ARTIFACT_SERVER_HOME/install/debian/apache2 to /etc/apache2/sites-available + cp -i $ARTIFACT_SERVER_HOME/install/debian/apache2/gnv to /etc/apache2/sites-available # Activate site for GNV a2ensite gnv /etc/init.d/apache reload @@ -305,27 +325,90 @@ dpkg -i cgi-mapserver-gp_5.6.3-1~gp+1_i386.deb \end{lstlisting} -Provide a possibility to integrate MapServer properly and transfer +If there are libraries which are required by the Mapserver but not +installed yet run the following command: +\begin{lstlisting} +apt-get -f install +\end{lstlisting} + + +Provide a possibility to integrate Mapserver properly and transfer configurations to MapServer during runtime: \begin{lstlisting} cd /usr/lib/cgi-bin cp -i $ARTIFACT_SERVER_HOME/install/debian/umn-mapserver/gnv-wms . +chmod +x gnv-wms \end{lstlisting} For setting proper contact details in the WMS Capabilities response, edit the file \verb+ $ARTIFACT_SERVER_HOME/conf/maptemplates/mapfile.vm+ in the section WEB $\rightarrow$ METADATA. +The Mapserver will need fonts for rendering lables in the map. +To provide this it is required to install the freefonts. +\begin{lstlisting} +apt-get install ttf-freefont +\end{lstlisting} + + \subsubsection*{Test of installation} Check for a sucessful installation via: \begin{lstlisting} cd root curl \ -"http://localhost/cgi-bin/gnv-wms?service=WMS&request=GetCapabilities&version=1.1.1" \ +"http://localhost/cgi-bin/gnv-wms" \ -o mapserver \end{lstlisting} For a sucessful configuration, the response document \verb+ mapserver+ -contains a XML document describing the capabilities of the mapserver. +contains a Value which contains the following message of the mapserver. + +TODO: QUERYSTRING WAS EMPTY HINZUFUEGEN + +\subsection{Proxy-Script: Installation and Configuration} +The Proxy-Script is required to allow the Map-Client to request external +services. Security policies forbit and prevent requesting those services - like +a GetFeatureInfo request - directly. + +\subsubsection{Installation} + +First make sure that python is installed on the operating system. +Otherwise install python using the following command: + +\verb+ apt-get install python+ + +Then the script itself must be published on the server by executing the +following steps: + +\begin{lstlisting} +cd /usr/lib/cgi-bin +cp -i $ARTIFACT_SERVER_HOME/install/debian/ol-proxy/proxy.cgi . +\end{lstlisting} + +\subsubsection{Configuration} +The Proxy-Script can only communicate with servers it is allowed to. +To enable the communication to the server where the UMN-Mapserver is hosted +or to other Server it is necessary to edit {\tt allowedHosts} in the +Proxy-Script at line 18. + +There you have to replace the placeholder THISHOSTNAME with the name which +will be used to reach the GNV-Web-Client. + +You can add further servers using the syntax which is given in the script. + +\subsubsection{Test of installation} + +It is possible to test the installation using the following command: + +\begin{lstlisting} +curl http://localhost/cgi-bin/proxy.cgi?url=http%3A%2F%2Flocalhost/cgi-bin/mapserv-gp +\end{lstlisting} + +If localhost is allowed in the proxy-script the result might be this: + +\begin{lstlisting} +TODO: QUERYSTRING WAS EMPTY HINZUFUEGEN +\end{lstlisting} +
--- a/doc/admin-manual/installation-webclient.tex Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/admin-manual/installation-webclient.tex Fri Sep 28 12:15:22 2012 +0200 @@ -45,7 +45,7 @@ Testing the installation via Apache WebServer, mod\_jk and Apache Tomcat: \begin{lstlisting} - curl "http://localhost/gnv/" -o gnv + curl "http://localhost/gnv/start.do" -o gnv \end{lstlisting} The file \verb+gnv+ includes HTML describing the startpage of the
--- a/doc/admin-manual/operating-the-system.tex Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/admin-manual/operating-the-system.tex Fri Sep 28 12:15:22 2012 +0200 @@ -41,8 +41,8 @@ \paragraph*{Database problems} For checking problems with the connection to the database server, check the logfile of the artifact-server (c.f. -chapter~\chapter{ref:artifact-server-install}, -p.~pageref{ref:artifact-server-install}. +Chapter~\ref{ref:artifact-server-install}, +p.~\pageref{ref:artifact-server-install}). In most cases, a restart of the artifact-server will help to solve problems in the artifact-server. If you still encounter problems, check
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/config-manual/adding_new_languages.tex Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,23 @@ +\subsection{Adding new Languages} +The GNV-Server has the possibility to handle different languages. It is +necessary to configure those. + +The configuration is divided into three steps: + +\begin{enumerate} + \item Adding the required resource-file to the GNV-Server + \\{\tt /gnv-artifacts/src/main/resources/lang } + \item Adding the required resource-file to the GNV-Web-Client + {\tt /gnv/src/main/resources} + \item Publishing the new language to the GNV-Server by adding the + language-code to the file + \\{\tt /gnv-artifacts/src/main/resources/lang/lang.conf} +\end{enumerate} + +To generate the resource-files it might be helpful to copy an existing one and +translate its content into the desired language. + +Please note that you have to re-package the modules gnv and gnv-artifacts to +enable the new languages - currently, only german and english are provided. +If you want to provide further languages you have to change the toggle-mechanism +for switching the language in the web-client.
--- a/doc/config-manual/config-manual.tex Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/config-manual/config-manual.tex Fri Sep 28 12:15:22 2012 +0200 @@ -200,6 +200,7 @@ \include{administering_artifact-server} \include{generating_charts} \include{generating_maps} +\include{adding_new_languages} \include{model_of_transitions} \include{miscellanea} \end{document}
--- a/doc/config-manual/general_settings.tex Fri Sep 28 12:13:58 2012 +0200 +++ b/doc/config-manual/general_settings.tex Fri Sep 28 12:15:22 2012 +0200 @@ -77,3 +77,4 @@ SQL-Statements" covering the main elements {\tt factories, artifacts} \end{enumerate} +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/licenses/overview.txt Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,225 @@ +=============================================================================== +Primärabhängigkeiten: + * junit-3.8.1.jar (gnv + gnv-artifacts + geo-backend) + - Common Public License Version 1.0 + - http://www.opensource.org/licenses/cpl1.0.txt + + * log4j-1.2.14.jar (gnv + gnv-artifacts + geo-backend) + - Apache License Version 2.0 + + * jfreechart-1.0.13.jar (gnv-artifacts) + - LGPL v2.1 or later + + * batik-dom-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-svggen-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * velocity-1.6.1.jar (gnv-artifacts) + - Apache License 2.0 + + * itext-2.1.7.jar (gnv-artifacts) + - Mozilla Public License 1.1 + + * opencsv-2.0.jar (gnv-artifacts) + - Apache License Version 2.0 + + * commons-math-2.0.jar (gnv-artifacts + geo-backend) + - Apache License Version 2.0) + + * ehcache-1.6.2.jar (gnv-artifacts + geo-backend) + - Apache License Version 2.0 + + * commons-validator-1.3.1.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * oro-2.0.8.jar (gnv-artifacts) + - Apache License 1.1 + + * gt-epsg-wkt-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-shapefile-2.5.8.jar (gnv-artifact) + - LGPL v2 or later + + * jts-1.9.jar (gnv-artifacts + geo-backend) + - LGPL v2.1 or later) + + * trove-2.1.1.jar (gnv-artifacts) + - LGPL v2.1 or later + + * commons-fileupload-1.2.1.jar (gnv) + - Apache License Version 2.0 + + * commons-pool-1.3.jar (artifact-database + gnv-artifacts + geo-backend) + - Apache License Version 2.0) + + * org.restlet-2.0-SNAPSHOT.jar (artifact-database + gnv + gnv-artifacts) + - LGPL V3.0 or LGPL V2.1 or CDDL V1.0 or EPL V1.0) + + * org.restlet.ext.xml-2.0-SNAPSHOT.jar (artifact-database + gnv + gnv-artifacts) + - LGPL V3.0 or LGPL V2.1 or CDDL V1.0 or EPL V1.0 + + * servlet-api-5.5.15.jar (gnv) + - Apache License 2.0 + + * struts-1.2.9.jar (gnv) + - Apache License 2.0 + + * struts-el-1.2.9.jar (gnv) + - Apache License 2.0 + + * h2-1.1.117.jar (artifact-database + gnv-artifacts) + - Dual licensed: + - MPL 1.1 + - http://www.mozilla.org/MPL + - EPL 1.0 + - http://opensource.org/licenses/eclipse-1.0.php + + * postgresql-8.3-603.jdbc4.jar (artifact-database + gnv-artifacts) + - BSD License + + * commons-codec-1.4.jar (artifact-database + gnv-artifacts) + - Apache License Version 2.0 + + * jul-to-slf4j-1.5.11.jar (artifact-database + gnv-artifacts) + - MIT License + + * slf4j-log4j12-1.5.11.jar (artifact-database + gnv-artifacts) + - MIT License + +=============================================================================== +Sekundärabhängigkeiten: + * antlr-2.7.2.jar (gnv) + - ANTLR 3 License + - http://www.antlr.org/license.html + + * batik-awt-util-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-css-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-ext-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-util-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * batik-xml-1.7.jar (gnv-artifacts) + - Apache License Version 2.0 + + * bcmail-jdk14-1.38.jar (gnv-artifacts) + - Bouncy Castle Licence (Adaption der Apache License) + - http://www.bouncycastle.org/licence.html + + * bcprov-jdk14-1.38.jar (gnv-artifacts) + - Bouncy Castle Licence (Adaption der Apache License) + - http://www.bouncycastle.org/licence.html + + * bctsp-jdk14-1.38.jar (gnv-artifacts) + - Bouncy Castle Licence (Adaption der Apache License) + - http://www.bouncycastle.org/licence.html + + * commons-beanutils-1.7.0.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * commons-collections-3.2.1.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * commons-dbcp-1.2.2.jar (artifact-database + gnv-artifacts) + - Apache License Version 2.0 + + * commons-digester-1.6.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * commons-lang-2.4.jar (gnv-artifacts) + - Apache License Version 2.0 + + * commons-logging-1.0.4.jar (gnv + gnv-artifacts) + - Apache License Version 2.0 + + * geoapi-2.2.0.jar (gnv-artifacts) + - eine OGC License + - http://www.opengeospatial.org/ogc/legal + + * gt-api-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-main-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-metadata-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * gt-referencing-2.5.8.jar (gnv-artifacts) + - LGPL v2 or later + + * jcommon-1.0.13.jar (gnv-artifacts) + - LGPL v2.1 or later + + * jdom-1.0.jar (gnv-artifacts) + - eigene Lizenz + - (siehe ./licenses/JDOM-LICENSE.txt) + + * jsr-275-1.0-beta-2.jar (gnv-artifacts) + - BSD License + - http://jscience.org/doc/license.txt + + * jstl-1.0.6.jar (gnv) + - Apache License 2.0 + + * oro-2.0.7.jar (gnv) + - Apache License 1.1 + + * osgi_R4_core-1.0.jar (artifact-database + gnv + gnv-artifacts) + - EPL 1.0 + + * slf4j-api-1.5.11.jar (artifact-database + gnv-artifacts) + - MIT License + + * standard-1.0.6.jar (gnv) + - Apache License 2.0 + + * velocity-1.4.jar (gnv-artifacts) + - Apache License 2.0 + + * velocity-dep-1.4.jar (gnv-artifacts) + - Apache License 2.0 + + * xalan-2.6.0.jar (gnv-artifacts) + - Apache License 2.0 + + * xalan-2.5.1.jar (gnv) + - Apache License 2.0 + + * xml-apis-1.0.b2.jar (gnv) + - Apache License 2.0 + - W3C License (siehe ./licenses/XML-APIS-DOM-LICENSE.txt) + + * xml-apis-1.3.04.jar (gnv-artifacts) + - Apache License 2.0 and W3C License + - (siehe ./licenses/XML-APIS-DOM-LICENSE.txt) + + * xml-apis-ext-1.3.04.jar (gnv-artifacts) + - Apache License 2.0 and W3C License + - (siehe ./licenses/XML-APIS-DOM-LICENSE.txt) + +=============================================================================== +Proprietäre Bibliotheken: + * jpe_sdkres-9.3.jar (gnv-artifacts + geo-backend) + + * jsde_sdk-9.3.jar (gnv-artifacts + geo-backend) + + * jpe_sdk-9.3.jar (gnv-artifacts + geo-backend) + +=============================================================================== +Bibliotheken mit unklarer Lizenz: + * icu4j-3.2.jar (gnv-artifacts + geo-backend) + - ICU License + - http://source.icu-project.org/repos/icu/icu/trunk/license.html + + * vecmath-1.3.1.jar (gnv-artifacts) + - JRL + - (siehe ./licenses/JRL.txt)
--- a/geo-backend/ChangeLog Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/ChangeLog Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,121 @@ +2010-11-02 Ingo Weinzierl <ingo@intevation.de> + + * src/test/java/de/intevation/gnv/geobackend/base/query/QueryExecutorTestCase.java, + src/test/java/de/intevation/gnv/geobackend/base/query/ToCharSample.java, + src/test/java/de/intevation/gnv/geobackend/base/query/cache/CacheCleanerTestCase.java, + src/test/java/de/intevation/gnv/geobackend/base/query/GroupBySample.java, + src/test/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEConnectionPoolTestCase.java, + src/main/java/de/intevation/gnv/geobackend/config/Configuration.java, + src/main/java/de/intevation/gnv/geobackend/base/DefaultResultDescriptor.java, + src/main/java/de/intevation/gnv/geobackend/base/DefaultResult.java, + src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorBase.java, + src/main/java/de/intevation/gnv/geobackend/base/query/container/QueryContainerFactory.java, + src/main/java/de/intevation/gnv/geobackend/base/query/container/QueryContainer.java, + src/main/java/de/intevation/gnv/geobackend/base/query/container/DefaultQueryContainer.java, + src/main/java/de/intevation/gnv/geobackend/base/query/container/exception/QueryContainerException.java, + src/main/java/de/intevation/gnv/geobackend/base/query/cache/CacheCleaner.java, + src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutor.java, + src/main/java/de/intevation/gnv/geobackend/base/query/CachingQueryExecutorFactory.java, + src/main/java/de/intevation/gnv/geobackend/base/query/DefaultQueryExceutor.java, + src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorFactory.java, + src/main/java/de/intevation/gnv/geobackend/base/query/exception/QueryException.java, + src/main/java/de/intevation/gnv/geobackend/base/connectionpool/ConnectionPoolFactory.java, + src/main/java/de/intevation/gnv/geobackend/base/connectionpool/ConnectionPool.java, + src/main/java/de/intevation/gnv/geobackend/base/connectionpool/exception/ConnectionException.java, + src/main/java/de/intevation/gnv/geobackend/base/ResultDescriptor.java, + src/main/java/de/intevation/gnv/geobackend/base/Result.java, + src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEConnectionPool.java, + src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEPoolableObjectFactory.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEConnection.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/UncacheableSDEResultSet.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEUtils.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEStatement.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/ColDefinition.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/SDEResultSet.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/Row.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/ResultSet.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/Uncacheable.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEResultSetMetaData.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/exception/DatasourceException.java, + src/main/java/de/intevation/gnv/geobackend/sde/datasources/exception/TechnicalException.java, + src/main/java/de/intevation/gnv/geobackend/util/XMLUtils.java, + src/main/java/de/intevation/gnv/geobackend/util/RedundancyRemover.java: + Added license headers at the top of each of these files. + + * LGPL.txt: Added license file of the GNU LGPL v2.1 + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + RELEASE 1.1 + + * ChangeLog, Changes, NEWS: Summarized changes. + +2010-06-14 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * pom.xml: Write svn revision to MANIFEST file while creating jar archive. + +2010-06-04 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/geobackend/base/query/CachingQueryExecutorFactory.java: + The ehcache CacheManager and the MBeanServer of the JVM are connected + so that the statistics of the sql-cache is available as MBean using + JConsole. + +2010-06-04 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/geobackend/sde/datasources/Uncacheable.java: + A new marker interface. It should be implemented by objects that should + not be cached. + + * src/main/java/de/intevation/gnv/geobackend/sde/datasources/UncacheableSDEResultSet.java: + A new SDEResultSet class that implements Uncacheable. Currently, it is + used for raster elements returned from ArcSDE. + + * src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEStatement.java: + Raster elements are put into an UncacheableSDEResultSet container. This + has the effect that raster elements are not cached. + + * src/main/java/de/intevation/gnv/geobackend/base/query/DefaultQueryExceutor.java: + Only objects that do not implement Uncacheable will be cached. + +2010-06-03 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/geobackend/config/Configuration.java: A + global configuration for this geo-backend. Before using the geo-backend, + it is now necessary to create an instance of this class and call its + initialize(.) method. This method currently takes the following arguments: + + - conf: an xml document that should contain a node named 'geo-backend' + that contains all configurations required by the geo-backend. + - configDir: the absolute path to the root configuration directory that + might contain further configuration files. + - placeholder: the placeholder string that is used in the central config + file to replace the path to the configuration directory. + + Furthermore, this Configuration is used to initialize the so-called + 'sql-cache' that caches sql statements - it has been configured via system + properties until now. + + * src/main/java/de/intevation/gnv/geobackend/base/query/CachingQueryExecutorFactory.java, + src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorFactory.java: + The sql-cache configuration is not read from system properties but from + global configuration now. + +2010-06-03 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/geobackend/util/XMLUtils.java: Some + functions to handle xml stuff. + +2010-05-31 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/geobackend/base/query/DefaultQueryExceutor.java: + Show the execution time of a database query as INFO log. + 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + RELEASE 1.0 + * Changes, NEWS, ChangeLog: Summarized changes. 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de>
--- a/geo-backend/Changes Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/Changes Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,17 @@ +2010-06-30 RELEASE 1.1 + + NEW: + + * Cache statistics are available as MBean using JConsole. + + * Deactivated the caching of raster elements to improve performance. + + DDED: + + * A central Configuration instance that might be used to adjust settings + of the geo-backend. + + 2010-04-28 RELEASE 1.0 NEW:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geo-backend/LGPL.txt Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it!
--- a/geo-backend/NEWS Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/NEWS Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,10 @@ +2010-06-30 RELEASE 1.1 + + * Evaluable cache statistics + + * Central configuration for this Geo-Backend + + 2010-04-28 RELEASE 1.0 NEW:
--- a/geo-backend/pom.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/pom.xml Fri Sep 28 12:15:22 2012 +0200 @@ -4,10 +4,14 @@ <groupId>de.intevation.bsh</groupId> <artifactId>geo-backend</artifactId> <packaging>jar</packaging> - - <version>1.0-SNAPSHOT</version> + <version>1.0-SNAPSHOT</version> <name>geo-backend</name> <url>http://maven.apache.org</url> + <scm> + <connection>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/geo-backend</connection> + <developerConnection>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/geo-backend</developerConnection> + <url>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/geo-backend</url> + </scm> <build> <plugins> <plugin> @@ -24,6 +28,36 @@ <target>1.5</target> </configuration> </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>buildnumber-maven-plugin</artifactId> + <executions> + <execution> + <phase>validate</phase> + <goals> + <goal>create</goal> + </goals> + </execution> + </executions> + <configuration> + <doCheck>true</doCheck> + <doUpdate>false</doUpdate> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + <manifestEntries> + <SCM-Revision>${buildNumber}</SCM-Revision> + </manifestEntries> + </archive> + </configuration> + </plugin> </plugins> </build> <dependencies>
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/DefaultResult.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/DefaultResult.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base; import java.util.Date;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/DefaultResultDescriptor.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/DefaultResultDescriptor.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base; import java.util.ArrayList;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/Result.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/Result.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base; import java.io.Serializable;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/ResultDescriptor.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/ResultDescriptor.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base; import java.io.Serializable;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/connectionpool/ConnectionPool.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/connectionpool/ConnectionPool.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.connectionpool; import de.intevation.gnv.geobackend.base.connectionpool.exception.ConnectionException;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/connectionpool/ConnectionPoolFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/connectionpool/ConnectionPoolFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.connectionpool; import de.intevation.gnv.geobackend.sde.connectionpool.ArcSDEConnectionPool;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/connectionpool/exception/ConnectionException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/connectionpool/exception/ConnectionException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.connectionpool.exception; import com.esri.sde.sdk.client.SeError;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/CachingQueryExecutorFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/CachingQueryExecutorFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,16 +1,33 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; +import de.intevation.gnv.geobackend.base.Result; + +import de.intevation.gnv.geobackend.base.query.cache.CacheCleaner; + +import de.intevation.gnv.geobackend.config.Configuration; + +import java.lang.management.ManagementFactory; + import java.util.Collection; import java.util.Iterator; +import javax.management.MBeanServer; + import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; -import org.apache.log4j.Logger; +import net.sf.ehcache.management.ManagementService; -import de.intevation.gnv.geobackend.base.Result; -import de.intevation.gnv.geobackend.base.query.cache.CacheCleaner; +import org.apache.log4j.Logger; /** * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> @@ -18,7 +35,6 @@ public class CachingQueryExecutorFactory extends QueryExecutorFactory { - public static final String QUERY_EXECUTOR_FACTORY = "caching.query.executor.config"; public static final String CACHE_NAME = "sql.cache"; private static Logger log = Logger.getLogger(CachingQueryExecutorFactory.class); @@ -27,11 +43,26 @@ public CachingQueryExecutorFactory() { log.info("using SQL cache"); - String configFile = System.getProperty(QUERY_EXECUTOR_FACTORY); + init(); + } + + private void init() { + Configuration config = Configuration.getInstance(); + + if (config == null) { + log.error("No geobackend configuration found. " + + "Wasn't able to initialize cache."); + return; + } + String configFile = config.getCacheConfiguration(); manager = configFile != null ? new CacheManager(configFile) : new CacheManager(); manager.addCache(CACHE_NAME); + MBeanServer mBeanServer = + ManagementFactory.getPlatformMBeanServer(); + ManagementService.registerMBeans( + manager, mBeanServer, false, false, false, true); CacheCleaner cc = new CacheCleaner(); cc.start(); }
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/DefaultQueryExceutor.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/DefaultQueryExceutor.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; import de.intevation.gnv.geobackend.base.Result; @@ -13,12 +21,15 @@ import de.intevation.gnv.geobackend.base.query.exception.QueryException; +import de.intevation.gnv.geobackend.sde.datasources.Uncacheable; + import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Collection; +import java.util.Date; import org.apache.log4j.Logger; @@ -73,22 +84,35 @@ return returnValue; } - Connection connection = null; + boolean cacheable = true; + Connection connection = null; ConnectionPool connectionPool = ConnectionPoolFactory.getInstance().getConnectionPool(); try { // Submit the Query connection = connectionPool.getConnection(this.connectionID); if (connection != null){ Statement stmt = connection.createStatement(); + Date start = new Date(); ResultSet rs = stmt.executeQuery(queryString); + Date end = new Date(); + log.info("-> Database query took " + + (end.getTime() - start.getTime()) + " ms."); + + cacheable = !(rs instanceof Uncacheable); + returnValue = super.createResultCollection(rs); - }else{ log.error("Could not establish Databaseconnection."); throw new QueryException("Could not establish Databaseconnection."); } - cacheResults(queryString, returnValue); + if (cacheable) { + log.debug("Elements are cacheable."); + cacheResults(queryString, returnValue); + } + else { + log.debug("Elements are NOT cacheable."); + } } catch (ConnectionException e) { log.error(e,e);
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutor.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutor.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; import java.util.Collection;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; import java.sql.ResultSet;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/QueryExecutorFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; +import de.intevation.gnv.geobackend.config.Configuration; + import org.apache.log4j.Logger; /** @@ -34,32 +44,18 @@ */ public static synchronized QueryExecutorFactory getInstance(){ if (instance == null) { - String className = System.getProperty(QUERY_EXECUTOR_FACTORY); - if (className != null) { - try { - Class clazz = Class.forName(className); - final QueryExecutorFactory factory = - (QueryExecutorFactory)clazz.newInstance(); - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - factory.shutdown(); - } - }); - return instance = factory; - } - catch (ClassNotFoundException cnfe) { - log.error(cnfe); - } - catch (InstantiationException ie) { - log.error(ie); - } - catch(IllegalAccessException iae) { - log.error(iae); - } - catch (ClassCastException cce) { - log.error(cce); - } + Configuration config = Configuration.getInstance(); + + if (config.isCacheEnabled()) { + final QueryExecutorFactory factory = + new CachingQueryExecutorFactory(); + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + factory.shutdown(); + } + }); + return instance = factory; } instance = new QueryExecutorFactory();
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/cache/CacheCleaner.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/cache/CacheCleaner.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /** * */
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/DefaultQueryContainer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/DefaultQueryContainer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query.container; import de.intevation.gnv.geobackend.base.query.container.exception.QueryContainerException;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/QueryContainer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/QueryContainer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query.container; import java.util.Properties;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/QueryContainerFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/QueryContainerFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query.container; import java.util.Properties;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/exception/QueryContainerException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/container/exception/QueryContainerException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query.container.exception; /**
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/exception/QueryException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/exception/QueryException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query.exception; /**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/config/Configuration.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.geobackend.config; + +import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPoolFactory; + +import de.intevation.gnv.geobackend.base.query.container.QueryContainerFactory; + +import de.intevation.gnv.geobackend.base.query.container.exception.QueryContainerException; + +import de.intevation.gnv.geobackend.util.XMLUtils; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +import java.util.Properties; + +import javax.xml.xpath.XPathConstants; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public final class Configuration { + + public static final String CONFIGURATION_ROOT = "geo-backend"; + public static final String XPATH_QUERIES = "query-configuration"; + public static final String XPATH_BACKEND = "backend-configuration"; + public static final String XPATH_CACHE = "cache"; + public static final String XPATH_CACHE_ENABLED = "@enabled"; + public static final String XPATH_CACHE_CONFIG = "configuration"; + + private static Logger logger = Logger.getLogger(Configuration.class); + + private static Configuration instance; + + private Node config; + private String configDir; + private String placeholder; + + private boolean cacheEnabled; + private String cacheConfiguration; + + + + /** + * Returns an instance of Configuration. + * + * @return an instance of Configuration. + */ + public static Configuration getInstance() { + if (instance == null) + instance = new Configuration(); + + return instance; + } + + + /** + * Constructor that creates a new Configuration object with disabled cache. + */ + public Configuration() { + cacheEnabled = false; + } + + + /** + * Initialize the geo-backend before it is ready to be used. This method + * calls other <i>init*</i> methods. + * + * @param conf A configuration document. This document should contain a node + * <i>geo-backend</i>. If there are more nodes named <i>geo-backend</i>, the + * first node is used. + * @param configDir The path to the root configuration directory. + * @param placeholder The placeholder used in the configuration document for + * the root configuration directory. + */ + public void init(Document conf, String configDir, String placeholder) + throws QueryContainerException, FileNotFoundException, IOException + { + this.config = conf; + this.configDir = configDir; + this.placeholder = placeholder; + + NodeList root = conf.getElementsByTagName(CONFIGURATION_ROOT); + if (root == null || root.getLength() == 0) { + logger.error("No valid configuration for this geobackend given!"); + return; + } + + initQueries(root.item(0)); + initConnection(root.item(0)); + initCache(root.item(0)); + } + + + /** + * Initialize sql statements. + * + * @param conf The geo-backend configuration node. + */ + protected void initQueries(Node conf) + throws FileNotFoundException, IOException, QueryContainerException + { + String queriesFile = (String) XMLUtils.xpath( + conf, XPATH_QUERIES, XPathConstants.STRING, null); + + queriesFile = replaceConfigDir(queriesFile); + logger.info("Initialize queries: " + queriesFile); + + Properties queries = getProperties(queriesFile); + QueryContainerFactory qcf = QueryContainerFactory.getInstance(); + qcf.initializeQueryContainer(queries); + } + + + /** + * Initialize necessary objects used for the database connection. + * + * @param connection The geo-backend configuration node. + */ + protected void initConnection(Node connection) + throws FileNotFoundException, IOException + { + String config = (String)XMLUtils.xpath( + connection, XPATH_BACKEND, XPathConstants.STRING, null); + + config = replaceConfigDir(config); + logger.info("Initialize database connection: " + config); + + Properties properties = getProperties(config); + ConnectionPoolFactory cpf = ConnectionPoolFactory.getInstance(); + cpf.initializeConnectionPool(properties); + } + + + /** + * Initialize necessary objects used for the sql cache. + * + * @param conf The geo-backend configuration node. + */ + protected void initCache(Node conf) { + Node cache = (Node) XMLUtils.xpath( + conf, XPATH_CACHE, XPathConstants.NODE, null); + + String on = (String) XMLUtils.xpath( + cache, XPATH_CACHE_ENABLED, XPathConstants.STRING, null); + + boolean enabled = Boolean.parseBoolean(on); + + if (enabled) { + String config = (String) XMLUtils.xpath( + cache, XPATH_CACHE_CONFIG, XPathConstants.STRING, null); + + if (config != null && config.length() > 0) { + config = replaceConfigDir(config); + logger.info("Initialize sql cache with config: " + config); + + this.cacheConfiguration = config; + this.cacheEnabled = true; + } + else { + logger.error("SQL cache is enabled, " + + "but no configuration was found."); + } + } + else { + logger.info("SQL cache is disabled."); + } + } + + + /** + * Replace placeholder in the configuration. Placeholder are used for the + * base configuration directory. + * + * @param path A string that might contain placeholders. + * + * @return <i>path</i> with replaced placeholder. + */ + protected String replaceConfigDir(String path) { + return path.replace(placeholder, configDir); + } + + + /** + * Read a file that contains properties and return a Java Properties object. + * + * @param path Path to a properties file. + * + * @return the properties contained in the file. + */ + protected Properties getProperties(String path) + throws FileNotFoundException, IOException + { + InputStream inputStream = null; + + try { + inputStream = new FileInputStream(path); + Properties properties = new Properties(); + properties.load(inputStream); + + return properties; + } + finally { + if (inputStream != null) { + try { + inputStream.close(); + } + catch (IOException ioe) { + } + } + } + } + + + /** + * Returns the state of the cache. + * + * @return true if sql queries are cache, otherwise false. + */ + public boolean isCacheEnabled() { + return cacheEnabled; + } + + + /** + * Returns the path of the cache configuration file. + * + * @return configuration path. + */ + public String getCacheConfiguration() { + return cacheConfiguration; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEConnectionPool.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEConnectionPool.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.connectionpool; import java.sql.Connection;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEPoolableObjectFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/connectionpool/ArcSDEPoolableObjectFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.connectionpool; import de.intevation.gnv.geobackend.base.connectionpool.exception.ConnectionException;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEConnection.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEConnection.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import java.sql.Array;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEResultSetMetaData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEResultSetMetaData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import java.sql.ResultSetMetaData;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEStatement.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEStatement.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import com.esri.sde.sdk.client.SDEPoint; @@ -494,7 +502,9 @@ log.debug("ArcSDEStatement.handleResultSet()"); } - SDEResultSet lSet = new SDEResultSet(); + SDEResultSet lSet = isRaster + ? new UncacheableSDEResultSet() + : new SDEResultSet(); SeRow row = null; int lCount; if (!isRaster){
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEUtils.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEUtils.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import com.esri.sde.sdk.client.SDEPoint;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ColDefinition.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ColDefinition.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import org.apache.log4j.Logger;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/RasterObject.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import com.vividsolutions.jts.geom.Coordinate;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ResultSet.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/ResultSet.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import org.apache.log4j.Logger;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/Row.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/Row.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import com.esri.sde.sdk.client.SDEPoint;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/SDEResultSet.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/SDEResultSet.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import de.intevation.gnv.geobackend.sde.datasources.exception.TechnicalException;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/Uncacheable.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.geobackend.sde.datasources; + +/** + * This interface is a marker interface. It is used for objects that should + * not be cached. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public interface Uncacheable { + +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/UncacheableSDEResultSet.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.geobackend.sde.datasources; + +/** + * This <i>ResultSet</i> has no special tasks but implements <i>Uncacheable</i> + * to avoid this objects being cached. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class UncacheableSDEResultSet +extends SDEResultSet +implements Uncacheable +{ + /** + * Creates a new UncacheableSDResultSet object. + */ + public UncacheableSDEResultSet() { + + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/exception/DatasourceException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/exception/DatasourceException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources.exception; /**
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/exception/TechnicalException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/sde/datasources/exception/TechnicalException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources.exception; import org.apache.log4j.Logger;
--- a/geo-backend/src/main/java/de/intevation/gnv/geobackend/util/RedundancyRemover.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/util/RedundancyRemover.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.util; import java.util.LinkedHashMap;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/geo-backend/src/main/java/de/intevation/gnv/geobackend/util/XMLUtils.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.geobackend.util; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.apache.log4j.Logger; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public final class XMLUtils { + + private static Logger logger = Logger.getLogger(XMLUtils.class); + + + private XMLUtils() { + } + + + public static Object xpath( + Object root, + String query, + QName returnType, + NamespaceContext namespaceContext + ) { + if (root == null) { + return null; + } + + try { + XPath xpath = newXPath(namespaceContext); + + if (xpath != null) { + return xpath.evaluate(query, root, returnType); + } + } + catch (XPathExpressionException xpee) { + logger.error(xpee.getLocalizedMessage(), xpee); + } + + return null; + } + + + public static XPath newXPath(NamespaceContext namespaceContext) { + XPathFactory factory = XPathFactory.newInstance(); + XPath xpath = factory.newXPath(); + + if (namespaceContext != null) { + xpath.setNamespaceContext(namespaceContext); + } + + return xpath; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/GroupBySample.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/GroupBySample.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; import com.esri.sde.sdk.client.SDEPoint;
--- a/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/QueryExecutorTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/QueryExecutorTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; import de.intevation.gnv.geobackend.base.Result;
--- a/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/ToCharSample.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/ToCharSample.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query; import com.esri.sde.sdk.client.SDEPoint;
--- a/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/cache/CacheCleanerTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/test/java/de/intevation/gnv/geobackend/base/query/cache/CacheCleanerTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.base.query.cache; import java.io.FileInputStream;
--- a/geo-backend/src/test/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEConnectionPoolTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/geo-backend/src/test/java/de/intevation/gnv/geobackend/sde/datasources/ArcSDEConnectionPoolTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.geobackend.sde.datasources; import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPool;
--- a/gnv-artifacts/ChangeLog Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/ChangeLog Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,1085 @@ +2012-03-12 Ingo Weinzierl <ingo@intevation.de> + + * src/test/java/de/intevation/gnv/artifacts/TestCallContext.java, + src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java, + src/test/java/de/intevation/gnv/artifacts/TestArtifactDatabase.java, + src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java, + src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java, + src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java, + src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java, + src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java, + src/main/java/de/intevation/gnv/profile/horizontalcrosssection/HorizontalCrossSectionMeshArtifact.java, + src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshParallelArtifact.java, + src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshArtifact.java, + src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileArtifact.java, + src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileArtifact.java, + src/main/java/de/intevation/gnv/timeseries/TimeSeriesArtifact.java, + src/main/java/de/intevation/gnv/layer/LayerArtifact.java, + pom.xml: Made it compile again with an updated ArtifactDatabase. + +2011-03-14 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * src/**/*.java: Changed imports to fit new positions of XMLUtils and Config: + $ find -name \*.java | xargs sed -i \ + -e 's/import de\.intevation\.artifactdatabase\.Config/import de.intevation.artifacts.common.utils.Config/' \ + -e 's/import de\.intevation\.artifactdatabase\.XMLUtils/import de.intevation.artifacts.common.utils.XMLUtils/' + +2010-11-04 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * contrib/palette2polygonVM.xsl, + contrib/visualize-transitions.xsl: Added author names. + +2010-11-02 Ingo Weinzierl <ingo@intevation.de> + + * contrib/palette2polygonVM.xsl, + contrib/palette2qgis.xsl, + contrib/visualize-transitions.xsl, + doc/schema/externalinterface_schema.sql, + doc/schema/externalinterface_testdata.sql, + doc/conf/maptemplates/caps.xml, + src/test/java/de/intevation/gnv/artifacts/MeshHorizontalCrossSectionTestCase.java, + src/test/java/de/intevation/gnv/artifacts/MeshVerticalProfileTestCase.java, + src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestSuite.java, + src/test/java/de/intevation/gnv/artifacts/TimeSeriesPointTimeSeriesTestCase.java, + src/test/java/de/intevation/gnv/artifacts/InstantaneousPointVerticalProfileTestCase.java, + src/test/java/de/intevation/gnv/artifacts/TestCallContext.java, + src/test/java/de/intevation/gnv/artifacts/MeshVerticalCrossSectionTestCase.java, + src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java, + src/test/java/de/intevation/gnv/artifacts/MeshTimeSeriesTestCase.java, + src/test/java/de/intevation/gnv/artifacts/TestArtifactDatabase.java, + src/test/java/de/intevation/gnv/artifacts/MeshHorizontalProfileTestCase.java, + src/test/java/de/intevation/gnv/artifacts/ressource/RessourceFactoryTestCase.java, + src/test/java/de/intevation/gnv/artifacts/TimeSeriesPointVerticalProfileTestCase.java, + src/test/java/de/intevation/gnv/artifacts/InstantaneousPointHorizontalProfileTestCase.java, + src/test/java/de/intevation/gnv/artifacts/util/DistanceCalculatorTestCase.java, + src/test/java/de/intevation/gnv/artifacts/util/ShapeFileWriterTestCase.java, + src/main/java/de/intevation/gnv/artifacts/APP.java, + src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java, + src/main/java/de/intevation/gnv/artifacts/fis/product/Product.java, + src/main/java/de/intevation/gnv/artifacts/fis/product/DefaultProduct.java, + src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java, + src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java, + src/main/java/de/intevation/gnv/artifacts/PreSettingArtifact.java, + src/main/java/de/intevation/gnv/artifacts/cache/CacheFactory.java, + src/main/java/de/intevation/gnv/artifacts/services/MetaDataServiceException.java, + src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/Parameter.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultLayer.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/FIS.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultMapService.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultParameter.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultFIS.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/Layer.java, + src/main/java/de/intevation/gnv/artifacts/services/requestobjects/MapService.java, + src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java, + src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java, + src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContext.java, + src/main/java/de/intevation/gnv/artifacts/ressource/RessourceFactory.java, + src/main/java/de/intevation/gnv/artifacts/GNVDefaultArtifact.java, + src/main/java/de/intevation/gnv/state/OutputState.java, + src/main/java/de/intevation/gnv/state/DefaultInputValue.java, + src/main/java/de/intevation/gnv/state/OutputMode.java, + src/main/java/de/intevation/gnv/state/StateFactory.java, + src/main/java/de/intevation/gnv/state/exception/StateException.java, + src/main/java/de/intevation/gnv/state/cache/ThematicDataCacheCleaner.java, + src/main/java/de/intevation/gnv/state/cache/QueryObject.java, + src/main/java/de/intevation/gnv/state/MeasurementState.java, + src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java, + src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java, + src/main/java/de/intevation/gnv/state/AutoResumeState.java, + src/main/java/de/intevation/gnv/state/PreSettingsTransferCoordinateSelectionState.java, + src/main/java/de/intevation/gnv/state/DefaultExportMode.java, + src/main/java/de/intevation/gnv/state/layer/LayerMetaData.java, + src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java, + src/main/java/de/intevation/gnv/state/InputValue.java, + src/main/java/de/intevation/gnv/state/DefaultAutoResumeState.java, + src/main/java/de/intevation/gnv/state/SingleInputState.java, + src/main/java/de/intevation/gnv/state/SwitchModeState.java, + src/main/java/de/intevation/gnv/state/DefaultOutputMode.java, + src/main/java/de/intevation/gnv/state/ExtendedInputData.java, + src/main/java/de/intevation/gnv/state/StateBase.java, + src/main/java/de/intevation/gnv/state/PreSettingsTransferState.java, + src/main/java/de/intevation/gnv/state/State.java, + src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java, + src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/OutputHelper.java, + src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionParallelOutputState.java, + src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshVectorOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontal/NorthSouthEastWestState.java, + src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileVectorOutputState.java, + src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileMeshVectorOutputState.java, + src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileOutputState.java, + src/main/java/de/intevation/gnv/state/DefaultState.java, + src/main/java/de/intevation/gnv/state/ExportMode.java, + src/main/java/de/intevation/gnv/state/MinMaxDateState.java, + src/main/java/de/intevation/gnv/state/InputData.java, + src/main/java/de/intevation/gnv/state/MinMaxState.java, + src/main/java/de/intevation/gnv/state/describedata/NamedArrayList.java, + src/main/java/de/intevation/gnv/state/describedata/ExtendedKeyValueData.java, + src/main/java/de/intevation/gnv/state/describedata/NamedCollection.java, + src/main/java/de/intevation/gnv/state/describedata/MinMaxDescribeData.java, + src/main/java/de/intevation/gnv/state/describedata/DefaultKeyValueDescribeData.java, + src/main/java/de/intevation/gnv/state/describedata/DefaultMinMaxDescribeData.java, + src/main/java/de/intevation/gnv/state/describedata/SingleValueDescribeData.java, + src/main/java/de/intevation/gnv/state/describedata/DescribeData.java, + src/main/java/de/intevation/gnv/state/describedata/DefaultSingleValueDescribeData.java, + src/main/java/de/intevation/gnv/state/describedata/KeyValueDescibeData.java, + src/main/java/de/intevation/gnv/state/OutputStateBase.java, + src/main/java/de/intevation/gnv/state/DefaultInputData.java, + src/main/java/de/intevation/gnv/state/CoordinateSelectionState.java, + src/main/java/de/intevation/gnv/math/ConstantFunction.java, + src/main/java/de/intevation/gnv/math/ConstantXYDepth.java, + src/main/java/de/intevation/gnv/math/LinearMetrics.java, + src/main/java/de/intevation/gnv/math/QueriedXYDepth.java, + src/main/java/de/intevation/gnv/math/L1Comparator.java, + src/main/java/de/intevation/gnv/math/HeightValue.java, + src/main/java/de/intevation/gnv/math/Metrics.java, + src/main/java/de/intevation/gnv/math/IJKey.java, + src/main/java/de/intevation/gnv/math/LinearToMap.java, + src/main/java/de/intevation/gnv/math/Interpolation2D.java, + src/main/java/de/intevation/gnv/math/XYColumn.java, + src/main/java/de/intevation/gnv/math/Interpolation3D.java, + src/main/java/de/intevation/gnv/math/Point2d.java, + src/main/java/de/intevation/gnv/math/AreaInterpolation.java, + src/main/java/de/intevation/gnv/math/LinearFunction.java, + src/main/java/de/intevation/gnv/math/Interpolator.java, + src/main/java/de/intevation/gnv/math/GridCell.java, + src/main/java/de/intevation/gnv/math/XYDepth.java, + src/main/java/de/intevation/gnv/math/AttributedXYColumns.java, + src/main/java/de/intevation/gnv/math/AttributedPoint2ds.java, + src/main/java/de/intevation/gnv/statistics/StatisticSet.java, + src/main/java/de/intevation/gnv/statistics/VerticalCrossSectionStatistics.java, + src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java, + src/main/java/de/intevation/gnv/statistics/HorizontalProfileStatistics.java, + src/main/java/de/intevation/gnv/statistics/VerticalProfileStatistics.java, + src/main/java/de/intevation/gnv/statistics/Statistic.java, + src/main/java/de/intevation/gnv/statistics/TimeseriesVectorStatistics.java, + src/main/java/de/intevation/gnv/statistics/HorizontalProfileVectorStatistics.java, + src/main/java/de/intevation/gnv/statistics/VerticalProfileVectorStatistics.java, + src/main/java/de/intevation/gnv/statistics/Statistics.java, + src/main/java/de/intevation/gnv/statistics/VectorStatistics.java, + src/main/java/de/intevation/gnv/statistics/exception/StatisticsException.java, + src/main/java/de/intevation/gnv/statistics/AbstractStatistics.java, + src/main/java/de/intevation/gnv/transition/DefaultTransition.java, + src/main/java/de/intevation/gnv/transition/TransitionFactory.java, + src/main/java/de/intevation/gnv/transition/TransitionBase.java, + src/main/java/de/intevation/gnv/transition/PresettingsValueCompareTransition.java, + src/main/java/de/intevation/gnv/transition/Transition.java, + src/main/java/de/intevation/gnv/transition/ValueCompareTransition.java, + src/main/java/de/intevation/gnv/histogram/HistogramHelper.java, + src/main/java/de/intevation/gnv/profile/horizontalcrosssection/HorizontalCrossSectionMeshArtifact.java, + src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshParallelArtifact.java, + src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshArtifact.java, + src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileMeshCrossArtifact.java, + src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileMeshArtifact.java, + src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileArtifact.java, + src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileInstantaneousPointArtifact.java, + src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileMeshArtifact.java, + src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileArtifact.java, + src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileInstantaneousPointArtifact.java, + src/main/java/de/intevation/gnv/raster/Raster.java, + src/main/java/de/intevation/gnv/raster/PolygonDatasetProducer.java, + src/main/java/de/intevation/gnv/raster/ExternalIndexConverter.java, + src/main/java/de/intevation/gnv/raster/AbstractProducer.java, + src/main/java/de/intevation/gnv/raster/JTSMultiLineStringProducer.java, + src/main/java/de/intevation/gnv/raster/RasterToPPM.java, + src/main/java/de/intevation/gnv/raster/IsoPolygonSeriesProducer.java, + src/main/java/de/intevation/gnv/raster/DemuxRingsHandler.java, + src/main/java/de/intevation/gnv/raster/Filter.java, + src/main/java/de/intevation/gnv/raster/IsoAttributeGenerator.java, + src/main/java/de/intevation/gnv/raster/KernelFilter.java, + src/main/java/de/intevation/gnv/raster/JTSMultiPolygonProducer.java, + src/main/java/de/intevation/gnv/raster/PaletteManager.java, + src/main/java/de/intevation/gnv/raster/Vectorizer.java, + src/main/java/de/intevation/gnv/raster/Palette.java, + src/main/java/de/intevation/gnv/raster/IsoProducer.java, + src/main/java/de/intevation/gnv/utils/FileUtils.java, + src/main/java/de/intevation/gnv/utils/IndexBuffer.java, + src/main/java/de/intevation/gnv/utils/DistanceCalculator.java, + src/main/java/de/intevation/gnv/utils/InputValidator.java, + src/main/java/de/intevation/gnv/utils/ArtifactXMLUtilities.java, + src/main/java/de/intevation/gnv/utils/ExclusiveExec.java, + src/main/java/de/intevation/gnv/utils/exception/ValidationException.java, + src/main/java/de/intevation/gnv/utils/MetaWriter.java, + src/main/java/de/intevation/gnv/utils/MapfileGenerator.java, + src/main/java/de/intevation/gnv/utils/WKTUtils.java, + src/main/java/de/intevation/gnv/utils/StringUtils.java, + src/main/java/de/intevation/gnv/utils/Pair.java, + src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java, + src/main/java/de/intevation/gnv/utils/ShapeFileWriter.java, + src/main/java/de/intevation/gnv/chart/VerticalProfileVectorChart.java, + src/main/java/de/intevation/gnv/chart/Chart.java, + src/main/java/de/intevation/gnv/chart/DefaultHistogram.java, + src/main/java/de/intevation/gnv/chart/XMLChartTheme.java, + src/main/java/de/intevation/gnv/chart/HorizontalCrossProfileChart.java, + src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java, + src/main/java/de/intevation/gnv/chart/exception/TechnicalChartException.java, + src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java, + src/main/java/de/intevation/gnv/chart/TimeSeriesVectorChart.java, + src/main/java/de/intevation/gnv/chart/HorizontalProfileVectorChart.java, + src/main/java/de/intevation/gnv/chart/AbstractHistogram.java, + src/main/java/de/intevation/gnv/chart/ChartLabels.java, + src/main/java/de/intevation/gnv/chart/AbstractChart.java, + src/main/java/de/intevation/gnv/chart/AdvancedHistogramDataset.java, + src/main/java/de/intevation/gnv/chart/VerticalCrossSectionChart.java, + src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java, + src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java, + src/main/java/de/intevation/gnv/exports/Export.java, + src/main/java/de/intevation/gnv/exports/ShapeDataCollector.java, + src/main/java/de/intevation/gnv/exports/ChartExportHelper.java, + src/main/java/de/intevation/gnv/exports/SimpleOdvDataCollector.java, + src/main/java/de/intevation/gnv/exports/DefaultDataCollector.java, + src/main/java/de/intevation/gnv/exports/DefaultProfile.java, + src/main/java/de/intevation/gnv/exports/DefaultExport.java, + src/main/java/de/intevation/gnv/exports/ODVExport.java, + src/main/java/de/intevation/gnv/exports/StringArrayKey.java, + src/main/java/de/intevation/gnv/exports/VerticalCrossODVExport.java, + src/main/java/de/intevation/gnv/wms/LayerInfo.java, + src/main/java/de/intevation/gnv/timeseries/TimeSeriesMeshArtifact.java, + src/main/java/de/intevation/gnv/timeseries/gap/TimeGap.java, + src/main/java/de/intevation/gnv/timeseries/gap/DefaultTimeGap.java, + src/main/java/de/intevation/gnv/timeseries/TimeSeriesArtifact.java, + src/main/java/de/intevation/gnv/layer/LayerArtifact.java, + src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java, + src/main/java/de/intevation/gnv/jfreechart/PolygonSeries.java, + src/main/java/de/intevation/gnv/jfreechart/PolygonPlot.java, + src/main/java/de/intevation/gnv/jfreechart/CompactXYItems.java, + src/main/java/de/intevation/gnv/jfreechart/PolygonSeriesLabelGenerator.java, + src/main/java/de/intevation/gnv/jfreechart/PolygonDataset.java, + src/main/java/de/intevation/gnv/jfreechart/PolygonRenderer.java, + bin/run.sh: Added license header to each these files. + + * LGPL.txt: Added license file of the GNU LGPL v2.1 + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + RELEASE 1.1 + + * ChangeLog, Changes, NEWS: Summarized changes. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue320 + + * src/main/java/de/intevation/gnv/chart/AdvancedHistogramDataset.java: The + minimum number of bins in an histogram is set to 1. If the user has chosen + a value for the class width that results in number < 1, the bin number is + set to 1. + +2010-06-29 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java: + Write missing bbox into meta file while WMS publishing - the missing bbox + prevented the map from initializing properly and it wasn't displayed in + the gui. + +2010-06-29 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue315, Issue314 + + * src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java, + src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java: All + generated wms layers will now have a prefix 'GNV_'. On this way, we can + ensure that the name of wms layers never start with a digit. This is + necessary to prevent the mapserver from generating invalid xml while + creating a GetFeatureInfo response (mapserver generates xml elements from + layer names - xml nodes may not start with a digit!). + +2010-06-29 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue318 + + * doc/conf/products/verticalcrosssection/conf_mesh_parallel.xml: Transition + bugfix: Given points from mapviewer call are now taken into account as + well. + +2010-06-29 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue286 + + * src/main/java/de/intevation/gnv/utils/InputValidator.java: Added a buffer + of 1 second for the valid time range. The valid values that are returnd + from database differ in milliseconds. Example: the lower time returned + from database is 00:00:00.650, the gui will display 00:00:00. This caused + an error because the data given by the user was 650 ms under the lower + bound. With a 1 second range, the lower bound is moved to 23:59:59.650, so + that the time given by the user is in the valid range. + +2010-06-29 Tim Englich <tim.englich@intevation.de> + + Issue318 + + * doc/conf/products/verticalcrosssection/conf_mesh_parallel.xml: + Removed duplicate xmlns:xlink definition. + +2010-06-29 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue316 + + * src/main/java/de/intevation/gnv/chart/DefaultHistogram.java: Set the + specified locale in the constructor which is used to localize the axes. + + * src/main/java/de/intevation/gnv/chart/AbstractHistogram.java: Adjust the + localization of x and y axes corresponding the specified locale. + +2010-06-29 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue318 + + * doc/conf/products/verticalcrosssection/conf_mesh_parallel.xml: Added + transition chain for the external mapviewer call. + +2010-06-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue284 + + * doc/conf/queries.properties: Added missing column MESHID to chart data + query for product 'Horizontales Schnittprofil'. This column is required + by the csv export of this product. + +2010-06-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue233 + + * src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java: Fixed + the range calculation for y-axes if there is only a single datapoint + existing in the chart. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + Issue283: + + * src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java (getRequestedLayerMetadata): + Bugfix: Now geometries of the generated layers will also be clipped if a + polygon served by the mv-gnv-interface should be used. + +2010-06-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue281 + + * src/main/java/de/intevation/gnv/state/MeasurementState.java: Fixed an + ArrayIndexOutOfBounds exception that occured while initializing the + ParameterMatrix. + +2010-06-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue230 + + * doc/conf/queries.properties: Removed multiplication of depth value with + factor -1 for odv queries on vertical profiles. + +2010-06-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue300 + + * doc/conf/products/verticalcrosssection/conf_mesh_parallel.xml: Fixed + broken transition. The transition chain ended after choosing a subarea; + now it leads to the coordinate selection. + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + ISSUE299v + + * doc/conf/products/horizontalprofile/conf_mesh.xml: + Bugfix: Change multiselect to false for the Parameter-State of + vector-values. It is not possible to render more than one Parameter if + vector-values are used. + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + ISSUE299 + + * doc/conf/products/verticalprofile/conf_mesh.xml: + Bugfix: Change multiselect to false for the Parameter-State of + vector-values. It is not possible to render more than one Parameter if + vector-values are used. + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + * src/main/resources/lang/artifactMessages_en.properties, + src/main/resources/lang/artifactMessages.properties: + Fixed typo. Scalar Values will now be written capitalized. + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + ISSUE297 + + * src/main/resources/lang/artifactMessages*.properties: + Added localized exceptionmessage for MinMaxState. + + * src/main/java/de/intevation/gnv/state/MinMaxState.java (feed): + Localized exceptionmessage which will be displayed in the GUI of the GNV + Web-Client. + +2010-06-14 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * pom.xml: Write svn revision to MANIFEST file while creating jar archive. + +2010-06-14 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue250 - Adjusted subtitle of 'Achsenparalleles Vertikalprofil' + + * src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionParallelOutputState.java: + Adapted the subtitle of charts from type 'Achsenparalleles + Vertikalprofil'. + +2010-06-14 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/products/verticalcrosssection/conf_mesh_parallel.xml: Renamed + parameter 'coordinate' to 'mesh_coordinate', because the strings shown in + the gui depend on the parameter names. 'mesh_coordinate' matches + "Geographische Position (z.B. 56n30 6e20)" in the german resource bundle. + "Koordinate" has been displayed before this change has taken place. + +2010-06-12 Ingo Weinzierl <ingo_weinzierl@web.de> + + * doc/conf/products/horizontalprofile/conf_mesh_parallel.xml: Configuration + for the new product 'Achsenparalleler Vertikalschnitt'. + + * doc/conf/queries.properties: A new sql statement to query all points of a + given axis of a mesh. + + * doc/conf/conf.xml: Added the new product to fis 'Modeldaten'. + + * src/main/resources/lang/artifactMessages.properties, + src/main/resources/lang/artifactMessages_de_DE.properties, + src/main/resources/lang/artifactMessages_en.properties, + src/main/resources/lang/artifactMessages_de.properties: Added a name for + the new product 'Achsenparalleler Vertikalschnitt'. + + TODO: Find an english name for this product! + +2010-06-12 Ingo Weinzierl <ingo_weinzierl@web.de> + + * src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshParallelArtifact.java: + A new artifact that is used for the product 'Achsenparalleler + Vertikalschnitt'. + + * src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java: + The determination of the linestring that is used in the interpolation is + outsourced to an own method. This makes it possible to be overriden by + subclasses. + + * src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionParallelOutputState.java: + Inherits of VerticalCrossSectionOutputState. It overrides the linestring + determination. In this product, no linestring is given by user input but + an axis of the mesh is selected. The linestring is made up by the point of + this axis. + +2010-06-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue286 - Input validation of time ranges + + * src/main/java/de/intevation/gnv/utils/InputValidator.java: Removed the + epsilon that has been used to compare time values. Now, we just compare + the seconds of a time value pair - background: datetime objects differ in + milliseconds. + +2010-06-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue290 - Centering of pdf exports + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: PDF + exports of histograms are centered now. + +2010-06-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue290 - Centering of pdf exports + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: PDF + exports of charts are centered now. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/chart/VerticalProfileVectorChart.java, + src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java: Improved + data initialization and range calculation. Gap detection will be entered, + if start and end position are valid indices for the array that contains + the data. The x and y range for each axis is improved. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/products/timeseries/conf_mesh.xml, + doc/conf/products/timeseries/conf_timeseriespoint.xml, + doc/conf/products/horizontalprofile/conf_mesh.xml, + doc/conf/products/verticalprofile/conf_mesh.xml, + doc/conf/products/verticalprofile/conf_timeseriespoint.xml: Limited + parameterization so that just a single vector can be selected at the same + time. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileVectorOutputState.java: + Overide method getHistograms(.) to create histograms for + verticalprofiles that contain the components of vectorial parameters. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshVectorOutputState.java: + Overide method getHistograms(.) to create histograms for + horizontalprofiles that contain the components of vectorial parameters. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java: + Override method getHistograms(.) of TimeSeriesOutputState to create + histograms that contain the components of vectorial parameters. This + method doesn't have many tasks but calls getHistograms(.) of + VectorDataProcessor. + + * src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java: The real + implementation of getHistograms(.) for creating histograms that contain + the components of vectorial parameters. This place was chosen to make it + possible to use this method in all vector output states (because multiple + inheritance is not available in Java). + + * src/main/java/de/intevation/gnv/histogram/HistogramHelper.java: + A new method to prepare the data for histograms that contain the + components of vectorial parameters. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + Seperated the histogram creation into an own method. This enables + subclasses to override the histogram creation. Moved the method + createHistogramLabels(.) to HistogramHelper. + + * src/main/java/de/intevation/gnv/histogram/HistogramHelper.java: + New method to create histogram labels (moved from TimeSeriesOutputState). + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/statistics/VerticalProfileVectorStatistics.java: + This class created statistics for vertical proifles with vectorial + parameters. + + * src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileVectorOutputState.java: + Added a new method that returns an instance of + VerticalProfileVectorStatistics. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/statistics/HorizontalProfileVectorStatistics.java: + This is a class to create statistics for horizontal profiles with + vectorial parameters. + + * src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshVectorOutputState.java: + Added a new method to return an instance of + HorizontalProfileVectorStatistics. + + * src/main/java/de/intevation/gnv/statistics/TimeseriesVectorStatistics.java, + src/main/java/de/intevation/gnv/statistics/VectorStatistics.java: Added a + method to clean the statistics for the next vector component. + +2010-06-09 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/statistics/VectorStatistics.java: This is + an abstract base class for statistics of vectorial parameters. There are + two methods that need to be overriden by subclasses. + + * src/main/java/de/intevation/gnv/statistics/TimeseriesVectorStatistics.java: + A concrete statistics class for timeseries statistics of vectorial + parameters. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java: + Added a new method that returns an instance of TimeseriesVectorStatistics + to create a statistic for this product type. + +2010-06-08 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshVectorOutputState.java: + Added odv support for horizontal profiles using vector data. + +2010-06-08 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/products/horizontalprofile/conf_mesh.xml: Added the transitions + for horizontal profiles on meshes that make use of vector data. + +2010-06-08 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshVectorOutputState.java: + A new output state for horizontal profiles using vector data. + + * src/main/java/de/intevation/gnv/chart/HorizontalProfileVectorChart.java: A + new horizontal profile chart type using vector data. + +2010-06-07 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/products/verticalprofile/conf_mesh.xml, + doc/conf/products/verticalprofile/conf_timeseriespoint.xml: Added + transitions for working with vertical profiles that contain vector data. + +2010-06-07 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileMeshVectorOutputState.java: + A new output state for verticalprofiles on meshes that contain vector + data. + +2010-06-07 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java: The + columns used for the final ResultDescriptor are no longer configured here + - they need to be configured in the output states of each product. The + VectorDataProcessor is called with the data collection and these columns + now (so the method signature of process(.) changed). + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java: + Configured ResultDescriptor columns here and adapted method call of + VectorDataProcessor.process(.). + + * src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileVectorOutputState.java: + This output state is used while working vector data on verticalprofiles. + Before a chart is generated by this state, the vector data are converted + using VectorDataProcessor. + + * src/main/java/de/intevation/gnv/chart/VerticalProfileVectorChart.java: A + new chart type used for verticalprofiles with vector data. + + * doc/conf/queries.properties: A parameter of an sql statement got a name. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + Added functionality to publish the the mbr of the generated layer to + the client. + * src/main/java/de/intevation/gnv/utils/MetaWriter.java (insertMbr): + Added function to add an box-element to the mapserver-fragmet of the + Metafile + * src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java: + Calculate the box and write it into the metafile using the insertMbr-method + of MetaWriter to publish the mbr of the data which was fetched during the + request to the client. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + * doc/conf/conf.xml: + Revert wrong Commit Revision 1163. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + * doc/conf/maptemplates/horizontalcrosssection_*.vm, + doc/conf/maptemplates/layer_polygon.vm, + doc/conf/maptemplates/layer_point.vm, + doc/conf/maptemplates/layer_linestring.vm: + Added Configuration Elements TEMPLATE, DUMP, TOLERANCE and + METADATA/gml_include_items to enable GetFeatureInforRequests using gml + as INFO_FORMAT for products of type layer. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + * doc/conf/maptemplates/mapfile.vm: + Added MAXSIZE to the mapfiletemplate so that it is possible to render the + layer in the fullscreenmode of a mapclient which will request images that + size are greater than 2048 Pixel. + +2010-06-04 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/products/timeseries/conf_mesh.xml: Added vector support for + timeseries points on meshes. + +2010-06-04 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/artifacts/cache/CacheFactory.java: The + ehcache CacheManager and the MBeanServer of the JVM are connected so that + the statistics of the cache is available as MBean in JConsole. + +2010-06-03 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java: + Removed needless imports. + +2010-06-03 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/sql-cache.xml: SQL-cache configuration. + + * doc/conf/conf.xml: Added a new section to the geo-backend section to + configure, enable/disable the sql-cache. The sql-cache is activated in + the default configuration. + + * src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java: + Removed the initialization of geo-backend related objects (as ArcSDE + connection settings, queries). This work is done in the geo-backend + itself, now. At this place, a new geo-backend Configuration object is + created and its init(.) method is called. + +2010-06-02 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java: Remove + cached elements of each state that is visited while stepping back to a + previous state. + +2010-06-01 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java: Do not + call endOfLife of the current state before advancing to the next state. + This would make it impossible to use the cache. + +2010-06-01 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/state/StateBase.java: Remove existing + elements from cache that belong to an outdated state if its enfOfLife(.) + is called. It was necessary to adapt the signature of getHash(.) for this + - removed the parameter uuid - because endOfLife is called without any + information about the current uuid. The uuid has not been used in + getHash() anyway. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java, + src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java, + src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java, + src/main/java/de/intevation/gnv/state/OutputStateBase.java: Adapted the + signature of getHash() regarding the changes in the implementing class + StateBase. + +2010-05-31 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Added queries for TimeSeriesPoints using vectorvalues for verticalprofiles. + +2010-05-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue291 + + * src/main/java/de/intevation/gnv/exports/ODVExport.java: Fixed the + aggregation of parameters. + +2010-05-27 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue198 + + * src/main/java/de/intevation/gnv/utils/MetaWriter.java: Product 'Layer' and + 'Horizontalschnitt' use the same code to write meta files. To create a + meta file, it is now necessary to use four methods: + - initMeta(): creates a new xml document and inserts the root node 'meta' + - insertAbstractMeta(.): adds meta information into the meta file + - insertLayer(.): adds layer specific information into the meta file + - writeMetaFile(.): writes the meta information file to disk. + + * src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java, + src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java: Make + use of the new methods of MetaWriter. Both classes use the same methods + now! + + * doc/conf/queries.properties: Fetch the layername from database while + requesting wms data. + + * src/main/java/de/intevation/gnv/state/layer/LayerMetaData.java: Added the + title of a layer. The title is used while creating the meta information + file for wms layers. + + * doc/conf/maptemplates/horizontalcrosssection_salinity.vm, + doc/conf/maptemplates/horizontalcrosssection_salinity_isolines.vm, + doc/conf/maptemplates/layer_linestring.vm, + doc/conf/maptemplates/horizontalcrosssection_flow-velocity.vm, + doc/conf/maptemplates/horizontalcrosssection_flow-velocity_isolines.vm, + doc/conf/maptemplates/horizontalcrosssection_water-levels.vm, + doc/conf/maptemplates/layer_polygon.vm, + doc/conf/maptemplates/horizontalcrosssection_water-temperature.vm, + doc/conf/maptemplates/layer_point.vm, + doc/conf/maptemplates/horizontalcrosssection_water-levels_isolines.vm, + doc/conf/maptemplates/horizontalcrosssection_water-temperature_isolines.vm: + Adjusted the templates regarding the changes in meta file. Each parameter + that is necessary in these templates is contained in the LayerInfo object. + So there is no need to concatenate parameters as it was the case before + these changes. Furthermore, there is a new section that contains the title + of a layer - the title is adjustable by the user. + +2010-05-27 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: Fixed a + bug while exporting charts and histograms to pdf. Charts/histograms that + are larger than the pdf page have been cut. The reason was a usage of + wrong values when creating the graphics area for the charts/histograms. + +2010-05-27 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue288 + + * src/main/java/de/intevation/gnv/chart/DefaultHistogram.java: Use + AdvancedHistogramDataset as dataset for histograms instead of JFreeChart's + HistogramDataset. Adjusted the calculation of bin width and number of bins + for this. + + * src/main/java/de/intevation/gnv/chart/AdvancedHistogramDataset.java: This + class is mainly a copy of JFreeChart's class HistogramDataset. The + difference between these two classes is, that AdvancedHistogramDataset + takes an argument for setting the bin width as well as an argument to + adjust the number of bins - HistogramDataset just takes the number of + bins. The reason why AdvancedHistogramDataset doesn't inherit from + HistogramDataset is, that basic attributes of that class have private + access. + +2010-05-26 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue289 + + * src/main/java/de/intevation/gnv/chart/DefaultHistogram.java: Values + specifying the bin width or the number of bins are inserted into this + histogram as double values - no longer as i18n strings. So the complete + parsing code is removed. + +2010-05-26 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue290 - PDF format of histograms depends on histograms' apsect ratio. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + Removed the boolean parameter to adjust the page format when calling the + pdf export method of a histogram. + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: The format + of a histogram depends on its width and height. Width and height depends + on user input or the default size (600x400). + +2010-05-26 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue290 - PDF format depends on the chart's aspect ratio. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + Removed reading the system property "export.pdf.landscape" to adjust the + page format of a pdf. + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: The page + format of a pdf now depends on the chart's aspect ratio. If width > height + the format will be landscape, otherwise the format will be portrait. + +2010-05-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue286 + + * src/main/java/de/intevation/gnv/utils/InputValidator.java: Introduced an + epsilon environment to be more tolerant while comparing date objects. The + value of the current epsilon is 750ms. + +2010-05-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue290 + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + Added chart width and chart height as new parameters for the pdf creation. + + * src/main/java/de/intevation/gnv/exports/ChartExportHelper.java: Don't use + the maximum size of a pdf page to draw the chart but use the parameter + chart width and chart height. Scale the chart down if its size and/or + height exceed the maximum size of the pdf page - the original aspect + ratio keeps alive. + +2010-05-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue287 + + * src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java: + Corrected the distance calculation of a 'Horizontal Profil' and adjusted + the gap detection according to these changes. + +2010-05-24 Ingo Weinzierl <ingo_weinzierl@web.de> + + Issue290 + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + The size of an svg export depends on the size chosen by the user (or the + default size if the user did not change the size) - it is not fixed + anymore. + +2010-05-21 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Added queries for meshes using vectorvalues for "Horizontales Schnittprofil" + +2010-05-21 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Added queries for meshes using vectorvalues for horizontalprofiles. + +2010-05-21 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Added queries for meshes using vectorvalues for verticalprofiles. + +2010-05-21 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue269 + + * src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java: + Improved the directory handling for wms requests (directories are created + if there is no directory existing for the shapefiles; the content of + directories is deleted if the directory is existing). The shapefiles are + always generated again as well if there is an directory existing and it + contains files - we cannot know if these files are shapefiles that have + been created by our application. + +2010-05-21 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Added queries for Meshes using Vectorvalues for TimeSeries. + +2010-05-21 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Integrated View MEDIAN.TIMESERIESFULLVECTORVALUE in queries for fetching + the data for Charts and ODV-Export on TimeSeriesPoints using vetcor data. + +2010-05-20 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue27 - Implemented odv export for vector data of timeseriespoints. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java: + Implemented the odv export for vector data on timeseriespoints.Therefore, + the getData(.) method for processing vector data has been removed. The + processing needs to take place after getData(.) fetched the data from + database, because it's not necessary to process vector data used for an + odv export (which is fetched via getData(.) as well). + +2010-05-19 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue27 - Vector data support for timeseriespoints finished. + + * doc/conf/products/timeseries/conf_timeseriespoint.xml: Adjusted the + relevant OutputState for timeseries with components of vector data. + + * src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java: A helper + class that converts vector data into a useful container for our chart + classes. Our chart classes just use one single data value of each Result + object - but there is a data value for each component of a vector. So we + need to split Result object into many Result objects - one for each vector + component. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java: + Inherits from TimeSeriesOutputStates. Currently, the only reason for this + class is to instantiate TimeSeriesVectorChart objects instead of + TimeSeriesChart objects. + + * src/main/java/de/intevation/gnv/chart/TimeSeriesVectorChart.java: This + chart type inherits from TimeSeriesChart. The only difference between + these two types is the way how to add datasets and how to create names for + series - most of the code is equal. + + * src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java: + Timegap definitions have protected access now. + +2010-05-19 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * doc/conf/products/timeseries/conf_timeseriespoint.xml: Added the vector + value path. + +2010-05-18 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue27 - First step to provide vector values. + + * doc/conf/products/timeseries/conf_timeseriespoint.xml: Added a further + step to choose between vector or scalar values. + + TODO: Configure the parameterization path for working with vector values. + + * src/main/java/de/intevation/gnv/state/SwitchModeState.java: A new state + that allows users to choose between scalar or vector values. + + * src/main/java/de/intevation/gnv/state/StateBase.java, + src/main/java/de/intevation/gnv/state/MeasurementState.java, + src/main/java/de/intevation/gnv/state/DefaultAutoResumeState.java, + src/main/java/de/intevation/gnv/state/SingleInputState.java: Adjusted + method signature of getDescriptionForInputData(.) - added the CallContext + as further parameter that is necessary to retrieve the current locale. + + * src/main/resources/lang/artifactMessages.properties, + src/main/resources/lang/artifactMessages_de_DE.properties, + src/main/resources/lang/artifactMessages_en.properties, + src/main/resources/lang/artifactMessages_de.properties: Added labels for + the user interface. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * doc/conf/queries.properties: + Added queries for TimeSeriesPoints on Vectorvalues for TimeSeries. + +2010-05-17 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/state/cache/package.html, + src/main/java/de/intevation/gnv/state/cache/QueryObject.java: + Add more JavaDocs. + +2010-05-10 Tim Englich <tim.englich@intevation.de> + + * doc/conf/products/timeseries/timegap_definition.xml: + Added Documentation for the definition of gaps in TimeSeries on + TimeSeriesPoints. Also added the reference to the Place where the + definitions are taken. + +2010-05-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue260 (Implemented an odv export for 'Horizontales Schnittprofil') + + * doc/conf/products/horizontalprofile/conf_mesh_cross.xml: Added odv as + further export format of product type 'Horizontales Schnittprofil'. + + * src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java: + Implemented an odv exporter for this product type. + + * src/main/java/de/intevation/gnv/exports/StringArrayKey.java: Added a + getKey() method to be able to retrieve the key of such objects. + +2010-05-07 Hans Plum <hans@intevation.de> + + * doc/conf/queries.properties: + Added a comment after implementing the admin tables for cache cleaner + +2010-05-06 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * contrib/mapserv, + contrib/gnv-wms: Renamed mapserv to gnv-wms relating to the configuration + changes in rev1068. + +2010-05-06 Hans Plum <hans@intevation.de> + + * doc/conf/conf.xml: + Adapted path to gnv-wrapper after changing it upstream. + +2010-05-06 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue264 & Issue268 (Removed bugs in the caching mechanism) + + * src/main/java/de/intevation/gnv/state/DefaultInputData.java: Implemented + hashCode() and equals(.) method. The hashCode() method is used while + creating hashes for caching elements (see StateBase). + + * src/main/java/de/intevation/gnv/state/StateBase.java: Improved hash + creation. The hashes are used as keys for the caching mechanism. The key + contains the uuid of the current artifact, the state id and a hash code + created by InputData elements. User input is stored in a TreeMap instead + of a HashMap, because the elements in a TreeMap are sorted. This is very + import for us, because we need a defined order to create equal hashes if + the input data elements, uuid and state id are equal. + + * src/main/java/de/intevation/gnv/state/MeasurementState.java: Replaced the + HashMap to store user input with a TreeMap which elements are sorted. + + * src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java, + src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java: + Added some more debug output that shows the usage of the cache. + + * src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java: + Removed a critical bug that avoided using this product type if no cache + have been initialized. + + * src/main/java/de/intevation/gnv/state/OutputStateBase.java: Adjusted + getHash(.) method call. + +2010-05-04 Tim Englich <tim.englich@intevation.de> + + * doc/conf/conf.xml: + Do some Documentation of the Artifact-Database. + +2010-05-04 Tim Englich <tim.englich@intevation.de> + * src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java (appendSelectProducts): + BUGFIX: Added NULL-Check to Variable products to prevent NPEs if + no Products are configured to the FIS. + * src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java (parseProductFactories): + BUGFIX: Trim Classname to prevent ClassNotFound-Exceptions if the + Configuration contains whitespaces in the XML-Element which configures the + Artifact. + 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> * doc/conf/maptemplates/layer_polygon.vm: Do not use point symbols to draw @@ -5,6 +1087,8 @@ 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + RELEASE 1.0 + * NEWS, Changes: Summarized changes. 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de>
--- a/gnv-artifacts/Changes Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/Changes Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,42 @@ +2010-06-30 RELEASE 1.1 + + NEW: + + * New product: 'Achsenparalleles Vertikalprofil' + * Support for products with vectorial parameters (#27) + * Integrated configuration section for sql-cache + * Statistics of ehcaches are available as MBean using JConsole + * N-Step back history for the parameterization + * ODV export for product 'Horizontales Schnittprofil' (#260) + * MANIFEST contains svn buildnumbers + + FIXES: + + * Corrected chart titles (#138, #120) + * Fixed defect range calculation for chart axes (#233) + * Corrected distance calculation in product 'Horizontalprofil' (#287) + * Fixed bin width calculation in histograms (#288) + * Changing width/height of charts ended in Stacktace (#294) + * Multi layer selection for product 'Layer' (#252) + * Renaming a layer just changes its title (#198), + * WMS layers now have a prefix 'GNV_' (#315, #314) + * Disabled multi selection for vectorial parameter (#299) + * Fixed broken transition chain of 'Achsenparalleler + Vertikalprofil' (#300, #318, #154) + * Fixed ODV export that created invalid odv files (#291) + * Added missing column for csv export for product 'Horizontales + Schnittprofil' (#284) + * Depths have negative values in odv exports (#230) + * Keep aspect ratio in PDF/SVG exports (#290) + * Fixed hash creation for caching elements (#264, #268) + * Further JavaDoc (#274) + * Fixed discrepancy in parameter matrix between parameter values and + description (#281) + * Fixed broken geometry clipping (#283) + * Fixed user input validation (#286, #289) + * Exception handling improvements (#188, #251, #265, #18, #269, #266) + + 2010-04-28 RELEASE 1.0 NEW:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/LGPL.txt Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it!
--- a/gnv-artifacts/NEWS Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/NEWS Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,16 @@ +2010-06-30 RELEASE 1.1 + + * Integration of a new product 'Achsenparalleles Vertikalprofil' + + * Support for vectorial parameters + + * Configuration supports the usage of an sql-cache + + * Evaluable cache statistics + + * Parameterization supports an N-Step-Back history + + 2010-04-28 RELEASE 1.0 NEW:
--- a/gnv-artifacts/bin/run.sh Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/bin/run.sh Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,11 @@ #!/bin/bash +# Copyright (c) 2010 by Intevation GmbH\ +# +# This program is free software under the LGPL (>=v2.1)\ +# Read the file LGPL.txt coming with the software for details\ +# or visit http://www.gnu.org/licenses/ if it does not exist.\ + DIR=`dirname $0`/.. CLASSPATH= for l in `find -name \*.jar -print`; do
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/contrib/gnv-wms Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,3 @@ +#!/bin/sh +export MS_MAPFILE=/opt/artifacts/mapfiles/mapfile.map +./mapserv-gp
--- a/gnv-artifacts/contrib/mapserv Fri Sep 28 12:13:58 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -#!/bin/sh -export MS_MAPFILE=/opt/artifacts/mapfiles/mapfile.map -./mapserv-gp
--- a/gnv-artifacts/contrib/palette2polygonVM.xsl Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/contrib/palette2polygonVM.xsl Fri Sep 28 12:15:22 2012 +0200 @@ -1,4 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> + +<!-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. + + Author: Ingo Weinzierl (ingo.weinzierl@intevation.de) +--> + <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output
--- a/gnv-artifacts/contrib/palette2qgis.xsl Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/contrib/palette2qgis.xsl Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> + <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <!-- palette2qgis.xsl ================ + + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. + Transforms palette XML files into QGIS style files. Useful to display "Horizontalschnitte" with the right colors.
--- a/gnv-artifacts/contrib/visualize-transitions.xsl Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/contrib/visualize-transitions.xsl Fri Sep 28 12:15:22 2012 +0200 @@ -1,4 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> + +<!-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. + + Author: Sascha L. Teichmann (sascha.teichmann@intevation.de) +--> + <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xlink="http://www.w3.org/1999/xlink"
--- a/gnv-artifacts/doc/conf/conf.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/conf.xml Fri Sep 28 12:15:22 2012 +0200 @@ -3,6 +3,8 @@ <factories> <context-factory>de.intevation.gnv.artifacts.context.GNVArtifactContextFactory</context-factory> <artifact-factories> + <!-- All Artifactfactories which are available in this Database. + Each Artifactfactory represents one FIS. --> <artifact-factory name="fis_marnet" description="Factory to create an artifact to be used with the FIS Marnet" ttl="3600000" artifact="de.intevation.artifactdatabase.ProxyArtifact">de.intevation.gnv.artifacts.GNVProductArtifactFactory</artifact-factory> <artifact-factory name="fis_imis" description="Factory to create an artifact to be used with the FIS IMIS" @@ -43,6 +45,7 @@ ttl="3600000" artifact="de.intevation.artifactdatabase.ProxyArtifact">de.intevation.gnv.artifacts.GNVProductArtifactFactory</artifact-factory> </artifact-factories> <service-factories> + <!-- The Servicefactory which is responsible to handle MV-GNV-Interface-Calls --> <service-factory name="metadata" service="de.intevation.gnv.artifacts.services.MetaDataService" @@ -198,6 +201,14 @@ <parameter name="fisname" value="fis_modeldata"/> </parameters> </product> + <product name= "verticalcrosssectionparallel"> + <artifact-factory name="verticalCrossSectionMeshParallel" description="Artiefactfactory for Instantiating the Artifact for the FIS Modeldata" + ttl="300000" artifact="de.intevation.gnv.profile.verticalcrosssection.VerticalCrossSectionMeshParallelArtifact">de.intevation.gnv.artifacts.GNVArtifactFactory</artifact-factory> + <parameters> + <parameter name="sourceid" value="2"/> + <parameter name="fisname" value="fis_modeldata"/> + </parameters> + </product> <product name= "horizontalCrossSection"> <artifact-factory name="horizontalCrossSectionMesh" description="Artiefactfactory for Instantiating the Artifact for the FIS Modeldata" ttl="300000" artifact="de.intevation.gnv.profile.horizontalcrosssection.HorizontalCrossSectionMeshArtifact">de.intevation.gnv.artifacts.GNVArtifactFactory</artifact-factory> @@ -436,6 +447,8 @@ <artifact name="verticalCrossSectionMesh" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/products/verticalcrosssection/conf_mesh.xml" /> + <artifact name="verticalCrossSectionMeshParallel" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/products/verticalcrosssection/conf_mesh_parallel.xml" /> + <artifact name="horizontalCrossSectionMesh" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/products/horizontalcrosssection/conf_mesh.xml" /> <artifact name="layer" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/products/layer/conf.xml" /> @@ -498,7 +511,7 @@ <!-- In this section the required Configuration for mapfile generation is given. --> - <map-generator> + <map-generator> <mapfile path="${artifacts.config.dir}/../mapfiles/mapfile.map" /> <templates> <path>${artifacts.config.dir}/maptemplates</path> @@ -508,10 +521,13 @@ </gnv> <mapserver> - <server path="http://denmark.atlas/cgi-bin/mapserv" /> + <!-- This Section configures the required Informations to provide the + WMS-Exports --> + <server path="http://$YOURSERVER/cgi-bin/gnv-wms" /> </mapserver> <velocity> + <!-- This Section configures all required settings for velocity. --> <logfile path="/var/log/artifacts/velocity.log" /> </velocity> @@ -529,6 +545,9 @@ Queries of the System are stored. --> <backend-configuration>${artifacts.config.dir}/arcsdeconnectionpool.properties</backend-configuration> <query-configuration>${artifacts.config.dir}/queries.properties</query-configuration> + <cache enabled="true"> + <configuration>${artifacts.config.dir}/sql-cache.xml</configuration> + </cache> </geo-backend> <rest-server> <!-- at this Point it is possible to Change the Port the ArtifactDatabase will bind to.--> @@ -540,6 +559,8 @@ <sleep-time>60000</sleep-time> </cleaner> <database> + <!-- This Section configures the Settings for connecting to the + Artifact-Database instance. e.g. SQLite --> <user>SA</user> <password></password> <url>jdbc:h2:${artifacts.config.dir}/../artifactdb/artifacts.db</url>
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_flow-velocity.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_flow-velocity.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,15 @@ LAYER - NAME "$info.getTitle()" - GROUP "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "${info.getData()}" STATUS $info.getStatus() + TEMPLATE map.html + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("flow-velocity_polygons.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_flow-velocity_isolines.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_flow-velocity_isolines.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,17 @@ LAYER - NAME "$info.getTitle()_isolines" - GROUP "$info.getTitle()" - DATA "${info.getName()}/${info.getData()}" + NAME "$info.getName()" + DATA "$info.getData()" TYPE $info.getType() STATUS $info.getStatus() LABELITEM DESC + TEMPLATE map.html + TOLERANCE 10 + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("flow-velocity_isolines.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_salinity.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_salinity.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,15 @@ LAYER - NAME "$info.getTitle()" - GROUP "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "$info.getData()" STATUS $info.getStatus() + TEMPLATE map.html + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("salinity_polygons.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_salinity_isolines.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_salinity_isolines.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,17 @@ LAYER - NAME "$info.getTitle()_isolines" - GROUP "$info.getTitle()" - DATA "${info.getName()}/${info.getData()}" + NAME "$info.getName()" + DATA "$info.getData()" TYPE $info.getType() STATUS $info.getStatus() LABELITEM DESC + TEMPLATE map.html + TOLERANCE 10 + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("salinity_isolines.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-levels.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-levels.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,15 @@ LAYER - NAME "$info.getTitle()" - GROUP "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "$info.getData()" STATUS $info.getStatus() + TEMPLATE map.html + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("water-levels_polygons.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-levels_isolines.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-levels_isolines.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,17 @@ LAYER - NAME "$info.getTitle()_isolines" - GROUP "$info.getTitle()" - DATA "${info.getName()}/${info.getData()}" + NAME "$info.getName()" + DATA "$info.getData()" TYPE $info.getType() STATUS $info.getStatus() LABELITEM DESC + TEMPLATE map.html + TOLERANCE 10 + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("water-levels_isolines.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-temperature.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-temperature.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,15 @@ LAYER - NAME "$info.getTitle()" - GROUP "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "$info.getData()" STATUS $info.getStatus() + TEMPLATE map.html + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("water-temperature_polygons.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-temperature_isolines.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/horizontalcrosssection_water-temperature_isolines.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,17 @@ LAYER - NAME "$info.getTitle()_isolines" - GROUP "$info.getTitle()" - DATA "${info.getName()}/${info.getData()}" + NAME "$info.getName()" + DATA "$info.getData()" TYPE $info.getType() STATUS $info.getStatus() LABELITEM DESC + TEMPLATE map.html + TOLERANCE 10 + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + #include("water-temperature_isolines.class.vm") END
--- a/gnv-artifacts/doc/conf/maptemplates/layer_linestring.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/layer_linestring.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,17 @@ LAYER - NAME "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "$info.getData()" STATUS $info.getStatus() - + TEMPLATE map.html + TOLERANCE 10 + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END + CLASS NAME "Layer" STYLE
--- a/gnv-artifacts/doc/conf/maptemplates/layer_point.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/layer_point.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,16 @@ LAYER - NAME "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "$info.getData()" STATUS $info.getStatus() + TEMPLATE map.html + TOLERANCE 10 + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END CLASS NAME "Layer"
--- a/gnv-artifacts/doc/conf/maptemplates/layer_polygon.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/layer_polygon.vm Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,15 @@ LAYER - NAME "$info.getTitle()" + NAME "$info.getName()" TYPE $info.getType() - DATA "${info.getName()}/${info.getData()}" + DATA "$info.getData()" STATUS $info.getStatus() + TEMPLATE map.html + DUMP TRUE + + METADATA + "wms_title" "$info.getTitle()" + "gml_include_items" "all" + END CLASS NAME "Layer"
--- a/gnv-artifacts/doc/conf/maptemplates/mapfile.vm Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/maptemplates/mapfile.vm Fri Sep 28 12:15:22 2012 +0200 @@ -2,6 +2,7 @@ NAME "GNV-Map" STATUS ON SIZE 600 400 + MAXSIZE 4000 EXTENT -1 53 11 58 UNITS DD SHAPEPATH "../shapefiles"
--- a/gnv-artifacts/doc/conf/products/horizontalprofile/conf_mesh.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/horizontalprofile/conf_mesh.xml Fri Sep 28 12:15:22 2012 +0200 @@ -178,7 +178,7 @@ <from state="horizontalprofile_mesh_point_presettings"/> <to state="horizontalprofile_mesh_axis"/> </transition> - + <state id="horizontalprofile_mesh_axis" description="horizontalprofile_mesh_point" state="de.intevation.gnv.state.profile.horizontal.NorthSouthEastWestState"> <dataname>axisid</dataname> <data-multiselect>false</data-multiselect> @@ -189,12 +189,36 @@ <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="horizontalprofile_mesh_axis"/> - <to state="horizontalprofile_meshpoint_parameter"/> + <to state="horizontalprofile_meshpoint_vector_scalar"/> </transition> - + + <state id="horizontalprofile_meshpoint_vector_scalar" description="horizontalprofile_meshpoint_vector_scalar" state="de.intevation.gnv.state.SwitchModeState"> + <dataname>vectorscalar</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="vectorscalar" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="horizontalprofile_meshpoint_vector_scalar"/> + <to state="horizontalprofile_meshpoint_parameter"/> + <condition inputvalue="vectorscalar" value="scalar" operator="equal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="horizontalprofile_meshpoint_vector_scalar"/> + <to state="horizontalprofile_meshpoint_parameter_vector"/> + <condition inputvalue="vectorscalar" value="vector" operator="equal"/> + </transition> + <state id="horizontalprofile_meshpoint_parameter" description="horizontalprofile_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_mesh_parameter</queryID> <dataname>parameterid</dataname> @@ -208,12 +232,31 @@ <inputvalue name="parameterid" type="Integer" multiselect="true" useinquery="0"/> </inputvalues> </state> - + + <state id="horizontalprofile_meshpoint_parameter_vector" description="horizontalprofile_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_parameter_vector</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" useinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="horizontalprofile_meshpoint_parameter"/> <to state="horizontalprofile_meshpoint_depth"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="horizontalprofile_meshpoint_parameter_vector"/> + <to state="horizontalprofile_meshpoint_depth_vector"/> + </transition> + <state id="horizontalprofile_meshpoint_depth" description="horizontalprofile_meshpoint_depth" state="de.intevation.gnv.state.DefaultState"> <queryID>horizontalprofile_meshpoint_depth</queryID> <dataname>depthid</dataname> @@ -227,12 +270,31 @@ <inputvalue name="depthid" type="Integer" multiselect="true" usedinquery="0"/> </inputvalues> </state> - + + <state id="horizontalprofile_meshpoint_depth_vector" description="horizontalprofile_meshpoint_depth" state="de.intevation.gnv.state.DefaultState"> + <queryID>horizontalprofile_meshpoint_depth</queryID> + <dataname>depthid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" useinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="horizontalprofile_meshpoint_depth"/> <to state="horizontalprofile_mesh_year"/> </transition> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="horizontalprofile_meshpoint_depth_vector"/> + <to state="horizontalprofile_mesh_year_vector"/> + </transition> + <state id="horizontalprofile_mesh_year" description="horizontalprofile_mesh_year" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_mesh_year</queryID> <dataname>yearid</dataname> @@ -248,11 +310,31 @@ </inputvalues> </state> + <state id="horizontalprofile_mesh_year_vector" description="horizontalprofile_mesh_year" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_year_vector</queryID> + <dataname>yearid</dataname> + <data-multiselect>true</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="depthid" type="Integer" multiselect="true" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="horizontalprofile_mesh_year"/> <to state="horizontalprofile_mesh_date"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="horizontalprofile_mesh_year_vector"/> + <to state="horizontalprofile_mesh_date_vector"/> + </transition> + <state id="horizontalprofile_mesh_date" description="horizontalprofile_mesh_date" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_mesh_date</queryID> <dataname>dateid</dataname> @@ -268,12 +350,33 @@ <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="0"/> </inputvalues> </state> - + + <state id="horizontalprofile_mesh_date_vector" description="horizontalprofile_mesh_date" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_date_vector</queryID> + <dataname>dateid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="depthid" type="Integer" multiselect="true" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="horizontalprofile_mesh_date"/> <to state="horizontalprofile_mesh_calculate_results"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="horizontalprofile_mesh_date_vector"/> + <to state="horizontalprofile_mesh_calculate_results_vector"/> + </transition> + <state id="horizontalprofile_mesh_calculate_results" description="horizontalprofile_mesh_calculate_results" state="de.intevation.gnv.state.profile.horizontal.HorizontalProfileMeshOutputState"> <queryID>horizontalprofile_mesh_chart_data</queryID> @@ -323,5 +426,54 @@ <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> </outputsModes> </state> + + <state id="horizontalprofile_mesh_calculate_results_vector" description="horizontalprofile_mesh_calculate_results" state="de.intevation.gnv.state.profile.horizontal.HorizontalProfileMeshVectorOutputState"> + <queryID>horizontalprofile_mesh_chart_data_vector</queryID> + <queryID-odv>horizontalprofile_mesh_odv_data_vector</queryID-odv> + <inputvalues> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="1"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="depthid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="2"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + <value-names> + <value-name name="feature" value="mesh_point"></value-name> + <value-name name="parameter" value="parameterid"></value-name> + <value-name name="measurement" value="depthid"></value-name> + </value-names> + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="points" type="Boolean" value="false"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="histogram" description="Histogram of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="bincount" type="Integer" value="7"/> + <inputvalue name="binwidth" type="Double" value="7"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="csv" description="CSV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> + </outputsModes> + </state> </states> </artifact>
--- a/gnv-artifacts/doc/conf/products/horizontalprofile/conf_mesh_cross.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/horizontalprofile/conf_mesh_cross.xml Fri Sep 28 12:15:22 2012 +0200 @@ -281,6 +281,7 @@ </exportModes> </outputsMode> <outputsMode name="csv" description="CSV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> </outputsModes> </state>
--- a/gnv-artifacts/doc/conf/products/timeseries/conf_mesh.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/timeseries/conf_mesh.xml Fri Sep 28 12:15:22 2012 +0200 @@ -178,9 +178,71 @@ <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_meshpoint"/> + <to state="timeseries_meshpoint_vector_scalar"/> + </transition> + + + <state id="timeseries_meshpoint_vector_scalar" description="timeseries_meshpoint_vector_scalar" state="de.intevation.gnv.state.SwitchModeState"> + <dataname>vectorscalar</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="vectorscalar" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="timeseries_meshpoint_vector_scalar"/> + <to state="timeseries_meshpoint_parameter"/> + <condition inputvalue="vectorscalar" value="scalar" operator="equal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="timeseries_meshpoint_vector_scalar"/> + <to state="timeseries_meshpoint_parameter_vector"/> + <condition inputvalue="vectorscalar" value="vector" operator="equal"/> + </transition> + + <state id="timeseries_meshpoint_parameter" description="timeseries_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>timeseries_mesh_parameter</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>true</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <state id="timeseries_meshpoint_parameter_vector" description="timeseries_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>timeseries_mesh_parameter_vector</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_meshpoint_parameter"/> <to state="timeseries_meshpoint_depth"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_meshpoint_parameter_vector"/> + <to state="timeseries_meshpoint_depth_vector"/> + </transition> + <state id="timeseries_meshpoint_depth" description="timeseries_meshpoint_depth" state="de.intevation.gnv.state.DefaultState"> <queryID>timeseries_meshpoint_depth</queryID> <dataname>depthid</dataname> @@ -190,33 +252,33 @@ <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="2"/> <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="0"/> - </inputvalues> - </state> - - <transition transition="de.intevation.gnv.transition.DefaultTransition"> - <from state="timeseries_meshpoint_depth"/> - <to state="timeseries_meshpoint_parameter"/> - </transition> - - <state id="timeseries_meshpoint_parameter" description="timeseries_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> - <queryID>timeseries_mesh_parameter</queryID> - <dataname>parameterid</dataname> - <presettings-name>parameter</presettings-name> - <data-multiselect>true</data-multiselect> - <inputvalues> - <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> - <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="0"/> - <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> - <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + + <state id="timeseries_meshpoint_depth_vector" description="timeseries_meshpoint_depth" state="de.intevation.gnv.state.DefaultState"> + <queryID>timeseries_meshpoint_depth</queryID> + <dataname>depthid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> - <from state="timeseries_meshpoint_parameter"/> + <from state="timeseries_meshpoint_depth"/> <to state="timeseries_meshpoint_interval"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_meshpoint_depth_vector"/> + <to state="timeseries_meshpoint_interval_vector"/> + </transition> + <state id="timeseries_meshpoint_interval" description="timeseries_interval" state="de.intevation.gnv.state.MinMaxState"> <queryID>timeseries_mesh_interval</queryID> <dataname>timeinterval</dataname> @@ -231,12 +293,32 @@ <inputvalue name="maxvalue" type="Date" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + + <state id="timeseries_meshpoint_interval_vector" description="timeseries_interval" state="de.intevation.gnv.state.MinMaxState"> + <queryID>timeseries_mesh_interval_vector</queryID> + <dataname>timeinterval</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="minvalue" type="Date" multiselect="false" usedinquery="0"/> + <inputvalue name="maxvalue" type="Date" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_meshpoint_interval"/> <to state="timeseries_meshpoint_calculate_results"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_meshpoint_interval_vector"/> + <to state="timeseries_meshpoint_calculate_results_vector"/> + </transition> + <state id="timeseries_meshpoint_calculate_results" description="timeseries_interval" state="de.intevation.gnv.state.timeseries.TimeSeriesOutputState"> <queryID>timeseries_mesh_chart_data</queryID> <queryID-odv>timeseries_mesh_odv_data</queryID-odv> @@ -286,6 +368,56 @@ <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> </outputsModes> </state> - + + <state id="timeseries_meshpoint_calculate_results_vector" description="timeseries_interval" state="de.intevation.gnv.state.timeseries.TimeSeriesVectorOutputState"> + <queryID>timeseries_mesh_chart_data_vector</queryID> + <queryID-odv>timeseries_mesh_odv_data_vector</queryID-odv> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="depthid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="minvalue" type="Date" multiselect="false" usedinquery="1"/> + <inputvalue name="maxvalue" type="Date" multiselect="false" usedinquery="1"/> + </inputvalues> + <value-names> + <value-name name="feature" value="mesh_point"></value-name> + <value-name name="parameter" value="parameterid"></value-name> + <value-name name="measurement" value="depthid"></value-name> + <value-name name="timeinterval" value="timeinterval"></value-name> + </value-names> + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="points" type="Boolean" value="false"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="histogram" description="Histogram of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="bincount" type="Integer" value="7"/> + <inputvalue name="binwidth" type="Double" value="7"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="csv" description="CSV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> + </outputsModes> + </state> + </states> </artifact>
--- a/gnv-artifacts/doc/conf/products/timeseries/conf_timeseriespoint.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/timeseries/conf_timeseriespoint.xml Fri Sep 28 12:15:22 2012 +0200 @@ -61,7 +61,7 @@ <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_with_wkt"/> - <to state="timeseries_parameter"/> + <to state="timeseries_vector_scalar"/> </transition> <state id="timeseries_area" description="timeseries_area_one" state="de.intevation.gnv.state.DefaultState"> @@ -141,12 +141,12 @@ <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_without_geom"/> - <to state="timeseries_parameter"/> + <to state="timeseries_vector_scalar"/> </transition> - + <state id="timeseries_timeseriespoint" description="timeseries_timeseriespoint" state="de.intevation.gnv.state.DefaultState"> <queryID>timeseries_timeseriespoint_with_area</queryID> <dataname>featureid</dataname> @@ -158,12 +158,35 @@ <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_timeseriespoint"/> + <to state="timeseries_vector_scalar"/> + </transition> + + <state id="timeseries_vector_scalar" description="timeseries_vector_scalar" state="de.intevation.gnv.state.SwitchModeState"> + <dataname>vectorscalar</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="vectorscalar" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="timeseries_vector_scalar"/> <to state="timeseries_parameter"/> + <condition inputvalue="vectorscalar" value="scalar" operator="equal"/> </transition> - + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="timeseries_vector_scalar"/> + <to state="timeseries_parameter_vector"/> + <condition inputvalue="vectorscalar" value="vector" operator="equal"/> + </transition> + <state id="timeseries_parameter" description="timeseries_parameter" state="de.intevation.gnv.state.DefaultState"> <queryID>timeseries_parameter</queryID> <dataname>parameterid</dataname> @@ -175,12 +198,29 @@ <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="0"/> </inputvalues> </state> - + + <state id="timeseries_parameter_vector" description="timeseries_parameter_vector" state="de.intevation.gnv.state.DefaultState"> + <queryID>timeseries_parameter_vector</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_parameter"/> <to state="timeseries_depth_height"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_parameter_vector"/> + <to state="timeseries_depth_height_vector"/> + </transition> + <state id="timeseries_depth_height" description="timeseries_depth_height" state="de.intevation.gnv.state.MeasurementState"> <queryID>timeseries_depth_height</queryID> <dataname>measurementid</dataname> @@ -192,11 +232,28 @@ <inputvalue name="measurementid" type="Integer" multiselect="true" usedinquery="0"/> </inputvalues> </state> - + + <state id="timeseries_depth_height_vector" description="timeseries_depth_height_vector" state="de.intevation.gnv.state.DefaultState"> + <queryID>timeseries_depth_height_vector</queryID> + <dataname>measurementid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false"/> + <inputvalue name="parameterid" type="Integer" multiselect="true"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="measurementid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_depth_height"/> <to state="timeseries_interval"/> </transition> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_depth_height_vector"/> + <to state="timeseries_interval_vector"/> + </transition> <state id="timeseries_interval" description="timeseries_interval" state="de.intevation.gnv.state.MinMaxDateState"> <queryID>timeseries_interval</queryID> @@ -210,12 +267,30 @@ <inputvalue name="maxvalue" type="Date" multiselect="false" usedinquery="0"/> </inputvalues> </state> + + <state id="timeseries_interval_vector" description="timeseries_interval_vector" state="de.intevation.gnv.state.MinMaxDateState"> + <queryID>timeseries_interval_vector</queryID> + <dataname>timeinterval</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true"/> + <inputvalue name="measurementid" type="Integer" multiselect="true"/> + <inputvalue name="minvalue" type="Date" multiselect="false" usedinquery="0"/> + <inputvalue name="maxvalue" type="Date" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="timeseries_interval"/> <to state="timeseries_calculate_results"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="timeseries_interval_vector"/> + <to state="timeseries_calculate_results_vector"/> + </transition> + <!-- Last state is the Output-state. At this place the differen OutputModes are configured. For each OutputMode it might be necessary to configure separat Databasequery which collect the Data. --> @@ -263,6 +338,50 @@ each Parameter in each FIS can have --> <time-gap-definition xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/products/timeseries/timegap_definition.xml" /> </state> - + + <state id="timeseries_calculate_results_vector" description="timeseries_results_vector" state="de.intevation.gnv.state.timeseries.TimeSeriesVectorOutputState"> + <queryID>timeseries_chart_data_vector</queryID> + <queryID-odv>timeseries_odv_data_vector</queryID-odv> + <inputvalues> + <inputvalue name="parameterid" type="Integer" multiselect="true"/> + <inputvalue name="measurementid" type="Integer" multiselect="true"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="minvalue" type="Date" multiselect="false"/> + <inputvalue name="maxvalue" type="Date" multiselect="false"/> + </inputvalues> + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="points" type="Boolean" value="false"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="histogram" description="Histogram of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="bincount" type="Integer" value="7"/> + <inputvalue name="binwidth" type="Double" value="7"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="csv" description="CSV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> + </outputsModes> + <!-- Definition of the TimeGaps which are required to render the Charts properly. + each Parameter in each FIS can have --> + <time-gap-definition xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/products/timeseries/timegap_definition.xml" /> + </state> </states> </artifact>
--- a/gnv-artifacts/doc/conf/products/timeseries/timegap_definition.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/timeseries/timegap_definition.xml Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,21 @@ <?xml version="1.0" encoding="UTF-8"?> <time-gaps> + <!-- + These gaps are taken from MEDIAN Coded Value Domains. + Section is TSIntervalTypes. + The attribute key is the value which will be used to + lookup a TimeSeriesInterval defined in Table Median.TimeSeries. + The attribute gap is the value of the gap it has to be combined + with the unit of the gap + m ==> Minutes + h ==> Hours + D ==> Days + W ==> Weeks + M ==> Months + Y ==> Years + + These gaps will only be used for TimeSeries on TimeSeriesPoints. + --> <time-gap key = "1" gap="1" unit = "m"/> <time-gap key = "2" gap="2" unit = "m"/> <time-gap key = "3" gap="3" unit = "m"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/doc/conf/products/verticalcrosssection/conf_mesh_parallel.xml Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,295 @@ +<?xml version="1.0" encoding="UTF-8"?> +<artifact name="verticalCrossSectionMeshParallel"> + <states> + + <state id="verticalcrosssection_mesh_parallel_mapviewerswitch" description="verticalcrosssection_mesh_parallel_area_one" state="de.intevation.gnv.state.DefaultAutoResumeState"> + <!-- Empty State which will be used to integrate the switch for a + standalone and an mapviewer based call. --> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.PresettingsValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel_mapviewerswitch"/> + <to state="verticalcrosssection_mesh_parallel_area"/> + <condition inputvalue="geometry" value="POLYGON" operator="notequal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.PresettingsValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel_mapviewerswitch"/> + <to state="verticalcrosssection_mesh_parallel_with_wkt"/> + <condition inputvalue="geometry" value="POLYGON" operator="equal"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_with_wkt" description="timeseries_mesh" state="de.intevation.gnv.state.PreSettingsTransferState"> + <queryID>verticalprofile_mesh_with_wkt</queryID> + <dataname>meshid</dataname> + <data-multiselect>false</data-multiselect> + <presettings-transfer presetting="geometry" inputvalue="mesh_coordinate"/> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_coordinate" type="Geometry" multiselect="false" usedinquery="1"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_with_wkt"/> + <to state="verticalcrosssection_mesh_point_parallel_presettings"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_area" description="verticalcrosssection_mesh_parallel_area_one" state="de.intevation.gnv.state.DefaultState"> + <queryID>area_filter</queryID> + <dataname>areaid</dataname> + <data-multiselect>false</data-multiselect> + <data-noselect>true</data-noselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="areaid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel_area"/> + <to state="verticalcrosssection_mesh_parallel_subarea"/> + <condition inputvalue="areaid" value="n/n" operator="notequal"/> + </transition> + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel_area"/> + <to state="verticalcrosssection_mesh_parallel_without_geom"/> + <condition inputvalue="areaid" value="n/n" operator="equal"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_subarea" description="verticalcrosssection_mesh_parallel_area_one" state="de.intevation.gnv.state.DefaultState"> + <queryID>subarea_filter</queryID> + <dataname>subareaid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="areaid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="subareaid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_subarea"/> + <to state="verticalcrosssection_mesh_parallel"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel" description="verticalcrosssection_mesh_parallel" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_with_area</queryID> + <dataname>meshid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="subareaid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.PresettingsValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel"/> + <to state="verticalcrosssection_mesh_point_parallel_presettings"/> + <condition inputvalue="geometry" value="POINT" operator="equal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.PresettingsValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel"/> + <to state="verticalcrosssection_mesh_parallel_coordinate"/> + <condition inputvalue="geometry" value="POINT" operator="notequal"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_without_geom" description="verticalcrosssection_mesh_parallel" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh</queryID> + <dataname>meshid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.PresettingsValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel_without_geom"/> + <to state="verticalcrosssection_mesh_parallel_coordinate"/> + <condition inputvalue="geometry" value="POINT" operator="notequal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.PresettingsValueCompareTransition"> + <from state="verticalcrosssection_mesh_parallel_without_geom"/> + <to state="verticalcrosssection_mesh_point_parallel_presettings"/> + <condition inputvalue="geometry" value="POINT" operator="equal"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_coordinate" description="verticalcrosssection_mesh_parallel_coordinate" state="de.intevation.gnv.state.SingleInputState"> + <dataname>mesh_coordinate</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="meshid" type="Integer" multiselect="false"/> + <inputvalue name="mesh_coordinate" type="Coordinate" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_coordinate"/> + <to state="verticalcrosssection_mesh_parallel_point"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_point" description="verticalcrosssection_mesh_parallel_point" state="de.intevation.gnv.state.CoordinateSelectionState"> + <queryID>verticalprofile_mesh_point</queryID> + <dataname>mesh_point</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="meshid" type="Integer" multiselect="false"/> + <inputvalue name="mesh_coordinate" type="Coordinate" multiselect="false"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + <mesh-width xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/meshwidth.xml"/> + </state> + + <state id="verticalcrosssection_mesh_point_parallel_presettings" description="verticalcrosssection_mesh_point_parallel_presettings" state="de.intevation.gnv.state.PreSettingsTransferCoordinateSelectionState"> + <queryID>verticalprofile_mesh_point</queryID> + <dataname>mesh_point</dataname> + <data-multiselect>false</data-multiselect> + <presettings-transfer presetting="geometry" inputvalue="mesh_coordinate"/> + <inputvalues> + <inputvalue name="sourceid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="meshid" type="Integer" multiselect="false"/> + <inputvalue name="mesh_coordinate" type="Geometry" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + <mesh-width xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="${artifacts.config.dir}/meshwidth.xml"/> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_point_parallel_presettings"/> + <to state="verticalcrosssection_mesh_parallel_axis"/> + </transition> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_point"/> + <to state="verticalcrosssection_mesh_parallel_axis"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_axis" description="verticalcrosssection_mesh_parallel_axis" state="de.intevation.gnv.state.profile.horizontal.NorthSouthEastWestState"> + <dataname>axisid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <!-- the rest is the same as in conf_mesh --> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_axis"/> + <to state="verticalcrosssection_mesh_parallel_parameter"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_parameter" description="verticalcrosssection_mesh_parallel_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_parameter</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_parameter"/> + <to state="verticalcrosssection_mesh_parallel_year"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_year" description="verticalcrosssection_mesh_parallel_year" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalcrosssection_mesh_year</queryID> + <dataname>yearid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_year"/> + <to state="verticalcrosssection_mesh_parallel_date"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_date" description="verticalcrosssection_mesh_parallel_date" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalcrosssection_mesh_date</queryID> + <dataname>dateid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalcrosssection_mesh_parallel_date"/> + <to state="verticalcrosssection_mesh_parallel_calculate_results"/> + </transition> + + <state id="verticalcrosssection_mesh_parallel_calculate_results" description="verticalcrosssection_mesh_parallel_calculate_results" state="de.intevation.gnv.state.profile.verticalcrosssection.VerticalCrossSectionParallelOutputState"> + <queryID>verticalcrosssection_mesh_chart_data</queryID> + <queryID-linestring>verticalcrosssection_mesh_linestring</queryID-linestring> + <queryID-odv>verticalcrosssection_mesh_parallel_odv_data</queryID-odv> + <inputvalues> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="1"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="axisid" type="AttributeName" multiselect="false" usedinquery="0"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + <value-names> + <value-name name="feature" value="mesh_point"></value-name> + <value-name name="parameter" value="parameterid"></value-name> + <value-name name="measurement" value="depthid"></value-name> + </value-names> + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> + </outputsModes> + </state> + </states> +</artifact>
--- a/gnv-artifacts/doc/conf/products/verticalprofile/conf_mesh.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/verticalprofile/conf_mesh.xml Fri Sep 28 12:15:22 2012 +0200 @@ -211,12 +211,37 @@ <inputvalue name="maxdepthid" type="Double" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_mesh_maxdepth"/> - <to state="verticalprofile_meshpoint_parameter"/> + <to state="verticalprofile_meshpoint_vector_scalar"/> </transition> - + + <state id="verticalprofile_meshpoint_vector_scalar" description="verticalprofile_meshpoint_vector_scalar" state="de.intevation.gnv.state.SwitchModeState"> + <dataname>vectorscalar</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mindepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="maxdepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="vectorscalar" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="verticalprofile_meshpoint_vector_scalar"/> + <to state="verticalprofile_meshpoint_parameter"/> + <condition inputvalue="vectorscalar" value="scalar" operator="equal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="verticalprofile_meshpoint_vector_scalar"/> + <to state="verticalprofile_meshpoint_parameter_vector"/> + <condition inputvalue="vectorscalar" value="vector" operator="equal"/> + </transition> + <state id="verticalprofile_meshpoint_parameter" description="verticalprofile_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_mesh_parameter</queryID> <dataname>parameterid</dataname> @@ -232,11 +257,31 @@ </inputvalues> </state> + <state id="verticalprofile_meshpoint_parameter_vector" description="verticalprofile_meshpoint_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_parameter_vector</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mindepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="maxdepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="0" /> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_meshpoint_parameter"/> <to state="verticalprofile_mesh_year"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_meshpoint_parameter_vector"/> + <to state="verticalprofile_mesh_year_vector"/> + </transition> + <state id="verticalprofile_mesh_year" description="verticalprofile_mesh_year" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_mesh_year</queryID> <dataname>yearid</dataname> @@ -251,12 +296,32 @@ <inputvalue name="yearid" type="String" multiselect="true" usedinquery="0"/> </inputvalues> </state> + + <state id="verticalprofile_mesh_year_vector" description="verticalprofile_mesh_year" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_year_vector</queryID> + <dataname>yearid</dataname> + <data-multiselect>true</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1" /> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mindepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="maxdepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="0"/> + </inputvalues> + </state> <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_mesh_year"/> <to state="verticalprofile_mesh_date"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_mesh_year_vector"/> + <to state="verticalprofile_mesh_date_vector"/> + </transition> + <state id="verticalprofile_mesh_date" description="verticalprofile_mesh_date" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_mesh_date</queryID> <dataname>dateid</dataname> @@ -272,12 +337,33 @@ <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="0"/> </inputvalues> </state> - + + <state id="verticalprofile_mesh_date_vector" description="verticalprofile_mesh_date" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_mesh_date_vector</queryID> + <dataname>dateid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1" /> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mindepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="maxdepthid" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_mesh_date"/> <to state="verticalprofile_mesh_calculate_results"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_mesh_date_vector"/> + <to state="verticalprofile_mesh_calculate_results_vector"/> + </transition> + <state id="verticalprofile_mesh_calculate_results" description="verticalprofile_mesh_calculate_results" state="de.intevation.gnv.state.profile.vertical.VerticalProfileOutputState"> <queryID>verticalprofile_mesh_chart_data</queryID> <queryID-odv>verticalprofile_mesh_odv_data</queryID-odv> @@ -326,5 +412,54 @@ <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> </outputsModes> </state> + + <state id="verticalprofile_mesh_calculate_results_vector" description="verticalprofile_mesh_calculate_results" state="de.intevation.gnv.state.profile.vertical.VerticalProfileMeshVectorOutputState"> + <queryID>verticalprofile_mesh_chart_data_vector</queryID> + <queryID-odv>verticalprofile_mesh_odv_data_vector</queryID-odv> + <inputvalues> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="1"/> + <inputvalue name="meshid" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="mesh_point" type="Integer" multiselect="false" usedinquery="2"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="mindepthid" type="Double" multiselect="false" usedinquery="1"/> + <inputvalue name="maxdepthid" type="Double" multiselect="false" usedinquery="1"/> + </inputvalues> + <value-names> + <value-name name="feature" value="mesh_point"></value-name> + <value-name name="parameter" value="parameterid"></value-name> + <value-name name="measurement" value="dateid"></value-name> + </value-names> + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="points" type="Boolean" value="false"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="histogram" description="Histogram of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="bincount" type="Integer" value="7"/> + <inputvalue name="binwidth" type="Double" value="7"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="csv" description="CSV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> + </outputsModes> + </state> </states> </artifact>
--- a/gnv-artifacts/doc/conf/products/verticalprofile/conf_timeseriespoint.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/products/verticalprofile/conf_timeseriespoint.xml Fri Sep 28 12:15:22 2012 +0200 @@ -37,7 +37,7 @@ <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_with_wkt"/> - <to state="verticalprofile_parameter"/> + <to state="verticalprofile_vector_scalar"/> </transition> <state id="verticalprofile_area" description="verticalprofile_area_one" state="de.intevation.gnv.state.DefaultState"> @@ -93,7 +93,7 @@ <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_without_geom"/> - <to state="verticalprofile_parameter"/> + <to state="verticalprofile_vector_scalar"/> </transition> <state id="verticalprofile_timeseriespoint" description="timeseries_timeseriespoint" state="de.intevation.gnv.state.DefaultState"> @@ -110,9 +110,31 @@ <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_timeseriespoint"/> + <to state="verticalprofile_vector_scalar"/> + </transition> + + <state id="verticalprofile_vector_scalar" description="timeseries_vector_scalar" state="de.intevation.gnv.state.SwitchModeState"> + <dataname>vectorscalar</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="vectorscalar" type="String" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="verticalprofile_vector_scalar"/> <to state="verticalprofile_parameter"/> - </transition> - + <condition inputvalue="vectorscalar" value="scalar" operator="equal"/> + </transition> + + <transition transition="de.intevation.gnv.transition.ValueCompareTransition"> + <from state="verticalprofile_vector_scalar"/> + <to state="verticalprofile_parameter_vector"/> + <condition inputvalue="vectorscalar" value="vector" operator="equal"/> + </transition> + <state id="verticalprofile_parameter" description="timeseries_parameter" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_parameter</queryID> <dataname>parameterid</dataname> @@ -124,12 +146,29 @@ <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="0"/> </inputvalues> </state> + + <state id="verticalprofile_parameter_vector" description="timeseries_parameter" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_parameter_vector</queryID> + <dataname>parameterid</dataname> + <presettings-name>parameter</presettings-name> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="parameterid" type="Integer" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_parameter"/> <to state="verticalprofile_year"/> </transition> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_parameter_vector"/> + <to state="verticalprofile_year_vector"/> + </transition> + <state id="verticalprofile_year" description="verticalprofile_year" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_year</queryID> <dataname>yearid</dataname> @@ -141,11 +180,28 @@ <inputvalue name="yearid" type="String" multiselect="true" usedinquery="0"/> </inputvalues> </state> + + <state id="verticalprofile_year_vector" description="verticalprofile_year" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_year_vector</queryID> + <dataname>yearid</dataname> + <data-multiselect>true</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="0"/> + </inputvalues> + </state> <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_year"/> <to state="verticalprofile_date"/> </transition> + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_year_vector"/> + <to state="verticalprofile_date_vector"/> + </transition> <state id="verticalprofile_date" description="verticalprofile_date" state="de.intevation.gnv.state.DefaultState"> <queryID>verticalprofile_date</queryID> @@ -159,12 +215,30 @@ <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="0"/> </inputvalues> </state> + + <state id="verticalprofile_date_vector" description="verticalprofile_date" state="de.intevation.gnv.state.DefaultState"> + <queryID>verticalprofile_date_vector</queryID> + <dataname>dateid</dataname> + <data-multiselect>false</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="yearid" type="String" multiselect="true" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="dateid" type="Date" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_date"/> <to state="verticalprofile_minmaxdepth"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_date_vector"/> + <to state="verticalprofile_minmaxdepth_vector"/> + </transition> + <state id="verticalprofile_minmaxdepth" description="verticalprofile_minmaxdepth" state="de.intevation.gnv.state.MinMaxState"> <queryID>verticalprofile_minmaxdepth</queryID> <dataname>depthrange</dataname> @@ -178,12 +252,31 @@ <inputvalue name="maxvalue" type="Double" multiselect="false" usedinquery="0"/> </inputvalues> </state> - + + <state id="verticalprofile_minmaxdepth_vector" description="verticalprofile_minmaxdepth" state="de.intevation.gnv.state.MinMaxState"> + <queryID>verticalprofile_minmaxdepth_vector</queryID> + <dataname>depthrange</dataname> + <data-multiselect>true</data-multiselect> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="1"/> + <inputvalue name="minvalue" type="Double" multiselect="false" usedinquery="0"/> + <inputvalue name="maxvalue" type="Double" multiselect="false" usedinquery="0"/> + </inputvalues> + </state> + <transition transition="de.intevation.gnv.transition.DefaultTransition"> <from state="verticalprofile_minmaxdepth"/> <to state="verticalprofile_calculate_results"/> </transition> - + + <transition transition="de.intevation.gnv.transition.DefaultTransition"> + <from state="verticalprofile_minmaxdepth_vector"/> + <to state="verticalprofile_calculate_results_vector"/> + </transition> + <state id="verticalprofile_calculate_results" description="verticalprofile_calculate_results" state="de.intevation.gnv.state.profile.vertical.VerticalProfileOutputState"> <queryID>verticalprofile_chart_data</queryID> <queryID-odv>verticalprofile_odv_data</queryID-odv> @@ -231,5 +324,53 @@ <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> </outputsModes> </state> + + <state id="verticalprofile_calculate_results_vector" description="verticalprofile_calculate_results" state="de.intevation.gnv.state.profile.vertical.VerticalProfileVectorOutputState"> + <queryID>verticalprofile_chart_data_vector</queryID> + <queryID-odv>verticalprofile_odv_data_vector</queryID-odv> + <inputvalues> + <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="1"/> + <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/> + <inputvalue name="dateid" type="Date" multiselect="true" usedinquery="1"/> + <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/> + <inputvalue name="minvalue" type="Double" multiselect="false" usedinquery="1"/> + <inputvalue name="maxvalue" type="Double" multiselect="false" usedinquery="1"/> + </inputvalues> + <value-names> + <value-name name="feature" value="featureid"></value-name> + <value-name name="parameter" value="parameterid"></value-name> + <value-name name="measurement" value="dateid"></value-name> + </value-names> + <outputsModes> + <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="points" type="Boolean" value="false"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="histogram" description="Histogram of the Values" mime-type="image/png"> + <parameters> + <inputvalue name="width" type="Integer" value="600"/> + <inputvalue name="height" type="Integer" value="400"/> + <inputvalue name="bincount" type="Integer" value="7"/> + <inputvalue name="binwidth" type="Double" value="7"/> + </parameters> + <exportModes> + <export name="img" description="IMG-Export der Daten" mime-type="image/png" /> + <export name="pdf" description="PDF-Export der Daten" mime-type="application/pdf" /> + <export name="svg" description="SVG-Export der Daten" mime-type="image/svg+xml" /> + </exportModes> + </outputsMode> + <outputsMode name="csv" description="CSV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="odv" description="ODV-Export der Daten" mime-type="text/plain"/> + <outputsMode name="statistics" description="Statistik zu den Daten" mime-type="text/xml"/> + </outputsModes> + </state> </states> </artifact>
--- a/gnv-artifacts/doc/conf/queries.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/conf/queries.properties Fri Sep 28 12:15:22 2012 +0200 @@ -125,8 +125,109 @@ TSV.TIMESERIESID, \ TSV.TIMEVALUE +############################################# +############################################# +########## Zeitserie ############## +########## Vektordaten ############### +############################################# +############################################# -############################################# +timeseries_parameter_vector=SELECT DISTINCT \ + p.PARAMETERID KEY, \ + p.GERMANNAME || ' ['|| p.UNIT ||']' VALUE, \ + p.GERMANNAME \ + FROM MEDIAN.PARAMETER P, \ + MEDIAN.TIMESERIES TS, \ + MEDIAN.TIMESERIESVECTORVALUE TSV, \ + MEDIAN.MEASUREMENT M, \ + MEDIAN.TIMESERIESPOINT TSP \ + WHERE M.FEATUREID = TSP.FEATUREID AND \ + M.MEASUREMENTID = TSV.MEASUREMENTID AND \ + TS.TIMESERIESID = TSV.TIMESERIESID AND \ + P.PARAMETERID = TS.PARAMETERID AND \ + TSP.FEATUREID = ? \ + ORDER BY P.GERMANNAME + +timeseries_depth_height_vector=SELECT DISTINCT \ + M.MEASUREMENTID KEY, \ + M.ZLOCATION VALUE, \ + P.PARAMETERID PARAMETERID \ + FROM MEDIAN.MEASUREMENT M, \ + MEDIAN.TIMESERIESVECTORVALUE TSV, \ + MEDIAN.TIMESERIES T, \ + MEDIAN.PARAMETER P \ + WHERE M.MEASUREMENTID = TSV.MEASUREMENTID AND \ + TSV.TIMESERIESID = T.TIMESERIESID AND \ + T.PARAMETERID = P.PARAMETERID AND \ + M.FEATUREID = ? AND \ + P.PARAMETERID = ? \ + ORDER BY m.ZLOCATION DESC + +timeseries_interval_vector=select min(tsv.TIMEVALUE) MIN, \ + max(tsv.TIMEVALUE) MAX \ + from MEDIAN.TIMESERIES t, \ + MEDIAN.TIMESERIESVECTORVALUE tsv \ + where tsv.TIMESERIESID = t.TIMESERIESID AND \ + t.PARAMETERID = ? AND \ + tsv.MEASUREMENTID = ? + +timeseries_chart_data_vector=SELECT tsv.TIMEVALUE XORDINATE, \ + tsv.XCOMPONENT, \ + tsv.YCOMPONENT, \ + tsv.ZCOMPONENT, \ + tsv.SPEED, \ + tsv.DIRECTION, \ + t.PARAMETERID GROUP1, \ + tsv.MEASUREMENTID GROUP2, \ + tsv.TIMESERIESID GROUP3, \ + t.TIMEINTERVAL GAPID \ + FROM MEDIAN.TIMESERIESFULLVECTORVALUE tsv, \ + MEDIAN.TIMESERIES t \ + WHERE tsv.TIMESERIESID = t.TIMESERIESID AND \ + t.PARAMETERID = ? AND \ + tsv.MEASUREMENTID = ? AND \ + tsv.TIMEVALUE >= ? AND \ + tsv.TIMEVALUE <= ? \ + ORDER BY tsv.MEASUREMENTID, \ + tsv.TIMESERIESID, \ + t.PARAMETERID, \ + tsv.TIMEVALUE + +timeseries_odv_data_vector = SELECT SI.NAME CRUISE, \ + MEDIAN.TIMESERIESPOINT.NAME STATION, \ + '*' TYPE, \ + ST_ASTEXT(SHAPE), \ + 0 BOTDEPTH, \ + (M.ZLOCATION *-1) DEPTH, \ + TSV.TIMEVALUE, \ + TSV.XCOMPONENT, \ + TSV.YCOMPONENT, \ + TSV.ZCOMPONENT, \ + TSV.SPEED, \ + TSV.DIRECTION, \ + TS.PARAMETERID PARAMETER, \ + TSV.MEASUREMENTID, \ + TSV.TIMESERIESID, \ + '1' QF \ + FROM MEDIAN.TIMESERIESPOINT, \ + MEDIAN.TIMESERIESFULLVECTORVALUE TSV, \ + MEDIAN.TIMESERIES TS, \ + MEDIAN.MEASUREMENT M, \ + MEDIAN.SOURCEINFO SI \ + WHERE SI.SOURCEID = M.SOURCEID AND \ + M.FEATUREID = MEDIAN.TIMESERIESPOINT.FEATUREID AND \ + M.MEASUREMENTID = TSV.MEASUREMENTID AND \ + TSV.TIMESERIESID = TS.TIMESERIESID AND \ + TS.PARAMETERID = ? AND \ + TSV.MEASUREMENTID = ? AND \ + TSV.TIMEVALUE >= ? AND \ + TSV.TIMEVALUE <= ? \ + ORDER BY TS.PARAMETERID, \ + TSV.MEASUREMENTID, \ + TSV.TIMESERIESID, \ + TSV.TIMEVALUE + +############################################ ############################################# ########## Zeitserie Mesh ############## ############################################# @@ -236,6 +337,98 @@ msv.TIMEVALUE, \ msv.PARAMETERID +############################################# +############################################# +########## Zeitserie Mesh ############## +########## Vektordaten ############## +############################################# +############################################# + +timeseries_mesh_parameter_vector=SELECT DISTINCT \ + P.PARAMETERID KEY, \ + P.GERMANNAME || ' ['|| P.UNIT ||']' VALUE, \ + P.GERMANNAME \ + FROM MEDIAN.PARAMETER P, \ + MEDIAN.MESHVECTORVALUE MVV, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX AND \ + MVV.PARAMETERID = P.PARAMETERID \ + ORDER BY P.GERMANNAME + +timeseries_mesh_interval_vector=SELECT /*+ parallel(TIMEVALUE,5) */ \ + MIN(TIMEVALUE) MIN, \ + MAX(TIMEVALUE) MAX \ + FROM MEDIAN.MESHVECTORVALUE MVV, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX AND \ + MVV.PARAMETERID IN (?) + +timeseries_mesh_chart_data_vector =SELECT /*+ parallel(TIMEVALUE,10) */ \ + MVV.TIMEVALUE XORDINATE, \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID GROUP1, \ + MVV.FEATUREID GROUP2, \ + MP.FEATUREID GROUP3, \ + -1 GAPID \ + FROM MEDIAN.MESHCURRENTVALUE MVV, \ + MEDIAN.MESHPOINT MP, \ + MEDIAN.MESH M \ + WHERE (M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX ) AND \ + MVV.FEATUREID = MP.FEATUREID AND \ + MVV.PARAMETERID in ( ? ) AND \ + MP.FEATUREID in ( ? ) AND \ + MVV.TIMEVALUE >= ? AND \ + MVV.TIMEVALUE <= ? \ + ORDER BY MP.FEATUREID, \ + MVV.FEATUREID, \ + MVV.PARAMETERID, \ + MVV.TIMEVALUE + +timeseries_mesh_odv_data_vector = SELECT /*+ parallel(timevalue,10) */ \ + SI.NAME CRUISE, \ + M.MESHID || '-' || MEDIAN.MESHPOINT.IPOSITION || '-' || MEDIAN.MESHPOINT.JPOSITION STATION, \ + '*' TYPE, \ + ST_ASTEXT(SHAPE), \ + 0 BOTDEPTH, \ + (((ML.UPPERZLOCATION + ML.LOWERZLOCATION) / 2)*-1) DEPTH, \ + MVV.TIMEVALUE, \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID PARAMETER, \ + '1' QF \ + FROM MEDIAN.MESHCURRENTVALUE MVV, \ + MEDIAN.MESHPOINT, \ + MEDIAN.MESH M, \ + MEDIAN.SOURCEINFO SI, \ + MEDIAN.MESHLAYER ML \ + WHERE (M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX ) AND \ + M.SOURCEID = SI.SOURCEID AND \ + ML.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + ML.KPOSITION = MEDIAN.MESHPOINT.KPOSITION AND \ + MVV.FEATUREID = MEDIAN.MESHPOINT.FEATUREID AND \ + MVV.PARAMETERID in (? ) AND \ + MEDIAN.MESHPOINT.FEATUREID in ( ? ) AND \ + MVV.TIMEVALUE >= ? AND \ + MVV.TIMEVALUE <= ? \ + ORDER BY MEDIAN.MESHPOINT.FEATUREID, \ + MVV.FEATUREID, \ + MVV.TIMEVALUE, \ + MVV.PARAMETERID ############################################# ############################################# @@ -330,7 +523,7 @@ '*' TYPE, \ ST_ASTEXT(SHAPE), \ 0 BOTDEPTH, \ - (M.ZLOCATION *-1) DEPTH, \ + (M.ZLOCATION) DEPTH, \ TSV.TIMEVALUE, \ TSV.DATAVALUE, \ TS.PARAMETERID PARAMETER, \ @@ -355,8 +548,125 @@ TSV.TIMESERIESID, \ TSV.TIMEVALUE, \ TS.PARAMETERID - - + +############################################# +############################################# +########## Vertikalprofil ############## +########## Vektordaten ############## +############################################# +############################################# + +verticalprofile_parameter_vector=SELECT DISTINCT \ + P.PARAMETERID KEY, \ + P.GERMANNAME || ' ['|| P.UNIT ||']' VALUE, \ + P.GERMANNAME \ + from MEDIAN.PARAMETER P, \ + MEDIAN.TIMESERIES TS, \ + MEDIAN.TIMESERIESVECTORVALUE TVV, \ + MEDIAN.MEASUREMENT M \ + where TS.PARAMETERID = P.PARAMETERID AND \ + TS.TIMESERIESID = TVV.TIMESERIESID AND \ + M.MEASUREMENTID = TVV.MEASUREMENTID AND \ + M.FEATUREID = ? \ + ORDER BY P.GERMANNAME + +verticalprofile_minmaxdepth_vector= SELECT MIN(M.ZLOCATION) MIN, \ + MAX(M.ZLOCATION) MAX \ + FROM MEDIAN.MEASUREMENT M, \ + MEDIAN.TIMESERIES TS, \ + MEDIAN.TIMESERIESVECTORVALUE TVV \ + WHERE TS.TIMESERIESID = TVV.TIMESERIESID AND \ + M.MEASUREMENTID = TVV.MEASUREMENTID AND \ + M.FEATUREID = ? AND \ + TS.PARAMETERID = ? + +verticalprofile_year_vector=SELECT DISTINCT \ + TO_CHAR(TVV.TIMEVALUE,'YYYY') KEY, \ + TO_CHAR(TVV.TIMEVALUE,'YYYY') VALUE \ + FROM MEDIAN.TIMESERIES TS, \ + MEDIAN.TIMESERIESVECTORVALUE TVV, \ + MEDIAN.MEASUREMENT M \ + WHERE TS.TIMESERIESID = TVV.TIMESERIESID AND \ + M.MEASUREMENTID = TVV.MEASUREMENTID AND \ + M.FEATUREID = ? AND \ + TS.PARAMETERID = ? \ + ORDER BY to_char(TVV.TIMEVALUE,'YYYY') + +verticalprofile_date_vector=SELECT DISTINCT \ + TVV.TIMEVALUE KEY, \ + TVV.TIMEVALUE VALUE \ + from MEDIAN.TIMESERIES TS, \ + MEDIAN.TIMESERIESVECTORVALUE TVV, \ + MEDIAN.MEASUREMENT M \ + WHERE TS.TIMESERIESID = TVV.TIMESERIESID AND \ + M.MEASUREMENTID = TVV.MEASUREMENTID AND \ + M.FEATUREID = ? AND \ + TS.PARAMETERID = ? AND \ + TO_CHAR(TVV.TIMEVALUE,'YYYY') IN (?) \ + ORDER BY TVV.TIMEVALUE + +verticalprofile_chart_data_vector= SELECT M.ZLOCATION XORDINATE, \ + TS.PARAMETERID GROUP1, \ + TVV.TIMEVALUE GROUP2, \ + TVV.XCOMPONENT, \ + TVV.YCOMPONENT, \ + TVV.ZCOMPONENT, \ + TVV.SPEED, \ + TVV.DIRECTION, \ + 1 GROUP3, \ + 1 DATAID, \ + M.FEATUREID, \ + TS.TIMESERIESID \ + FROM MEDIAN.TIMESERIES TS, \ + MEDIAN.TIMESERIESFULLVECTORVALUE TVV, \ + MEDIAN.MEASUREMENT M \ + WHERE TS.TIMESERIESID = TVV.TIMESERIESID AND \ + M.MEASUREMENTID = TVV.MEASUREMENTID AND \ + M.FEATUREID = ? AND \ + TS.PARAMETERID = ? AND \ + TVV.TIMEVALUE = ? AND \ + M.ZLOCATION >= ? AND \ + M.ZLOCATION <= ? \ + ORDER BY TVV.TIMEVALUE, \ + TVV.TIMESERIESID, \ + TS.PARAMETERID, \ + TVV.TIMEVALUE + +verticalprofile_odv_data_vector = SELECT SI.NAME CRUISE, \ + MEDIAN.TIMESERIESPOINT.NAME STATION, \ + '*' TYPE, \ + ST_ASTEXT(SHAPE), \ + 0 BOTDEPTH, \ + (M.ZLOCATION) DEPTH, \ + TVV.TIMEVALUE, \ + TVV.XCOMPONENT, \ + TVV.YCOMPONENT, \ + TVV.ZCOMPONENT, \ + TVV.SPEED, \ + TVV.DIRECTION, \ + TS.PARAMETERID PARAMETER, \ + TVV.MEASUREMENTID, \ + TVV.TIMESERIESID, \ + '1' QF \ + FROM MEDIAN.TIMESERIESPOINT, \ + MEDIAN.TIMESERIESFULLVECTORVALUE TVV, \ + MEDIAN.TIMESERIES TS, \ + MEDIAN.MEASUREMENT M, \ + MEDIAN.SOURCEINFO SI \ + WHERE SI.SOURCEID = M.SOURCEID AND \ + M.FEATUREID = MEDIAN.TIMESERIESPOINT.FEATUREID AND \ + M.MEASUREMENTID = TVV.MEASUREMENTID AND \ + TVV.TIMESERIESID = TS.TIMESERIESID AND \ + M.FEATUREID = ? AND \ + TS.PARAMETERID = ? AND \ + TVV.TIMEVALUE = ? AND \ + M.ZLOCATION >= ? AND \ + M.ZLOCATION <= ? \ + ORDER BY TVV.MEASUREMENTID, \ + TVV.TIMESERIESID, \ + TVV.TIMEVALUE, \ + TS.PARAMETERID + ############################################# ############################################# ########## Vertikalprofil Mesh ############## @@ -506,7 +816,7 @@ '*' TYPE, \ ST_ASTEXT(SHAPE), \ 0 BOTDEPTH, \ - (((ML.UPPERZLOCATION + ML.LOWERZLOCATION) / 2)*-1) DEPTH, \ + (((ML.UPPERZLOCATION + ML.LOWERZLOCATION) / 2)) DEPTH, \ msv.DATAVALUE, \ msv.PARAMETERID PARAMETER, \ msv.TIMEVALUE , \ @@ -539,7 +849,133 @@ order by msv.TIMEVALUE, \ ml.UPPERZLOCATION, \ msv.PARAMETERID + +############################################# +############################################# +########## Vertikalprofil Mesh ############## +########## Vektordaten ############## +############################################# +############################################# + +verticalprofile_mesh_parameter_vector=SELECT DISTINCT \ + P.PARAMETERID KEY, \ + P.GERMANNAME || ' ['|| P.UNIT ||']' VALUE, \ + P.GERMANNAME \ + FROM MEDIAN.PARAMETER P, \ + MEDIAN.MESHVECTORVALUE MVV, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX AND \ + MVV.PARAMETERID = P.PARAMETERID \ + ORDER BY P.GERMANNAME + +verticalprofile_mesh_year_vector= SELECT DISTINCT \ + to_char(MVV.TIMEVALUE,'YYYY') KEY, \ + to_char(MVV.TIMEVALUE,'YYYY') VALUE \ + FROM MEDIAN.MESHVECTORVALUE MVV, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX AND \ + MVV.PARAMETERID in (?) \ + ORDER BY to_char(MVV.TIMEVALUE, 'YYYY') + +verticalprofile_mesh_date_vector= SELECT DISTINCT \ + MVV.TIMEVALUE KEY, \ + MVV.TIMEVALUE VALUE \ + FROM MEDIAN.MESHVECTORVALUE MVV, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MVV.PARTID >= M.PARTIDMIN AND \ + MVV.PARTID <= M.PARTIDMAX AND \ + MVV.PARAMETERID in (?) AND \ + to_char(MVV.TIMEVALUE,'YYYY') in (?) \ + ORDER BY MVV.TIMEVALUE + +verticalprofile_mesh_chart_data_vector=SELECT ML.UPPERZLOCATION XORDINATE, \ + MP.KPOSITION KPOSITION, \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID GROUP1, \ + MVV.TIMEVALUE GROUP2, \ + 1 GROUP3, \ + 2 DATAID, \ + MP.FEATUREID, \ + MP.MESHID \ + from MEDIAN.MESHLAYER ML, \ + MEDIAN.MESHPOINT MP, \ + MEDIAN.MESH M, \ + MEDIAN.MESHCURRENTVALUE MVV \ + where MVV.FEATUREID = MP. FEATUREID AND \ + ML.KPOSITION = MP.KPOSITION AND \ + ML.MESHID = MP.MESHID AND \ + M.MESHID = MP.MESHID AND \ + M.PARTIDMIN <= MVV.PARTID AND \ + M.PARTIDMAX >= MVV.PARTID AND \ + MVV.PARAMETERID IN (?) AND \ + MVV.TIMEVALUE IN (?) AND \ + M.OBJECTID = ? AND \ + MP.FEATUREID IN \ + ( SELECT FEATUREID \ + FROM MEDIAN.MESHPOINT MP, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MP.MESHID = M.MESHID AND \ + IPOSITION = (SELECT IPOSITION FROM MEDIAN.MESHPOINT WHERE FEATUREID = ?) AND \ + JPOSITION = (SELECT JPOSITION FROM MEDIAN.MESHPOINT WHERE FEATUREID = ?)) AND \ + MP.KPOSITION <= ? AND \ + MP.KPOSITION >= ? \ + ORDER BY MVV.PARAMETERID, \ + MVV.TIMEVALUE, \ + ML.UPPERZLOCATION +verticalprofile_mesh_odv_data_vector=SELECT SI.NAME CRUISE, \ + M.MESHID || '-' || MEDIAN.MESHPOINT.IPOSITION || '-' || MEDIAN.MESHPOINT.JPOSITION STATION, \ + '*' TYPE, \ + ST_ASTEXT(SHAPE), \ + 0 BOTDEPTH, \ + (((ML.UPPERZLOCATION + ML.LOWERZLOCATION) / 2)) DEPTH, \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID PARAMETER, \ + MVV.TIMEVALUE , \ + '1' QF \ + FROM MEDIAN.MESHLAYER ML, \ + MEDIAN.MESHPOINT, \ + MEDIAN.MESH M, \ + MEDIAN.MESHCURRENTVALUE MVV, \ + MEDIAN.SOURCEINFO SI \ + WHERE M.SOURCEID = SI.SOURCEID AND \ + MVV.FEATUREID = MEDIAN.MESHPOINT. FEATUREID AND \ + ML.KPOSITION = MEDIAN.MESHPOINT.KPOSITION AND \ + ML.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.PARTIDMIN <= MVV.PARTID AND \ + M.PARTIDMAX >= MVV.PARTID AND \ + MVV.PARAMETERID IN (?) AND \ + MVV.TIMEVALUE IN (?) AND \ + M.OBJECTID = ? AND \ + MEDIAN.MESHPOINT.FEATUREID IN \ + ( SELECT FEATUREID \ + FROM MEDIAN.MESHPOINT MP, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MP.MESHID = M.MESHID AND \ + IPOSITION = (SELECT IPOSITION FROM MEDIAN.MESHPOINT WHERE FEATUREID = ?) AND \ + JPOSITION = (SELECT JPOSITION FROM MEDIAN.MESHPOINT WHERE FEATUREID = ?)) AND \ + MEDIAN.MESHPOINT.KPOSITION <= ? AND \ + MEDIAN.MESHPOINT.KPOSITION >= ? \ + ORDER BY MVV.TIMEVALUE, \ + ML.UPPERZLOCATION, \ + MVV.PARAMETERID + ############################################# ############################################# ##### Vertikalprofil InstantaneousPoint ##### @@ -687,7 +1123,7 @@ '*' TYPE, \ ST_ASTEXT(SHAPE), \ 0 BOTDEPTH, \ - (M.ZLOCATION * -1) DEPTH, \ + (M.ZLOCATION) DEPTH, \ MSV.DATAVALUE, \ MSV.PARAMETERID PARAMETER, \ MEDIAN.INSTANTANEOUSPOINT.TIMEVALUE , \ @@ -1058,7 +1494,99 @@ MEDIAN.MESHPOINT.JPOSITION, \ MEDIAN.MESHPOINT.IPOSITION, \ msv.PARAMETERID - + +############################################# +############################################# +########### Horizontalprofil MESH ########### +########### Vektordaten ########### +############################################# +############################################# + +horizontalprofile_mesh_chart_data_vector= SELECT ST_ASTEXT(SHAPE), \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID GROUP1, \ + MEDIAN.MESHPOINT.KPOSITION GROUP2, \ + MVV.TIMEVALUE GROUP3, \ + MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION, \ + 2 DATAID, \ + MEDIAN.MESHPOINT.MESHID \ + FROM MEDIAN.MESHLAYER ML, \ + MEDIAN.MESHPOINT, \ + MEDIAN.MESH M, \ + MEDIAN.MESHCURRENTVALUE MVV \ + WHERE MVV.FEATUREID = MEDIAN.MESHPOINT. FEATUREID AND \ + ML.KPOSITION = MEDIAN.MESHPOINT.KPOSITION AND \ + ML.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.PARTIDMIN <= MVV.PARTID AND \ + M.PARTIDMAX >= MVV.PARTID AND \ + MVV.PARAMETERID = ? AND \ + MVV.TIMEVALUE = ? AND \ + M.OBJECTID = ? AND \ + MEDIAN.MESHPOINT.FEATUREID IN \ + ( SELECT FEATUREID \ + from MEDIAN.MESHPOINT MP, \ + MEDIAN.MESH M \ + where M.OBJECTID = ? AND \ + MP.MESHID = M.MESHID AND \ + KPOSITION IN ( ? ) AND \ + ? = (SELECT ? FROM MEDIAN.MESHPOINT WHERE FEATUREID = ?)) \ + ORDER BY MVV.TIMEVALUE, \ + MEDIAN.MESHPOINT.KPOSITION, \ + MVV.PARAMETERID, \ + MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION + +horizontalprofile_mesh_odv_data_vector= SELECT SI.NAME CRUISE, \ + M.MESHID || '-' || MEDIAN.MESHPOINT.IPOSITION || '-' || MEDIAN.MESHPOINT.JPOSITION STATION, \ + '*' TYPE, \ + ST_ASTEXT(SHAPE), \ + 0 BOTDEPTH, \ + (((ML.UPPERZLOCATION + ML.LOWERZLOCATION) / 2)*-1) DEPTH, \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID PARAMETER, \ + MVV.TIMEVALUE, \ + MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION , \ + '1' QF \ + from MEDIAN.MESHLAYER ML, \ + MEDIAN.MESHPOINT, \ + MEDIAN.MESH M, \ + MEDIAN.MESHCURRENTVALUE MVV, \ + MEDIAN.SOURCEINFO SI \ + where MVV.FEATUREID = MEDIAN.MESHPOINT. FEATUREID AND \ + ML.KPOSITION = MEDIAN.MESHPOINT.KPOSITION and \ + ML.MESHID = MEDIAN.MESHPOINT.MESHID and \ + M.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.SOURCEID = SI.SOURCEID AND \ + M.PARTIDMIN <= MVV.PARTID AND \ + M.PARTIDMAX >= MVV.PARTID AND \ + MVV.PARAMETERID = ? AND \ + MVV.TIMEVALUE = ? AND \ + M.OBJECTID = ? AND \ + MEDIAN.MESHPOINT.FEATUREID IN \ + ( SELECT FEATUREID \ + FROM MEDIAN.MESHPOINT MP, \ + MEDIAN.MESH M \ + WHERE M.OBJECTID = ? AND \ + MP.MESHID = M.MESHID AND \ + KPOSITION IN ( ? ) AND \ + ? = (SELECT ? FROM MEDIAN.MESHPOINT WHERE FEATUREID = ?)) \ + ORDER BY MVV.TIMEVALUE, \ + MEDIAN.MESHPOINT.KPOSITION, \ + MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION, \ + MVV.PARAMETERID + ############################################# ############################################# ########### Horizontalprofil MESH ########### @@ -1095,6 +1623,7 @@ msv.TIMEVALUE GROUP3, \ MEDIAN.MESHPOINT.JPOSITION, \ MEDIAN.MESHPOINT.IPOSITION, \ + MEDIAN.MESHPOINT.MESHID MESHID, \ 2 DATAID \ from MEDIAN.MESHLAYER ml, \ MEDIAN.MESHPOINT, \ @@ -1121,6 +1650,53 @@ msv.PARAMETERID, \ MEDIAN.MESHPOINT.JPOSITION, \ MEDIAN.MESHPOINT.IPOSITION + +############################################# +############################################# +########### Horizontalprofil MESH ########### +########### Schnittprofil ########### +########### Vektordaten ########### +############################################# +############################################# + +horizontalprofile_mesh_cross_chart_data_vector = SELECT ST_ASTEXT(SHAPE), \ + MVV.XCOMPONENT, \ + MVV.YCOMPONENT, \ + MVV.ZCOMPONENT, \ + MVV.SPEED, \ + MVV.DIRECTION, \ + MVV.PARAMETERID GROUP1, \ + MEDIAN.MESHPOINT.KPOSITION GROUP2, \ + MVV.TIMEVALUE GROUP3, \ + MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION, \ + 2 DATAID \ + FROM MEDIAN.MESHLAYER ML, \ + MEDIAN.MESHPOINT, \ + MEDIAN.MESH M, \ + MEDIAN.MESHCURRENTVALUE MVV \ + WHERE MVV.FEATUREID = MEDIAN.MESHPOINT.FEATUREID AND \ + ML.KPOSITION = MEDIAN.MESHPOINT.KPOSITION AND \ + ML.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + M.PARTIDMIN <= MVV.PARTID AND \ + M.PARTIDMAX >= MVV.PARTID AND \ + MVV.PARAMETERID = ? AND \ + MVV.TIMEVALUE = ? AND \ + M.OBJECTID = ? AND \ + ML.KPOSITION in (?) AND \ + MEDIAN.MESHPOINT.FEATUREID in \ + ( \ + SELECT DISTINCT FEATUREID \ + FROM MEDIAN.MESHPOINT \ + WHERE ? \ + ) \ + ORDER BY MVV.TIMEVALUE, \ + MEDIAN.MESHPOINT.KPOSITION, \ + MVV.PARAMETERID, \ + MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION + ############################################# ############################################# ############# Profilschnitt MESH ############ @@ -1221,7 +1797,37 @@ MEDIAN.MESHPOINT.IPOSITION, \ MEDIAN.MESHPOINT.KPOSITION, \ msv.PARAMETERID - + +############################################## +#### Special case of VerticalCrossSection #### +############################################## +verticalcrosssection_mesh_parallel_linestring = SELECT ST_ASTEXT(SHAPE), \ + IPOSITION, \ + JPOSITION \ + from MEDIAN.MESHLAYER ml, \ + MEDIAN.MESHPOINT, \ + MEDIAN.MESH m, \ + MEDIAN.MESHSCALARVALUE msv \ + where msv.FEATUREID = MEDIAN.MESHPOINT.FEATUREID AND \ + ml.KPOSITION = MEDIAN.MESHPOINT.KPOSITION and \ + ml.MESHID = MEDIAN.MESHPOINT.MESHID and \ + m.MESHID = MEDIAN.MESHPOINT.MESHID AND \ + m.PARTIDMIN <= msv.PARTID AND \ + m.PARTIDMAX >= msv.PARTID AND \ + msv.PARAMETERID in (?) AND \ + msv.TIMEVALUE in (?) AND \ + m.OBJECTID = ? AND \ + MEDIAN.MESHPOINT.FEATUREID in \ + ( select FEATUREID \ + from MEDIAN.MESHPOINT mp, \ + MEDIAN.MESH m \ + where m.OBJECTID = ? AND \ + mp.MESHID = m.MESHID AND \ + KPOSITION in ( 1 ) and \ + ? = (select ? from MEDIAN.MESHPOINT where FEATUREID = ?)) \ + order by MEDIAN.MESHPOINT.JPOSITION, \ + MEDIAN.MESHPOINT.IPOSITION + ############################################# ############################################# ########## Horizontalschnitt MESH ########### @@ -1373,7 +1979,8 @@ layer_request_data = SELECT ID_FEATURECLASS, \ QUERY_STRING, \ - ID_MAPSERVICE || '_' ||ID_LAYER \ + ID_MAPSERVICE || '_' ||ID_LAYER, \ + TITLE || '-' || LAYER_NAME || '-' || BAND VALUE \ FROM MEDIAN.LAYER_HAS_SUBTYPES \ WHERE ROW_ID IN (?) @@ -1402,7 +2009,13 @@ where f_table_schema = '?' and \ f_table_name = '?' and \ f_geometry_column='SHAPE' - + + +############################################# +############################################# +###### Sync of cache after DB updates ####### +############################################# +############################################# updated_tables = SELECT FULLTABLENAME \ FROM MEDIAN.LASTUPDATED \ - WHERE LASTUPDATE >= to_date('?', 'YYYY.MM.DD HH24:MI:SS') \ No newline at end of file + WHERE LASTUPDATE >= to_date('?', 'YYYY.MM.DD HH24:MI:SS')
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/doc/conf/sql-cache.xml Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ehcache> + <defaultCache + maxElementsInMemory="10000" + eternal="false" + memoryStoreEvictionPolicy="LFU" + timeToIdleSeconds="10800" + timeToLiveSeconds="14400" + /> +</ehcache> +
--- a/gnv-artifacts/doc/schema/externalinterface_schema.sql Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/schema/externalinterface_schema.sql Fri Sep 28 12:15:22 2012 +0200 @@ -1,4 +1,12 @@ -/* +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +/* * Lookup-Tabelle für das FIS anhand eines Gebietes. * Diese Tabelle ist in der ArcSDE als Layer zu integrieren. * Die Inhalte der Spalte id_fis müssen mit den vergebenen IDs @@ -69,4 +77,4 @@ ALTER TABLE mapservice_has_parameter ADD - PRIMARY KEY (id_mapservice,id_parameter); \ No newline at end of file + PRIMARY KEY (id_mapservice,id_parameter);
--- a/gnv-artifacts/doc/schema/externalinterface_testdata.sql Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/doc/schema/externalinterface_testdata.sql Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + *Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + INSERT INTO fis_has_mapservice (id_fis,id_mapservice) VALUES ('modeldata','BSH_IMS_Prediction_Model_Salinity'); INSERT INTO fis_has_mapservice (id_fis,id_mapservice) VALUES ('marnet','BSH_IMS_Marine_Environment_Monitoring_Network'); @@ -7,4 +15,4 @@ INSERT INTO layer_has_parameter(id_mapservice,id_layer,layer_name,id_group,id_parameter) VALUES ('BSH_IMS_Marine_Environment_Monitoring_Network', 2, 'Temperature', null, 1); INSERT INTO layer_has_parameter(id_mapservice,id_layer,layer_name,id_group,id_parameter) VALUES ('BSH_IMS_Marine_Environment_Monitoring_Network', 3, 'Salinity', null, 2); INSERT INTO layer_has_parameter(id_mapservice,id_layer,layer_name,id_group,id_parameter) VALUES ('BSH_IMS_Marine_Environment_Monitoring_Network', 4, 'OxygenSaturation', null, 31); -INSERT INTO layer_has_parameter(id_mapservice,id_layer,layer_name,id_group,id_parameter) VALUES ('BSH_IMS_Marine_Environment_Monitoring_Network', 5, 'Current', null, ?); \ No newline at end of file +INSERT INTO layer_has_parameter(id_mapservice,id_layer,layer_name,id_group,id_parameter) VALUES ('BSH_IMS_Marine_Environment_Monitoring_Network', 5, 'Current', null, ?);
--- a/gnv-artifacts/pom.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/pom.xml Fri Sep 28 12:15:22 2012 +0200 @@ -7,12 +7,33 @@ <version>1.0-SNAPSHOT</version> <name>gnv-artifacts</name> <url>http://maven.apache.org</url> + <scm> + <connection>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/gnv-artifacts</connection> + <developerConnection>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/gnv-artifacts</developerConnection> + <url>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/gnv-artifacts</url> + </scm> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <build> <plugins> <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>buildnumber-maven-plugin</artifactId> + <executions> + <execution> + <phase>validate</phase> + <goals> + <goal>create</goal> + </goals> + </execution> + </executions> + <configuration> + <doCheck>false</doCheck> + <doUpdate>false</doUpdate> + </configuration> + </plugin> + <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.5.1</version> @@ -26,6 +47,20 @@ <target>1.5</target> </configuration> </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + <configuration> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + <manifestEntries> + <SCM-Revision>${buildNumber}</SCM-Revision> + </manifestEntries> + </archive> + </configuration> + </plugin> </plugins> </build> <dependencies>
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/APP.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/APP.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifactdatabase.App;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,16 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.artifactdatabase.ProxyArtifact; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.Artifact; import de.intevation.artifacts.ArtifactDatabase; @@ -10,6 +18,7 @@ import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; import de.intevation.gnv.artifacts.context.GNVArtifactContext; @@ -191,7 +200,9 @@ } // step backward - else if((next = getPreviousState(current, targetState)) != null) { + else if((next = getPreviousState(current, targetState, context)) + != null) + { if (current != null) { current.endOfLife(context.globalContext()); @@ -215,7 +226,12 @@ GNVProductArtifactFactory fac = (GNVProductArtifactFactory) db.getInternalArtifactFactory(fis); - Artifact select = fac.createArtifact(identifier, context, null); + Artifact select = fac.createArtifact( + identifier, + (GlobalContext) context.globalContext(), + context.getMeta(), + null); + context.putContextValue(ProxyArtifact.REPLACE_PROXY, select); result = createReport( @@ -255,10 +271,6 @@ next.setParent(current); next.setPreSettings(this.preSettings); - if (current != null) { - current.endOfLife(context.globalContext()); - } - // 3. Switch to next State current = next; @@ -296,7 +308,9 @@ /** * Step back to the previous state specified by <code>name</code>. */ - protected State getPreviousState(State current, String name) { + protected State getPreviousState( + State current, String name, CallContext context) + { if (current == null) { return null; } @@ -305,7 +319,8 @@ return current; } else { - return getPreviousState(current.getParent(), name); + current.endOfLife(context); + return getPreviousState(current.getParent(), name, context); } } @@ -477,10 +492,15 @@ * contains necessary information for this artifact. */ @Override - public void setup(String identifier, ArtifactFactory factory, - Object context,Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("GNVArtifactBase.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); Object localContext = context; if (context instanceof CallContext) {
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVArtifactFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifactdatabase.DefaultArtifactFactory;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVDefaultArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVDefaultArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,7 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifactdatabase.DefaultArtifact; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/GNVProductArtifactFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,17 +1,12 @@ -package de.intevation.gnv.artifacts; - -import de.intevation.artifactdatabase.DefaultArtifactFactory; -import de.intevation.artifactdatabase.ProxyArtifact; -import de.intevation.artifactdatabase.XMLUtils; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.artifacts.Artifact; -import de.intevation.artifacts.ArtifactFactory; - -import de.intevation.gnv.artifacts.fis.SelectProductArtifact; - -import de.intevation.gnv.artifacts.fis.product.DefaultProduct; - -import de.intevation.gnv.state.DefaultInputData; +package de.intevation.gnv.artifacts; import java.util.ArrayList; import java.util.Collection; @@ -21,11 +16,21 @@ import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; - import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import de.intevation.artifactdatabase.DefaultArtifactFactory; +import de.intevation.artifactdatabase.ProxyArtifact; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; +import de.intevation.gnv.artifacts.fis.SelectProductArtifact; +import de.intevation.gnv.artifacts.fis.product.DefaultProduct; +import de.intevation.gnv.state.DefaultInputData; + /** * This factory is called to create a {@link * de.intevation.gnv.artifacts.fis.SelectProductArtifact} which lets the user @@ -70,16 +75,20 @@ * @return The created artifact. */ @Override - public Artifact createArtifact(String identifier, Object context, Document data) { - + public Artifact createArtifact( + String identifier, + GlobalContext context, + CallMeta meta, + Document data + ) { // create a SelectProductArtifact for initial product selection - Artifact artifact = super.createArtifact(identifier, context, data); + Artifact artifact = super.createArtifact(identifier, context, meta, data); if (artifact instanceof ProxyArtifact) { SelectProductArtifact select = new SelectProductArtifact(); select.setProducts(products); - select.setup(identifier, this, context, data); + select.setup(identifier, this, context, meta, data); ((ProxyArtifact) artifact).setProxied(select); } @@ -134,7 +143,7 @@ Node factoryNode = (Node) XMLUtils.xpath( product, XPATH_PRODUCT_FACTORY, XPathConstants.NODE); - String factoryClass = factoryNode.getTextContent(); + String factoryClass = factoryNode.getTextContent().trim(); if (factoryClass == null || factoryClass.equals("")) { logger.warn("No artifact factory class found for " + name);
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/PreSettingArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/PreSettingArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.gnv.state.InputData;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/cache/CacheFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/cache/CacheFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,22 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.cache; +import java.lang.management.ManagementFactory; + +import javax.management.MBeanServer; + import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; +import net.sf.ehcache.management.ManagementService; + import org.apache.log4j.Logger; import de.intevation.gnv.geobackend.base.query.cache.CacheCleaner; @@ -75,6 +89,11 @@ if (cacheManager == null) { cacheManager = new CacheManager(configurationFileName); cacheManager.addCache(CACHENAME); + + MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer(); + ManagementService.registerMBeans( + cacheManager, beanServer, false, false, false, true); + this.cacheCleaner = new ThematicDataCacheCleaner(); this.cacheCleaner.start(); }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContext.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContext.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.context; import de.intevation.artifactdatabase.DefaultArtifactContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/context/GNVArtifactContextFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,19 +1,26 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.context; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactContextFactory; +import de.intevation.artifacts.GlobalContext; import de.intevation.gnv.artifacts.cache.CacheFactory; import de.intevation.gnv.chart.XMLChartTheme; -import de.intevation.gnv.geobackend.base.connectionpool.ConnectionPoolFactory; +import de.intevation.gnv.geobackend.base.query.container.exception.QueryContainerException; -import de.intevation.gnv.geobackend.base.query.container.QueryContainerFactory; - -import de.intevation.gnv.geobackend.base.query.container.exception.QueryContainerException; +import de.intevation.gnv.geobackend.config.Configuration; import de.intevation.gnv.raster.Filter; import de.intevation.gnv.raster.Palette; @@ -59,7 +66,7 @@ * */ public static final String XPATH_GEOBACKEND_CONFIGURATION = - "artifact-database/geo-backend/backend-configuration"; + "artifact-database/geo-backend"; /** * @@ -167,29 +174,12 @@ * @return GNVArtifactContext * @see de.intevation.artifacts.ArtifactContextFactory#createArtifactContext(org.w3c.dom.Document) */ - public Object createArtifactContext(Document config) { + public GlobalContext createArtifactContext(Document config) { GNVArtifactContext returnValue = null; try { log.debug("GNVArtifactContextFactory.createArtifactContext"); - log.info("Initialisation of the Geo-BackendConnectionPool"); - String backendConfigurationFile = Config.getStringXPath(config, - XPATH_GEOBACKEND_CONFIGURATION); - backendConfigurationFile = Config.replaceConfigDir( - backendConfigurationFile); - Properties properties = getProperties(backendConfigurationFile); - ConnectionPoolFactory cpf = ConnectionPoolFactory.getInstance(); - cpf.initializeConnectionPool(properties); - - log.info("Initialisation of the QueryContainer"); - String queryConfigurationFile = Config.getStringXPath(config, - XPATH_GEOBACKEND_QUERYCONFIGURATION); - queryConfigurationFile = Config.replaceConfigDir( - queryConfigurationFile); - - Properties queryProperties = getProperties(queryConfigurationFile); - QueryContainerFactory qcf = QueryContainerFactory.getInstance(); - qcf.initializeQueryContainer(queryProperties); + configureGeoBackend(config); configureCache(config); @@ -217,6 +207,14 @@ return returnValue; } + protected void configureGeoBackend(Document config) + throws FileNotFoundException, IOException, QueryContainerException + { + Configuration geoConf = Configuration.getInstance(); + String configDir = Config.getConfigDirectory().getAbsolutePath(); + geoConf.init(config, configDir, Config.CONFIG_DIR_PLACEHOLDER); + } + /** * * @param config
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/SelectProductArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,29 +1,15 @@ -package de.intevation.gnv.artifacts.fis; - -import de.intevation.artifactdatabase.ProxyArtifact; -import de.intevation.artifactdatabase.XMLUtils; - -import de.intevation.artifacts.Artifact; -import de.intevation.artifacts.ArtifactFactory; -import de.intevation.artifacts.ArtifactNamespaceContext; -import de.intevation.artifacts.CallContext; -import de.intevation.artifacts.CallMeta; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifacts.GNVArtifactBase; -import de.intevation.gnv.artifacts.GNVDefaultArtifact; -import de.intevation.gnv.artifacts.GNVProductArtifactFactory; -import de.intevation.gnv.artifacts.PreSettingArtifact; - -import de.intevation.gnv.artifacts.fis.product.Product; - -import de.intevation.gnv.artifacts.ressource.RessourceFactory; - -import de.intevation.gnv.state.DefaultInputData; -import de.intevation.gnv.state.InputData; +package de.intevation.gnv.artifacts.fis; import java.io.IOException; import java.io.OutputStream; - import java.util.Collection; import java.util.HashMap; import java.util.Iterator; @@ -32,12 +18,28 @@ import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; - import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import de.intevation.artifactdatabase.ProxyArtifact; +import de.intevation.artifacts.common.utils.XMLUtils; +import de.intevation.artifacts.Artifact; +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.ArtifactNamespaceContext; +import de.intevation.artifacts.CallContext; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; +import de.intevation.gnv.artifacts.GNVArtifactBase; +import de.intevation.gnv.artifacts.GNVDefaultArtifact; +import de.intevation.gnv.artifacts.GNVProductArtifactFactory; +import de.intevation.gnv.artifacts.PreSettingArtifact; +import de.intevation.gnv.artifacts.fis.product.Product; +import de.intevation.gnv.artifacts.ressource.RessourceFactory; +import de.intevation.gnv.state.DefaultInputData; +import de.intevation.gnv.state.InputData; + /** * This artifact is used to handle to input/output at the beginning of a * parameterization when no product has been selected so far. After the user @@ -114,9 +116,11 @@ String identifier, ArtifactFactory factory, Object context, - Document data) { + CallMeta meta, + Document data + ) { log.debug("SelectProductArtifact.setup()"); - super.setup(identifier, factory, context,data); + super.setup(identifier, factory, context, meta, data); this.name = factory.getName(); // Read the Parameters that should be used for the setup from the @@ -265,7 +269,11 @@ .getInternalArtifactFactory(this.name); factory = ((GNVProductArtifactFactory)factory) .getArtifactFactoryByName(current.getName()); - artifact = factory.createArtifact(uuid, context, null); + artifact = factory.createArtifact( + uuid, + (GlobalContext) context.globalContext(), + context.getMeta(), + null); if (this.preSettings != null && artifact instanceof PreSettingArtifact){ @@ -386,22 +394,24 @@ Node parent, Object context ) { - Iterator iter = products.values().iterator(); - - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX - ); + if (products != null && !products.isEmpty()){ + Iterator iter = products.values().iterator(); - while(iter.hasNext()) { - Product prod = (Product) iter.next(); - String name = prod.getName(); + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX + ); - Element current = creator.create("state"); - creator.addAttr(current, "name", name); - creator.addAttr(current, "description", name); - parent.appendChild(current); + while(iter.hasNext()) { + Product prod = (Product) iter.next(); + String name = prod.getName(); + + Element current = creator.create("state"); + creator.addAttr(current, "name", name); + creator.addAttr(current, "description", name); + parent.appendChild(current); + } } } @@ -441,23 +451,24 @@ Element choiceNode = creator.create("choices"); selectNode.appendChild(lableNode); selectNode.appendChild(choiceNode); + if (products != null && !products.isEmpty()){ + Iterator it = products.values().iterator(); + while (it.hasNext()) { + Product p = (Product) it.next(); + Element itemNode = creator.create("item"); + Element choiceLableNode = creator.create("label"); + choiceLableNode.setTextContent(ressource.getRessource( + callMeta.getLanguages(), + p.getName(), + p.getName() + )); + itemNode.appendChild(choiceLableNode); - Iterator it = products.values().iterator(); - while (it.hasNext()) { - Product p = (Product) it.next(); - Element itemNode = creator.create("item"); - Element choiceLableNode = creator.create("label"); - choiceLableNode.setTextContent(ressource.getRessource( - callMeta.getLanguages(), - p.getName(), - p.getName() - )); - itemNode.appendChild(choiceLableNode); - - Element choiceValueNode = creator.create("value"); - choiceValueNode.setTextContent(p.getName()); - itemNode.appendChild(choiceValueNode); - choiceNode.appendChild(itemNode); + Element choiceValueNode = creator.create("value"); + choiceValueNode.setTextContent(p.getName()); + itemNode.appendChild(choiceValueNode); + choiceNode.appendChild(itemNode); + } } node.appendChild(selectNode);
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/product/DefaultProduct.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/product/DefaultProduct.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.fis.product; import de.intevation.gnv.state.InputData;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/product/Product.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/fis/product/Product.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.fis.product; import de.intevation.gnv.state.InputData;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/ressource/RessourceFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/ressource/RessourceFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.ressource; import de.intevation.artifacts.PreferredLocale;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataService.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services; import java.util.ArrayList; @@ -17,9 +25,10 @@ import com.vividsolutions.jts.io.WKTReader; import de.intevation.artifactdatabase.DefaultService; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.GlobalContext; import de.intevation.artifacts.ServiceFactory; import de.intevation.gnv.artifacts.services.requestobjects.DefaultFIS; import de.intevation.gnv.artifacts.services.requestobjects.DefaultLayer; @@ -92,8 +101,11 @@ } @Override - public Document process(Document data, Object globalContext, - CallMeta callMeta) { + public Document process( + Document data, + GlobalContext globalContext, + CallMeta callMeta + ) { log.debug("MetaDataService.process"); Document document = null; try { @@ -441,7 +453,7 @@ } @Override - public void setup(ServiceFactory factory, Object globalContext) { + public void setup(ServiceFactory factory, GlobalContext globalContext) { log.debug("MetaDataService.setup"); super.setup(factory, globalContext); // TODO: Perhaps it is necessary to init the QueryIds here.
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataServiceException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/MetaDataServiceException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultFIS.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultFIS.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultLayer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultLayer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultMapService.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultMapService.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultParameter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/DefaultParameter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/FIS.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/FIS.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/Layer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/Layer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/MapService.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/MapService.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/Parameter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/artifacts/services/requestobjects/Parameter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.services.requestobjects; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractHistogram.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractHistogram.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import java.util.Locale; @@ -8,6 +16,9 @@ import org.jfree.chart.ChartTheme; import org.jfree.chart.JFreeChart; +import org.jfree.chart.axis.NumberAxis; +import org.jfree.chart.axis.TickUnitSource; + import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; @@ -91,6 +102,8 @@ theme.apply(chart); adjustPlot(); + adjustDomainAxis(chart); + adjustRangeAxis(chart); return chart; } @@ -108,6 +121,26 @@ } + protected void adjustDomainAxis(JFreeChart chart) { + XYPlot plot = (XYPlot) chart.getPlot(); + NumberAxis domainAxis = (NumberAxis) plot.getDomainAxis(); + + TickUnitSource tus = domainAxis.createStandardTickUnits(locale); + domainAxis.setStandardTickUnits(tus); + } + + + protected void adjustRangeAxis(JFreeChart chart) { + XYPlot plot = (XYPlot) chart.getPlot(); + NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); + + TickUnitSource tus = rangeAxis.createStandardTickUnits(locale); + rangeAxis.setStandardTickUnits(tus); + } + + + + /** * This method needs to be implemented by subclasses and should add valid * <code>HistogramDataset</code> objects to the created chart. It is called
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AbstractXYLineChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import de.intevation.gnv.geobackend.base.Result; @@ -207,7 +215,18 @@ // litte workarround to adjust the max range of axes. // NumberAxis.setAutoRange(true) doesn't seem to work properly. Range yRange = (Range) ranges.get(seriesKey); - yAxis.setRange(Range.expand(yRange, LOWER_MARGIN, UPPER_MARGIN)); + double lo = yRange.getLowerBound(); + double hi = yRange.getUpperBound(); + + if (lo == hi) { + yRange = new Range( + lo - (lo / 100 * LOWER_MARGIN), + hi + (hi / 100 * UPPER_MARGIN)); + } + else { + yRange = Range.expand(yRange, LOWER_MARGIN, UPPER_MARGIN); + } + yAxis.setRange(yRange); log.debug("Max Range of dataset is: " + yRange.toString()); if (seriesKey.contains("richtung")) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/AdvancedHistogramDataset.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,516 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.chart; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.log4j.Logger; + +import org.jfree.data.general.DatasetChangeEvent; +import org.jfree.data.xy.AbstractIntervalXYDataset; +import org.jfree.data.xy.IntervalXYDataset; + +import org.jfree.data.statistics.HistogramType; +import org.jfree.data.statistics.HistogramBin; + +import org.jfree.util.ObjectUtilities; +import org.jfree.util.PublicCloneable; + +/** + * This class extends the functionality of the internal JFreeChart class + * <code>HistogramDataset</code>. <code>AdvancedHistogramDataset</code> takes + * the number of bins OR a bin width. It is mainly a copy of this class. The + * reason why there is no inheritance from JFreeChart's internal class is, + * that basic attributes have private access there. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class AdvancedHistogramDataset +extends AbstractIntervalXYDataset +implements IntervalXYDataset, Cloneable, PublicCloneable, Serializable +{ + /** A list of maps. */ + protected List list; + + /** The histogram type. */ + protected HistogramType type; + + /** The width of a single bin. */ + protected double binWidth = -1; + + /** The number of bins. */ + protected int bins = -1; + + /** The logger */ + private static Logger logger = + Logger.getLogger(AdvancedHistogramDataset.class); + + + /** + * Creates a new (empty) dataset with a default type of + * {@link HistogramType}.FREQUENCY. + */ + public AdvancedHistogramDataset() { + this.list = new ArrayList(); + this.type = HistogramType.FREQUENCY; + } + + /** + * Creates a new (empty) dataset with a default type of + * {@link HistogramType}.FREQUENCY. + */ + public AdvancedHistogramDataset(int bins, double binWidth) { + this.list = new ArrayList(); + this.type = HistogramType.FREQUENCY; + this.bins = bins; + this.binWidth = binWidth; + } + + /** + * Returns the histogram type. + * + * @return The type (never <code>null</code>). + */ + public HistogramType getType() { + return this.type; + } + + /** + * Sets the histogram type and sends a {@link DatasetChangeEvent} to all + * registered listeners. + * + * @param type the type (<code>null</code> not permitted). + */ + public void setType(HistogramType type) { + if (type == null) { + throw new IllegalArgumentException("Null 'type' argument"); + } + this.type = type; + notifyListeners(new DatasetChangeEvent(this, this)); + } + + /** + * Adds a series to the dataset, using the specified number of bins. + * + * @param key the series key (<code>null</code> not permitted). + * @param values the values (<code>null</code> not permitted). + */ + public void addSeries(Comparable key, double[] values) { + double minimum = getMinimum(values); + double maximum = getMaximum(values); + addSeries(key, values, minimum, maximum); + } + + /** + * Adds a series to the dataset. Any data value less than minimum will be + * assigned to the first bin, and any data value greater than maximum will + * be assigned to the last bin. Values falling on the boundary of + * adjacent bins will be assigned to the higher indexed bin. + * + * @param key the series key (<code>null</code> not permitted). + * @param values the raw observations. + * @param bins the number of bins (must be at least 1). + * @param minimum the lower bound of the bin range. + * @param maximum the upper bound of the bin range. + */ + public void addSeries(Comparable key, + double[] values, + double minimum, + double maximum) { + + if (key == null) { + throw new IllegalArgumentException("Null 'key' argument."); + } + if (values == null) { + throw new IllegalArgumentException("Null 'values' argument."); + } + if (bins <= 0 && binWidth <= 0) { + throw new IllegalArgumentException( + "We need at least a bin width or the number of bins."); + } + + // There is a binWidth given to calculate the number of bins in this + // case + if (bins <= 0) { + double tmp = (maximum - minimum) / binWidth; + bins = (int) tmp; + bins = tmp % 1 > 0 ? bins + 1 : bins; + + double overlap = minimum + bins * binWidth - maximum; + tmp = minimum; + minimum -= overlap / 2; + + logger.debug("There is an overlap of " + overlap); + logger.info("The lower bound is moved left from " + + tmp + " to " + minimum); + + tmp = maximum; + maximum += overlap / 2; + logger.info("The upper bound is moved right from " + + tmp + " to " + maximum); + } + + if (bins <= 0) { + bins = 1; + } + + // in this case, there is a number of bins given, so we need to + // calculate the width of a single bin + if (binWidth <= 0) + binWidth = (maximum - minimum) / bins; + + logger.info("bin width: " + binWidth); + logger.info("number of bins: " + bins); + + double lower = minimum; + double upper; + List binList = new ArrayList(bins); + for (int i = 0; i < bins; i++) { + HistogramBin bin; + // make sure bins[bins.length]'s upper boundary ends at maximum + // to avoid the rounding issue. the bins[0] lower boundary is + // guaranteed start from min + if (i == bins - 1) { + bin = new HistogramBin(lower, maximum); + } + else { + upper = minimum + (i + 1) * binWidth; + bin = new HistogramBin(lower, upper); + lower = upper; + } + binList.add(bin); + } + // fill the bins + for (int i = 0; i < values.length; i++) { + int binIndex = bins - 1; + if (values[i] < maximum) { + double fraction = (values[i] - minimum) / (maximum - minimum); + if (fraction < 0.0) { + fraction = 0.0; + } + binIndex = (int) (fraction * bins); + // rounding could result in binIndex being equal to bins + // which will cause an IndexOutOfBoundsException - see bug + // report 1553088 + if (binIndex >= bins) { + binIndex = bins - 1; + } + } + HistogramBin bin = (HistogramBin) binList.get(binIndex); + bin.incrementCount(); + } + // generic map for each series + Map map = new HashMap(); + map.put("key", key); + map.put("bins", binList); + map.put("values.length", new Integer(values.length)); + map.put("bin width", new Double(binWidth)); + this.list.add(map); + } + + /** + * Returns the minimum value in an array of values. + * + * @param values the values (<code>null</code> not permitted and + * zero-length array not permitted). + * + * @return The minimum value. + */ + private double getMinimum(double[] values) { + if (values == null || values.length < 1) { + throw new IllegalArgumentException( + "Null or zero length 'values' argument."); + } + double min = Double.MAX_VALUE; + for (int i = 0; i < values.length; i++) { + if (values[i] < min) { + min = values[i]; + } + } + return min; + } + + /** + * Returns the maximum value in an array of values. + * + * @param values the values (<code>null</code> not permitted and + * zero-length array not permitted). + * + * @return The maximum value. + */ + private double getMaximum(double[] values) { + if (values == null || values.length < 1) { + throw new IllegalArgumentException( + "Null or zero length 'values' argument."); + } + double max = -Double.MAX_VALUE; + for (int i = 0; i < values.length; i++) { + if (values[i] > max) { + max = values[i]; + } + } + return max; + } + + /** + * Returns the bins for a series. + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * + * @return A list of bins. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + List getBins(int series) { + Map map = (Map) this.list.get(series); + return (List) map.get("bins"); + } + + /** + * Returns the total number of observations for a series. + * + * @param series the series index. + * + * @return The total. + */ + private int getTotal(int series) { + Map map = (Map) this.list.get(series); + return ((Integer) map.get("values.length")).intValue(); + } + + /** + * Returns the bin width for a series. + * + * @param series the series index (zero based). + * + * @return The bin width. + */ + private double getBinWidth(int series) { + if (binWidth > 0) + return binWidth; + + Map map = (Map) this.list.get(series); + return ((Double) map.get("bin width")).doubleValue(); + } + + /** + * Returns the number of series in the dataset. + * + * @return The series count. + */ + public int getSeriesCount() { + return this.list.size(); + } + + /** + * Returns the key for a series. + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * + * @return The series key. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Comparable getSeriesKey(int series) { + Map map = (Map) this.list.get(series); + return (Comparable) map.get("key"); + } + + /** + * Returns the number of data items for a series. + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * + * @return The item count. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public int getItemCount(int series) { + return getBins(series).size(); + } + + /** + * Returns the X value for a bin. This value won't be used for plotting + * histograms, since the renderer will ignore it. But other renderers can + * use it (for example, you could use the dataset to create a line + * chart). + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * @param item the item index (zero based). + * + * @return The start value. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Number getX(int series, int item) { + List bins = getBins(series); + HistogramBin bin = (HistogramBin) bins.get(item); + double x = (bin.getStartBoundary() + bin.getEndBoundary()) / 2.; + return new Double(x); + } + + /** + * Returns the y-value for a bin (calculated to take into account the + * histogram type). + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * @param item the item index (zero based). + * + * @return The y-value. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Number getY(int series, int item) { + List bins = getBins(series); + HistogramBin bin = (HistogramBin) bins.get(item); + double total = getTotal(series); + double binWidth = getBinWidth(series); + + if (this.type == HistogramType.FREQUENCY) { + return new Double(bin.getCount()); + } + else if (this.type == HistogramType.RELATIVE_FREQUENCY) { + return new Double(bin.getCount() / total); + } + else if (this.type == HistogramType.SCALE_AREA_TO_1) { + return new Double(bin.getCount() / (binWidth * total)); + } + else { // pretty sure this shouldn't ever happen + throw new IllegalStateException(); + } + } + + /** + * Returns the start value for a bin. + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * @param item the item index (zero based). + * + * @return The start value. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Number getStartX(int series, int item) { + List bins = getBins(series); + HistogramBin bin = (HistogramBin) bins.get(item); + return new Double(bin.getStartBoundary()); + } + + /** + * Returns the end value for a bin. + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * @param item the item index (zero based). + * + * @return The end value. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Number getEndX(int series, int item) { + List bins = getBins(series); + HistogramBin bin = (HistogramBin) bins.get(item); + return new Double(bin.getEndBoundary()); + } + + /** + * Returns the start y-value for a bin (which is the same as the y-value, + * this method exists only to support the general form of the + * {@link IntervalXYDataset} interface). + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * @param item the item index (zero based). + * + * @return The y-value. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Number getStartY(int series, int item) { + return getY(series, item); + } + + /** + * Returns the end y-value for a bin (which is the same as the y-value, + * this method exists only to support the general form of the + * {@link IntervalXYDataset} interface). + * + * @param series the series index (in the range <code>0</code> to + * <code>getSeriesCount() - 1</code>). + * @param item the item index (zero based). + * + * @return The Y value. + * + * @throws IndexOutOfBoundsException if <code>series</code> is outside the + * specified range. + */ + public Number getEndY(int series, int item) { + return getY(series, item); + } + + /** + * Tests this dataset for equality with an arbitrary object. + * + * @param obj the object to test against (<code>null</code> permitted). + * + * @return A boolean. + */ + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof AdvancedHistogramDataset)) { + return false; + } + AdvancedHistogramDataset that = (AdvancedHistogramDataset) obj; + if (!ObjectUtilities.equal(this.type, that.type)) { + return false; + } + if (!ObjectUtilities.equal(this.list, that.list)) { + return false; + } + return true; + } + + /** + * Returns a clone of the dataset. + * + * @return A clone of the dataset. + * + * @throws CloneNotSupportedException if the object cannot be cloned. + */ + public Object clone() throws CloneNotSupportedException { + AdvancedHistogramDataset clone = (AdvancedHistogramDataset) super.clone(); + int seriesCount = getSeriesCount(); + clone.list = new java.util.ArrayList(seriesCount); + for (int i = 0; i < seriesCount; i++) { + clone.list.add(new HashMap((Map) this.list.get(i))); + } + return clone; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/Chart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/Chart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/ChartLabels.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/ChartLabels.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /* Copyright (C) 2007 con terra GmbH (http://www.conterra.de) * All rights reserved *
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/DefaultHistogram.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/DefaultHistogram.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,7 +1,12 @@ -package de.intevation.gnv.chart; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import java.text.NumberFormat; -import java.text.ParseException; +package de.intevation.gnv.chart; import java.util.Locale; import java.util.Map; @@ -12,8 +17,6 @@ import org.jfree.chart.plot.XYPlot; -import org.jfree.data.statistics.HistogramDataset; - /** * Default implementation of {@link de.intevation.gnv.chart.AbstractHistogram}. * @@ -51,12 +54,6 @@ public static final String REQUEST_KEY_CHART_WIDTH = "width"; /** - * Default key to retrieve the <code>Locale</code> object from {@link - * #requestParameter} used for i18n support. - */ - public static final String REQUEST_KEY_LOCALE = "locale"; - - /** * Default key to retrieve the object from {@link #requestParameter}. It * defines which value this chart has to be used for bin calculation. You * can either adjust the number of bins or the width of a single bin. @@ -73,6 +70,8 @@ */ protected Map requestParameter; + protected double[] minmax = null; + /** * Constructor to create DefaultHistogram objects. @@ -87,6 +86,7 @@ ) { super(labels, data, theme); this.requestParameter = requestParameter; + this.locale = (Locale) requestParameter.get("locale"); } @@ -97,10 +97,13 @@ // prepare data and create add them to histogram dataset String name = (String) data[0]; double[] values = toDouble((Double[]) data[1]); - int bins = getBinCount(values); - HistogramDataset dataset = new HistogramDataset(); - dataset.addSeries(name, values, bins); + double binWidth = getBinWidth(values); + int binCount = getBinCount(); + + AdvancedHistogramDataset dataset = + new AdvancedHistogramDataset(binCount, binWidth); + dataset.addSeries(name, values); plot.setDataset(0, dataset); } @@ -116,6 +119,9 @@ * @return Array which contains min and max value */ protected double[] getMinMax(double[] values) { + if (minmax != null) + return minmax; + double[] minmax = new double[2]; minmax[0] = Double.MAX_VALUE; minmax[1] = Double.MIN_VALUE; @@ -126,6 +132,8 @@ minmax[1] = values[i] > minmax[1] ? values[i] : minmax[1]; } + this.minmax = minmax; + return minmax; } @@ -150,38 +158,21 @@ /** - * Method to calculate the number of bins this chart should be parted into. - * The real calculation takes place in {@link #getBinCountByNumber} and - * {@link #getBinCountByWidth}. This method switches between these methods - * depending on the object stored in {@link #requestParameter}. - * - * @param values All values used in this histogram + * Method to retrieve the number of bins. * - * @return Number of bins + * @return the number of bins that is specified in <i>requestParameter</i> + * or -1 if the number of bins is not the dominant value to calculate the + * width of a single bin. */ - protected int getBinCount(double[] values) { - String param = (String) requestParameter.get(REQUEST_KEY_BIN_CHOICE); - - if (param != null && param.equalsIgnoreCase(REQUEST_KEY_BIN_WIDTH)) { - return getBinCountByWidth(values); + protected int getBinCount() { + // Return -1 to trigger a calculation of the number of bins in + // AdvancedHistogramDataset if the user chose the bin width as dominant + // value. + String choice = (String) requestParameter.get(REQUEST_KEY_BIN_CHOICE); + if (choice != null && choice.equalsIgnoreCase(REQUEST_KEY_BIN_WIDTH)) { + return -1; } - else { - return getBinCountByNumber(); - } - } - - /** - * Method to retrieve the number of bins. If {@link #requestParameter} - * contains a valid <code>Integer</code> at - * <code>REQUEST_KEY_BIN_COUNT</code> and this is smaller than or equal - * {@link #MAXIMAL_BINS}, this value is used. If no valid - * <code>Integer</code> is given or if the value in {@link #requestParameter} - * is bigger than {@link #MAXIMAL_BINS}, {@link #DEFAULT_BINS} is used. - * - * @return Number of bins - */ - protected int getBinCountByNumber() { int bins = -1; String param = (String) requestParameter.get(REQUEST_KEY_BIN_COUNT); @@ -202,61 +193,42 @@ /** - * Serves the number of bins depending on a given width for each bin, but - * maximum bin count is limited by {@link #MAXIMAL_BINS}. + * Serves width of a single bin. * * @param values All values in this histogram * - * @return Number of bins + * @return The bin width that is given in <i>requestParameter</i> or -1 if + * the bin width is not the dominant value for calculating the number of + * bins in the histogram. */ - protected int getBinCountByWidth(double[] values) { - int bins = -1; - String param = (String) requestParameter.get(REQUEST_KEY_BIN_WIDTH); - Locale locale = (Locale) requestParameter.get(REQUEST_KEY_LOCALE); - NumberFormat format = NumberFormat.getInstance(locale); - - try { - double[] minmax = getMinMax(values); - double totalWidth = minmax[1] - minmax[0]; - Number number = format.parse(param); - double binWidth = -1d; + protected double getBinWidth(double[] values) { + // Return -1 to trigger a calculation of the bin width in + // AdvancedHistogramDataset if the user chose the number of bins as + // dominant value. + String choice = (String) requestParameter.get(REQUEST_KEY_BIN_CHOICE); + if (choice == null || !choice.equalsIgnoreCase(REQUEST_KEY_BIN_WIDTH)) { + return -1; + } - if (number instanceof Double) { - binWidth = ((Double) number).doubleValue(); - } - else if (number instanceof Long) { - binWidth = ((Long) number).doubleValue(); - } - else if (number instanceof Integer) { - binWidth = ((Integer) number).doubleValue(); - } - else { - logger.warn("Invalid bin width for histogram chart: " + param); - logger.warn("Return default bins: " + DEFAULT_BINS); - - return DEFAULT_BINS; - } - - double tmpBins = totalWidth / binWidth; + int bins = -1; + String param = (String) requestParameter.get(REQUEST_KEY_BIN_WIDTH); - bins = (int) Math.round(tmpBins); - bins = bins <= 0 ? DEFAULT_BINS : bins; - bins = bins > MAXIMAL_BINS ? MAXIMAL_BINS : bins; + double[] minmax = getMinMax(values); + double totalWidth = minmax[1] - minmax[0]; + double binWidth = Double.parseDouble(param); - return bins; + double tmpBins = totalWidth / binWidth; + + bins = (int) Math.round(tmpBins); + bins = bins <= 0 ? DEFAULT_BINS : bins; + + // the calculated number of bins with the given width exceed the maximum + // number of bins. + if (bins > MAXIMAL_BINS) { + return totalWidth / (MAXIMAL_BINS); } - catch (ParseException pe) { - logger.warn("Invalid bin width for histogram chart: " + param); - logger.warn("Return default bins: " + DEFAULT_BINS); - return DEFAULT_BINS; - } - catch (NumberFormatException nfe) { - logger.warn("Invalid bin width for histogram chart: " + param); - logger.warn("Return default bins: " + DEFAULT_BINS); - - return DEFAULT_BINS; - } + return binWidth; } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalCrossProfileChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalCrossProfileChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import de.intevation.gnv.geobackend.base.Result;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import com.vividsolutions.jts.geom.Point; @@ -53,7 +61,9 @@ * The first point in a HorizontalProfileChart. It is used to calculate the * distance between the currently processed point an the start. */ - private Point firstPoint; + protected Point lastPoint; + + protected double distance = 0d; /** * Constructor used to create horizontal profile charts. @@ -147,23 +157,20 @@ @Override protected void addValue(Result row, Series series) { - double distance = 0; - try { Point point = (Point) wktReader.read(row.getString("SHAPE")); - if (firstPoint != null) { - distance = DistanceCalculator.calculateDistance( - firstPoint, point + if (lastPoint != null) { + distance += DistanceCalculator.calculateDistance( + lastPoint, point ); } - else { - firstPoint = point; - } ((XYSeries) series).add( distance, row.getDouble("YORDINATE") ); + + lastPoint = point; } catch(ParseException pe) { log.warn("No data found while parsing."); @@ -175,8 +182,9 @@ protected void addSeries(Series series, String label, int idx) { super.addSeries(series, label, idx); - // reset firstPoint for next series - firstPoint = null; + // reset lastPoint and distance of the last series + lastPoint = null; + distance = 0; } @@ -280,26 +288,19 @@ Point lastPoint = null; Point currentPoint = null; - try { - firstPoint = getPoint(results[0]); - } - catch (ParseException pe) { - log.error("Unable to parse start point for gap detection."); - return; - } - + double distance = 0; + double distanceOld = 0; for (int i = startPos+1; i < endPos; i++) { try { last = results[i-1].getInteger(axis); lastPoint = getPoint(results[i-1]); current = results[i].getInteger(axis); currentPoint = getPoint(results[i]); - double distance = DistanceCalculator.calculateDistance( - firstPoint, + + distanceOld = distance; + distance += DistanceCalculator.calculateDistance( + lastPoint, currentPoint); - double distanceOld = DistanceCalculator.calculateDistance( - firstPoint, - lastPoint); boolean detected = gridDetection(last, current);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/HorizontalProfileVectorChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.chart; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Locale; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; + +import org.jfree.chart.plot.XYPlot; + +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; + +/** + * This class is used to create xy charts of vertical profiles. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class HorizontalProfileVectorChart +extends HorizontalProfileChart +{ + private static Logger logger = + Logger.getLogger(HorizontalProfileVectorChart.class); + + + public HorizontalProfileVectorChart( + ChartLabels labels, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection dates, + Collection result, + Collection timeGaps, + Locale locale, + boolean linesVisible, + boolean shapesVisible + ) { + super(labels, theme, parameters, measurements, dates, result, + timeGaps, locale, linesVisible, shapesVisible); + } + + + @Override + protected void initData() { + Iterator iter = resultSet.iterator(); + Result row = null; + String seriesName = null; + XYSeries series = null; + + int idx = 0; + int startPos = 0; + int endPos = 0; + + double startValue = 0; + double endValue = 0; + + ResultDescriptor rd = null; + int idxSeries = -1; + int idxX = -1; + int idxY = -1; + + Result[] results = + (Result[]) resultSet.toArray(new Result[resultSet.size()]); + + while (iter.hasNext()) { + row = (Result) iter.next(); + + if (rd == null) { + rd = row.getResultDescriptor(); + idxSeries = rd.getColumnIndex("SERIES"); + idxX = rd.getColumnIndex("XORDINATE"); + idxY = rd.getColumnIndex("YORDINATE"); + } + + if (!row.getString(idxSeries).equals(seriesName)) { + logger.debug("prepare data/plot for next dataset."); + + if (series != null) { + gapDetection(results, series, startPos, endPos); + addSeries(series, seriesName, idx); + + startPos = endPos + 1; + } + + seriesName = row.getString(idxSeries); + + logger.debug("next data is '" + seriesName + "'"); + series = new XYSeries(seriesName); + } + + addValue(row, series); + Object x = getValue(row); + Double y = row.getDouble(idxY); + if (x != null && y != null) { + storeMaxRange(ranges, y, seriesName); + storeMaxValue(values, x, seriesName); + } + + endPos++; + } + + if (results.length == 0) + return; + + gapDetection(results, series, startPos, endPos); + addSeries(series, seriesName, idx); + + addDatasets(); + } + + + @Override + protected void addDatasets() { + XYPlot plot = chart.getXYPlot(); + int idx = 0; + + XYSeriesCollection sc = null; + Iterator iter = datasets.keySet().iterator(); + + while (iter.hasNext()) { + String key = (String) iter.next(); + sc = (XYSeriesCollection)datasets.get(key); + plot.setDataset(idx, sc ); + logger.debug("Added " + key + " parameter to plot."); + prepareAxis(key, idx); + adjustRenderer( + idx++, + sc.getSeriesCount(), + linesVisible, + shapesVisible + ); + } + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import de.intevation.gnv.artifacts.ressource.RessourceFactory;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/TimeSeriesVectorChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.chart; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import java.util.Collection; +import java.util.Date; +import java.util.Iterator; +import java.util.Locale; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; +import org.jfree.chart.plot.XYPlot; + +import org.jfree.data.time.Minute; +import org.jfree.data.time.TimeSeries; +import org.jfree.data.time.TimeSeriesCollection; + + +/** + * This class is used to create timeseries charts that contain components of a + * vector parameter. The domain axis contains multiple date/time objects. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class TimeSeriesVectorChart extends TimeSeriesChart { + + private static Logger logger =Logger.getLogger(TimeSeriesVectorChart.class); + + public TimeSeriesVectorChart( + ChartLabels labels, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection dates, + Collection result, + Collection timeGaps, + Locale locale, + boolean linesVisible, + boolean shapesVisible + ) { + super(labels, theme, parameters, measurements, dates, result, + timeGaps, locale, linesVisible, shapesVisible); + } + + + @Override + protected void initData() { + logger.debug("init data for timeseries vector chart"); + + Iterator iter = resultSet.iterator(); + Result row = null; + String seriesName = null; + TimeSeries series = null; + + int idx = 0; + int startPos = 0; + int endPos = 0; + Date startDate = null; + Date endDate = null; + + ResultDescriptor rd = null; + int idxSeries = -1; + int idxX = -1; + int idxY = -1; + + Result[] results = + (Result[]) resultSet.toArray(new Result[resultSet.size()]); + + while (iter.hasNext()) { + row = (Result) iter.next(); + + if (rd == null) { + rd = row.getResultDescriptor(); + idxSeries = rd.getColumnIndex("SERIES"); + idxX = rd.getColumnIndex("XORDINATE"); + idxY = rd.getColumnIndex("YORDINATE"); + } + + // add current data to plot and prepare for next one + if (!row.getString(idxSeries).equals(seriesName)) { + logger.debug("prepare data/plot for next dataset"); + + if(series != null) { + // add gaps before adding series to chart + startDate = results[startPos].getDate(idxX); + endDate = results[endPos-1].getDate(idxX); + addGaps(results,series,startDate,endDate,startPos,endPos); + addSeries(series, seriesName, idx); + + startPos = endPos + 1; + } + + // prepare variables for next plot + seriesName = row.getString(idxSeries); + + logger.debug("next dataset is '" + seriesName + "'"); + series = new TimeSeries(seriesName, Minute.class); + } + + addValue(row, series); + storeMaxRange(ranges, row.getDouble(idxY), seriesName); + endPos++; + } + + if (startPos < results.length && endPos-1 < results.length) { + // add the last dataset if existing to plot and prepare its axis + startDate = results[startPos].getDate(idxX); + endDate = results[endPos-1].getDate(idxX); + addGaps(results, series, startDate, endDate, startPos, endPos); + addSeries(series, seriesName, idx); + } + + addDatasets(); + } + + + @Override + protected void addDatasets() { + XYPlot plot = chart.getXYPlot(); + int idx = 0; + + TimeSeriesCollection tsc = null; + Iterator iter = datasets.keySet().iterator(); + + while (iter.hasNext()) { + String key = (String) iter.next(); + tsc = (TimeSeriesCollection)datasets.get(key); + plot.setDataset(idx, tsc ); + logger.debug("Added " + key + " parameter to plot."); + prepareAxis(key, idx); + adjustRenderer( + idx++, + tsc.getSeriesCount(), + linesVisible, + shapesVisible + ); + } + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalCrossSectionChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalCrossSectionChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import de.intevation.gnv.jfreechart.PolygonDataset;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; import de.intevation.gnv.geobackend.base.Result; @@ -127,6 +135,9 @@ protected void initData() { log.debug("init data for VerticalProfileChart"); + int items = resultSet.size(); + log.debug("Found " + items + " items for this chart."); + String breakPoint1 = null; String breakPoint2 = null; String breakPoint3 = null; @@ -157,7 +168,9 @@ log.debug("prepare data/plot for next dataset"); if(series != null) { - gapDetection(results, series, startPos, endPos); + if (startPos >= 0 && endPos < items) { + gapDetection(results, series, startPos, endPos); + } addSeries(series, parameter, idx); startPos = endPos +1; @@ -189,10 +202,12 @@ endPos++; } - if (results.length == 0) + if (items == 0) return; - gapDetection(results, series, startPos, endPos); + if (startPos >= 0 && endPos < items) { + gapDetection(results, series, startPos, endPos); + } addSeries(series, parameter, idx); addDatasets(); @@ -244,51 +259,59 @@ super.prepareAxis(seriesKey, idx); XYPlot plot = chart.getXYPlot(); - NumberAxis domainAxis = (NumberAxis) plot.getRangeAxis(); - NumberAxis rangeAxis = (NumberAxis) plot.getDomainAxis(); + NumberAxis domainAxis = (NumberAxis) plot.getRangeAxis(idx); Range domainRange = domainAxis.getRange(); - Range rangeRange = rangeAxis.getRange(); log.debug("Domain axis range before: " + domainRange.toString()); - log.debug("Range axis range before: " + rangeRange.toString()); domainRange = Range.expand(domainRange, LOWER_MARGIN, UPPER_MARGIN); - rangeRange = Range.expand(rangeRange, LOWER_MARGIN, UPPER_MARGIN); double lower = domainRange.getLowerBound(); double upper = domainRange.getUpperBound(); if (lower == upper) { - domainRange = new Range( - lower - (lower * 0.05d), - upper + (upper * 0.05d)); + double lo = lower > 0 ? lower - lower*0.05d : lower + lower*0.05d; + double up = upper > 0 ? upper + upper*0.05d : upper - upper*0.05d; + + domainRange = new Range(lo, up); } - log.debug("Domain axis range after: " + domainRange.toString()); - log.debug("Range axis range after: " + rangeRange.toString()); + log.debug("Range axis range after: " + domainRange.toString()); domainAxis.setRange(domainRange); - rangeAxis.setRange(rangeRange); - - plot.setRangeAxis(domainAxis); + plot.setRangeAxis(idx, domainAxis); } /** - * Method to expand max range of a range axis identified by seriesKey. + * Method to expand max range of a range axis. * <code>LOWER_MARGIN</code> and <code>UPPER_MARGIN</code> are used to * expand the range. - * - * @param seriesKey Key to identify the series stored at the current - * Dataset. - * @param idx Currently not used. */ protected void prepareRangeAxis(String seriesKey, int idx) { + log.debug("Adjust domain range now..."); XYPlot plot = chart.getXYPlot(); - NumberAxis xAxis = (NumberAxis) plot.getDomainAxis(); + NumberAxis yAxis = (NumberAxis) plot.getDomainAxis(); - Range xRange = (Range) values.get(seriesKey); - xAxis.setRange(Range.expand(xRange, LOWER_MARGIN, UPPER_MARGIN)); - log.debug("Max X-Range of dataset is: " + xRange.toString()); + Range yRange = yAxis.getRange(); + double lo = yRange.getLowerBound(); + double hi = yRange.getUpperBound(); + + Iterator iter = values.values().iterator(); + while (iter.hasNext()) { + Range tmp = (Range) iter.next(); + log.debug("Series range: " + tmp.toString()); + + lo = lo < tmp.getLowerBound() ? lo : tmp.getLowerBound(); + hi = hi > tmp.getUpperBound() ? hi : tmp.getUpperBound(); + } + + Range merged = Range.expand( + new Range(lo, hi), + LOWER_MARGIN, UPPER_MARGIN); + log.debug("Calculated range for all series = " + merged.toString()); + + yAxis.setRange(merged); + plot.setDomainAxis(yAxis); } @@ -359,6 +382,8 @@ ); } } + + prepareRangeAxis(null, -1); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/VerticalProfileVectorChart.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.chart; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Locale; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; + +import org.jfree.chart.plot.XYPlot; + +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; + +/** + * This class is used to create xy charts of vertical profiles. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class VerticalProfileVectorChart +extends VerticalProfileChart +{ + private static Logger logger = + Logger.getLogger(VerticalProfileVectorChart.class); + + public VerticalProfileVectorChart( + ChartLabels labels, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection dates, + Collection result, + Collection timeGaps, + Locale locale, + boolean linesVisible, + boolean shapesVisible + ) { + super(labels, theme, parameters, measurements, dates, result, + timeGaps, locale, linesVisible, shapesVisible); + } + + + @Override + protected void initData() { + logger.debug("init data for verticalprofile chart with vector data."); + + int items = resultSet.size(); + logger.debug("Found " + items + " items for this chart."); + + Iterator iter = resultSet.iterator(); + Result row = null; + String seriesName = null; + XYSeries series = null; + + int idx = 0; + int startPos = 0; + int endPos = 0; + + double startValue = 0; + double endValue = 0; + + ResultDescriptor rd = null; + int idxSeries = -1; + int idxX = -1; + int idxY = -1; + + Result[] results = + (Result[]) resultSet.toArray(new Result[resultSet.size()]); + + while (iter.hasNext()) { + row = (Result) iter.next(); + + if (rd == null) { + rd = row.getResultDescriptor(); + idxSeries = rd.getColumnIndex("SERIES"); + idxX = rd.getColumnIndex("XORDINATE"); + idxY = rd.getColumnIndex("YORDINATE"); + } + + if (!row.getString(idxSeries).equals(seriesName)) { + logger.debug("prepare data/plot for next dataset."); + + if (series != null) { + if (startPos >= 0 && endPos < items) { + gapDetection(results, series, startPos, endPos); + } + + addSeries(series, seriesName, idx); + + startPos = endPos + 1; + } + + seriesName = row.getString(idxSeries); + + logger.debug("next data is '" + seriesName + "'"); + series = new XYSeries(seriesName); + } + + addValue(row, series); + Object x = getValue(row); + Double y = row.getDouble(idxY); + if (x != null && y != null) { + storeMaxRange(ranges, y, seriesName); + storeMaxValue(values, x, seriesName); + } + + endPos++; + } + + if (results.length == 0) + return; + + if (startPos >= 0 && endPos < items) { + gapDetection(results, series, startPos, endPos); + } + addSeries(series, seriesName, idx); + + addDatasets(); + } + + + @Override + protected void addDatasets() { + XYPlot plot = chart.getXYPlot(); + int idx = 0; + + XYSeriesCollection sc = null; + Iterator iter = datasets.keySet().iterator(); + + while (iter.hasNext()) { + String key = (String) iter.next(); + sc = (XYSeriesCollection)datasets.get(key); + plot.setDataset(idx, sc ); + logger.debug("Added " + key + " parameter to plot."); + prepareAxis(key, idx); + adjustRenderer( + idx++, + sc.getSeriesCount(), + linesVisible, + shapesVisible + ); + } + + prepareRangeAxis(null, -1); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/XMLChartTheme.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/XMLChartTheme.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import java.awt.Color; import java.awt.Font;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/chart/exception/TechnicalChartException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/chart/exception/TechnicalChartException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.chart.exception; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ChartExportHelper.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import com.lowagie.text.Document; @@ -9,7 +17,9 @@ import com.lowagie.text.pdf.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.CallContext; + +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.gnv.chart.Chart; @@ -233,20 +243,56 @@ OutputStream out, JFreeChart chart, String pageFormat, - boolean landscape, float marginLeft, float marginRight, float marginTop, - float marginBottom + float marginBottom, + CallContext context ) { log.info("export chart as pdf."); if (pageFormat == null) pageFormat = DEFAULT_PAGE_SIZE; + // max size of the chart Rectangle page = PageSize.getRectangle(pageFormat); - int pageWidth = (int) (page.getRight(marginRight) - page.getLeft(marginLeft)); - int pageHeight = (int) (page.getTop(marginTop) - page.getBottom(marginBottom)); + float pageWidth = page.getWidth(); + float pageHeight = page.getHeight(); + + // the chart width + int chartWidth = (Integer) context.getContextValue("chart.width"); + int chartHeight = (Integer) context.getContextValue("chart.height"); + + boolean landscape = chartWidth > chartHeight ? true : false; + + float width = 0; + float height = 0; + if (landscape) { + width = pageHeight; + height = pageWidth; + } + else { + width = pageWidth; + height = pageHeight; + } + + float spaceX = width - marginLeft - marginRight; + if (chartWidth > spaceX) { + log.warn("Width of the chart is too big for pdf -> resize it now."); + double ratio = ((double)spaceX) / chartWidth; + chartWidth *= ratio; + chartHeight *= ratio; + log.debug("Resized chart to " + chartWidth + "x" + chartHeight); + } + + float spaceY = height - marginTop - marginBottom; + if (chartHeight > spaceY) { + log.warn("Height of the chart is too big for pdf -> resize it now."); + double ratio = ((double)spaceY) / chartHeight; + chartWidth *= ratio; + chartHeight *= ratio; + log.debug("Resized chart to " + chartWidth + "x" + chartHeight); + } Document document = null; if (landscape) { @@ -265,24 +311,20 @@ PdfContentByte content = writer.getDirectContent(); - int width = 0; - int height = 0; - if (landscape) { - width = pageHeight; - height = pageWidth; - } - else { - width = pageWidth; - height = pageHeight; - } - PdfTemplate template = content.createTemplate(width, height); Graphics2D graphics = template.createGraphics(width, height); - Rectangle2D area = new Rectangle2D.Double(0.0D, 0.0D,width,height); + + double[] origin = getCenteredAnchor( + marginLeft, marginRight, marginBottom, marginTop, + width, height, + chartWidth, chartHeight); + + Rectangle2D area = new Rectangle2D.Double( + origin[0], origin[1], chartWidth, chartHeight); chart.draw(graphics, area); graphics.dispose(); - content.addTemplate(template, marginLeft, marginBottom); + content.addTemplate(template, 0f, 0f); } catch (DocumentException de) { log.error("Error while exporting chart to pdf.", de); @@ -313,11 +355,11 @@ OutputStream out, Chart[] histograms, String pageFormat, - boolean landscape, float marginLeft, float marginRight, float marginTop, - float marginBottom + float marginBottom, + CallContext context ) { log.info("export histogram as pdf."); @@ -325,10 +367,43 @@ pageFormat = DEFAULT_PAGE_SIZE; Rectangle page = PageSize.getRectangle(pageFormat); - int pageWidth = - (int) (page.getRight(marginRight) - page.getLeft(marginLeft)); - int pageHeight = - (int) (page.getTop(marginTop) - page.getBottom(marginBottom)); + float pageWidth = page.getWidth(); + float pageHeight = page.getHeight(); + + // the chart width + int chartWidth = (Integer) context.getContextValue("chart.width"); + int chartHeight = (Integer) context.getContextValue("chart.height"); + + boolean landscape = chartWidth > chartHeight ? true : false; + + float width = 0; + float height = 0; + if (landscape) { + width = pageHeight; + height = pageWidth; + } + else { + width = pageWidth; + height = pageHeight; + } + + float spaceX = width - marginLeft - marginRight; + if (chartWidth > spaceX) { + log.warn("Histogram width is too big for pdf -> resize it now."); + double ratio = ((double)spaceX) / chartWidth; + chartWidth *= ratio; + chartHeight *= ratio; + log.debug("Resized chart to " + chartWidth + "x" + chartHeight); + } + + float spaceY = height - marginTop - marginBottom; + if (chartHeight > spaceY) { + log.warn("Histogram height is too big for pdf -> resize it now."); + double ratio = ((double)spaceY) / chartHeight; + chartWidth *= ratio; + chartHeight *= ratio; + log.debug("Resized chart to " + chartWidth + "x" + chartHeight); + } Document document = null; if (landscape) { @@ -346,17 +421,6 @@ PdfContentByte content = writer.getDirectContent(); - int width = 0; - int height = 0; - if (landscape) { - width = pageHeight; - height = pageWidth; - } - else { - width = pageWidth; - height = pageHeight; - } - int size = histograms.length; for (int i = 0; i < size; i++) { if (i > 0) { @@ -366,20 +430,80 @@ JFreeChart chart = histograms[i].generateChart(); PdfTemplate template = content.createTemplate(width, height); Graphics2D graphics = template.createGraphics(width, height); + + double[] origin = getCenteredAnchor( + marginLeft, marginRight, marginBottom, marginTop, + width, height, + chartWidth, chartHeight); + Rectangle2D area = new Rectangle2D.Double( - 0.0D, 0.0D,width,height); + origin[0], origin[1], chartWidth, chartHeight); chart.draw(graphics, area); graphics.dispose(); - content.addTemplate(template, marginLeft, marginBottom); + content.addTemplate(template, 0f, 0f); } } catch (DocumentException de) { - log.error("Error while exporting chart to pdf.", de); + log.error("Error while exporting histogram to pdf.", de); } finally { document.close(); } } + + + /** + * This method returns the anchor of the chart so that the chart is centered + * according to the given parameters. + * + * @param mLeft Left margin + * @param mRight Right margin + * @param mBottom Bottom margin + * @param mTop Top margin + * @param width The complete width of the drawing area. + * @param height The complete height of the drawing area. + * @param chartWidth The width of the chart. + * @param chartHeight The height of the chart. + * + * @return an array that contains the anchor for a chart with the given + * parameters. The first value is the x point, the second value is the y + * point. + */ + public static double[] getCenteredAnchor( + double mLeft, double mRight, double mBottom, double mTop, + double width, double height, + double chartWidth, double chartHeight + ) { + if (log.isDebugEnabled()) { + log.debug("Calculate centered origin..."); + log.debug("-> PDF width : " + width); + log.debug("-> PDF height : " + height); + log.debug("-> Chart width : " + chartWidth); + log.debug("-> Chart height : " + chartHeight); + log.debug("-> margin left : " + mLeft); + log.debug("-> margin right : " + mRight); + log.debug("-> margin bottom: " + mBottom); + log.debug("-> margin top : " + mTop); + } + + double[] origin = new double[2]; + + double centerX = width / 2; + double centerY = height / 2; + + origin[0] = centerX - chartWidth / 2; + origin[1] = centerY - chartHeight / 2; + + origin[0] = origin[0] >= mLeft ? origin[0] : mLeft; + origin[1] = origin[1] >= mTop ? origin[1] : mTop; + + if (log.isDebugEnabled()) { + log.debug("==> centered left origin: " + origin[0]); + log.debug("==> centered top origin: " + origin[1]); + } + + return origin; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultDataCollector.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultDataCollector.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import de.intevation.gnv.geobackend.base.Result;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultExport.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultExport.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import au.com.bytecode.opencsv.CSVWriter;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultProfile.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/DefaultProfile.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/Export.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/Export.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import de.intevation.gnv.geobackend.base.Result;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ODVExport.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ODVExport.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import java.util.ArrayList; @@ -54,9 +62,12 @@ @Override - protected void writeData(Profile profile, Collection result, - CSVWriter writer) throws StateException { + protected void writeData( + Profile profile, Collection result, CSVWriter writer + )throws StateException + { Iterator<Result> it = result.iterator(); + log.debug("Put " + result.size() + " elements into odv export."); String[] header = profile.getHeader(); ArrayList<String> headerList = new ArrayList<String>(); @@ -69,9 +80,8 @@ } ArrayList<String> paramids = new ArrayList<String>(); - Map<StringArrayKey, Map<String,String>> aggregatedRows = new HashMap<StringArrayKey, Map<String,String>>(); - - String currentParameterID = "N/N"; + Map<StringArrayKey, Map<String,String>> aggregatedRows = + new HashMap<StringArrayKey, Map<String,String>>(); while (it.hasNext()) { Result res = it.next(); @@ -81,17 +91,17 @@ String parameterValue = res.getString("DATAVALUE"); String parameterID = res.getString("PARAMETER"); - if (!currentParameterID.equals(parameterID)){ + if (!paramids.contains(parameterID)){ paramids.add(parameterID); - headerList.add(this.findParamTitle(parameters, parameterID)); + headerList.add(findParamTitle(parameters, parameterID)); headerList.add("QF"); - currentParameterID = parameterID; } Map<String,String> aggregatedRow = aggregatedRows.get(key); if (aggregatedRow!= null){ aggregatedRow.put(parameterID, parameterValue); - }else{ + } + else{ Map<String,String> params = new HashMap<String, String>(); params.put(parameterID, parameterValue); aggregatedRows.put(key, params);
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ShapeDataCollector.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/ShapeDataCollector.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import com.vividsolutions.jts.geom.Point;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/SimpleOdvDataCollector.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/SimpleOdvDataCollector.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import com.vividsolutions.jts.geom.Point;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/StringArrayKey.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/StringArrayKey.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; /** * A simple Key Class for generating an syntetic key using the @@ -58,4 +66,8 @@ public String[] getValue() { return value; } + + public String getKey() { + return key; + } }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/exports/VerticalCrossODVExport.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/exports/VerticalCrossODVExport.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.exports; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/histogram/HistogramHelper.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/histogram/HistogramHelper.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,19 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.histogram; +import de.intevation.artifacts.CallContext; + +import de.intevation.gnv.artifacts.ressource.RessourceFactory; + +import de.intevation.gnv.chart.ChartLabels; + import de.intevation.gnv.geobackend.base.Result; import de.intevation.gnv.geobackend.base.ResultDescriptor; @@ -9,6 +23,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.apache.log4j.Logger; @@ -215,5 +230,113 @@ } return ""; } + + + /** + * Creates and returns labels to decorate histograms. + * + * @param uuid The UUID of the current artifact. + * @param context The CallContext object. + * @param data An array storing strings. + * @return A ChartLabels object with the 1st string in <i>data</i> as title. + */ + public static ChartLabels createHistogramLabels( + String uuid, CallContext context, Locale locale, Object[] data) + { + RessourceFactory fac = RessourceFactory.getInstance(); + + return new ChartLabels( + (String) data[0], + "", + "", + fac.getRessource(locale, "histogram.axis.range.title", "")); + } + + + public static Object[][] prepareVectorialHistogramData(Collection input) { + List names = new ArrayList<String>(); + List data = new ArrayList<Double[]>(); + + if (logger.isDebugEnabled()) { + logger.debug("######### prepare vectorial histogram data #######"); + logger.debug("Input data size: " + input.size()); + } + + if (input == null) { + return new Object[0][0]; + } + + int sIdx = -1; + int yIdx = -1; + + String series = null; + + try { + Iterator iter = input.iterator(); + + if (iter.hasNext()) { + Result row = (Result) iter.next(); + Result previousRow = row; + + if (sIdx == -1 || yIdx == -1) { + ResultDescriptor rd = row.getResultDescriptor(); + sIdx = rd.getColumnIndex("SERIES"); + yIdx = rd.getColumnIndex("YORDINATE"); + + if (sIdx == -1 || yIdx == -1) { + return new Object[0][0]; + } + } + + List values = new ArrayList<Double>(); + while (iter.hasNext()) { + row = (Result) iter.next(); + + // found new series + if (series != null && !series.equals(row.getString(sIdx))) { + + // add values and parameter name + data.add((Double[]) + values.toArray(new Double[values.size()])); + names.add(series); + + if (logger.isDebugEnabled()) { + logger.debug(" --- series name: " + series); + logger.debug(" --- series items: " + values.size()); + } + + values.clear(); + } + + Double value = row.getDouble(yIdx); + if (value != null) + values.add(value); + + series = row.getString(sIdx); + } + + if (logger.isDebugEnabled()) { + logger.debug(" --- series name: " + series); + logger.debug(" --- series items: " + values.size()); + } + + data.add((Double[]) values.toArray(new Double[values.size()])); + names.add(series); + } + } + catch (Exception e) { + logger.error(e.getMessage(), e); + } + + int count = data.size(); + logger.debug(" === Found total: " + count); + Object[][] obj = new Object[count][2]; + for (int i = 0; i < count; i++) { + obj[i][0] = names.get(i); + obj[i][1] = (Double[]) data.get(i); + } + + return obj; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/CompactXYItems.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/CompactXYItems.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/LevelOrderIndices.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; import java.util.LinkedList;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonDataset.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonDataset.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; import java.util.ArrayList;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonPlot.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonPlot.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; import java.awt.AlphaComposite;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonRenderer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonRenderer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; import java.awt.BasicStroke;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonSeries.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonSeries.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; import java.util.HashMap;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonSeriesLabelGenerator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/jfreechart/PolygonSeriesLabelGenerator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.jfreechart; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/layer/LayerArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/layer/LayerArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,18 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.layer; import org.apache.log4j.Logger; import org.w3c.dom.Document; import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.GNVArtifactBase; /** @@ -32,10 +41,15 @@ } @Override - public void setup(String identifier, ArtifactFactory factory, - Object context, Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("LayerArtifact.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); } }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/AreaInterpolation.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/AreaInterpolation.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/AttributedPoint2ds.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/AttributedPoint2ds.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.MultiLineString;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/AttributedXYColumns.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/AttributedXYColumns.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import de.intevation.gnv.jfreechart.PolygonDataset;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/ConstantFunction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/ConstantFunction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import org.apache.commons.math.analysis.UnivariateRealFunction;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/ConstantXYDepth.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/ConstantXYDepth.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/GridCell.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/GridCell.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.algorithm.CGAlgorithms;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/HeightValue.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/HeightValue.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/IJKey.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/IJKey.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation2D.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation2D.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation3D.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolation3D.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/Interpolator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/L1Comparator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/L1Comparator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/LinearFunction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/LinearFunction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import org.apache.commons.math.FunctionEvaluationException;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/LinearMetrics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/LinearMetrics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/LinearToMap.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/LinearToMap.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/Metrics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/Metrics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/Point2d.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/Point2d.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/QueriedXYDepth.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/QueriedXYDepth.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/XYColumn.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/XYColumn.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import java.util.ArrayList;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/math/XYDepth.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/math/XYDepth.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.math; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.horizontal; import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.GNVArtifactBase; @@ -40,9 +49,14 @@ * org.w3c.dom.Document) */ @Override - public void setup(String identifier, ArtifactFactory factory, - Object context, Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("HorizontalProfileArtifact.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); } }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileInstantaneousPointArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileInstantaneousPointArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.horizontal; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileMeshArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileMeshArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.horizontal; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileMeshCrossArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontal/HorizontalProfileMeshCrossArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.horizontal; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontalcrosssection/HorizontalCrossSectionMeshArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/horizontalcrosssection/HorizontalCrossSectionMeshArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.horizontalcrosssection; import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.GNVArtifactBase; @@ -40,10 +49,15 @@ * org.w3c.dom.Document) */ @Override - public void setup(String identifier, ArtifactFactory factory, - Object context, Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("HorizontalCrossSectionMeshArtifact.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.vertical; import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.GNVArtifactBase; @@ -39,10 +48,15 @@ * org.w3c.dom.Document) */ @Override - public void setup(String identifier, ArtifactFactory factory, - Object context, Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("VerticalProfileArtifact.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileInstantaneousPointArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileInstantaneousPointArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.vertical; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileMeshArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/vertical/VerticalProfileMeshArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.vertical; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.profile.verticalcrosssection; import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.GNVArtifactBase; @@ -40,10 +49,15 @@ * org.w3c.dom.Document) */ @Override - public void setup(String identifier, ArtifactFactory factory, - Object context, Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("VerticalCrossSectionMeshArtifact.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/profile/verticalcrosssection/VerticalCrossSectionMeshParallelArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.profile.verticalcrosssection; + +import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; + +import de.intevation.gnv.artifacts.GNVArtifactBase; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + * + */ +public class VerticalCrossSectionMeshParallelArtifact extends GNVArtifactBase { + + private static Logger logger = + Logger.getLogger(VerticalCrossSectionMeshParallelArtifact.class); + + + public VerticalCrossSectionMeshParallelArtifact() { + super(); + this.name = "verticalCrossSectionMeshParallel"; + } + + + @Override + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ){ + super.setup(identifier, factory, context, meta, data); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/AbstractProducer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/AbstractProducer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import de.intevation.gnv.raster.Vectorizer.RingsHandler;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/DemuxRingsHandler.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/DemuxRingsHandler.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import de.intevation.gnv.raster.Vectorizer.Edge;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/ExternalIndexConverter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/ExternalIndexConverter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Filter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Filter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import org.w3c.dom.Element;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/IsoAttributeGenerator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/IsoAttributeGenerator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/IsoPolygonSeriesProducer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/IsoPolygonSeriesProducer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import de.intevation.gnv.jfreechart.CompactXYItems;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/IsoProducer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/IsoProducer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import de.intevation.gnv.math.IJKey;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/JTSMultiLineStringProducer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/JTSMultiLineStringProducer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/JTSMultiPolygonProducer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/JTSMultiPolygonProducer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import com.vividsolutions.jts.algorithm.CGAlgorithms;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/KernelFilter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/KernelFilter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Palette.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Palette.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import de.intevation.gnv.raster.Raster.ValueToIndex;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/PaletteManager.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/PaletteManager.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import java.lang.ref.SoftReference;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/PolygonDatasetProducer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/PolygonDatasetProducer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import de.intevation.gnv.jfreechart.CompactXYItems;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Raster.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Raster.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/RasterToPPM.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/RasterToPPM.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import java.awt.Color;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Vectorizer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/raster/Vectorizer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.raster; import gnu.trove.TIntObjectHashMap;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/AutoResumeState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/AutoResumeState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/CoordinateSelectionState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/CoordinateSelectionState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.util.ArrayList; @@ -13,7 +21,7 @@ import com.vividsolutions.jts.geom.Point; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.gnv.geobackend.base.Result; import de.intevation.gnv.state.describedata.DefaultKeyValueDescribeData; import de.intevation.gnv.state.describedata.KeyValueDescibeData;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultAutoResumeState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultAutoResumeState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; +import de.intevation.artifacts.CallContext; + import de.intevation.gnv.geobackend.base.Result; import java.util.ArrayList; @@ -34,7 +44,8 @@ @Override - protected String[] getDescriptionForInputData(InputData data, String uuid) { + protected String[] getDescriptionForInputData( + InputData data, CallContext context, String uuid) { return new String[0]; } }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultExportMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultExportMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultInputData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultInputData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.util.HashMap; @@ -161,5 +169,53 @@ return null; } + @Override + public int hashCode() { + logger.debug("*************************************"); + logger.debug("HashCode name: " + name); + + int hash = 0; + + hash ^= name.hashCode(); + + if (value != null) { + hash ^= value.hashCode() << 2; + } + + if (object != null) { + hash ^= object.hashCode() << 4; + } + + logger.debug("HashCode value: " + hash); + logger.debug("*************************************"); + + return hash; + } + + + @Override + public boolean equals(Object o) { + if (!(o instanceof DefaultInputData)) + return false; + + DefaultInputData other = (DefaultInputData) o; + + if (!name.equals(other.name)) + return false; + + if ((value == null) && (other.value == null)) + return false; + + if (!value.equals(other.value)) + return false; + + if (!(object == null) && (other.object == null)) + return false; + + if (!(object == other.object)) + return false; + + return true; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultInputValue.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultInputValue.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultOutputMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultOutputMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/DefaultState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/ExportMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/ExportMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/ExtendedInputData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/ExtendedInputData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/InputData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/InputData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/InputValue.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/InputValue.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/MeasurementState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/MeasurementState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; @@ -22,10 +30,10 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Locale; +import java.util.TreeMap; import org.apache.log4j.Logger; @@ -108,17 +116,15 @@ if (i < 0) { measurements.add(key); i = measurements.indexOf(key); + + mDescriptions.add(val); + tmp = mDescriptions.indexOf(val); } if (j < 0) { logger.warn("Not a valid parameter: " + parameter); } - if (tmp < 0) { - mDescriptions.add(val); - tmp = mDescriptions.indexOf(val); - } - if (i >= 0 && i < measurements.size() && j >= 0 && j < parameters.size()) { @@ -388,7 +394,7 @@ } if (inputData == null) { - inputData = new HashMap<String, InputData>(); + inputData = new TreeMap<String, InputData>(); } ExtendedInputData extended = new ExtendedInputData( @@ -398,7 +404,8 @@ tupel[1]); if (name.equals(dataName)) { - String[] desc = getDescriptionForInputData(extended, uuid); + String[] desc = getDescriptionForInputData( + extended, context, uuid); extended.setDescription(desc); }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxDateState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxDateState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.util.ArrayList; @@ -6,13 +14,14 @@ import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; +import java.util.Locale; import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.ressource.RessourceFactory; @@ -39,7 +48,13 @@ */ private static Logger log = Logger.getLogger(MinMaxState.class); - /** + /** + * Key to lookup the localized exceptionmessage in the ResourceFiles. + */ + public static final String EXCEPTION_INVALID_MIN_MAX_INPUT = + "input.is.not.valid.minmax"; + + /** * Constructor */ public MinMaxState() { @@ -123,8 +138,16 @@ } if (min != null && max != null) { - if (!InputValidator.isInputValid((String) min, (String) max, type)) { - String msg = "Input is not valid for this state."; + if (!InputValidator.isInputValid((String) min, + (String) max, + type)) { + Locale[] serverLocales = resFactory.getLocales(); + Locale locale = context.getMeta() + .getPreferredLocale( + serverLocales); + String msg = resFactory.getRessource(locale, + EXCEPTION_INVALID_MIN_MAX_INPUT, + EXCEPTION_INVALID_MIN_MAX_INPUT); log.error(msg); return feedFailure(msg); }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/OutputMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/OutputMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/OutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/OutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import de.intevation.artifacts.CallContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/OutputStateBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/OutputStateBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.io.OutputStream; @@ -18,8 +26,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.cache.CacheFactory;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/PreSettingsTransferCoordinateSelectionState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/PreSettingsTransferCoordinateSelectionState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.artifacts.CallContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/PreSettingsTransferState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/PreSettingsTransferState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.artifacts.CallContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/SingleInputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/SingleInputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import de.intevation.artifacts.CallContext; @@ -101,7 +109,7 @@ tmpItem.getValue(), inputValue.getType()); if (valid) { - String[] desc = getDescriptionForInputData(tmpItem, uuid); + String[] desc = getDescriptionForInputData(tmpItem, context, uuid); tmpItem.setDescription(desc); this.inputData.put(tmpItem.getName(), tmpItem);
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/State.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/State.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import de.intevation.artifacts.CallContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/StateBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/StateBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import java.text.DateFormat; @@ -13,6 +21,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import javax.xml.xpath.XPathConstants; @@ -24,8 +34,8 @@ import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; @@ -243,8 +253,7 @@ InputValue inputValue = this.inputValues.get(tmpItem.getName()); if (inputValue != null) { if (this.inputData == null) { - this.inputData = new HashMap<String, InputData>( - inputData.size()); + this.inputData = new TreeMap<String, InputData>(); } boolean valid = InputValidator.isInputValid(tmpItem.getValue(), @@ -252,7 +261,8 @@ if (valid) { if (tmpItem.getName().equals(this.dataName)){ - String[] desc = getDescriptionForInputData(tmpItem, uuid); + String[] desc = getDescriptionForInputData( + tmpItem, context, uuid); tmpItem.setDescription(desc); } this.inputData.put(tmpItem.getName(), tmpItem); @@ -300,7 +310,9 @@ } - protected String[] getDescriptionForInputData(InputData data, String uuid) { + protected String[] getDescriptionForInputData( + InputData data, CallContext context, String uuid) + { // there is only one element in the list, so take the first Object obj = getDescibeData(uuid).get(0); List descs = new ArrayList(); @@ -348,8 +360,7 @@ InputValue inputValue = this.inputValues.get(tmpItem.getName()); if (inputValue != null) { if (this.inputData == null) { - this.inputData = new HashMap<String, InputData>( - inputData.size()); + this.inputData = new TreeMap<String, InputData>(); } boolean valid = InputValidator.isInputValid(tmpItem.getValue(), @@ -462,6 +473,7 @@ InputData data = this.inputData.get(value); if (data != null && this.inputValues.containsKey(data.getName())) { + int size = this.inputValues.get(data.getName()) .usedInQueries(); String type = this.inputValues.get(data.getName()) @@ -695,7 +707,7 @@ String uuid) { State parent = getParent(); - if (parent != null && parent instanceof StateBase) { + if (parent instanceof StateBase) { ((StateBase) parent).describeStatic( artCreator, creator, document, staticNode, context, uuid); } @@ -712,7 +724,7 @@ Node staticNode, CallMeta callMeta ) { - InputData data = inputData.get(dataName); + InputData data = dataName!= null ? inputData.get(dataName) : null; if (data == null) { return; @@ -937,11 +949,21 @@ protected void setHash(String uuid) { - this.hash = uuid + - HASH_ID_SEPARATOR + - id + - HASH_ID_SEPARATOR + - inputData.hashCode(); + String newHash = uuid + HASH_ID_SEPARATOR + id + HASH_ID_SEPARATOR; + Set keys = inputData.keySet(); + + int nhash = 0; + int shift = 0; + + for (Object o: keys) { + nhash ^= inputData.get(o).hashCode() << shift; + shift += 2; + } + + log.info("### OLD HASH: " + hash); + log.info("### NEW HASH: " + (newHash + nhash)); + + this.hash = newHash + nhash; } @@ -954,10 +976,11 @@ CacheFactory factory = CacheFactory.getInstance(); if (factory.isInitialized()) { // we use a cache - log.debug("Using cache."); Cache cache = factory.getCache(); String key = getHash(); + log.debug("Using cache - key: " + key); + net.sf.ehcache.Element value = cache.get(key); if (value != null) { // element already in cache, so return it. @@ -973,6 +996,7 @@ List<Object> data = queryDatabase(filterValues, uuid); cache.put(new net.sf.ehcache.Element(key, data)); + return data; } catch (QueryException qe) { @@ -1043,6 +1067,17 @@ public void endOfLife(Object globalContext) { + log.debug("end of life of the current state."); + + CacheFactory factory = CacheFactory.getInstance(); + if (factory.isInitialized()) { + Cache cache = factory.getCache(); + String key = getHash(); + + if (key != null && cache.remove(key)) { + log.info("Removed element from cache - key: " + key); + } + } }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/StateFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/StateFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state; import de.intevation.gnv.artifacts.GNVArtifactBase;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/SwitchModeState.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.state; + +import de.intevation.artifacts.common.utils.XMLUtils; + +import de.intevation.artifacts.CallContext; +import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.PreferredLocale; + +import de.intevation.gnv.artifacts.ressource.RessourceFactory; + +import org.apache.log4j.Logger; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + + +/** + * This task of this <code>State</code> implementation is to switch between + * working with vector or scalar data. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class SwitchModeState extends StateBase { + + public static final String VECTOR_VALUE = "vector"; + public static final String SCALAR_VALUE = "scalar"; + + public static final String RESSOURCE_VECTOR = "vectorvalues"; + public static final String RESSOURCE_SCALAR = "scalarvalues"; + + private static Logger logger = Logger.getLogger(SwitchModeState.class); + + public SwitchModeState() { + } + + + @Override + protected void describeDynamic( + XMLUtils.ElementCreator artCreator, + XMLUtils.ElementCreator creator, + Document document, + Node dynamic, + CallContext context, + String uuid) + { + RessourceFactory ressource = RessourceFactory.getInstance(); + CallMeta callMeta = context.getMeta(); + PreferredLocale[] locales = callMeta.getLanguages(); + + Element selectNode = creator.create("select1"); + creator.addAttr(selectNode, "ref", dataName); + + Element labelNode = creator.create("label"); + labelNode.setTextContent(ressource.getRessource( + locales, dataName, dataName)); + selectNode.appendChild(labelNode); + + selectNode.appendChild(createChoices(creator, context)); + dynamic.appendChild(selectNode); + logger.debug("creating dynamic ui elements finished"); + } + + + protected Node createChoices( + XMLUtils.ElementCreator creator, + CallContext context) + { + RessourceFactory ressource = RessourceFactory.getInstance(); + CallMeta callMeta = context.getMeta(); + PreferredLocale[] locales = callMeta.getLanguages(); + + Element choiceNodes = creator.create("choices"); + + // add choice for scalar values + logger.debug("create choice for scalar values"); + Element scalar = creator.create("item"); + Element label = creator.create("label"); + label.setTextContent(ressource.getRessource( + locales, RESSOURCE_SCALAR, RESSOURCE_SCALAR)); + scalar.appendChild(label); + + Element value = creator.create("value"); + value.setTextContent(SCALAR_VALUE); + scalar.appendChild(value); + + // add choice for vector values + logger.debug("create choice for vector values"); + Element vector = creator.create("item"); + label = creator.create("label"); + label.setTextContent(ressource.getRessource( + locales, RESSOURCE_VECTOR, RESSOURCE_VECTOR)); + vector.appendChild(label); + + value = creator.create("value"); + value.setTextContent(VECTOR_VALUE); + vector.appendChild(value); + + choiceNodes.appendChild(scalar); + choiceNodes.appendChild(vector); + + return choiceNodes; + } + + + @Override + protected String[] getDescriptionForInputData( + InputData data, CallContext context, String uuid) + { + RessourceFactory ressource = RessourceFactory.getInstance(); + CallMeta callMeta = context.getMeta(); + PreferredLocale[] locales = callMeta.getLanguages(); + + String value = data.getValue(); + + if (value != null && value.equals(SCALAR_VALUE)) { + return new String[] { ressource.getRessource( + locales, RESSOURCE_SCALAR, RESSOURCE_SCALAR) }; + } + else if (value != null && value.equals(VECTOR_VALUE)) { + return new String[] { ressource.getRessource( + locales, RESSOURCE_VECTOR, RESSOURCE_VECTOR) }; + } + + return null; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/cache/QueryObject.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/cache/QueryObject.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,17 @@ -/** +/* + * Copyright (c) 2010 by Intevation GmbH * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. */ + package de.intevation.gnv.state.cache; /** + * This Class is a Container which carries the + * databasequery which belongs to an state. + * It is also possible to look up if the query contains a specific + * TableName. * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> * */
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/cache/ThematicDataCacheCleaner.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/cache/ThematicDataCacheCleaner.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /** * */ @@ -15,7 +23,7 @@ import org.w3c.dom.Element; import org.w3c.dom.NodeList; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.gnv.artifacts.cache.CacheFactory; import de.intevation.gnv.geobackend.base.query.cache.CacheCleaner; import de.intevation.gnv.geobackend.base.query.container.QueryContainerFactory;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/cache/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,9 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> +<html> +<head> +</head> +<body> +Classes in this package provide the cleanup mechanism for the +Thematic-Data-Cache of the Application. +</body> +</html>
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DefaultKeyValueDescribeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DefaultKeyValueDescribeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DefaultMinMaxDescribeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DefaultMinMaxDescribeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DefaultSingleValueDescribeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DefaultSingleValueDescribeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DescribeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/DescribeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/ExtendedKeyValueData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/ExtendedKeyValueData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/KeyValueDescibeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/KeyValueDescibeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/MinMaxDescribeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/MinMaxDescribeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/NamedArrayList.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/NamedArrayList.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; import java.util.ArrayList;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/NamedCollection.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/NamedCollection.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; import java.util.Collection;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/SingleValueDescribeData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/describedata/SingleValueDescribeData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.describedata; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/exception/StateException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/exception/StateException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.exception; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerMetaData.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerMetaData.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /** * */ @@ -17,6 +25,7 @@ private String templateID = null; private String[] queryValues = null; private String geometryWKT = null; + private String layertitle = null; /** * Constructor @@ -32,15 +41,17 @@ */ public LayerMetaData(String table, String geometryType, String where, String columns, String templateID, - String[] queryValues,String geometryWKT) { + String[] queryValues,String geometryWKT, + String layertitle) { super(); - this.table = table; + this.table = table; this.geometryType = geometryType; - this.where = where; - this.columns = columns; - this.templateID = templateID; - this.queryValues = queryValues; - this.geometryWKT = geometryWKT; + this.where = where; + this.columns = columns; + this.templateID = templateID; + this.queryValues = queryValues; + this.geometryWKT = geometryWKT; + this.layertitle = layertitle; } /** @@ -103,4 +114,12 @@ return queryValues; } + /** + * Returns the layer title. + * @return the layer title. + */ + public String getLayertitle() { + return layertitle; + } + }
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/layer/LayerOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.layer; import java.io.File; @@ -11,12 +19,13 @@ import org.w3c.dom.Document; import org.w3c.dom.Node; +import com.vividsolutions.jts.geom.Envelope; import com.vividsolutions.jts.geom.Geometry; import com.vividsolutions.jts.io.ParseException; import com.vividsolutions.jts.io.WKTReader; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.gnv.artifacts.context.GNVArtifactContext; @@ -170,6 +179,7 @@ String where = resultValue.getString(1); String columns = this.fetchColumns(table); String templateID = resultValue.getString(2); + String layername = resultValue.getString(3); String[] queryValues = null; String geometryWKT = null; if (this.geometryID != null){ @@ -203,6 +213,7 @@ table, where, geometryWKTData.getValue()}; + geometryWKT = geometryWKTData.getValue(); }else{ queryValues = new String[]{columns,table,where}; } @@ -221,10 +232,9 @@ queryValues = new String[]{columns,table,where}; } } - returnValue.add(new LayerMetaData(table, geometryType, - where, columns, - templateID, queryValues, - geometryWKT)); + returnValue.add(new LayerMetaData( + table, geometryType, where, columns, + templateID, queryValues, geometryWKT, layername)); } } return returnValue; @@ -235,7 +245,7 @@ * * @return the resultdata. */ - protected Collection<Result> fetchData(LayerMetaData layerMetaData){ + protected Collection<Result> fetchData(LayerMetaData layerMetaData, Envelope mbr){ log.debug("LayerOutputState.fetchData"); Collection<Result> data = null; QueryExecutor queryExecutor = QueryExecutorFactory.getInstance() @@ -243,9 +253,12 @@ try { data = queryExecutor.executeQuery(dataQueryID, layerMetaData.getQueryValues()); - if (data != null && layerMetaData.getGeometryWKT() != null){ + if (data != null){ WKTReader wktReader = new WKTReader(); - Geometry border = wktReader.read(layerMetaData.getGeometryWKT()); + Geometry border = null; + if (layerMetaData.getGeometryWKT() != null){ + border = wktReader.read(layerMetaData.getGeometryWKT()); + } Iterator<Result> dataIt = data.iterator(); while (dataIt.hasNext()){ // Trim the Geometries using the @@ -260,8 +273,15 @@ log.error(e,e); } if (currentGeometry != null){ - Geometry newGeometry = currentGeometry.intersection(border); - current.addColumnValue(0, newGeometry.toText()); + if (border != null){ + currentGeometry = currentGeometry.intersection(border); + current.addColumnValue(0, currentGeometry.toText()); + } + if (mbr.isNull()){ + mbr.init(currentGeometry.getEnvelopeInternal()); + }else{ + mbr.expandToInclude(currentGeometry.getEnvelopeInternal()); + } } } } @@ -475,9 +495,10 @@ } Iterator<LayerMetaData> it = layerMetaData.iterator(); int i = 1; + Envelope mbr = new Envelope(); while(it.hasNext()){ LayerMetaData lmd = it.next(); - Collection<Result> data = this.fetchData(lmd); + Collection<Result> data = this.fetchData(lmd, mbr); p = writeToShapeFile(uuid, data, callContext,lmd.getGeometryType(),i++); } if (p != null) { @@ -501,6 +522,16 @@ } } + + /** + * Set the shapefile path. + */ + public void setShapeFilePath(String shapeFilePath) { + synchronized (shapeFileLock) { + this.shapeFilePath = shapeFilePath; + } + } + /** * Returns the basic-directory where the Shapefiles should be placed in. * @param callContext the Context of this Call @@ -576,67 +607,101 @@ * type, time to live of the current artifact, etc). * @throws StateException if an error occured while shapefile writing. */ - protected Document getWMS(String uuid, - CallContext callContext, - Collection<LayerMetaData> layerMetaData, - Collection<InputData> inputData) + protected Document getWMS( + String uuid, + CallContext callContext, + Collection<LayerMetaData> layerMetaData, + Collection<InputData> inputData) throws StateException { - String path = getShapeFilePath(); - if (path != null && new File(path).isDirectory()){ - return this.refreshMetaFile(layerMetaData, inputData, - uuid, callContext); - }else{ - Document document = XMLUtils.newDocument(); - if (this.shapeFilePath == null){ - File baseDir = shapefileDirectory(callContext); - if (!this.createShapeDir(baseDir, uuid)){ - // TODO Insert Error Report - return document; + Document document = XMLUtils.newDocument(); + + File baseDir = shapefileDirectory(callContext); + File shapeDir = new File(baseDir, uuid); + + boolean success = false; + boolean createdDir = false; + + try { + // create shapefile directory or delete content if it already exists + synchronized (shapeFileLock) { + if (shapeDir.exists()) { + FileUtils.deleteContent(shapeDir); } + else if (!shapeDir.mkdirs()) { + log.error("cannot create directory '" + + shapeDir.getAbsolutePath() + "'"); + return null; + } + setShapeFilePath(shapeDir.getAbsolutePath()); + createdDir = true; } - path = getShapeFilePath(); + + // process data Iterator<LayerMetaData> it = layerMetaData.iterator(); - Node meta = null; + + // create meta file + Document meta = MetaWriter.initMeta(); + MetaWriter.insertAbstractMeta(callContext, meta); + + String path = getShapeFilePath(); + String prefix = getLayerPrefix(inputData); + + if (prefix == null) { + prefix = uuid; + } + int layerNumber = 0; + Envelope mbr = new Envelope(); while (it.hasNext()){ LayerMetaData lmd = it.next(); layerNumber ++; + String geometryType = lmd.getGeometryType(); - String templateId = lmd.getTemplateID(); + String templateId = lmd.getTemplateID(); + ExclusiveExec.UniqueKey key = ExclusiveExec.INSTANCE.acquire(uuid); try{ - Collection<Result> data = this.fetchData(lmd); - if (data != null && - (this.writeToShapeFile(uuid, data, callContext, - geometryType,layerNumber)) != null) { - String paramType = findParameterTitle(geometryType,templateId); - String title = getLayerTitle(inputData); - if (title == null) { - title = uuid+"_"+layerNumber; - }else{ - title = title+"_"+layerNumber; - } - if (meta == null){ - meta = MetaWriter.writeLayerMeta(callContext,document); - } - MetaWriter.writeLayerMeta(callContext, document, - meta, uuid, paramType, - this.determineGeometryType(geometryType), - createShapeFileName(layerNumber), - title); + Collection<Result> results = this.fetchData(lmd,mbr); + if (results != null && writeToShapeFile(uuid, results, + callContext, + geometryType, + layerNumber) != null) { + String name = getLayerName(uuid, layerNumber); + String base = lmd.getLayertitle(); + String title = getLayerTitle(prefix, base); + String data = getLayerData( + uuid, createShapeFileName(layerNumber)); + String type = determineGeometryType(geometryType); + String status = "OFF"; + String model = findParameterTitle( + geometryType, templateId); + + MetaWriter.insertLayer( + callContext, meta, name, title, + data, model, type, status); } + + success = true; + if (meta != null && !it.hasNext()) { - MetaWriter.writeMetaFile(path,document); + MetaWriter.insertMbr(mbr, "EPSG:4326",meta); + MetaWriter.writeMetaFile(path, meta); MapfileGenerator.getInstance().update(); - return document; + return meta; } }finally{ ExclusiveExec.INSTANCE.release(key); } } + return document; } + finally { + if (!success && createdDir) { + FileUtils.deleteRecursive(shapeDir); + } + } } /** @@ -648,58 +713,24 @@ return SHAPEFILE_NAME+"_"+layerNumber+".shp"; } - /** - * Method that refreshes the Metadatafile for publishing the WMS - * Without generating the Data ones again. - * @param layerMetaData the Metadata which is required to create the Layers - * @param inputData the Inputdata which was sent by the Client - * @param uuid the uuid of the Artifact - * @param callContext the context of this Call - * @return a refreshed Metadata-Document - */ - private Document refreshMetaFile(Collection<LayerMetaData> layerMetaData, - Collection<InputData> inputData, - String uuid, - CallContext callContext){ - Document document = XMLUtils.newDocument(); - Node meta = null; - int layerNumber = 0; - Iterator<LayerMetaData> it = layerMetaData.iterator(); - while (it.hasNext()){ - LayerMetaData lmd = it.next(); - layerNumber ++; - String geometryType = lmd.getGeometryType(); - String templateId = lmd.getTemplateID(); - String title = getLayerTitle(inputData); - if (title == null) { - title = uuid+"_"+layerNumber; - }else{ - title = title+"_"+layerNumber; - } - callContext.putContextValue( - MetaWriter.CONTEXT_LAYER_TITLE, title); - String paramType = findParameterTitle(geometryType,templateId); - if (log.isDebugEnabled()) { - log.debug("Layer title: " + title); - log.debug("Layer type: " + paramType); - } - if (meta == null){ - meta = MetaWriter.writeLayerMeta(callContext,document); - } - MetaWriter.writeLayerMeta(callContext, document, - meta, uuid, paramType, - this.determineGeometryType(geometryType), - createShapeFileName(layerNumber), - title); - if (meta != null && !it.hasNext()) { - MetaWriter.writeMetaFile(getShapeFilePath(),document); - MapfileGenerator.getInstance().update(); - return document; - } - } - return document; + + protected String getLayerName(String uuid, int idx) { + return "GNV_" + uuid + "_" + idx; } + + protected String getLayerTitle(String prefix, String base) { + return "GNV_" + prefix + "_" + base; + } + + + protected String getLayerData(String shapeDir, String filename) { + File path = new File(shapeDir, filename); + + return path.toString(); + } + + /** * Returns the parameterType for the Layer. * @param geometryType @@ -721,7 +752,7 @@ * @param inputData A collection with InputData objects. * @return the title. */ - protected String getLayerTitle(Collection<InputData> inputData) { + protected String getLayerPrefix(Collection<InputData> inputData) { for (InputData data: inputData) { String name = data.getName(); if (name != null && name.equals("title")) {
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshCrossOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,18 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.horizontal; +import au.com.bytecode.opencsv.CSVWriter; + import com.vividsolutions.jts.geom.Coordinate; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.artifacts.CallContext; @@ -14,6 +24,10 @@ import de.intevation.gnv.chart.ChartLabels; import de.intevation.gnv.chart.HorizontalCrossProfileChart; +import de.intevation.gnv.exports.DefaultProfile; +import de.intevation.gnv.exports.Export; +import de.intevation.gnv.exports.StringArrayKey; + import de.intevation.gnv.geobackend.base.DefaultResult; import de.intevation.gnv.geobackend.base.DefaultResultDescriptor; import de.intevation.gnv.geobackend.base.Result; @@ -29,16 +43,31 @@ import de.intevation.gnv.math.Point2d; import de.intevation.gnv.state.InputData; +import de.intevation.gnv.state.describedata.KeyValueDescibeData; +import de.intevation.gnv.state.exception.StateException; import de.intevation.gnv.utils.DistanceCalculator; import de.intevation.gnv.utils.StringUtils; import de.intevation.gnv.utils.WKTUtils; +import java.io.IOException; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Locale; +import java.util.Map; import org.apache.log4j.Logger; @@ -57,6 +86,207 @@ extends HorizontalProfileMeshOutputState { + /** + * Constant field which defines the source format of a given datetime. + */ + public static final String SRC_FORMAT = "yyyy.MM.dd HH:mm:ss"; + + /** + * Constant field which defines the target format of a given datetime. + */ + public static final String DEST_FORMAT = "yyyy-MM-dd HH:mm"; + + /** + * Source format. + */ + public static DateFormat srcFormat = new SimpleDateFormat(SRC_FORMAT); + + /** + * Target format. + */ + public static DateFormat destFormat = new SimpleDateFormat(DEST_FORMAT); + + + /** + * This class represents an exporter used for exporting 'Horizontale + * Schnittprofile' as odv. + * + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ + public class HorizontalProfileMeshCrossODVExporter + implements Export + { + private ResultDescriptor rd; + + private Collection parameters; + + private int dateIdx; + private int paramIdx; + private int depthIdx; + private int valueIdx; + private int shpIdx; + + public HorizontalProfileMeshCrossODVExporter(Collection parameters) { + this.parameters = parameters; + } + + public void create( + Profile profile, + OutputStream outputStream, + Collection result) + throws + IOException, + UnsupportedEncodingException, + StateException + { + CSVWriter writer = new CSVWriter( + new OutputStreamWriter(outputStream, profile.getEncoding()), + profile.getSeparator(), + profile.getQuoteCharacter(), + profile.getEscapeCharacter()); + + writeData(profile, writer, result); + + writer.close(); + } + + protected void writeData( + Profile profile, + CSVWriter writer, + Collection<Result> results) + { + log.debug("Put " + results.size() + " elements into odv export."); + + // just write header into odv export + String[] header = profile.getHeader(); + ArrayList<String> headerList = new ArrayList<String>(); + for (int i= 0; i < header.length; i++){ + headerList.add(header[i]); + } + + ArrayList<String> paramids = new ArrayList<String>(); + + Map<StringArrayKey, Map<String,String>> aggregatedRows = + new HashMap<StringArrayKey, Map<String,String>>(); + + for (Result res: results) { + if (rd == null) { + rd = res.getResultDescriptor(); + paramIdx = rd.getColumnIndex("GROUP1"); + depthIdx = rd.getColumnIndex("GROUP2"); + dateIdx = rd.getColumnIndex("GROUP3"); + shpIdx = rd.getColumnIndex("SHAPE"); + valueIdx = rd.getColumnIndex("YORDINATE"); + } + + String[] row = generateRow(res); + StringArrayKey key = new StringArrayKey(row); + String parameterValue = res.getString(valueIdx); + String parameterID = res.getString(paramIdx); + + if (!paramids.contains(parameterID)) { + paramids.add(parameterID); + headerList.add(findParamTitle(parameters, parameterID)); + headerList.add("QF"); + } + + Map<String,String> aggregatedRow = aggregatedRows.get(key); + if (aggregatedRow != null) { + aggregatedRow.put(parameterID, parameterValue); + } + else{ + Map<String,String> params = new HashMap<String, String>(); + params.put(parameterID, parameterValue); + aggregatedRows.put(key, params); + } + } + + if (header != null){ + writer.writeNext(headerList.toArray(header)); + } + + Iterator<StringArrayKey> rows = aggregatedRows.keySet().iterator(); + int idx = 1; + while (rows.hasNext()){ + StringArrayKey row = rows.next(); + Map<String,String> params = aggregatedRows.get(row); + + ArrayList<String> rowList = new ArrayList<String>(); + String[] rowArray = row.getValue(); + for (int i= 0; i < rowArray.length; i++){ + String value = rowArray[i]; + if (value != null && value.equals("GNV_STATION")) { + value += "_" + idx++; + } + rowList.add(value); + } + for (int i = 0; i < paramids.size();i++){ + String key = paramids.get(i); + String value = params.get(key); + if (value == null){ + value = ""; + } + rowList.add(value); + rowList.add("1"); + } + log.debug("Write new line into odv export."); + writer.writeNext(rowList.toArray(rowArray)); + } + } + + protected String[] generateRow(Result res) { + Date tmpDate = null; + String dateTmp = res.getString(dateIdx); + try { + tmpDate = srcFormat.parse(dateTmp); + } + catch (ParseException pe) { + log.warn(pe,pe); + } + + String shapeTmp = res.getString(shpIdx); + Coordinate p = WKTUtils.toCoordinate(shapeTmp); + + String cruise = "GNV_EXPORT"; + String station = "GNV_STATION"; + String type = "*"; + String date = tmpDate != null + ? destFormat.format(tmpDate) + : dateTmp; + String lon = "" + p.x; + String lat = "" + p.y; + String botDepth = "0"; + String depth = res.getString(depthIdx); + + return new String[] { + cruise, station, type, date, lon, lat, botDepth, depth + }; + } + + /** + * This method is used to search specific value coresponding to its key + * <code>id</code> and return its description. + * + * @param values Collection of parameters. + * @param id Key used to find the value. + * + * @return Description of searched value. + */ + protected String findParamTitle(Collection values, String id) { + if (values != null){ + Iterator it = values.iterator(); + while (it.hasNext()) { + KeyValueDescibeData data = (KeyValueDescibeData) it.next(); + + if (id.equals(data.getKey())) + return data.getValue(); + } + } + return ""; + } + } // HorizontalProfileMeshCrossODVExporter + + public static final boolean USE_INDEX_BUFFER = Boolean.getBoolean("gnv.horizontal.profile.mesh.cross.index.buffer"); @@ -150,6 +380,46 @@ return chart; } + + @Override + protected void createODV( + OutputStream outputStream, String uuid, CallContext callContext) + throws IOException, StateException { + + String [] COLUMN_HEADER = { + "Cruise", + "Station", + "Type", + "yyyy-mm-dd hh:mm", + "Lon (°E)", + "Lat (°N)", + "Bot. Depth [m]", + "Depth [m]" + }; + + Export.Profile ODV_PROFILE = new DefaultProfile( + COLUMN_HEADER, + '\t', + CSVWriter.NO_QUOTE_CHARACTER, + CSVWriter.NO_ESCAPE_CHARACTER, + "ODV", + "ISO-8859-1"); + + Collection<Result> result = (Collection<Result>) getChartResult( + uuid, callContext); + + if (result == null) { + log.error("No data for export found."); + return; + } + + Export export = new HorizontalProfileMeshCrossODVExporter( + getParameters(uuid)); + + export.create(ODV_PROFILE, outputStream, result); + } + + private static int numSamples(CallContext callContext) { GNVArtifactContext context = (GNVArtifactContext)callContext.globalContext(); @@ -163,69 +433,73 @@ @Override protected Object getChartResult(String uuid, CallContext callContext) { log.debug("HorizontalProfileMeshCrossOutputState.getChartResult"); - Collection<Result> result = null; - if (CacheFactory.getInstance().isInitialized()) { - String key = uuid + super.getID(); - log.debug("Hash for Queryelements: " + key); - net.sf.ehcache.Element value = CacheFactory.getInstance().getCache().get(key); - if (value != null) { - result = (Collection<Result>) (value.getObjectValue()); - }else{ - - InputData meshLine = inputData.get("mesh_linestring"); - InputData meshId = inputData.get("meshid"); - - if (meshLine == null) { - log.error("mesh_linestring is not defined"); - throw new IllegalStateException("missing mesh_linestring"); - } - - if (meshId == null) { - log.error("meshid is not defined"); - throw new IllegalStateException("missing meshid"); - } - - Coordinate [] coords = WKTUtils.toCoordinates( - meshLine.getValue()); - - if (coords == null) { - throw new IllegalStateException("cannot read coordinates"); - } - try { - String additionWhere = USE_INDEX_BUFFER - ? WKTUtils.worldCoordinatesToIndex( - coords, - result, - meshId.getValue(), - ijkQueryID) - : WKTUtils.TRUE_EXPRESSION; - - String[] addedFilterValues = StringUtils.append( - generateFilterValuesFromInputData(), - additionWhere); + String key = getHash(); + if (CacheFactory.getInstance().isInitialized()) { + log.debug("Using cache - key: " + key); + net.sf.ehcache.Element value = CacheFactory.getInstance().getCache().get(key); - QueryExecutor queryExecutor = QueryExecutorFactory - .getInstance() - .getQueryExecutor(); - - result = process( - Arrays.asList(coords), - numSamples(callContext), - queryExecutor.executeQuery( - queryID, - addedFilterValues)); - } - catch (QueryException e) { - log.error(e,e); - } - - if (CacheFactory.getInstance().isInitialized()) { - CacheFactory.getInstance().getCache().put(new net.sf.ehcache.Element(key, result)); - } - + if (value != null) { + log.debug("Found element in cache."); + return (Collection<Result>) (value.getObjectValue()); } } + + log.debug("Not using cache or element not found."); + Collection<Result> result = null; + + InputData meshLine = inputData.get("mesh_linestring"); + InputData meshId = inputData.get("meshid"); + + if (meshLine == null) { + log.error("mesh_linestring is not defined"); + throw new IllegalStateException("missing mesh_linestring"); + } + + if (meshId == null) { + log.error("meshid is not defined"); + throw new IllegalStateException("missing meshid"); + } + + Coordinate [] coords = WKTUtils.toCoordinates( + meshLine.getValue()); + + if (coords == null) { + throw new IllegalStateException("cannot read coordinates"); + } + + try { + String additionWhere = USE_INDEX_BUFFER + ? WKTUtils.worldCoordinatesToIndex( + coords, + result, + meshId.getValue(), + ijkQueryID) + : WKTUtils.TRUE_EXPRESSION; + + String[] addedFilterValues = StringUtils.append( + generateFilterValuesFromInputData(), + additionWhere); + + QueryExecutor queryExecutor = QueryExecutorFactory + .getInstance() + .getQueryExecutor(); + + result = process( + Arrays.asList(coords), + numSamples(callContext), + queryExecutor.executeQuery( + queryID, + addedFilterValues)); + } + catch (QueryException e) { + log.error(e,e); + } + + if (CacheFactory.getInstance().isInitialized()) { + CacheFactory.getInstance().getCache().put(new net.sf.ehcache.Element(key, result)); + } + return result; } @@ -270,9 +544,11 @@ DefaultResultDescriptor resultDescriptor = new DefaultResultDescriptor(); + log.debug("------------------------------------------------------"); for (int j = 0; j < columns; ++j) { String columnName = rd.getColumnName(j); if (!StringUtils.contains(COLUMN_BLACKLIST, columnName)) { + log.debug("!!! COLUMN NAME: " + columnName); resultDescriptor.addColumn( columnName, rd.getColumnClassName(j));
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.horizontal; import java.util.Locale;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileMeshVectorOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.state.profile.horizontal; + +import au.com.bytecode.opencsv.CSVWriter; + +import de.intevation.artifacts.CallContext; + +import de.intevation.gnv.artifacts.cache.CacheFactory; + +import de.intevation.gnv.chart.Chart; +import de.intevation.gnv.chart.ChartLabels; +import de.intevation.gnv.chart.HorizontalProfileVectorChart; + +import de.intevation.gnv.exports.DefaultExport; +import de.intevation.gnv.exports.DefaultProfile; +import de.intevation.gnv.exports.Export; +import de.intevation.gnv.exports.Export.Profile; +import de.intevation.gnv.exports.SimpleOdvDataCollector; + +import de.intevation.gnv.geobackend.base.Result; + +import de.intevation.gnv.utils.VectorDataProcessor; + +import de.intevation.gnv.state.describedata.KeyValueDescibeData; +import de.intevation.gnv.state.exception.StateException; + +import de.intevation.gnv.statistics.Statistics; +import de.intevation.gnv.statistics.HorizontalProfileVectorStatistics; + +import java.io.IOException; +import java.io.OutputStream; + +import java.util.Collection; +import java.util.Locale; +import java.util.Map; + +import net.sf.ehcache.Cache; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class HorizontalProfileMeshVectorOutputState +extends HorizontalProfileMeshOutputState +{ + private static Logger logger = + Logger.getLogger(HorizontalProfileMeshVectorOutputState.class); + + public static final String[] RESULT_COLUMNS = { + "YORDINATE", "SHAPE", + "GROUP1", "GROUP2", "GROUP3", + "IPOSITION", "JPOSITION", + "DATAID", "MESHID", + "SERIES" + }; + + + public static final String[] ODV_COLUMN_HEADERS = { + "Cruise", + "Station", + "Type", + "yyyy-mm-dd hh:mm", + "Lon (°E)", + "Lat (°N)", + "Bot. Depth [m]", + "Depth [m]", + "QF", + "XComponent", + "QF", + "YComponent", + "QF", + "ZComponent", + "QF", + "Speed", + "QF", + "Direction", + "QF" + }; + + + public static final String[] ODV_PROFILE_NAMES = { + "CRUISE", + "STATION", + "TYPE", + "TIMEVALUE", + "SHAPE", + "BOTDEPTH", + "DEPTH", + "QF", + "XCOMPONENT", + "QF", + "YCOMPONENT", + "QF", + "ZCOMPONENT", + "QF", + "SPEED", + "QF", + "DIRECTION", + "QF"}; + + + @Override + protected Object getChartResult(String uuid, CallContext callContext) { + logger.debug("Fetch data for horizontalprofile chart with vector data"); + CacheFactory factory = CacheFactory.getInstance(); + + if (factory.isInitialized()) { + // we use a cache + logger.info("Using cache."); + Cache cache = factory.getCache(); + String key = "chart_" + getHash(); + + net.sf.ehcache.Element value = cache.get(key); + if (value != null) { + logger.debug("Found element in cache."); + return value.getObjectValue(); + } + else { + logger.debug("Element not in cache, we ask the database"); + Collection<Result> res = (Collection<Result>)getData(queryID); + res = VectorDataProcessor.process(res, RESULT_COLUMNS); + logger.debug("Got " + res.size() + " elements from database."); + + cache.put(new net.sf.ehcache.Element(key, res)); + + return res; + } + } + else { + // we don't use a cache, so we have to query the database every + // single time + logger.info("Not using a cache."); + return VectorDataProcessor.process( + getData(queryID), RESULT_COLUMNS); + } + } + + + @Override + protected Chart getChart( + ChartLabels chartLables, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection dates, + Object result, + Locale locale, + String uuid, + boolean linesVisible, + boolean shapesVisible, + CallContext callContext + ) { + Chart chart = new HorizontalProfileVectorChart( + chartLables, + theme, + parameters, + measurements, + dates, + (Collection)result, + timeGapDefinitions, + locale, + linesVisible, + shapesVisible + ); + chart.generateChart(); + + return chart; + } + + + @Override + protected Chart[] getHistograms( + String uuid, + CallContext callContext, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates, + Map requestParameter + ) { + Collection results = (Collection) getChartResult(uuid, callContext); + ChartTheme theme = createStyle(callContext); + + return VectorDataProcessor.getHistograms( + uuid, callContext, results, theme, requestParameter); + } + + + @Override + protected void createODV( + OutputStream outputStream, Collection result, String uuid) + throws IOException, StateException + { + logger.info("Start exporting " + result.size() + " items to odv."); + Export export = new DefaultExport( + new SimpleOdvDataCollector(ODV_PROFILE_NAMES)); + + Profile profile = new DefaultProfile( + ODV_COLUMN_HEADERS, + '\t', + CSVWriter.NO_QUOTE_CHARACTER, + CSVWriter.NO_ESCAPE_CHARACTER, + "ODV", + "ISO-8859-1"); + + export.create(profile, outputStream, result); + } + + + protected Statistics getStatisticsGenerator() { + return new HorizontalProfileVectorStatistics(); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/HorizontalProfileOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.horizontal; import java.io.IOException;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/NorthSouthEastWestState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontal/NorthSouthEastWestState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.horizontal; import de.intevation.artifacts.CallContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/horizontalcrosssection/HorizontalCrossSectionMeshOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.horizontalcrosssection; import java.awt.Dimension; @@ -22,8 +30,8 @@ import com.vividsolutions.jts.geom.MultiPolygon; import com.vividsolutions.jts.geom.Polygon; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.gnv.artifacts.cache.CacheFactory; @@ -94,6 +102,8 @@ private Boolean shapeFileLock = new Boolean(true); private String shapeFilePath; + + private Envelope bbox = null; /** * Constructor @@ -306,24 +316,36 @@ String path = getShapeFilePath(); if (path != null && new File(path).isDirectory()) { - String title = getLayerTitle(inputData); - if (title == null) { - title = uuid; + Document meta = MetaWriter.initMeta(); + MetaWriter.insertAbstractMeta(callContext, meta); + + String prefix = getLayerPrefix(inputData); + if (prefix == null) { + prefix = uuid; } - callContext.putContextValue( - MetaWriter.CONTEXT_LAYER_TITLE, title); - - String paramType = findParameterType(callContext); + // append polygon meta + String model = findParameterType(callContext); + String type = "POLYGON"; + String name = getLayerName(uuid, type); + String title = getLayerTitle(prefix, type); + String data = getLayerData(uuid, POLYGON_NAME); + String status = "OFF"; + MetaWriter.insertLayer( + callContext, meta, name, title, data, model, type, status); - if (log.isDebugEnabled()) { - log.debug("Layer title: " + title); - log.debug("Layer type: " + paramType); - } + // append isoline meta + model += "_isolines"; + type = "LINE"; + name = getLayerName(uuid, type); + title = getLayerTitle(prefix, type); + data = getLayerData(uuid, ISOLINES_NAME); + MetaWriter.insertLayer( + callContext, meta, name, title, data, model, type, status); - Document meta = MetaWriter.writeHorizontalcrosssectionMeta( - callContext, uuid, path, paramType); if (meta != null) { + MetaWriter.insertMbr(this.bbox, "EPSG:4326", meta); + MetaWriter.writeMetaFile(path, meta); MapfileGenerator.getInstance().update(); return meta; } @@ -336,25 +358,36 @@ try{ if (result != null && (path = writeToShapeFile(uuid, result, callContext)) != null) { - - String paramType = findParameterType(callContext); + Document meta = MetaWriter.initMeta(); + MetaWriter.insertAbstractMeta(callContext, meta); - String title = getLayerTitle(inputData); - if (title == null) { - title = uuid; - } - callContext.putContextValue( - MetaWriter.CONTEXT_LAYER_TITLE, title); - - if (log.isDebugEnabled()) { - log.debug("Parameter type: " + paramType); - log.debug("Layer title: " + title); + String prefix = getLayerPrefix(inputData); + if (prefix == null) { + prefix = uuid; } - Document meta = MetaWriter.writeHorizontalcrosssectionMeta( - callContext, uuid, path, paramType); + // append polygon meta + String model = findParameterType(callContext); + String type = "POLYGON"; + String name = getLayerName(uuid, type); + String title = getLayerTitle(prefix, type); + String data = getLayerData(uuid, POLYGON_NAME); + String status = "OFF"; + MetaWriter.insertLayer( + callContext, meta, name, title, data, model, type, status); + + // append isoline meta + model += "_isolines"; + type = "LINE"; + name = getLayerName(uuid, type); + title = getLayerTitle(prefix, type); + data = getLayerData(uuid, ISOLINES_NAME); + MetaWriter.insertLayer( + callContext, meta, name, title, data, model, type, status); if (meta != null) { + MetaWriter.insertMbr(this.bbox, "EPSG:4326", meta); + MetaWriter.writeMetaFile(path, meta); MapfileGenerator.getInstance().update(); return meta; } @@ -400,7 +433,7 @@ * @param inputData A collection with InputData objects. * @return the title. */ - protected String getLayerTitle(Collection<InputData> inputData) { + protected String getLayerPrefix(Collection<InputData> inputData) { for (InputData data: inputData) { String name = data.getName(); if (name != null && name.equals("title")) { @@ -411,6 +444,44 @@ return null; } + + /** + * Returns the name of the layer. + * + * @param uuid The uuid the the current session. It is the base part of the + * layername. + * @param type The type of the layer ('POLYGON' or 'LINE'). + * @return the name of the layer. + */ + protected String getLayerName(String uuid, String type) { + return "GNV_" + uuid + "-" + type; + } + + /** + * Returns the layer title. + * + * @param prefix A prefix (null not permitted). + * @param type The layer type. + * @return the title of the layer. + */ + protected String getLayerTitle(String prefix, String type) { + return "GNV_" + prefix + "-" + type; + } + + + /** + * Returns the path to the shapefile that serves the layer data. + * + * @param shapeDir The shapefile directory. + * @param filename The name of the shapefile. + * @return the relative path to the shapefile. + */ + protected String getLayerData(String shapeDir, String filename) { + File path = new File(shapeDir, filename); + + return path.toString(); + } + /** * Write the resulting data to shapefiles. * @@ -504,12 +575,15 @@ String key = getHash(); if (cf.isInitialized()) { + log.debug("Using cache - key: " + key); net.sf.ehcache.Element value = cf.getCache().get(key); if (value != null) { - return (AttributedPoint2ds)value.getObjectValue(); + log.debug("Found element in cache."); + return (AttributedPoint2ds)value.getObjectValue(); } } + log.debug("Not using cache or element not found."); AttributedPoint2ds result = produceResult(callContext); if (result != null && cf.isInitialized()) { @@ -553,6 +627,7 @@ try { Envelope env = p.getEnvelopeInternal(); + this.bbox = env; String additionWhere; if (USE_INDEX_BUFFER) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileMeshVectorOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.state.profile.vertical; + +import de.intevation.artifacts.CallContext; + +import de.intevation.gnv.artifacts.cache.CacheFactory; + +import de.intevation.gnv.geobackend.base.Result; + +import de.intevation.gnv.utils.VectorDataProcessor; + +import java.util.Collection; + +import net.sf.ehcache.Cache; + +import org.apache.log4j.Logger; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class VerticalProfileMeshVectorOutputState +extends VerticalProfileVectorOutputState +{ + public static final String[] RESULT_COLUMNS = { + "YORDINATE", "XORDINATE", "KPOSITION", + "GROUP1", "GROUP2", "GROUP3", + "DATAID", "FEATUREID", "MESHID", + "SERIES" + }; + + private static Logger logger = + Logger.getLogger(VerticalProfileMeshVectorOutputState.class); + + + @Override + protected Object getChartResult(String uuid, CallContext callContext) { + logger.debug("Fetch chart data for vertical profile with vector data."); + CacheFactory factory = CacheFactory.getInstance(); + + if (factory.isInitialized()) { + // we use a cache + logger.info("Using cache."); + Cache cache = factory.getCache(); + String key = "chart_" + getHash(); + + net.sf.ehcache.Element value = cache.get(key); + if (value != null) { + logger.debug("Found element in cache."); + return value.getObjectValue(); + } + else { + logger.debug("Element not in cache, we ask the database"); + Collection<Result> res = (Collection<Result>)getData(queryID); + logger.debug("Got " + res.size() + " elements from db."); + + res = VectorDataProcessor.process(res, RESULT_COLUMNS); + cache.put(new net.sf.ehcache.Element(key, res)); + + return res; + } + } + else { + // we don't use a cache, so we have to query the database every + // single time + logger.info("Not using a cache."); + return VectorDataProcessor.process( + getData(queryID), RESULT_COLUMNS); + } + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.vertical; import de.intevation.artifacts.CallContext;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/vertical/VerticalProfileVectorOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.state.profile.vertical; + +import au.com.bytecode.opencsv.CSVWriter; + +import de.intevation.artifacts.CallContext; + +import de.intevation.gnv.artifacts.cache.CacheFactory; + +import de.intevation.gnv.chart.Chart; +import de.intevation.gnv.chart.ChartLabels; +import de.intevation.gnv.chart.VerticalProfileVectorChart; + +import de.intevation.gnv.exports.DefaultExport; +import de.intevation.gnv.exports.DefaultProfile; +import de.intevation.gnv.exports.Export; +import de.intevation.gnv.exports.Export.Profile; +import de.intevation.gnv.exports.SimpleOdvDataCollector; + +import de.intevation.gnv.geobackend.base.Result; + +import de.intevation.gnv.utils.VectorDataProcessor; + +import de.intevation.gnv.state.describedata.KeyValueDescibeData; +import de.intevation.gnv.state.exception.StateException; + +import de.intevation.gnv.statistics.Statistics; +import de.intevation.gnv.statistics.VerticalProfileVectorStatistics; + +import java.io.IOException; +import java.io.OutputStream; + +import java.util.Collection; +import java.util.Locale; +import java.util.Map; + +import net.sf.ehcache.Cache; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class VerticalProfileVectorOutputState +extends VerticalProfileOutputState +{ + private static Logger logger = + Logger.getLogger(VerticalProfileVectorOutputState.class); + + public static final String[] RESULT_COLUMNS = { + "YORDINATE", "XORDINATE", + "GROUP1", "GROUP2", "GROUP3", + "DATAID", "FEATUREID", "TIMESERIESID", + "SERIES" + }; + + + public static final String[] ODV_COLUMN_HEADERS = { + "Cruise", + "Station", + "Type", + "yyyy-mm-dd hh:mm", + "Lon (°E)", + "Lat (°N)", + "Bot. Depth [m]", + "Depth [m]", + "QF", + "XComponent", + "QF", + "YComponent", + "QF", + "ZComponent", + "QF", + "Speed", + "QF", + "Direction", + "QF" + }; + + public static final String[] ODV_PROFILE_NAMES = { + "CRUISE", + "STATION", + "TYPE", + "TIMEVALUE", + "SHAPE", + "BOTDEPTH", + "DEPTH", + "QF", + "XCOMPONENT", + "QF", + "YCOMPONENT", + "QF", + "ZCOMPONENT", + "QF", + "SPEED", + "QF", + "DIRECTION", + "QF"}; + + + @Override + protected Object getChartResult(String uuid, CallContext callContext) { + logger.debug("Fetch chart data for vertical profile with vector data."); + CacheFactory factory = CacheFactory.getInstance(); + + if (factory.isInitialized()) { + // we use a cache + logger.info("Using cache."); + Cache cache = factory.getCache(); + String key = "chart_" + getHash(); + + net.sf.ehcache.Element value = cache.get(key); + if (value != null) { + logger.debug("Found element in cache."); + return value.getObjectValue(); + } + else { + logger.debug("Element not in cache, we ask the database"); + Collection<Result> res = (Collection<Result>)getData(queryID); + logger.debug("Got " + res.size() + " elements from db."); + + res = VectorDataProcessor.process(res, RESULT_COLUMNS); + cache.put(new net.sf.ehcache.Element(key, res)); + + return res; + } + } + else { + // we don't use a cache, so we have to query the database every + // single time + logger.info("Not using a cache."); + return VectorDataProcessor.process( + getData(queryID), RESULT_COLUMNS); + } + } + + + @Override + protected Chart getChart( + ChartLabels chartLables, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection dates, + Object result, + Locale locale, + String uuid, + boolean linesVisible, + boolean shapesVisible, + CallContext callContext + ) { + Chart chart = new VerticalProfileVectorChart( + chartLables, + theme, + parameters, + measurements, + dates, + (Collection)result, + timeGapDefinitions, + locale, + linesVisible, + shapesVisible + ); + chart.generateChart(); + + return chart; + } + + + @Override + protected Chart[] getHistograms( + String uuid, + CallContext callContext, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates, + Map requestParameter + ) { + Collection results = (Collection) getChartResult(uuid, callContext); + ChartTheme theme = createStyle(callContext); + + return VectorDataProcessor.getHistograms( + uuid, callContext, results, theme, requestParameter); + } + + + @Override + protected void createODV( + OutputStream outputStream, Collection result, String uuid) + throws IOException, StateException + { + logger.info("Start exporting " + result.size() + " items to odv."); + Export export = new DefaultExport( + new SimpleOdvDataCollector(ODV_PROFILE_NAMES)); + + Profile profile = new DefaultProfile( + ODV_COLUMN_HEADERS, + '\t', + CSVWriter.NO_QUOTE_CHARACTER, + CSVWriter.NO_ESCAPE_CHARACTER, + "ODV", + "ISO-8859-1"); + + export.create(profile, outputStream, result); + } + + + protected Statistics getStatisticsGenerator() { + return new VerticalProfileVectorStatistics(); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/OutputHelper.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/OutputHelper.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.verticalcrosssection; import de.intevation.gnv.jfreechart.CompactXYItems;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.profile.verticalcrosssection; import au.com.bytecode.opencsv.CSVWriter; @@ -159,11 +167,10 @@ protected Object getChartResult(String uuid, CallContext callContext) { log.debug("VerticalCrossSectionOutputState.getChartResult"); String key = getHash(); - log.debug("Hash: "+key); CacheFactory factory = CacheFactory.getInstance(); if (factory.isInitialized()) { - log.info("Using a cachce."); + log.info("Using a cachce - key: " + key); Cache cache = factory.getCache(); Element element = cache.get(key); @@ -192,8 +199,8 @@ */ protected Object getData(String uuid, CallContext callContext) { Collection<Result> result = null; - InputData meshLine = inputData.get("mesh_linestring"); InputData meshId = inputData.get("meshid"); + String meshLine = getLineString(); if (meshLine == null) { log.error("mesh_linestring is not defined"); @@ -206,7 +213,7 @@ } Coordinate [] coords = WKTUtils.toCoordinates( - meshLine.getValue()); + meshLine); if (coords == null) { throw new IllegalStateException("cannot read coordinates"); @@ -244,6 +251,13 @@ } + protected String getLineString() { + InputData meshLine = inputData.get("mesh_linestring"); + + return meshLine != null ? meshLine.getValue() : null; + } + + @Override protected String getSelectedInputDataName(String uuid, String id) { Collection values = getCollection(id, uuid);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/profile/verticalcrosssection/VerticalCrossSectionParallelOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.state.profile.verticalcrosssection; + +import com.vividsolutions.jts.geom.Coordinate; +import com.vividsolutions.jts.geom.CoordinateSequence; +import com.vividsolutions.jts.geom.impl.CoordinateArraySequenceFactory; + +import com.vividsolutions.jts.io.WKTWriter; + +import de.intevation.gnv.artifacts.ressource.RessourceFactory; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import de.intevation.gnv.geobackend.base.query.QueryExecutor; +import de.intevation.gnv.geobackend.base.query.QueryExecutorFactory; + +import de.intevation.gnv.geobackend.base.query.exception.QueryException; + +import de.intevation.gnv.state.InputData; + +import de.intevation.gnv.utils.WKTUtils; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Locale; + +import org.apache.log4j.Logger; + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class VerticalCrossSectionParallelOutputState +extends VerticalCrossSectionOutputState +{ + public static final String QUERY_LINESTRING = + "verticalcrosssection_mesh_parallel_linestring"; + + private static Logger logger = + Logger.getLogger(VerticalCrossSectionParallelOutputState.class); + + @Override + protected String getLineString() { + Coordinate[] coordinates = null; + + try { + String[] filters = generateFilterValues(); + + QueryExecutor exec = QueryExecutorFactory + .getInstance() + .getQueryExecutor(); + + Collection results = exec.executeQuery(QUERY_LINESTRING, filters); + Iterator iter = results.iterator(); + + coordinates = new Coordinate[results.size()]; + int sIdx = -1; + int idx = 0; + + while (iter.hasNext()) { + Result result = (Result) iter.next(); + + if (sIdx == -1) { + ResultDescriptor rd = result.getResultDescriptor(); + sIdx = rd.getColumnIndex("SHAPE"); + } + + logger.debug(result.getString(sIdx)); + Coordinate c = WKTUtils.toCoordinate(result.getString(sIdx)); + + coordinates[idx++] = c; + } + } + catch (QueryException qe) { + logger.error(qe, qe); + } + + CoordinateArraySequenceFactory factory = + CoordinateArraySequenceFactory.instance(); + + if (coordinates == null) + return null; + + CoordinateSequence seq = factory.create(coordinates); + return seq != null ? WKTWriter.toLineString(seq) : null; + } + + + protected String[] generateFilterValues() { + String[] filters = new String[7]; + + InputData parameterid = inputData.get("parameterid"); + InputData timevalue = inputData.get("dateid"); + InputData meshid = inputData.get("meshid"); + InputData axisid = inputData.get("axisid"); + InputData meshpoint = inputData.get("mesh_point"); + + filters[0] = parameterid.getValue(); + filters[1] = "to_date('" + timevalue.getValue() + "', 'YYYY.MM.DD HH24:MI:SS')"; + filters[2] = meshid.getValue(); + filters[3] = meshid.getValue(); + filters[4] = axisid.getValue(); + filters[5] = axisid.getValue(); + filters[6] = meshpoint.getValue(); + + return filters; + } + + + @Override + protected String createChartSubtitle(Locale locale, String uuid) { + String subtitle = super.createChartSubtitle(locale, uuid); + + InputData data = inputData.get("mesh_point"); + if (data == null) + return subtitle; + + RessourceFactory factory = RessourceFactory.getInstance(); + String coordinate = factory.getRessource( + locale, "coordinate", "coordinate"); + + subtitle += "\n" + coordinate + ": "; + subtitle += data.getDescription(data.getValue()); + + return subtitle; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.state.timeseries; import java.io.IOException; @@ -26,8 +34,8 @@ import org.w3c.dom.NodeList; import au.com.bytecode.opencsv.CSVWriter; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; @@ -85,15 +93,6 @@ Boolean.parseBoolean(System.getProperty("cache.chart", "false")); /** - * A field parsing a system property to adjust the alignment of pdf exports. - * The system property is 'export.pdf.landscape' and should be true or - * false. If this property is true, PDFs will be created in landscape - * format. - */ - protected static final boolean PDF_FORMAT_LANDSCAPE = - Boolean.parseBoolean(System.getProperty("export.pdf.landscape","true")); - - /** * Supported image export formats. */ protected static final String[] IMG_EXPORT_FORMAT = { @@ -111,7 +110,7 @@ private static Logger log = Logger .getLogger(TimeSeriesOutputState.class); - private List<TimeGap> timeGapDefinitions = null; + protected List<TimeGap> timeGapDefinitions = null; /** * Key in resource bundle the x-axis title is stored. @@ -375,6 +374,12 @@ ); } else if (mode.equalsIgnoreCase("pdf")) { + callContext.putContextValue("chart.width", chartWidth); + callContext.putContextValue("chart.height", chartHeight); + callContext.putContextValue("shapes.visible", sVisible); + callContext.putContextValue("lines.visible", lVisible); + callContext.putContextValue("locale", locale); + createPDF( outputStream, parameters, @@ -383,10 +388,6 @@ chartLables, uuid, "A4", - true, - lVisible, - sVisible, - locale, callContext ); } @@ -409,24 +410,15 @@ } // HISTOGRAM else if (outputMode.equalsIgnoreCase("histogram")) { - Collection results = (Collection) getChartResult(uuid, callContext); requestParameter.put("locale", locale); - Object[][] data = HistogramHelper.prepareHistogramData( - results, parameters, measurements, dates); - - int size = data.length; - Chart[] histograms = new Chart[size]; - - for (int i = 0; i < size; i++) { - ChartLabels labels = createHistogramLabels( - uuid, callContext, locale, data[i]); - - ChartTheme theme = createStyle(callContext); - - histograms[i] = new DefaultHistogram( - labels, data[i], theme, requestParameter); - } + Chart[] histograms = getHistograms( + uuid, + callContext, + parameters, + measurements, + dates, + requestParameter); if (mode.equalsIgnoreCase("img")) { ChartExportHelper.exportHistograms( @@ -438,12 +430,15 @@ ); } else if (mode.equalsIgnoreCase("pdf")) { + callContext.putContextValue("chart.width", chartWidth); + callContext.putContextValue("chart.height", chartHeight); + ChartExportHelper.exportHistogramsAsPDF( outputStream, histograms, "A4", - PDF_FORMAT_LANDSCAPE, - 50F, 50F, 50F, 50F + 50F, 50F, 50F, 50F, + callContext ); } else if (mode.equalsIgnoreCase("svg")) { @@ -504,6 +499,36 @@ } + protected Chart[] getHistograms( + String uuid, + CallContext callContext, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates, + Map requestParameter + ) { + Locale locale = (Locale) requestParameter.get("locale"); + + Collection results = (Collection) getChartResult(uuid, callContext); + ChartTheme theme = createStyle(callContext); + + Object[][] data = HistogramHelper.prepareHistogramData( + results, parameters, measurements, dates); + + int size = data.length; + Chart[] histograms = new Chart[size]; + + for (int i = 0; i < size; i++) { + ChartLabels labels = HistogramHelper.createHistogramLabels( + uuid, callContext, locale, data[i]); + + histograms[i] = new DefaultHistogram( + labels, data[i], theme, requestParameter); + } + + return histograms; + } + /** * @param outputStream * @param uuid @@ -845,10 +870,6 @@ ChartLabels chartLables, String uuid, String exportFormat, - boolean landscape, - boolean linesVisible, - boolean shapesVisible, - Locale locale, CallContext context ) { Chart chart = getChart( @@ -858,10 +879,10 @@ measurements, dates, getChartResult(uuid, context), - locale, + (Locale) context.getContextValue("locale"), uuid, - linesVisible, - shapesVisible, + Boolean.TRUE.equals(context.getContextValue("lines.visible")), + Boolean.TRUE.equals(context.getContextValue("shapes.visible")), context ); @@ -874,8 +895,8 @@ outputStream, chart.generateChart(), "A4", - PDF_FORMAT_LANDSCAPE, - 50F, 50F, 50F, 50F + 50F, 50F, 50F, 50F, + context ); } @@ -935,7 +956,7 @@ outputStream, chart.generateChart(), null, - 600, 400 + width, height ); log.debug("svg export finished."); @@ -1109,27 +1130,6 @@ /** - * Creates and returns labels to decorate histograms. - * - * @param uuid The UUID of the current artifact. - * @param context The CallContext object. - * @param data An array storing strings. - * @return A ChartLabels object with the 1st string in <i>data</i> as title. - */ - protected ChartLabels createHistogramLabels( - String uuid, CallContext context, Locale locale, Object[] data) - { - RessourceFactory fac = RessourceFactory.getInstance(); - - return new ChartLabels( - (String) data[0], - "", - "", - fac.getRessource(locale, "histogram.axis.range.title", "")); - } - - - /** * Returns the selected fis name. * * @param locale The Locale object used to adjust the language.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/state/timeseries/TimeSeriesVectorOutputState.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.state.timeseries; + +import au.com.bytecode.opencsv.CSVWriter; + +import de.intevation.artifacts.CallContext; + +import de.intevation.gnv.artifacts.cache.CacheFactory; + +import de.intevation.gnv.chart.Chart; +import de.intevation.gnv.chart.ChartLabels; +import de.intevation.gnv.chart.TimeSeriesVectorChart; + +import de.intevation.gnv.exports.DefaultExport; +import de.intevation.gnv.exports.DefaultProfile; +import de.intevation.gnv.exports.Export; +import de.intevation.gnv.exports.Export.Profile; +import de.intevation.gnv.exports.SimpleOdvDataCollector; + +import de.intevation.gnv.geobackend.base.Result; + +import de.intevation.gnv.utils.VectorDataProcessor; + +import de.intevation.gnv.state.describedata.KeyValueDescibeData; +import de.intevation.gnv.state.exception.StateException; + +import de.intevation.gnv.statistics.Statistics; +import de.intevation.gnv.statistics.TimeseriesVectorStatistics; + +import java.io.IOException; +import java.io.OutputStream; + +import java.util.Collection; +import java.util.Locale; +import java.util.Map; + +import net.sf.ehcache.Cache; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class TimeSeriesVectorOutputState extends TimeSeriesOutputState { + + private static Logger logger = + Logger.getLogger(TimeSeriesVectorOutputState.class); + + public static final String[] RESULT_COLUMNS = { + "YORDINATE", "XORDINATE", "GROUP1", "GROUP2", "GROUP3", "GAPID", "SERIES" + }; + + public static final String[] ODV_COLUMN_HEADERS = { + "Cruise", + "Station", + "Type", + "yyyy-mm-dd hh:mm", + "Lon (°E)", + "Lat (°N)", + "Bot. Depth [m]", + "Depth [m]", + "QF", + "XComponent", + "QF", + "YComponent", + "QF", + "ZComponent", + "QF", + "Speed", + "QF", + "Direction", + "QF" + }; + + public static final String[] ODV_PROFILE_NAMES = { + "CRUISE", + "STATION", + "TYPE", + "TIMEVALUE", + "SHAPE", + "BOTDEPTH", + "DEPTH", + "QF", + "XCOMPONENT", + "QF", + "YCOMPONENT", + "QF", + "ZCOMPONENT", + "QF", + "SPEED", + "QF", + "DIRECTION", + "QF"}; + + public TimeSeriesVectorOutputState() { + } + + + @Override + protected Object getChartResult(String uuid, CallContext callContext) { + logger.debug("OutputStateBase.getChartResult"); + CacheFactory factory = CacheFactory.getInstance(); + + if (factory.isInitialized()) { + // we use a cache + logger.info("Using cache."); + Cache cache = factory.getCache(); + String key = "chart_" + getHash(); + + net.sf.ehcache.Element value = cache.get(key); + if (value != null) { + logger.debug("Found element in cache."); + return value.getObjectValue(); + } + else { + logger.debug("Element not in cache, we ask the database"); + Collection<Result> res = (Collection<Result>)getData(queryID); + res = VectorDataProcessor.process(res, RESULT_COLUMNS); + cache.put(new net.sf.ehcache.Element(key, res)); + + return res; + } + } + else { + // we don't use a cache, so we have to query the database every + // single time + logger.info("Not using a cache."); + return VectorDataProcessor.process( + getData(queryID), RESULT_COLUMNS); + } + } + + + @Override + protected Chart getChart( + ChartLabels chartLables, + ChartTheme theme, + Collection parameters, + Collection measurements, + Collection dates, + Object result, + Locale locale, + String uuid, + boolean linesVisible, + boolean shapesVisible, + CallContext callContext + ) { + Chart chart = new TimeSeriesVectorChart( + chartLables, + theme, + parameters, + measurements, + dates, + (Collection)result, + timeGapDefinitions, + locale, + linesVisible, + shapesVisible + ); + chart.generateChart(); + + return chart; + } + + + @Override + protected Chart[] getHistograms( + String uuid, + CallContext callContext, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates, + Map requestParameter + ) { + Collection results = (Collection) getChartResult(uuid, callContext); + ChartTheme theme = createStyle(callContext); + + return VectorDataProcessor.getHistograms( + uuid, callContext, results, theme, requestParameter); + } + + + @Override + protected void createODV( + OutputStream outputStream, Collection result, String uuid) + throws IOException, StateException + { + logger.info("Start exporting " + result.size() + " items to odv."); + Export export = new DefaultExport( + new SimpleOdvDataCollector(ODV_PROFILE_NAMES)); + + Profile profile = new DefaultProfile( + ODV_COLUMN_HEADERS, + '\t', + CSVWriter.NO_QUOTE_CHARACTER, + CSVWriter.NO_ESCAPE_CHARACTER, + "ODV", + "ISO-8859-1"); + + export.create(profile, outputStream, result); + } + + + protected Statistics getStatisticsGenerator() { + return new TimeseriesVectorStatistics(); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/AbstractStatistics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/AbstractStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.statistics; import org.apache.commons.math.stat.descriptive.DescriptiveStatistics;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/HorizontalProfileStatistics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/HorizontalProfileStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.statistics; import java.sql.SQLException;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/HorizontalProfileVectorStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.statistics; + +import com.vividsolutions.jts.geom.Point; +import com.vividsolutions.jts.io.ParseException; +import com.vividsolutions.jts.io.WKTReader; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import de.intevation.gnv.utils.DistanceCalculator; + +import java.sql.SQLException; + +import org.apache.log4j.Logger; + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class HorizontalProfileVectorStatistics +extends VectorStatistics +{ + + private static Logger logger = + Logger.getLogger(HorizontalProfileVectorStatistics.class); + + private WKTReader wktReader = new WKTReader(); + + private double distance; + + + public HorizontalProfileVectorStatistics() { + distance = 0; + } + + + protected void clear() { + distance = 0; + } + + + protected int getValueIdx(ResultDescriptor rd) { + return rd.getColumnIndex("YORDINATE"); + } + + + protected double calculateXOrdinateValue(Result prev, Result row) + throws SQLException + { + try { + Point start = (Point) wktReader.read(prev.getString("SHAPE")); + Point current = (Point) wktReader.read(row.getString("SHAPE")); + + double delta = DistanceCalculator.calculateDistance(start, current); + + distance = !Double.isNaN(delta) ? distance + delta : distance; + } + catch (ParseException e) { + logger.error(e,e); + } + return distance; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/Statistic.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/Statistic.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /** * Title: Statistic, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/Statistic.java,v 1.2 2007/12/21 12:31:15 blume Exp $ * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/Statistic.java,v $
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/StatisticSet.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/StatisticSet.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.statistics; import java.util.ArrayList;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/Statistics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/Statistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /** * Title: Statistics, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/Statistics.java,v 1.2 2008/01/30 12:38:34 blume Exp $ * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/Statistics.java,v $
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + /** * Title: TimeseriesStatistics, $Header: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v 1.3 2008/08/18 14:50:33 drewnak Exp $ * Source: $Source: /share/gdi/SDI-Suite/Repository/projekte/BSH-GDI/genericViewer/src/main/java/de/conterra/bsh/gdi/gnviewer/output/statistics/TimeseriesStatistics.java,v $
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/TimeseriesVectorStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.statistics; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import java.sql.SQLException; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class TimeseriesVectorStatistics +extends VectorStatistics +{ + public TimeseriesVectorStatistics() { + } + + + protected void clear() { + // nothing to clear + } + + + protected int getValueIdx(ResultDescriptor rd) { + return rd.getColumnIndex("YORDINATE"); + } + + + protected double calculateXOrdinateValue(Result prev, Result row) + throws SQLException + { + return new Double((row.getDate("XORDINATE")).getTime() / 1000 / 3600); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/VectorStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.statistics; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import de.intevation.gnv.state.describedata.KeyValueDescibeData; + +import de.intevation.gnv.statistics.exception.StatisticsException; + +import java.sql.SQLException; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +import org.apache.commons.math.stat.descriptive.DescriptiveStatistics; + +import org.apache.commons.math.stat.regression.SimpleRegression; + +import org.apache.log4j.Logger; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public abstract class VectorStatistics +extends AbstractStatistics +{ + private static Logger logger = + Logger.getLogger(VectorStatistics.class); + + private ResultDescriptor rd; + + + public VectorStatistics() { + } + + + public Collection<StatisticSet> calculateStatistics( + Object result, + Collection<KeyValueDescibeData> parameters, + Collection<KeyValueDescibeData> measurements, + Collection<KeyValueDescibeData> dates + ) throws StatisticsException { + if (!(result instanceof Collection)) + return new ArrayList<StatisticSet>(); + + Collection<Result> results = (Collection<Result>) result; + Collection<StatisticSet> stats = new ArrayList<StatisticSet>(); + + SimpleRegression lRegression = new SimpleRegression(); + DescriptiveStatistics lStatistics = new DescriptiveStatistics(); + + Result previous = null; + Result row = null; + String seriesName = null; + int valueIdx = -1; + int seriesIdx = -1; + + Iterator<Result> iter = results.iterator(); + + while (iter.hasNext()) { + row = iter.next(); + previous = previous == null ? row : previous; + + if (rd == null || seriesIdx == -1) { + rd = row.getResultDescriptor(); + valueIdx = getValueIdx(rd); + seriesIdx = rd.getColumnIndex("SERIES"); + } + + if (seriesName != null + && !row.getString(seriesIdx).equals(seriesName)) + { + stats.add(generateStatisticsValues( + lStatistics, lRegression, seriesName)); + + lStatistics.clear(); + lRegression.clear(); + + clear(); + } + + Double yValue = getValue(row, valueIdx); + + if (yValue != null) { + lStatistics.addValue(yValue); + + try { + double x = calculateXOrdinateValue(previous, row); + lRegression.addData(x, yValue); + } + catch (SQLException sqle) { + logger.warn(sqle, sqle); + } + } + + seriesName = row.getString(seriesIdx); + previous = row; + } + + if (seriesName != null && row != null) { + stats.add(generateStatisticsValues( + lStatistics, lRegression, seriesName)); + + lStatistics.clear(); + lRegression.clear(); + } + + return stats; + } + + + protected Double getValue(Result row, int idx) { + return row.getDouble(idx); + } + + + abstract protected void clear(); + + abstract protected int getValueIdx(ResultDescriptor rd); + + abstract protected double calculateXOrdinateValue(Result prev, Result now) + throws SQLException; +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/VerticalCrossSectionStatistics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/VerticalCrossSectionStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.statistics; import de.intevation.gnv.math.AttributedXYColumns;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/VerticalProfileStatistics.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/VerticalProfileStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.statistics; import de.intevation.gnv.geobackend.base.Result;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/VerticalProfileVectorStatistics.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.statistics; + +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import java.sql.SQLException; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public class VerticalProfileVectorStatistics +extends VectorStatistics +{ + public VerticalProfileVectorStatistics() { + } + + + protected void clear() { + // nothing to clear + } + + + protected int getValueIdx(ResultDescriptor rd) { + return rd.getColumnIndex("YORDINATE"); + } + + + protected double calculateXOrdinateValue(Result prev, Result row) + throws SQLException + { + return row.getDouble("XORDINATE"); + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/exception/StatisticsException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/statistics/exception/StatisticsException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.statistics.exception; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/TimeSeriesArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/TimeSeriesArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.timeseries; import de.intevation.artifacts.ArtifactFactory; +import de.intevation.artifacts.CallMeta; import de.intevation.gnv.artifacts.GNVArtifactBase; @@ -38,10 +47,15 @@ @Override - public void setup(String identifier, ArtifactFactory factory, - Object context, Document data) { + public void setup( + String identifier, + ArtifactFactory factory, + Object context, + CallMeta meta, + Document data + ) { log.debug("TimeSeriesArtifact.setup"); - super.setup(identifier, factory, context, data); + super.setup(identifier, factory, context, meta, data); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/TimeSeriesMeshArtifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/TimeSeriesMeshArtifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.timeseries; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/gap/DefaultTimeGap.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/gap/DefaultTimeGap.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.timeseries.gap; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/gap/TimeGap.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/timeseries/gap/TimeGap.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.timeseries.gap; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/DefaultTransition.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/DefaultTransition.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.transition; import de.intevation.gnv.state.State;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/PresettingsValueCompareTransition.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/PresettingsValueCompareTransition.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.transition; import java.util.Map; @@ -5,7 +13,7 @@ import org.apache.log4j.Logger; import org.w3c.dom.Node; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.gnv.state.InputData; import de.intevation.gnv.state.State;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/Transition.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/Transition.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.transition; import de.intevation.gnv.state.State;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.transition; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import org.w3c.dom.Node;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/TransitionFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.transition; import org.apache.log4j.Logger;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/transition/ValueCompareTransition.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/transition/ValueCompareTransition.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.transition; import java.util.Iterator; @@ -5,7 +13,7 @@ import org.apache.log4j.Logger; import org.w3c.dom.Node; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.gnv.state.InputData; import de.intevation.gnv.state.State; import de.intevation.gnv.state.exception.StateException;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/ArtifactXMLUtilities.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/ArtifactXMLUtilities.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.io.ByteArrayInputStream;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/DistanceCalculator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/DistanceCalculator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/ExclusiveExec.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/ExclusiveExec.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.util.HashMap;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/FileUtils.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/FileUtils.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.io.BufferedInputStream;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/IndexBuffer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/IndexBuffer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.awt.Point;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/InputValidator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/InputValidator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import com.vividsolutions.jts.geom.Coordinate; @@ -221,14 +229,20 @@ * @return true, if tmp is valid, otherwise false. */ public static boolean isDateValid(Date tmp, Date lo, Date up) { - // we need to transform the given dates into seconds, because - // they differ in milliseconds -> that's why we cannot use the - // Date.compareTo(Date) method. + // take the time in seconds to compare long tmpTime = tmp.getTime() / 1000; long tmpLow = lo.getTime() / 1000; long tmpUp = up.getTime() / 1000; - if (tmpTime < tmpLow || tmpTime > tmpUp) { + if (log.isDebugEnabled()) { + log.debug("Date validation..."); + log.debug("-> lower bound [sec]: " + tmpLow); + log.debug("-> upper bound [sec]: " + tmpUp); + log.debug("-> input data [sec]: " + tmpTime); + } + + // XXX There is a buffer of 1 second for the valid range of the time. + if (tmpTime < (tmpLow-1) || tmpTime > (tmpUp+1)) { log.warn( "Date [" + tmp.toString() + "] is out of range [" + lo.toString() + " to "+ up.toString() + "].");
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/MapfileGenerator.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/MapfileGenerator.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,7 +1,15 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; -import de.intevation.artifactdatabase.Config; -import de.intevation.artifactdatabase.XMLUtils; +import de.intevation.artifacts.common.utils.Config; +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/MetaWriter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/MetaWriter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.io.File; @@ -5,14 +13,19 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.text.DecimalFormat; import java.util.Date; +import javax.xml.xpath.XPathConstants; + import org.apache.log4j.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import de.intevation.artifactdatabase.XMLUtils; +import com.vividsolutions.jts.geom.Envelope; + +import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.ArtifactNamespaceContext; import de.intevation.artifacts.CallContext; import de.intevation.gnv.artifacts.context.GNVArtifactContext; @@ -34,11 +47,9 @@ public static final String NODE_TTL = "ttl"; public static final String META_FILE_NAME = "meta.xml"; - public static final String ISOLINES_NAME = "isolines.shp"; - public static final String POLYGON_NAME = "polygons.shp"; - - public static final String CONTEXT_LAYER_TITLE = "wms.title"; + public static final String XPATH_META = "/art:meta"; + public static final String XPATH_MAPSERVER = "art:meta/art:"+NODE_MAPSERVER; /** * Constructor. @@ -46,41 +57,13 @@ private MetaWriter() { } - /** - * Writes a meta information file for product type 'Layer'. - * - * @param context CallContext object. - * @param meta the document where the information should be placed in. - * @return the meta document. - */ - public static Node writeLayerMeta(CallContext context, Document meta){ - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - meta, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX); - Element root = creator.create("meta"); - meta.appendChild(root); - - writeAbstractMeta(context, meta, root); - return root; - } - /** - * Writes a meta information file for product type 'Horizontalschnitt'. + * Just create a new document and insert the root node. * - * @param context The CallContext object. - * @param uuid The UUID of the current artifact. - * @param path The destination of the meta file. - * @param paramType The parameter type. - * @return the meta document. + * @return the meta document with necessary root node. */ - public static Document writeHorizontalcrosssectionMeta( - CallContext context, - String uuid, - String path, - String paramType) - { + public static Document initMeta() { Document meta = XMLUtils.newDocument(); XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( meta, @@ -90,19 +73,108 @@ Element root = creator.create("meta"); meta.appendChild(root); - writeAbstractMeta(context, meta, root); - writePolygonMeta(context, meta, root, uuid, paramType); - writeIsolineMeta(context, meta, root, uuid, paramType); - - boolean success = writeMetaFile(path, meta); - - if (success){ - return meta; - }else{ - return null; - } + return meta; } + public static boolean insertLayer( + CallContext context, + Document document, + String name, + String title, + String data, + String model, + String type, + String status + ) { + if (document == null) { + document = initMeta(); + } + + Node meta = (Node) XMLUtils.xpath( + document, + XPATH_META, + XPathConstants.NODE, + ArtifactNamespaceContext.INSTANCE); + + if (meta == null) { + logger.error("No meta node was found in the given document. " + + "Cannot insert layer!"); + return false; + } + + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + document, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + + Element layerEl = creator.create(LayerInfo.LAYER); + Element nameEl = creator.create(LayerInfo.LAYER_NAME); + Element titleEl = creator.create(LayerInfo.LAYER_TITLE); + Element dataEl = creator.create(LayerInfo.LAYER_DATA); + Element modelEl = creator.create(LayerInfo.LAYER_MODEL); + Element typeEl = creator.create(LayerInfo.LAYER_TYPE); + Element statusEl = creator.create(LayerInfo.LAYER_STATUS); + + modelEl.setTextContent(model); + nameEl.setTextContent(name); + titleEl.setTextContent(title); + typeEl.setTextContent(type); + statusEl.setTextContent(status); + dataEl.setTextContent(data); + + layerEl.appendChild(modelEl); + layerEl.appendChild(nameEl); + layerEl.appendChild(titleEl); + layerEl.appendChild(dataEl); + layerEl.appendChild(typeEl); + layerEl.appendChild(statusEl); + + if (logger.isDebugEnabled()) { + logger.debug("--------------- WMS LAYER PARAMS ---------------"); + logger.debug("Name : " + name); + logger.debug("Title : " + title); + logger.debug("Data : " + data); + logger.debug("Type : " + type); + logger.debug("Model : " + model); + logger.debug("Status: " + status); + } + + meta.appendChild(layerEl); + + return true; + } + + /** + * Method to write the <i>meta</i> document down to a file. + * + * @param path The destination of the file. + * @param meta The xml document storing the meta information. + */ + public static boolean insertMbr(Envelope mbr, String srs, Document meta) { + Node mapserverNode = (Node) XMLUtils.xpath( + meta, + XPATH_MAPSERVER, + XPathConstants.NODE, + ArtifactNamespaceContext.INSTANCE); + if (mapserverNode != null){ + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( + meta, + ArtifactNamespaceContext.NAMESPACE_URI, + ArtifactNamespaceContext.NAMESPACE_PREFIX); + Element bboxNode = creator.create("Box"); + bboxNode.setAttribute("srsName", srs); + Element coordinateNode = creator.create("coordinates"); + + DecimalFormat formatter = new DecimalFormat("###.############"); + coordinateNode.setTextContent(formatter.format(mbr.getMinX()).replace(',', '.') +","+ + formatter.format(mbr.getMinY()).replace(',', '.')+" "+ + formatter.format(mbr.getMaxX()).replace(',', '.') +","+ + formatter.format(mbr.getMaxY()).replace(',', '.')); + mapserverNode.appendChild(bboxNode); + bboxNode.appendChild(coordinateNode); + } + return true; + } /** * Method to write the <i>meta</i> document down to a file. * @@ -160,11 +232,20 @@ * @param document The meta information document. * @param meta The element where the new information need to be appended to. */ - public static void writeAbstractMeta( + public static void insertAbstractMeta( CallContext callContext, - Document document, - Element meta + Document document ) { + if (document == null) { + document = initMeta(); + } + + Node meta = (Node) XMLUtils.xpath( + document, + XPATH_META, + XPathConstants.NODE, + ArtifactNamespaceContext.INSTANCE); + XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( document, ArtifactNamespaceContext.NAMESPACE_URI, @@ -179,197 +260,29 @@ String map = (String) context.get(GNVArtifactContext.MAPSERVER_MAP_PATH_KEY); + Long time = callContext.getTimeToLive(); + time = time != null ? time + new Date().getTime() : null; + String ttl = time != null ? time.toString() : null; + if (logger.isDebugEnabled()) { logger.debug("MAPSERVER PATH: " + server); logger.debug("MAP PATH: " + map); + logger.debug("TTL: " + ttl); } Element mapserver = creator.create(NODE_MAPSERVER); Element serverPath = creator.create(NODE_SERVER); Element mapPath = creator.create(NODE_MAP); + Element timetolive = creator.create(NODE_TTL); mapPath.setTextContent(map); serverPath.setTextContent(server); + timetolive.setTextContent(ttl); mapserver.appendChild(serverPath); mapserver.appendChild(mapPath); + mapserver.appendChild(timetolive); meta.appendChild(mapserver); } - - /** - * Append layer information to the meta document. - * - * @param callContext The CallContext object. - * @param document The meta document. - * @param root The element where the new information need to be appended to. - * @param uuid The UUID of the current artifact. - * @param paramType The parameter type (e.g. salinity). - * @param layerType The layer type. - * @param shapefileName the name of the Shapefile - * @param shapefileName the Title of the Layer - */ - public static void writeLayerMeta( - CallContext callContext, - Document document, - Node root, - String uuid, - String paramType, - String layerType, - String shapefileName, - String layerTitle - ) { - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX); - - Long time = callContext.getTimeToLive(); - time = time != null ? time + new Date().getTime() : null; - String ttl = time != null ? time.toString() : null; - - logger.debug("Artifacts time to live: " + ttl); - - Element layer = creator.create(LayerInfo.LAYER); - Element model = creator.create(LayerInfo.LAYER_MODEL); - Element name = creator.create(LayerInfo.LAYER_NAME); - Element title = creator.create(LayerInfo.LAYER_TITLE); - Element type = creator.create(LayerInfo.LAYER_TYPE); - Element status = creator.create(LayerInfo.LAYER_STATUS); - Element data = creator.create(LayerInfo.LAYER_DATA); - Element timeToLive = creator.create(NODE_TTL); - - model.setTextContent(paramType); - name.setTextContent(uuid); - type.setTextContent(layerType); - status.setTextContent("OFF"); - data.setTextContent(shapefileName); - timeToLive.setTextContent(ttl); - - title.setTextContent(layerTitle); - - layer.appendChild(model); - layer.appendChild(name); - layer.appendChild(title); - layer.appendChild(type); - layer.appendChild(status); - layer.appendChild(data); - layer.appendChild(timeToLive); - - root.appendChild(layer); - } - - - /** - * Append polygon layer information to meta document. - * - * @param context - * @param document The meta document. - * @param meta The element where the new information need to be appended to. - * @param uuid The UUID of the current artifact. - * @param paramType The parameter type (e.g. salinity). - */ - public static void writePolygonMeta( - CallContext context, - Document document, - Element meta, - String uuid, - String paramType - ) { - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX); - - Long time = context.getTimeToLive(); - time = time != null ? time + new Date().getTime() : null; - String ttl = time != null ? time.toString() : null; - - logger.debug("Artifacts time to live: " + ttl); - - Element layer = creator.create(LayerInfo.LAYER); - Element model = creator.create(LayerInfo.LAYER_MODEL); - Element name = creator.create(LayerInfo.LAYER_NAME); - Element title = creator.create(LayerInfo.LAYER_TITLE); - Element type = creator.create(LayerInfo.LAYER_TYPE); - Element status = creator.create(LayerInfo.LAYER_STATUS); - Element data = creator.create(LayerInfo.LAYER_DATA); - Element timeToLive = creator.create(NODE_TTL); - - model.setTextContent(paramType); - name.setTextContent(uuid); - title.setTextContent( - (String) context.getContextValue(CONTEXT_LAYER_TITLE)); - type.setTextContent("POLYGON"); - status.setTextContent("OFF"); - data.setTextContent(POLYGON_NAME); - timeToLive.setTextContent(ttl); - - layer.appendChild(model); - layer.appendChild(name); - layer.appendChild(title); - layer.appendChild(type); - layer.appendChild(status); - layer.appendChild(data); - layer.appendChild(timeToLive); - - meta.appendChild(layer); - } - - - /** - * Append isoline layer information to meta document. - * - * @param context - * @param document The meta document. - * @param meta The element where the new information need to be appended to. - * @param uuid The UUID of the current artifact. - * @param paramType The parameter type (e.g. salinity). - */ - public static void writeIsolineMeta( - CallContext context, - Document document, - Element meta, - String uuid, - String paramType - ) { - XMLUtils.ElementCreator creator = new XMLUtils.ElementCreator( - document, - ArtifactNamespaceContext.NAMESPACE_URI, - ArtifactNamespaceContext.NAMESPACE_PREFIX); - - Long time = context.getTimeToLive(); - time = time != null ? time + new Date().getTime() : null; - String ttl = time != null ? time.toString() : null; - - logger.debug("Artifacts time to live: " + ttl); - - Element layer = creator.create(LayerInfo.LAYER); - Element model = creator.create(LayerInfo.LAYER_MODEL); - Element name = creator.create(LayerInfo.LAYER_NAME); - Element title = creator.create(LayerInfo.LAYER_TITLE); - Element type = creator.create(LayerInfo.LAYER_TYPE); - Element status = creator.create(LayerInfo.LAYER_STATUS); - Element data = creator.create(LayerInfo.LAYER_DATA); - Element timeToLive = creator.create(NODE_TTL); - - model.setTextContent(paramType+"_isolines"); - name.setTextContent(uuid); - title.setTextContent( - (String) context.getContextValue(CONTEXT_LAYER_TITLE)); - type.setTextContent("LINE"); - status.setTextContent("OFF"); - data.setTextContent(ISOLINES_NAME); - timeToLive.setTextContent(ttl); - - layer.appendChild(model); - layer.appendChild(name); - layer.appendChild(title); - layer.appendChild(type); - layer.appendChild(status); - layer.appendChild(data); - layer.appendChild(timeToLive); - - meta.appendChild(layer); - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/Pair.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/Pair.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.io.Serializable;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/ShapeFileWriter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/ShapeFileWriter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import java.io.File;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/StringUtils.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/StringUtils.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; /**
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/VectorDataProcessor.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.utils; + +import de.intevation.artifacts.CallContext; + +import de.intevation.gnv.chart.Chart; +import de.intevation.gnv.chart.ChartLabels; +import de.intevation.gnv.chart.DefaultHistogram; + +import de.intevation.gnv.geobackend.base.DefaultResult; +import de.intevation.gnv.geobackend.base.DefaultResultDescriptor; +import de.intevation.gnv.geobackend.base.Result; +import de.intevation.gnv.geobackend.base.ResultDescriptor; + +import de.intevation.gnv.histogram.HistogramHelper; + +import de.intevation.gnv.state.describedata.KeyValueDescibeData; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.apache.log4j.Logger; + +import org.jfree.chart.ChartTheme; + + +/** + * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> + */ +public final class VectorDataProcessor { + + private static Logger logger = Logger.getLogger(VectorDataProcessor.class); + + public static Collection<Result> process( + Collection<Result> input, String[] columnNames) + { + logger.info("Process vector data (" + input.size() + " items)"); + + ResultDescriptor outDescriptor = initResultDescriptor(columnNames); + ResultDescriptor inDescriptor = null; + int[] inIndices = null; + int columns = -1; + + Map series = new HashMap(); + + // for each result of the incoming result + for (Result result: input) { + if (inDescriptor == null || inIndices == null) { + inDescriptor = result.getResultDescriptor(); + inIndices = inDescriptor.getColumnIndices(columnNames); + columns = inDescriptor.getColumnCount(); + } + + // for each column of the incoming result object + for (int i = 0; i < columns; i++) { + String name = inDescriptor.getColumnName(i); + + if (!StringUtils.contains(columnNames, name)) { + List list = (List) series.get(name); + if (list == null) + list = new ArrayList(); + + Result out = new DefaultResult(outDescriptor); + Object value = result.getObject(i); + + // skipp results that have no data value + if (value == null) + continue; + + out.addColumnValue(0, value); + + // add meta data to result object + // TODO: Maybe we could do this one single time, because the + // TODO: meta data will not change + for (int j = 1; j < inIndices.length -1; j++) { + out.addColumnValue(j, result.getObject(inIndices[j])); + } + + // add the name of the component to distinguish between + // different series later in the chart creation + out.addColumnValue(inIndices.length-1, name); + + list.add(out); + series.put(name, list); + } + } + } + + // finally, we put all lists together + Iterator iter = series.values().iterator(); + List output = new ArrayList(); + while (iter.hasNext()) { + output.addAll((Collection)iter.next()); + } + + logger.info("Data processing created " + output.size() + " elements."); + return output; + } + + + public static ResultDescriptor initResultDescriptor(String[] columnNames) { + logger.debug("Init ResultDescriptor for outgoing results."); + + ResultDescriptor desc = new DefaultResultDescriptor(); + + for (String name: columnNames) { + desc.addColumn(name, "java.lang.String"); + } + + logger.debug("Outgoing ResultDescriptor has " + desc.getColumnCount() + + " columns"); + return desc; + } + + + public static Chart[] getHistograms( + String uuid, + CallContext callContext, + Collection<KeyValueDescibeData> results, + ChartTheme theme, + Map requestParameter + ) { + Locale locale = (Locale) requestParameter.get("locale"); + + Object[][] data = HistogramHelper.prepareVectorialHistogramData(results); + int size = data.length; + + Chart[] histograms = new Chart[size]; + + for (int i = 0; i < size; i++) { + ChartLabels labels = HistogramHelper.createHistogramLabels( + uuid, callContext, locale, data[i]); + + histograms[i] = new DefaultHistogram( + labels, data[i], theme, requestParameter); + } + + return histograms; + } +} +// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/WKTUtils.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/WKTUtils.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/utils/exception/ValidationException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/utils/exception/ValidationException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.utils.exception; /**
--- a/gnv-artifacts/src/main/java/de/intevation/gnv/wms/LayerInfo.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/java/de/intevation/gnv/wms/LayerInfo.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.wms; /**
--- a/gnv-artifacts/src/main/resources/lang/artifactMessages.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/resources/lang/artifactMessages.properties Fri Sep 28 12:15:22 2012 +0200 @@ -27,6 +27,7 @@ horizontalProfileCross = Horizontales Schnittprofil horizontalCrossSection = Horizontal cross-section verticalcrosssection = Vertical cross-section +verticalcrosssectionparallel = Achsenparalleler Vertikalschnitt layer = Layer featureid = Station mesh_coordinate = Geographic position (e.g. 56n30 6e20) @@ -62,6 +63,9 @@ coordinate.template.southeast={0}\u00b0S {1}'' {2}\u00b0E {3}'' coordinate.template.northwest={0}\u00b0N {1}'' {2}\u00b0W {3}'' coordinate.template.southwest={0}\u00b0S {1}'' {2}\u00b0W {3}'' +vectorscalar = Vector / Scalar values +vectorvalues = Vector values +scalarvalues = Scalar values chart.timeseries.date.format=yyyy-MMM-dd chart.timeseries.title.xaxis=Time [UTC] @@ -77,6 +81,7 @@ no.input.data= No Entry was chosen. Please select at least one entry. input.is.not.valid=Invalid input. Please try again. input.is.not.valid.date.required=Invalid input. A date is required. Please try again. +input.is.not.valid.minmax=Input is not valid for this state. start.date.after.end.date=Start date lies after end date. Please try again. date.out.of.range=Date is out of range. missing.data.field=Can't validate selected date. Missing date, lower or upper date bound.
--- a/gnv-artifacts/src/main/resources/lang/artifactMessages_de.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/resources/lang/artifactMessages_de.properties Fri Sep 28 12:15:22 2012 +0200 @@ -26,6 +26,7 @@ horizontalProfileCross = Horizontales Schnittprofil horizontalCrossSection = Horizontalschnitt verticalcrosssection = Profilschnitt +verticalcrosssectionparallel = Achsenparalleler Vertikalschnitt layer = Layer featureid = Station meshid= Datengitter @@ -62,6 +63,9 @@ coordinate.template.southeast={0}\u00b0S {1}'' {2}\u00b0O {3}'' coordinate.template.northwest={0}\u00b0N {1}'' {2}\u00b0W {3}'' coordinate.template.southwest={0}\u00b0S {1}'' {2}\u00b0W {3}'' +vectorscalar = Vektorielle / Skalare Werte +vectorvalues = Vektorielle Werte +scalarvalues = Skalare Werte chart.timeseries.date.format=dd-MMM-yyyy chart.timeseries.title.xaxis=Zeit [UTC] @@ -77,6 +81,7 @@ no.input.data=Es wurde kein Eintrag ausgew\u00e4hlt. Bitte w\u00e4hlen sie mindestens einen Eintrag aus. input.is.not.valid=Ung\u00fcltige Eingabe. Bitte versuchen Sie es erneut. input.is.not.valid.date.required=Ung\u00fcltige Eingabe. Ein Datum wird ben\u00f6tigt. Bitte versuchen Sie es erneut. +input.is.not.valid.minmax=Die get\u00e4tigte Eingabe ist ung\u00fctig. start.date.after.end.date=Anfangsdatum liegt hinter dem Enddatum. Bitte versuchen Sie es erneut. date.out.of.range=Das gew\u00e4hlte Datum liegt au\u00dferhalb des gültigen Wertebereiches. missing.data.field=Validierung der Datumseingabe nicht m\u00f6glich. Datum, obere oder untere Grenze fehlt.
--- a/gnv-artifacts/src/main/resources/lang/artifactMessages_de_DE.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/resources/lang/artifactMessages_de_DE.properties Fri Sep 28 12:15:22 2012 +0200 @@ -26,6 +26,7 @@ horizontalProfileCross = Horizontales Schnittprofil horizontalCrossSection = Horizontalschnitt verticalcrosssection = Profilschnitt +verticalcrosssectionparallel = Achsenparalleler Vertikalschnitt layer = Layer featureid = Station meshid= Datengitter @@ -62,6 +63,9 @@ coordinate.template.southeast={0}\u00b0S {1}'' {2}\u00b0O {3}'' coordinate.template.northwest={0}\u00b0N {1}'' {2}\u00b0W {3}'' coordinate.template.southwest={0}\u00b0S {1}'' {2}\u00b0W {3}'' +vectorscalar = Vektorielle / Skalare Werte +vectorvalues = Vektorielle Werte +scalarvalues = Skalare Werte chart.timeseries.date.format=dd-MMM-yyyy chart.timeseries.title.xaxis=Zeit [UTC] @@ -77,6 +81,7 @@ no.input.data=Es wurde kein Eintrag ausgew\u00e4hlt. Bitte w\u00e4hlen sie mindestens einen Eintrag aus. input.is.not.valid=Ung\u00fcltige Eingabe. Bitte versuchen Sie es erneut. input.is.not.valid.date.required=Ung\u00fcltige Eingabe. Ein Datum wird ben\u00f6tigt. Bitte versuchen Sie es erneut. +input.is.not.valid.minmax=Die get\u00e4tigte Eingabe ist ung\u00fctig. start.date.after.end.date=Anfangsdatum liegt nach dem Enddatum. Bitte versuchen Sie es erneut. date.out.of.range=Das gew\u00e4hlte Datum liegt au\u00dferhalb des gültigen Wertebereiches. missing.data.field=Validierung der Datumseingabe nicht m\u00f6glich. Datum, obere oder untere Grenze fehlt.
--- a/gnv-artifacts/src/main/resources/lang/artifactMessages_en.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/main/resources/lang/artifactMessages_en.properties Fri Sep 28 12:15:22 2012 +0200 @@ -27,6 +27,7 @@ horizontalProfileCross = Horizontales Schnittprofil horizontalCrossSection = Horizontal cross-section verticalcrosssection = Vertical cross-section +verticalcrosssectionparallel = Achsenparalleler Vertikalschnitt layer = Layer featureid = Station mesh_coordinate = Geographic position (e.g. 56n30 6e20) @@ -62,6 +63,9 @@ coordinate.template.southeast={0}\u00b0S {1}'' {2}\u00b0E {3}'' coordinate.template.northwest={0}\u00b0N {1}'' {2}\u00b0W {3}'' coordinate.template.southwest={0}\u00b0S {1}'' {2}\u00b0W {3}'' +vectorscalar = Vector / Scalar values +vectorvalues = Vector values +scalarvalues = Scalar values chart.timeseries.date.format=yyyy-MMM-dd @@ -78,6 +82,7 @@ no.input.data= No Entry was chosen. Please select at least one entry. input.is.not.valid=Invalid input. Please try again. input.is.not.valid.date.required=Invalid input. A date is required. Please try again. +input.is.not.valid.minmax=Input is not valid for this state. start.date.after.end.date=Start date lies after end date. Please try again. date.out.of.range=Date is out of range. missing.data.field=Can't validate selected date. Missing date, lower or upper date bound.
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestCaseBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; -import de.intevation.artifactdatabase.Config; +import de.intevation.artifacts.common.utils.Config; import de.intevation.artifactdatabase.DefaultCallMeta; import de.intevation.artifactdatabase.DefaultPreferredLocale; import de.intevation.artifactdatabase.FactoryBootstrap; @@ -182,6 +190,7 @@ Artifact artifact = artifactFactory.createArtifact( "" + System.currentTimeMillis(), bootstrap.getContext(), + null, setupData); assertNotNull(artifact); log.debug("Artifact is available");
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestSuite.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/GNVArtifactsTestSuite.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import junit.framework.Test;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/InstantaneousPointHorizontalProfileTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/InstantaneousPointHorizontalProfileTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/InstantaneousPointVerticalProfileTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/InstantaneousPointVerticalProfileTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshHorizontalCrossSectionTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshHorizontalCrossSectionTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshHorizontalProfileTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshHorizontalProfileTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshTimeSeriesTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshTimeSeriesTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshVerticalCrossSectionTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshVerticalCrossSectionTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshVerticalProfileTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/MeshVerticalProfileTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TestArtifactDatabase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TestArtifactDatabase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; +import de.intevation.artifacts.Artifact; import de.intevation.artifacts.ArtifactDatabase; import de.intevation.artifacts.ArtifactDatabaseException; import de.intevation.artifacts.ArtifactFactory; @@ -77,13 +86,26 @@ /** * @see de.intevation.artifacts.ArtifactDatabase#out(java.lang.String, org.w3c.dom.Document, de.intevation.artifacts.CallMeta) */ - public DeferredOutput out(String artifact, Document format, - CallMeta callMeta) - throws ArtifactDatabaseException { + public DeferredOutput out( + String artifact, + Document format, + CallMeta callMeta) + throws ArtifactDatabaseException { return null; } + public DeferredOutput out( + String artifact, + String type, + Document format, + CallMeta callMeta) + throws ArtifactDatabaseException + { + return null; + + } + public Document process(String service, Document input, CallMeta callMeta) { return null; } @@ -100,4 +122,259 @@ throw new UnsupportedOperationException("Not supported yet."); } + + public void loadAllArtifacts(ArtifactLoadedCallback callback) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Artifact getRawArtifact(String identifier) + throws ArtifactDatabaseException { + throw new UnsupportedOperationException("Not supported yet."); + } + + + + // COLLECTION API + + public Document setCollectionTTL(String collectionId, Document doc, CallMeta meta) + throws ArtifactDatabaseException { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Document setCollectionName(String collectionId, Document doc, CallMeta meta) + throws ArtifactDatabaseException { + throw new UnsupportedOperationException("Not supported yet."); + } + + + public DeferredOutput outCollection(String collectionId, Document format, CallMeta callMeta) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public DeferredOutput outCollection(String collectionId, String type, Document format, CallMeta callMeta) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param meta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document getCollectionsMasterArtifact( + String collectionId, + CallMeta meta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param userId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document listCollections(String userId, CallMeta callMeta) + throws ArtifactDatabaseException { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param ownerId + * @param data + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document createCollection( + String ownerId, + Document data, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document deleteCollection(String collectionId, CallMeta callMeta) + throws ArtifactDatabaseException { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document describeCollection(String collectionId, CallMeta callMeta) + throws ArtifactDatabaseException { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document getCollectionAttribute( + String collectionId, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Document setCollectionAttribute( + String collectionId, + CallMeta callMeta, + Document attribute) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param artifactId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document getCollectionItemAttribute( + String collectionId, + String artifactId, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param artifactId + * @param attribute + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document setCollectionItemAttribute( + String collectionId, + String artifactId, + Document attribute, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param artifactId + * @param input + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document addCollectionArtifact( + String collectionId, + String artifactId, + Document input, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param artifactId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document removeCollectionArtifact( + String collectionId, + String artifactId, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + /** + * @param collectionId + * @param callMeta + * + * @throws ArtifactDatabaseException + * + * @return + */ + public Document listCollectionArtifacts( + String collectionId, + CallMeta callMeta + ) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + + public Document listUsers(CallMeta callMeta) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Document createUser(Document data, CallMeta callMeta) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Document deleteUser(String userId, CallMeta callMeta) + throws ArtifactDatabaseException + { + throw new UnsupportedOperationException("Not supported yet."); + } }
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TestCallContext.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TestCallContext.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,22 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; +import java.util.List; +import java.util.LinkedList; + import de.intevation.artifacts.ArtifactDatabase; import de.intevation.artifacts.ArtifactFactory; import de.intevation.artifacts.CallContext; import de.intevation.artifacts.CallMeta; +import de.intevation.artifacts.DataProvider; +import de.intevation.artifacts.Message; /** * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> @@ -40,6 +53,14 @@ public void afterCall(int action) { } + public boolean isInBackground() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void addBackgroundMessage(Message msg) { + throw new UnsupportedOperationException("Not supported yet."); + } + /** * @see de.intevation.artifacts.CallContext#globalContext() */ @@ -66,4 +87,16 @@ public Long getTimeToLive() { throw new UnsupportedOperationException("Not supported yet."); } + + public Object registerDataProvider(Object key, DataProvider provider) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public List<DataProvider> getDataProvider(Object key) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public LinkedList<Message> getBackgroundMessages() { + throw new UnsupportedOperationException("Not supported yet."); + } }
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TimeSeriesPointTimeSeriesTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TimeSeriesPointTimeSeriesTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TimeSeriesPointVerticalProfileTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/TimeSeriesPointVerticalProfileTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts; import de.intevation.artifacts.Artifact;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/ressource/RessourceFactoryTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/ressource/RessourceFactoryTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.ressource; import de.intevation.artifactdatabase.DefaultPreferredLocale;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/util/DistanceCalculatorTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/util/DistanceCalculatorTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.util; import com.vividsolutions.jts.geom.Coordinate;
--- a/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/util/ShapeFileWriterTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv-artifacts/src/test/java/de/intevation/gnv/artifacts/util/ShapeFileWriterTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifacts.util; import com.vividsolutions.jts.geom.MultiLineString;
--- a/gnv/ChangeLog Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/ChangeLog Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,983 @@ +2011-02-01 Ingo Weinzierl <ingo@intevation.de> + + * pom.xml: Upgraded the Restlet version from 2.0-SNAPSHOT to 2.0.4 which is + the current stable release. + + * src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java: + Renamed the packages of Request and Response that have been changed from + Restlet 2.0-SNAPSHOT to 2.0.4. + +2010-11-30 Ingo Weinzierl <ingo@intevation.de> + + * src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java: + Bugfix: if debug logging was disabled for this class, a Nullpointer + exception would have been thrown. + +2010-11-29 Ingo Weinzierl <ingo@intevation.de> + + * src/main/java/de/intevation/gnv/util/CaptureInputStream.java: New. This + class makes it possible to capture incoming data (InputStream) in a proper + way. + + * src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java: + Improved the mechanism to print the incoming data to log by using the + CaptureInputStream class. + +2010-11-26 Ingo Weinzierl <ingo@intevation.de> + + ISSUE #323 + + * src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java: + In addition to the last revision: XML documents of HTTP Post request are + also logged to the logfile. + +2010-11-26 Ingo Weinzierl <ingo@intevation.de> + + ISSUE #323 + + * src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java: + Log the xml document of the MapViewer call (DEBUG). + + * src/main/webapp/WEB-INF/classes/log4j.properties: Enabled the DEBUG + output of the MapViewerCallAction logging, so that the MapViewer call xml + document can be found in the log file. + +2010-11-02 Ingo Weinzierl <ingo@intevation.de> + + * src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java, + src/test/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserTestCase.java, + src/test/java/de/intevation/gnv/util/XSLTransformerTestCase.java, + src/main/java/de/intevation/gnv/propertiesreader/PropertiesReader.java, + src/main/java/de/intevation/gnv/propertiesreader/ServletPropertiesReader.java, + src/main/java/de/intevation/gnv/propertiesreader/PropertiesReaderFactory.java, + src/main/java/de/intevation/gnv/propertiesreader/MapPropertiesReader.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/InputParameter.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/OutputParameter.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactDescription.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/OutputMode.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultInputParameter.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputParameter.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputMode.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactStatisticValue.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactStatisticsSet.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactObject.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactFactory.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ExportMode.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticValue.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticsSet.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultExportMode.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ParametrizedArtifactObject.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultLayer.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultMapService.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/Layer.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/MapService.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/Artifact.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ParametrizedArtifactFactory.java, + src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java, + src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java, + src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientFactory.java, + src/main/java/de/intevation/gnv/artifactdatabase/client/exception/ArtifactDatabaseClientException.java, + src/main/java/de/intevation/gnv/artifactdatabase/client/exception/ArtifactDatabaseInputException.java, + src/main/java/de/intevation/gnv/servlet/GNVActionServlet.java, + src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java, + src/main/java/de/intevation/gnv/action/CommunicationKeys.java, + src/main/java/de/intevation/gnv/action/DoExportAction.java, + src/main/java/de/intevation/gnv/action/SwitchLanguageAction.java, + src/main/java/de/intevation/gnv/action/WMSAction.java, + src/main/java/de/intevation/gnv/action/FetchArtifactFactoriesAction.java, + src/main/java/de/intevation/gnv/action/ShowStatisticAction.java, + src/main/java/de/intevation/gnv/action/ArtifactDatabaseActionBase.java, + src/main/java/de/intevation/gnv/action/DescribeUIAction.java, + src/main/java/de/intevation/gnv/action/LoadAction.java, + src/main/java/de/intevation/gnv/action/SelectFisAction.java, + src/main/java/de/intevation/gnv/action/CreateHistogramAction.java, + src/main/java/de/intevation/gnv/action/mapviewer/ShowMapViewerCallBodyAction.java, + src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java, + src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserException.java, + src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParser.java, + src/main/java/de/intevation/gnv/action/mapviewer/parser/XMLExternalCallParser.java, + src/main/java/de/intevation/gnv/action/DoOutputAction.java, + src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java, + src/main/java/de/intevation/gnv/action/MapClientStandaloneAction.java, + src/main/java/de/intevation/gnv/action/CreateChartAction.java, + src/main/java/de/intevation/gnv/action/sessionmodel/SessionModel.java, + src/main/java/de/intevation/gnv/action/sessionmodel/DefaultSessionModel.java, + src/main/java/de/intevation/gnv/action/sessionmodel/SessionModelFactory.java, + src/main/java/de/intevation/gnv/action/sessionmodel/DiagrammOptions.java, + src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java, + src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java, + src/main/java/de/intevation/gnv/action/StoreAction.java, + src/main/java/de/intevation/gnv/util/ArtifactNamespaceContext.java, + src/main/java/de/intevation/gnv/util/XMLUtils.java, + src/main/java/de/intevation/gnv/util/XSLTransformer.java, + src/main/webapp/images/bfg-logo.gif, + src/main/webapp/WEB-INF/jsp/wmslayout.jsp, + src/main/webapp/WEB-INF/jsp/version.jsp, + src/main/webapp/WEB-INF/jsp/index.jsp, + src/main/webapp/WEB-INF/jsp/header.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_wms_basic_informations.jsp, + src/main/webapp/WEB-INF/jsp/includes/info_german.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_histogram_options_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_diagramm_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_export_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_fis_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_wms_options_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/info_english.jsp, + src/main/webapp/WEB-INF/jsp/includes/wms_header_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_diagramm_statistics_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_mapviewercall_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_diagramm_options_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_histogram_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_map_fullscreen_inc.jsp, + src/main/webapp/WEB-INF/jsp/info.jsp, + src/main/webapp/WEB-INF/jsp/footer.jsp, + src/main/webapp/WEB-INF/jsp/wmsstandalone.jsp, + src/main/webapp/WEB-INF/jsp/imprint.jsp, + src/main/webapp/WEB-INF/jsp/mainlayout.jsp: Added a license header to each + of these files. + + * LGPL.txt: Added the license text of the GNU LGPL. + +2010-07-05 Hans Plum <hans.plum@intevation.de> + + * src/main/webapp/WEB-INF/jsp/includes/info_german.jsp: + Made name more precise. + +2010-07-01 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + RELEASE 1.1 + + * src/main/webapp/styles/gnv.css: Some style adjustments for the info pages. + + * src/main/webapp/WEB-INF/jsp/info.jsp: The outer info page. It handles the + different languages (german, english) and includes the localized info page + corresponding the current locale. + + * src/main/webapp/WEB-INF/jsp/includes/info_german.jsp, + src/main/webapp/WEB-INF/jsp/includes/info_english.jsp: German and english + info pages. Currently, just the german page is filled with content. + + * pom.xml: Do not check if there are local changes before writing + buildnumber into MANIFEST. Local changes would stop the build process. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * Changes, NEWS, ChangeLog: Summarized changes + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue311 + + * src/main/webapp/scripts/viewport.jsp: Changed OpenLayers MouseDefault + control with a Navigation control which is initially disabled. Users need + to activate the navigation control for panning expicitly before panning. + +2010-06-30 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue307 + + * src/main/webapp/scripts/viewport.jsp: Added a 'resize' listener for the + browser window. If the browser window is resized, the size of the map + panel is adapted. For example, you have a small browser window at the + beginning and resize it later to its maximal size, the map panel takes all + the place it can get. Currently, just the width is adapted, because outer + div container has a fix height that doesn't change. + +2010-06-29 Tim Englich <tim.englich@intevation.de> + + ISSU317 + + * src/main/resources/applicationMessages*.properties: + Added i18n support for the Name of the GNV Web Map Service. + + * src/main/webapp/WEB-INF/jsp/includes/wms_header_inc.jsp: + Added variable capfile to be able to reference the combobox directly. + + * src/main/webapp/WEB-INF/config/reachable-servers.conf: + Added configurationfile to fill the combobox with WMS. + + * src/main/webapp/scripts/olutils.jsp: + Read URL to Capabilities-Document from selected Item in Combobox. + Also switched to singleTile mode for inserted Layers. + + * src/main/webapp/scripts/viewport.jsp: + Switched Inputfile for GetCapabilities URl to an Combobox. + +2010-06-29 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/images/ol/cloud-popup-relative.png: + Added missing Image for the PopupWindow of GetFeatureInforRequests. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE308 + + * src/main/webapp/styles/ol_style.css: + Removed unused CSS .title + + * src/main/webapp/images/ol/wvHeaderBG.gif: + Removed unused Image. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE311 + + * src/main/webapp/WEB-INF/jsp/includes/display_map_fullscreen_inc.jsp: + Syncronized size of the headline of fullscreen-mode of the map-client + to the size of the headline of the web-client. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE311 + + * src/main/webapp/WEB-INF/jsp/includes/display_map_fullscreen_inc.jsp: + Syncronized size of the headline of fullscreen-mode of the map-client + to the size of the headline of the web-client. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE311 + + * src/main/webapp/images/ol/slider.png: + Added missing Image slider.png using the colors of the BSH. + + * src/main/webapp/styles/ol_style.css: + Added CSS for Zoombox. Modified CSS for Mouseposition. The background now + is gray with opacity 0.75 + + * src/main/webapp/scripts/viewport.jsp: + Switched order of Controls to tree, legend, add layers. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE 306 + + * src/main/webapp/scripts/viewport.jsp: + Removed ScaleLine from Viewport + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE 305 + + * src/main/webapp/scripts/viewport.jsp: + Removed store.load() because calling this function without a given + url to a capabilities-file will cause that the complete page, where the + Web-Client is placed in, will be loaded using the proxy without the post- + Parameter. + +2010-06-28 Tim Englich <tim.englich@intevation.de> + + ISSUE 305 + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties, + src/main/webapp/WEB-INF/jsp/includes/display_wms_basic_informations.jsp: + Removed duplicate Information about Layernames / Layertitle from GUI. + Also removed unused resources. + +2010-06-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java, + src/main/java/de/intevation/gnv/action/DescribeUIAction.java, + src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java, + src/main/java/de/intevation/gnv/util/XSLTransformer.java, + src/main/webapp/styles/gnv.css, + src/main/webapp/WEB-INF/config/struts-config.xml, + src/main/webapp/WEB-INF/config/templates/describe-ui.xsl, + src/main/webapp/WEB-INF/jsp/index.jsp: Removed the changes of rev1214 and + rev1206. + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/WEB-INF/jsp/wmsstandalone.jsp, + src/main/webapp/WEB-INF/jsp/version.jsp, + src/main/webapp/WEB-INF/jsp/info.jsp, + src/main/webapp/WEB-INF/jsp/imprint.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_histogram_options_inc.jsp: + Fixed some more XHTML-Mistakes. + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/olutils.js: + Removed file which was commited in r1202 by mistake + +2010-06-15 Tim Englich <tim.englich@intevation.de> + + ISSUE 278: Again: Because something was wrong with r1202. + + * src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java: + Prevent NPE if the Mapviewer has delivered no Geometry. + +2010-06-15 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * src/main/webapp/WEB-INF/config/templates/describe-ui.xsl: + Render direct links as list. + +2010-06-14 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * pom.xml: The svn revision number is written to MANIFEST.MF while creating + war archive. + +2010-06-10 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + Issue 219 + + * src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java: + Broke over long line. + + * src/main/java/de/intevation/gnv/action/DescribeUIAction.java: Fed + more parameters into XSL transformation to allow better form rendering. + + * src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java: + use explicit boolean to indicate that we are still able to advance. + + * src/main/java/de/intevation/gnv/util/XSLTransformer.java: Removed + stupid initial size of hash map. + + * src/main/webapp/styles/gnv.css: Added style to render direct + links to look like buttons. + + * src/main/webapp/WEB-INF/config/struts-config.xml: Added a few + forwards. The log is full of unresolvable forwards. TODO: This + needs to be checked and is not a problem introduced by direct + link feature. + + * src/main/webapp/WEB-INF/config/templates/describe-ui.xsl: Render + the direct links if there are less than six item in a single + select list. + + * src/main/webapp/WEB-INF/jsp/index.jsp: Cleanup a bit. Removed + form rendering here and moved it into the dynamic XSL transformation. + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + Issue278 + + * src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java: + Prevent NPE if the Mapviewer has delivered no Geometry. + + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + Customize Look and Feel to styleguide of the bsh. + + * src/main/webapp/scripts/viewport.jsp: + Link OpenLayers image-folder to images/ol to get the navigation-bar in + a customize look and feel. + + * src/main/webapp/styles/ol_style.css: + Added missing styles of Openlayer that must be overriden. + + * src/main/webapp/images/ol/east-mini.png, + src/main/webapp/images/ol/feature_info_off.png, + src/main/webapp/images/ol/feature_info_on.png, + src/main/webapp/images/ol/folder-open.gif, + src/main/webapp/images/ol/folder.gif, + src/main/webapp/images/ol/leaf.gif, + src/main/webapp/images/ol/navigation_history.png, + src/main/webapp/images/ol/north-mini.png, + src/main/webapp/images/ol/pan_off.png, + src/main/webapp/images/ol/pan_on.png, + src/main/webapp/images/ol/south-mini.png, + src/main/webapp/images/ol/tool-sprites.gif, + src/main/webapp/images/ol/west-mini.png, + src/main/webapp/images/ol/wvHeaderBG.gif, + src/main/webapp/images/ol/zoom_box_off.png, + src/main/webapp/images/ol/zoom_box_on.png, + src/main/webapp/images/ol/zoom-minus-mini.png, + src/main/webapp/images/ol/zoom-plus-mini.png, + src/main/webapp/images/ol/zoom-world-mini.png, + src/main/webapp/images/ol/zoombar.png: + Added missing icons and put an blue-filter to all icons. + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/images/ol/measure_line_off.png, + src/main/webapp/images/ol/measure_line_on.png, + src/main/webapp/images/ol/measure_polygon_off.png, + src/main/webapp/images/ol/measure_polygon_on.png: + Removed unused Icons. + +2010-06-11 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java, + src/main/java/de/intevation/gnv/action/DescribeUIAction.java, + src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java, + src/main/java/de/intevation/gnv/util/XSLTransformer.java, + src/main/webapp/styles/gnv.css, + src/main/webapp/WEB-INF/config/struts-config.xml, + src/main/webapp/WEB-INF/config/templates/describe-ui.xsl, + src/main/webapp/WEB-INF/jsp/index.jsp: Reverted the changes of rev1194 - + the feature implemented in rev1194 has not been finished so far. + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/viewport.jsp, + src/main/webapp/scripts/olutils.jsp: + Modified output of the GetfeatureInfo-request. + All attributes of each feature which was returned by the request will be + put in one separte Table. + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + * src/main/resources/applicationMessages*.properties: + Added localized message if no layer were created. + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/layers.jsp: + Bugfix: All Layer will only use one single Tile for displaying it. + +2010-06-11 Tim Englich <tim.englich@intevation.de> + + Added the informations about how the WMS which was published during the + Workflow to the GUI. The URL to the capablities-documenet, the names of + the layer and the ttl will be listed. + + * src/main/java/de/intevation/gnv/action/WMSAction.java (execute): + Write the TTL to the Mapservice which is published. + + * src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultMapService.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/MapService.java: + Added Getter for the Attribute TTL. Which shows how long the Layer of this + Service will be available. + + * src/main/webapp/WEB-INF/jsp/includes/display_wms_basic_informations.jsp: + Added new JSP-File for publishing the Basic-Informations of the WMS. + The URL which will deliver the Capablities is shown. + Also the Names of the Layers are listed. + At least the Time untiöl teh Layers are available is displayed. + + * src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp: + Included Informationblock for the WMS which was produced in the workflow + before and now is published in the map. + +2010-06-10 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + Issue 219 + + * src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java: + Broke over long line. + + * src/main/java/de/intevation/gnv/action/DescribeUIAction.java: Fed + more parameters into XSL transformation to allow better form rendering. + + * src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java: + use explicit boolean to indicate that we are still able to advance. + + * src/main/java/de/intevation/gnv/util/XSLTransformer.java: Removed + stupid initial size of hash map. + + * src/main/webapp/styles/gnv.css: Added style to render direct + links to look like buttons. + + * src/main/webapp/WEB-INF/config/struts-config.xml: Added a few + forwards. The log is full of unresolvable forwards. TODO: This + needs to be checked and is not a problem introduced by direct + link feature. + + * src/main/webapp/WEB-INF/config/templates/describe-ui.xsl: Render + the direct links if there are less than six item in a single + select list. + + * src/main/webapp/WEB-INF/jsp/index.jsp: Cleanup a bit. Removed + form rendering here and moved it into the dynamic XSL transformation. + +2010-06-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/action/DescribeUIAction.java: Removed some + code for testing that have been commited by mistaken. + +2010-06-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/java/de/intevation/gnv/action/ArtifactDatabaseActionBase.java: + New methods for session validation. Method isSessionExhausted(.) returns + true, if the session of the user is new. Another medhod returns the + ActionForward for selecting a fis - which is the start point of our + application. + + * src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java, + src/main/java/de/intevation/gnv/action/DoExportAction.java, + src/main/java/de/intevation/gnv/action/SwitchLanguageAction.java, + src/main/java/de/intevation/gnv/action/WMSAction.java, + src/main/java/de/intevation/gnv/action/ShowStatisticAction.java, + src/main/java/de/intevation/gnv/action/DescribeUIAction.java, + src/main/java/de/intevation/gnv/action/LoadAction.java, + src/main/java/de/intevation/gnv/action/CreateHistogramAction.java, + src/main/java/de/intevation/gnv/action/DoOutputAction.java, + src/main/java/de/intevation/gnv/action/CreateChartAction.java, + src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java, + src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java, + src/main/java/de/intevation/gnv/action/StoreAction.java: Validate the + session before doing some other stuff. If the session is exhausted, we + will return to the start point - the fis selection. + + * src/main/webapp/WEB-INF/jsp/index.jsp: Renders an error message if the + session of the user is exhausted. There will be no link to return to the + last point in the parameterization. + + * src/main/java/de/intevation/gnv/action/CommunicationKeys.java: A new key + for session errors. + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: An error message for + a session that timed out. + + * src/main/webapp/WEB-INF/config/struts-config.xml: Added a new forward to + the export action that makes it possible to step back to the fis + selection. + +2010-06-10 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue177 - Messages for Java heap size errors. + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: Added an error + message for Java heap size errors. + +2010-06-08 Tim Englich <tim.englich@intevation.de> + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: + Added localization for the message that will be displayed if no + layer where found. + + * src/main/webapp/scripts/olutils.jsp: + Improved the workflow for inserting new layer into the client. + If no layer are found using the given url an exceptionmessage will be + displayed using an ext-window. + Now it is also possible to add more than one layer at once. + +2010-06-08 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/layers.jsp: + Switched from Untiled Layer to standard layer objects to fix a bug + in the drag and drop function of the layertree and to enable the output + of the LegendGraphicPanel. + +2010-06-08 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/olutils.jsp: + Rename olutils.js to olutils.jsp to enable possibility of i18n in this file. + Added references to resources in in Method addLayer. + + * src/main/webapp/WEB-INF/jsp/includes/wms_header_inc.jsp: + Replace linkt to olutils.js to olutils.jsp. + + +2010-06-08 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/WEB-INF/jsp/includes/wms_header_inc.jsp: + Added reference to the new css-file extjs-override.css + + * src/main/webapp/images/folder-open.gif, + src/main/webapp/images/folder.gif, + src/main/webapp/images/leaf.gif, + src/main/webapp/images/tool-sprites.gif, + src/main/webapp/styles/extjs-override.css: + Customize Look and Feel to the css of this project. + +2010-06-08 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/styles/ol_style.css: + Switch color of coordinate display of mousposition and scalebar from + black to white. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/viewport.jsp: + Put the bboxx from the mapservice-object and write it to an + javascript-variable. This variable will be used to center the map to + the extend of the data which should be visualized. + + * src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultMapService.java (getBBoxValue), + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/MapService.java (getBBoxValue): + Added a method for getting the bbox as a string from the mapservice-object. + + * src/main/java/de/intevation/gnv/action/WMSAction.java (execute): + Read the bbox from the retrieved meta-document and out it into the + mapservice-object which is used to represent the WMS in the client. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/viewport.jsp: + Switch the URl for the GetFeatureInfor Control to the URL of the WMS which + provide the generated Data of the GNV. + Also switch the Format of the Responsdata of the GetFeatureInfor-request to + GML. + +2010-06-07 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/WEB-INF/config/struts-config.xml: + Added the Action "mapclient" for switching to the FullScreen-Mode of the + MapClient. + + * src/main/webapp/scripts/viewport.jsp: + Integrated the Viewport to render tne Mapclient in FullScreen-Mode. + + * src/main/java/de/intevation/gnv/action/MapClientStandaloneAction.java : + Added Action for handling the businesslogic to switch the Mapclient to the + FullScreen-Mode. + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: + Added i18n for the Link-labeling for switching to the FullScreen-Mode. + + * src/main/webapp/WEB-INF/jsp/wmsstandalone.jsp: + Added JSP-Page wich will be used to render the gui for the + FullScreen-Mode of the Mapclient. + + * src/main/webapp/WEB-INF/jsp/wmslayout.jsp, + src/main/webapp/WEB-INF/jsp/includes/wms_header_inc.jsp: + Extracted header for the html-page whcih will contain the mapclient so + that it could be used in several pages. + + * src/main/webapp/WEB-INF/jsp/includes/display_map_fullscreen_inc.jsp: + Added JSP-Fragment which contains the gui for the FullScreen-Mode of the + Mapclient. + + * src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp: + Added link for switching to the fullscreenmode + +2010-06-04 Tim Englich <tim.englich@intevation.de> + + * src/main/resources/applicationMessages.properties: + Replaced incompatible Umlauts + +2010-06-04 Tim Englich <tim.englich@intevation.de> + + + * src/main/webapp/scripts/viewport.jsp, + src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: + Added i18n support to the mapclient. + +2010-06-04 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp, + /src/main/webapp/scripts/olutils.js: + Fixed bug that the "Add Layer"-Button was not correctly displayed if a + new WMS-Capabilities-Document was loaded. + Also improved the GUI that it is now Possible to load a WMS with a lot of + layer which could not be displayed in the GUI without uisng a scrollbar. + +2010-06-04 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue275 + + * src/main/webapp/WEB-INF/jsp/index.jsp, + src/main/webapp/WEB-INF/jsp/header.jsp, + src/main/webapp/WEB-INF/jsp/footer.jsp, + src/main/webapp/WEB-INF/jsp/mainlayout.jsp: Removed (X)HTML + errors/warnings. + +2010-06-04 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue293 + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: Added strings for + refresh-button tooltip and png export-button. + + * src/main/webapp/WEB-INF/jsp/includes/display_diagramm_options_inc.jsp: + Changed and added some tooltips. + +2010-06-01 Tim Englich <tim.englich@intevation.de> + + + Checkin of changes which are necessary for the checkin of Revision 1139. + + * src/main/java/de/intevation/gnv/action/sessionmodel/SessionModel.java (selectArtifactFactory), + src/main/java/de/intevation/gnv/action/sessionmodel/DefaultSessionModel.java (selectedArtifactFactory): + Added functions for getting and setting a Mapservice to the SessionModel. + + * src/main/java/de/intevation/gnv/action/WMSAction.java : + Integrated the possibility to read all Layes from Metafile. + +2010-06-01 Tim Englich <tim.englich@intevation.de> + + Providing functionality to read an WMS-Capabilities-Documnet and list all + layers which are include. This is the first step to provide the requested + function to integrate external WMS-Layers. + + To read the XML-Documents it is required to integrate the proxy.cgi script + into the Apache Webserver. for this you have to copy the proxy.cgi script + to /usr/lib/cgi-bin. + + You might have to change the allowedHosts in this script. + + * src/main/webapp/WEB-INF/jsp/wmslayout.jsp: + Integrated link to JavaScript-file olutils.js + + * /src/main/webapp/scripts/olutils.js: + Integrate Utilities-javaScript-fiel from Demonstrator to provide + JavaScript-Functions for handling WMS-Capabilities-Requests. + * src/main/webapp/scripts/viewport.jsp: + Integrated JavaScript-Elements for WMS-Capabilities Request. + + * src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp: + Integrated HTML-Elements for the WMS-Capabilities Request. + +2010-06-01 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/webapp/WEB-INF/config/templates/describe-ui-static.xsl: + Implemented a N-step back history. There is a back-button besides every + parameter in the static ui part now. + +2010-06-01 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/viewport.jsp: + Removed som obsolet Code. + + * src/main/webapp/WEB-INF/jsp/wmslayout.jsp: + Added reference to the new css-file. + + * src/main/webapp/images/ol/*.png: + Added Icons for an customized Toolbar. + + * src/main/webapp/styles/ol_style.css: + Added separat CSS-File for create own Style of the Buttons of the + OL-Buttonbar. + +2010-06-01 Tim Englich <tim.englich@intevation.de> + + * src/main/webapp/scripts/openlayers, + src/main/webapp/scripts/geoext/, + src/main/webapp/scripts/ext/: + Added subfolders of third party libraries to svn-ignore. + +2010-06-01 Tim Englich <tim.englich@intevation.de> + + Integrated the Openlayers-libraray according to the Intevation-Demonstrator + into the GUI. Now it is also possible to see all layers which are put into + the WMS by the user. + + * src/main/webapp/WEB-INF/jsp/wmslayout.jsp: + Removed the old JavaScript-references to the OpenLayers-Library and + put the references to the JavaScript-Files and CSS-files for + OpenLayers, ext and geoext into it. + + * src/main/webapp/WEB-INF/jsp/index.jsp: + Removed the html-elements which are required to render the MapClient and + put them into the file includes/display_map_inc.jsp. + + * src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp: + Added own include-file for all html-elements which are required to render + the Mapclient. + + * src/main/webapp/scripts/viewport.jsp: + Added a JSP-file which creats an JavaScript-file which includes the + informations how to create the GUI of the WMS-Client.A JSP-file is required + because we have to insert dynamic usespecific Data into the file. + + * src/main/webapp/scripts/layers.jsp: + Added a JSP-file which creats an JavaScript-file which includes all + layers which should be displayed by OpenLayers. A JSP-file is required + because we have to insert dynamic usespecific Data into the file. + + * src/main/webapp/scripts/openlayers: + Folder for storing the JavaScript-Library Openlayers. + * src/main/webapp/scripts/openlayers/readme: + Readme-File which explains which steps must be done to provide the + required Version of the Openlayers-Library. + + * src/main/webapp/scripts/geoext/: + Folder for storing the JavaScript-Library geoext. + * src/main/webapp/scripts/geoext/readme: + Readme-File which explains which steps must be done to provide the + required Version of the GeoExt-Library. + + * src/main/webapp/scripts/ext/: + Folder for storing the JavaScript-Library Ext. + * src/main/webapp/scripts/ext/readme: + Readme-File which explains which steps must be done to provide the + required Version of the Ext-Library. + + +2010-05-27 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue198 + + * src/main/java/de/intevation/gnv/action/WMSAction.java: Changed the XPath + of the layer name and the time to live. Rev1134 introduced a title for wms + layers - the title has been used before to specify a wms layer. The time + to live moved from layer node to abstract meta information. + + NOTE: Just the first layer of a wms request is visible in the OL + application currently, because there is no group-layer anymore. + +2010-05-27 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/webapp/WEB-INF/jsp/includes/display_wms_options_inc.jsp: Make use + of the new method of DiagrammOptions to retrieve the value of an option as + string that have been introduced in rev1129. + +2010-05-27 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/webapp/WEB-INF/jsp/header.jsp: Don't use the old session id when + restarting the application - start the application without old id. + +2010-05-26 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue289 + + * src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java: Store + chart/histogram options inserted by the user in the SessionModel. In the + case of a wrong input we are able to reuse the previous value. Options + inserted by the user are stored as native objects - no longer as string. + + * src/main/java/de/intevation/gnv/action/sessionmodel/DiagrammOptions.java: + Store options as Object instead of String to keep the information about + the type of the option (string, integer, double, etc). Furthermore there + is a new method getValue(String key, Locale locale) that returns the value + as string. Double values are formatted using the locale object. This + method is used in the gui to display a well formatted i18n string. + + * src/main/webapp/WEB-INF/jsp/includes/display_histogram_options_inc.jsp, + src/main/webapp/WEB-INF/jsp/includes/display_diagramm_options_inc.jsp: + Make use of the new method in DiagrammOptions to retrieve the value as + formatted string. + +2010-05-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue272 + + * src/main/java/de/intevation/gnv/action/DescribeUIAction.java: Read strings + for example linestring/polygon from resource bundle and put them into the + XSL-transformator. + + * src/main/resources/applicationMessages.properties, + src/main/resources/applicationMessages_en.properties: Added labels for + links to insert example linestring/polygon. + + * src/main/webapp/WEB-INF/config/templates/describe-ui.xsl: Don't use static + strings for example linestring/polygon links but use the parameter that + have been added in DescribeUIAction - which are i18n. + +2010-05-25 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + Issue266 + + * src/main/java/de/intevation/gnv/action/SwitchLanguageAction.java: + Switching the language in the initial state will not throw an exception + anymore, but the language is toggled. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/action/sessionmodel/DiagrammOptions.java (getValue), + src/main/java/de/intevation/gnv/util/XMLUtils.java (getXPath): + Fixed some warnings which are displaied during the javadoc-generation. + +namespaceContext + + * src/main/java/de/intevation/gnv/action/StoreAction.java, + src/main/java/de/intevation/gnv/action/ShowStatisticAction.java, + src/main/java/de/intevation/gnv/action/SelectFisAction.java, + src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java, + src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java, + src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java, + src/main/java/de/intevation/gnv/action/LoadAction.java, + src/main/java/de/intevation/gnv/action/FetchArtifactFactoriesAction.java, + src/main/java/de/intevation/gnv/action/DescribeUIAction.java, + src/main/java/de/intevation/gnv/action/CreateHistogramAction.java, + src/main/java/de/intevation/gnv/action/CreateChartAction.java, + src/main/java/de/intevation/gnv/action/ArtifactDatabaseActionBase.java: + Added more Javadocs. Did some Codeformatting. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/util/XSLTransformer.java: + * src/main/java/de/intevation/gnv/util/XMLUtils.java: + * src/main/java/de/intevation/gnv/util/ArtifactNamespaceContext.java: + Added more Javadocs. Did some Codeformatting. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/servlet/GNVActionServlet.java, + src/main/java/de/intevation/gnv/servlet/package.html: + Added more Javadocs. Did some Codeformatting. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/propertiesreader/package.html, + src/main/java/de/intevation/gnv/propertiesreader/ServletPropertiesReader.java, + src/main/java/de/intevation/gnv/propertiesreader/MapPropertiesReader.java: + Added more Javadocs. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultMapService.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultLayer.java: + Added more Javadocs. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputParameter.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputMode.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultInputParameter.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultExportMode.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticValue.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticsSet.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactFactory.java, + src/main/java/de/intevation/gnv/artifactdatabase/objects/Artifact.java: + Added more Javadocs. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java (doAdvance): + Added more Javadoc. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/artifactdatabase/package.html: + Added more Javadoc. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/action/sessionmodel/package.html: + Removed duplicate documentation from file. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/action/sessionmodel/package.html, + src/main/java/de/intevation/gnv/action/sessionmodel/SessionModelFactory.java, + src/main/java/de/intevation/gnv/action/sessionmodel/SessionModel.java, + src/main/java/de/intevation/gnv/action/sessionmodel/DiagrammOptions.java, + src/main/java/de/intevation/gnv/action/sessionmodel/DefaultSessionModel.java: + Added more Javadocs. + +2010-05-18 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/action/mapviewer/parser/package.html, + src/main/java/de/intevation/gnv/action/mapviewer/parser/XMLExternalCallParser.java, + src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserException.java, + src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParser.java: + Added more Javadocs. Format some Linees of code which are longer than 80 Chars. + +2010-05-17 Tim Englich <tim.englich@intevation.de> + + * src/main/java/de/intevation/gnv/action/mapviewer/package.html, + src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java, + src/main/java/de/intevation/gnv/action/mapviewer/ShowMapViewerCallBodyAction.java: + Added more Javadocs. + +2010-05-09 Sascha L. Teichmann <sascha.teichmann@intevation.de> + + * src/main/webapp/styles/calendar-blue.css: Deleted. Not needed any more. + +2010-05-05 Ingo Weinzierl <ingo.weinzierl@intevation.de> + + * src/main/webapp/WEB-INF/web.xml: Removed useless log4j configuration + section. + + * src/main/webapp/WEB-INF/classes/log4j.properties: Adapted logging + configuration for a productive system. + 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de> + RELEASE 1.0 + * Changes, NEWS, ChangeLog: Summarized changes. 2010-04-28 Ingo Weinzierl <ingo.weinzierl@intevation.de>
--- a/gnv/Changes Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/Changes Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,22 @@ +2010-06-30 RELEASE 1.1 + + NEW: + + * Integrated an enhanced map client for working with gnv internal and + external wms layers + * N-Step back history for parameterization + * Added JavaDoc + + FIXES: + + * Input validation corresponding the current locale (#289) + * Fixed broken XPathes while wms publishing + * Removed duplicated layernames from gui (#305) + * Missing i18n for gui elements (#227, #272, #297, #177) + * Typos (#293) + + + 2010-04-28 RELEASE 1.0 NEW:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/LGPL.txt Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it!
--- a/gnv/NEWS Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/NEWS Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,12 @@ +2010-06-30 RELEASE 1.1 + + * Integrated an enhanced map client for working with gnv internal and + external wms layers + + * N-Step back history for parameterization + + + 2010-04-28 RELEASE 1.0 NEW:
--- a/gnv/pom.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/pom.xml Fri Sep 28 12:15:22 2012 +0200 @@ -7,6 +7,11 @@ <version>1.0-SNAPSHOT</version> <name>gnv</name> <url>http://maven.apache.org</url> + <scm> + <connection>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/gnv</connection> + <developerConnection>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/gnv</developerConnection> + <url>scm:svn:svn+ssh://${user}@thoe.intevation.de/home/projects/Geospatial/bsh-generischer-viewer/Material/SVN/gnv</url> + </scm> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> @@ -30,14 +35,14 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.restlet</groupId> + <groupId>org.restlet.jse</groupId> <artifactId>org.restlet</artifactId> - <version>2.0-SNAPSHOT</version> + <version>2.0.4</version> </dependency> <dependency> - <groupId>org.restlet</groupId> + <groupId>org.restlet.jse</groupId> <artifactId>org.restlet.ext.xml</artifactId> - <version>2.0-SNAPSHOT</version> + <version>2.0.4</version> </dependency> <dependency> <groupId>tomcat</groupId> @@ -85,6 +90,14 @@ </excludes> </resource> </webResources> + <archive> + <manifest> + <addDefaultImplementationEntries>true</addDefaultImplementationEntries> + </manifest> + <manifestEntries> + <SCM-Revision>${buildNumber}</SCM-Revision> + </manifestEntries> + </archive> </configuration> </plugin> <plugin> @@ -126,32 +139,21 @@ </configuration> </plugin> <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>buildnumber-maven-plugin</artifactId> - <version>1.0-beta-2</version> - <executions> - <execution> - <phase>initialize</phase> - <goals> - <goal>create</goal> - </goals> - </execution> - </executions> - <configuration> - <doCheck>false</doCheck> - <doUpdate>false</doUpdate> - <timestampFormat>{0, date, yyyy-MM-dd HH:mm:ss}</timestampFormat> - <format>{0,date,yyyy-MM-dd HH:mm:ss}</format> - <items> - <item>timestamp</item> - </items> - - <revisionOnScmFailure>no_revision</revisionOnScmFailure> - </configuration> - </plugin> - - - + <groupId>org.codehaus.mojo</groupId> + <artifactId>buildnumber-maven-plugin</artifactId> + <executions> + <execution> + <phase>validate</phase> + <goals> + <goal>create</goal> + </goals> + </execution> + </executions> + <configuration> + <doCheck>false</doCheck> + <doUpdate>false</doUpdate> + </configuration> + </plugin> </plugins> <resources> <resource>
--- a/gnv/src/main/java/de/intevation/gnv/action/ArtifactDatabaseActionBase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/ArtifactDatabaseActionBase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,22 +1,41 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; - import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; /** + * Basicimplemantation for all Actions which should serv request for + * the GNV. * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> * */ public class ArtifactDatabaseActionBase extends Action { + /** + * The id of the action which should used if the execution + * of the action was successful. + */ protected final static String SUCCSESS_FORWARD_ID = "success"; + + /** + * The id of the action which should be used if an exception has occurred + * during the execution. + */ protected final static String EXCEPTION_FORWARD_ID = "success"; /** @@ -32,25 +51,31 @@ super(); } - @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { log.debug("ArtifactDatabaseActionBase.execute"); - ActionForward forward = mapping.findForward(SUCCSESS_FORWARD_ID); return forward; } - + /** + * Returns the Action that should be used if an exception has occurred. + * @param mapping the mapping which holds all available Actions + * @return the Action that should be used. + */ protected ActionForward getExceptionForward(ActionMapping mapping) { log.debug("ArtifactDatabaseActionBase.getExceptionForward"); ActionForward lForward = mapping.findForward(EXCEPTION_FORWARD_ID); return lForward; } - + /** + * Encodes the <code>String</code> to prevent cross-site-scripting + * @param s the string that should be encoded + * @return the encoded string + */ protected String encode(String s) { log.debug("String to encode: " + s); s = s.replaceAll("<", "<"); @@ -62,7 +87,11 @@ return s; } - + /** + * Encodes the <code>StringArray</code> to prevent cross-site-scripting + * @param s the stringarray that should be encoded + * @return the encoded stringarray + */ protected String[] encode(String[] s) { if (s == null) return null; @@ -74,5 +103,27 @@ return good; } + + + protected boolean isSessionExhausted(HttpServletRequest request) { + HttpSession session = request.getSession(); + return session.isNew(); + } + + + protected ActionForward sessionExhaustedForward( + ActionMapping mapping, ActionForm form, + HttpServletRequest request, HttpServletResponse response) + throws Exception + { + request.setAttribute( + CommunicationKeys.REQUEST_EXCEPTION_SESSION_ID, + "SessionTimeout has occured"); + + log.warn("Session timed out."); + + return new FetchArtifactFactoriesAction().execute( + mapping, form, request, response); + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/ChangeOptionsAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; import de.intevation.gnv.action.sessionmodel.DiagrammOptions; @@ -48,6 +56,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + log.debug("NextArtifactStepAction.execute"); try { SessionModel sm = SessionModelFactory.getInstance() @@ -55,19 +67,23 @@ ArtifactDescription ad = sm.getArtifactDescription(); - String target = request.getParameter("target"); + String target = request.getParameter("target"); OutputMode outputMode = sm.getOutputMode(target); + Locale locale = sm.getCurrentLocale(); + if (outputMode != null) { - Collection<OutputParameter> op = outputMode .getOutputParameters(); if (op != null) { Iterator<OutputParameter> it = op.iterator(); + DiagrammOptions oldOptions = sm.getDiagrammOptions(); DiagrammOptions diagrammOptions = new DiagrammOptions(); while (it.hasNext()) { OutputParameter parameter = it.next(); String name = parameter.getName(); - String old = parameter.getValue(); + Object old = oldOptions != null + ? oldOptions.getValue(name) + : parameter.getValue(); String value = request.getParameter(name); String type = parameter.getType(); @@ -108,10 +124,14 @@ } } else if (type.equalsIgnoreCase("double")) { - if (validDouble(request.getLocale(), value)) { - diagrammOptions.setValue(name, value); + try { + double val = parseDoubleValue(locale, value); + String valStr = Double.toString(val); + log.debug("Change diagram options [" + + name +"] to " + val); + diagrammOptions.setValue(name, val); } - else { + catch (ParseException pe) { log.warn("Text is not a valid double: "+value); diagrammOptions.setValue(name, old); @@ -178,19 +198,14 @@ } } - protected boolean validDouble(Locale locale, String value) { - try { - NumberFormat format = NumberFormat.getInstance(locale); - Number number = format.parse(value); + protected double parseDoubleValue(Locale locale, String value) + throws ParseException + { + log.error("LOCALE FOR DOUBLE PARSING: " + locale.toString()); + NumberFormat format = NumberFormat.getNumberInstance(locale); + Number number = format.parse(value); - if (number.doubleValue() < 0) - return false; - - return (number instanceof Double) || validInteger(locale, value); - } - catch (ParseException pe) { - return false; - } + return number.doubleValue(); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv/src/main/java/de/intevation/gnv/action/CommunicationKeys.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/CommunicationKeys.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; /** @@ -12,6 +20,9 @@ */ public final static String REQUEST_EXCEPTION_MESSAGE_ID = "request_exception_message_id"; + + public final static String REQUEST_EXCEPTION_SESSION_ID = "request_exception_session_id"; + /** * Key used to store exceptions relating to wrong user input. */
--- a/gnv/src/main/java/de/intevation/gnv/action/CreateChartAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/CreateChartAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,17 +1,24 @@ -package de.intevation.gnv.action; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +package de.intevation.gnv.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; + /** * This controller is called to display charts.<br> * An attribute 'chart' on the request object is activated which inserts an @@ -21,9 +28,15 @@ */ public class CreateChartAction extends DescribeUIAction { + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(CreateChartAction.class); + /** + * Constructor + */ public CreateChartAction() { super(); } @@ -36,6 +49,10 @@ HttpServletRequest request, HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + logger.debug("Create chart."); SessionModel sm = SessionModelFactory.getInstance().getSessionModel(
--- a/gnv/src/main/java/de/intevation/gnv/action/CreateHistogramAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/CreateHistogramAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,17 +1,24 @@ -package de.intevation.gnv.action; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +package de.intevation.gnv.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; + /** * This controller is called to display histograms.<br> * An attribute 'histogram' on the request object is activated which inserts an @@ -21,9 +28,15 @@ */ public class CreateHistogramAction extends DescribeUIAction { + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(CreateHistogramAction.class); + /** + * Constructor + */ public CreateHistogramAction() { super(); } @@ -36,6 +49,10 @@ HttpServletRequest request, HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + logger.debug("Create histogram."); SessionModel sm = SessionModelFactory.getInstance().getSessionModel(
--- a/gnv/src/main/java/de/intevation/gnv/action/DescribeUIAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/DescribeUIAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,35 +1,37 @@ -package de.intevation.gnv.action; - -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; - -import de.intevation.gnv.util.ArtifactNamespaceContext; -import de.intevation.gnv.util.XMLUtils; -import de.intevation.gnv.util.XSLTransformer; +package de.intevation.gnv.action; import java.util.Locale; import java.util.ResourceBundle; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - +import javax.servlet.http.HttpSession; import javax.xml.xpath.XPathConstants; import org.apache.log4j.Logger; - import org.apache.struts.Globals; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.w3c.dom.Node; -import org.w3c.dom.Node; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +import de.intevation.gnv.util.ArtifactNamespaceContext; +import de.intevation.gnv.util.XMLUtils; +import de.intevation.gnv.util.XSLTransformer; /** * This controller is called to fetch the current artifact description using the @@ -51,9 +53,15 @@ public static final String XSL_SHEET_STATIC = "WEB-INF/config/templates/describe-ui-static.xsl"; + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(DescribeUIAction.class); + /** + * Constructor + */ public DescribeUIAction() { super(); } @@ -67,6 +75,11 @@ HttpServletResponse response ) throws Exception { + if (isSessionExhausted(request)) { + // session timed out before + return sessionExhaustedForward(mapping, form, request, response); + } + logger.info("describe user interface"); try { // render describe document and create user interface @@ -99,7 +112,12 @@ if (currentUI != null) { ResourceBundle res = ResourceBundle.getBundle( "applicationMessages", locale); - String editText = res.getString("gnviewer.history.back.button"); + String editText = res.getString( + "gnviewer.history.back.button"); + String exampleLinestring = res.getString( + "gnviewer.example.linestring"); + String examplePolygon = res.getString( + "gnviewer.example.polygon"); XSLTransformer transformer = new XSLTransformer(); @@ -107,6 +125,10 @@ mapping.findForward("back").getPath()); transformer.addParameter("back-url", url); transformer.addParameter("edit", editText); + transformer.addParameter("example-polygon", examplePolygon); + transformer.addParameter( + "example-linestring", + exampleLinestring); String fisUrl = response.encodeURL( mapping.findForward("selectfis").getPath());
--- a/gnv/src/main/java/de/intevation/gnv/action/DoExportAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/DoExportAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; import de.intevation.gnv.action.sessionmodel.SessionModel; @@ -56,6 +64,10 @@ HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + try { String target = request.getParameter("target"); String mimeType = request.getParameter("mimetype");
--- a/gnv/src/main/java/de/intevation/gnv/action/DoOutputAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/DoOutputAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; import de.intevation.gnv.action.sessionmodel.SessionModel; @@ -52,6 +60,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + log.debug("DoOutputAction.execute"); try { String target = request.getParameter("target");
--- a/gnv/src/main/java/de/intevation/gnv/action/FetchArtifactFactoriesAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/FetchArtifactFactoriesAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,13 +1,12 @@ -package de.intevation.gnv.action; - -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +package de.intevation.gnv.action; import java.util.Collection; @@ -15,11 +14,16 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; + /** * This controller fetches artifact factories from artifact server and stores * them on a <code>SessionModel</code> object. @@ -28,12 +32,16 @@ * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class FetchArtifactFactoriesAction extends ArtifactDatabaseActionBase { + /** * the logger, used to log exceptions and additonaly information */ private static Logger log = Logger .getLogger(FetchArtifactFactoriesAction.class); + /** + * Constructor + */ public FetchArtifactFactoriesAction() { super(); }
--- a/gnv/src/main/java/de/intevation/gnv/action/LoadAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/LoadAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,22 +1,15 @@ -package de.intevation.gnv.action; - -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; - -import de.intevation.gnv.artifactdatabase.objects.Artifact; -import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; - -import de.intevation.gnv.util.ArtifactNamespaceContext; -import de.intevation.gnv.util.XMLUtils; +package de.intevation.gnv.action; import java.io.IOException; import java.io.InputStream; - import java.util.List; import javax.servlet.http.HttpServletRequest; @@ -24,16 +17,22 @@ import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; - import org.apache.commons.fileupload.servlet.ServletFileUpload; - import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.w3c.dom.Document; -import org.w3c.dom.Document; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; +import de.intevation.gnv.artifactdatabase.objects.Artifact; +import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; +import de.intevation.gnv.util.ArtifactNamespaceContext; +import de.intevation.gnv.util.XMLUtils; /** * This controller is called for reloading projects from xml files. It waits for @@ -48,12 +47,19 @@ public static final String RESOURCE_UPLOAD_FAILURE = "upload.failure"; public static final String RESOURCE_INVALID_ARTIFACT = "invalid.artifact"; + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(LoadAction.class); + /** + * Constructor + */ public LoadAction() { super(); } + @Override public ActionForward execute( ActionMapping mapping, ActionForm form, @@ -61,6 +67,10 @@ HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + logger.info("Import artifact."); ServletFileUpload upload = new ServletFileUpload();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/action/MapClientStandaloneAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +/** + * + */ +package de.intevation.gnv.action; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.struts.action.ActionForm; +import org.apache.struts.action.ActionForward; +import org.apache.struts.action.ActionMapping; + +/** + * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> + * + */ +public class MapClientStandaloneAction extends ArtifactDatabaseActionBase { + + public final static String MAPCLIENTSTANDALONE_KEY = + "de.intevation.gnv.action.MapClientStandaloneAction"; + /** + * Constructor + */ + public MapClientStandaloneAction() { + super(); + } + + @Override + public ActionForward execute(ActionMapping mapping, ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + + request.setAttribute(MAPCLIENTSTANDALONE_KEY, true); + return super.execute(mapping, form, request, response); + } + + +}
--- a/gnv/src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/NextArtifactStepAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,16 +1,12 @@ -package de.intevation.gnv.action; - -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseInputException; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; -import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; -import de.intevation.gnv.artifactdatabase.objects.InputParameter; +package de.intevation.gnv.action; import java.util.ArrayList; import java.util.Collection; @@ -22,11 +18,19 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseInputException; +import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; +import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; +import de.intevation.gnv.artifactdatabase.objects.InputParameter; + /** * This controller feeds the artifact server with the current input data and * refreshes the gui with the current artifact description after the next state @@ -50,12 +54,6 @@ super(); } - /** - * @see de.intevation.gnv.action.ArtifactDatabaseActionBase#execute(org.apache.struts.action.ActionMapping, - * org.apache.struts.action.ActionForm, - * javax.servlet.http.HttpServletRequest, - * javax.servlet.http.HttpServletResponse) - */ @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, @@ -137,8 +135,6 @@ } catch (ArtifactDatabaseInputException e) { - log.debug("================ CATCH ME ======================"); - log.debug("===== ERROR MSG: " + e.getMessage()); log.error(e, e); request.setAttribute( CommunicationKeys.REQUEST_EXCEPTION_INPUT_ID, @@ -155,9 +151,7 @@ } }else{ log.warn("SessionTimeout has occured"); - request.setAttribute(CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, - "SessionTimeout has occured"); - new FetchArtifactFactoriesAction().execute(mapping, form, request, response); + return sessionExhaustedForward(mapping, form, request, response); } return super.execute(mapping, form, request, response); }
--- a/gnv/src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/PreviousArtifactStepAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,23 +1,28 @@ -package de.intevation.gnv.action; - -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +package de.intevation.gnv.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; + /** * This controller is used to step back to a previous state of the current * artifact. After calling the advance operation of the artifact server have @@ -31,10 +36,16 @@ public static final String URL_STATE_KEY = "target"; + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(PreviousArtifactStepAction.class); + /** + * Constructor + */ public PreviousArtifactStepAction() { super(); } @@ -55,12 +66,10 @@ if (ad == null) { logger.warn("Session timed out."); request.setAttribute( - CommunicationKeys.REQUEST_EXCEPTION_MESSAGE_ID, + CommunicationKeys.REQUEST_EXCEPTION_SESSION_ID, "SessionTimeout has occured"); - new FetchArtifactFactoriesAction().execute( + return new FetchArtifactFactoriesAction().execute( mapping, form, request, response); - - return super.execute(mapping, form, request, response); } // TODO check if target is reachable
--- a/gnv/src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/SelectArtifactFactoryAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,12 +1,12 @@ -package de.intevation.gnv.action; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; - -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +package de.intevation.gnv.action; import java.util.Collection; @@ -14,23 +14,35 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; + /** * This controller is called to select a specific fis. * * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public class SelectArtifactFactoryAction extends DescribeUIAction { + /** * the logger, used to log exceptions and additonaly information */ private static Logger log = Logger .getLogger(SelectArtifactFactoryAction.class); + /** + * Constructor + */ + public SelectArtifactFactoryAction() { + super(); + } @Override public ActionForward execute(ActionMapping mapping, ActionForm form, @@ -72,11 +84,5 @@ return super.getExceptionForward(mapping); } } - - /** - * Constructor - */ - public SelectArtifactFactoryAction() { - } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv/src/main/java/de/intevation/gnv/action/SelectFisAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/SelectFisAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,17 +1,24 @@ -package de.intevation.gnv.action; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +package de.intevation.gnv.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; + /** * This controller is used to step back to the fis selection. It is called when * pushing the step-back button besides the currently selected fis. @@ -20,6 +27,9 @@ */ public class SelectFisAction extends ArtifactDatabaseActionBase { + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(SelectFisAction.class); @Override
--- a/gnv/src/main/java/de/intevation/gnv/action/ShowStatisticAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/ShowStatisticAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,12 +1,12 @@ -package de.intevation.gnv.action; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; - -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet; +package de.intevation.gnv.action; import java.util.Collection; @@ -14,11 +14,16 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet; + /** * This controller is used to display to statistic of the current * parameterization. @@ -27,9 +32,15 @@ */ public class ShowStatisticAction extends DescribeUIAction { + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(ShowStatisticAction.class); + /** + * Constructor + */ public ShowStatisticAction() { super(); } @@ -43,6 +54,10 @@ HttpServletResponse response ) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + logger.info("show statistic"); SessionModel sm = SessionModelFactory.getInstance().getSessionModel( request);
--- a/gnv/src/main/java/de/intevation/gnv/action/StoreAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/StoreAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,12 +1,12 @@ -package de.intevation.gnv.action; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; - -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +package de.intevation.gnv.action; import java.io.OutputStream; @@ -14,11 +14,16 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; + /** * This controller is used to save the current artifact to an xml file. A file * dialog is opened to save the file to the local disk. @@ -29,12 +34,19 @@ public static final String RESOURCE_DOWNLOAD_FAILURE = "no.artifact.chosen"; + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(StoreAction.class); + /** + * Constructor + */ public StoreAction() { super(); } + @Override public ActionForward execute( ActionMapping mapping, ActionForm form, @@ -42,6 +54,10 @@ HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + SessionModelFactory sf = SessionModelFactory.getInstance(); SessionModel sm = sf.getSessionModel(request); @@ -77,7 +93,12 @@ return null; } - + + /** + * Sets the header of the response. + * @param response the response + * @param uuid the uuid of the artifact + */ protected void setHeaders(HttpServletResponse response, String uuid) { String filename = "GNVArtefakt_" + uuid + ".xml";
--- a/gnv/src/main/java/de/intevation/gnv/action/SwitchLanguageAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/SwitchLanguageAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,7 +1,16 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; import de.intevation.gnv.action.sessionmodel.SessionModel; import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; import java.util.Locale; @@ -10,6 +19,7 @@ import org.apache.log4j.Logger; +import org.apache.struts.Globals; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; @@ -32,10 +42,21 @@ HttpServletResponse response ) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + SessionModelFactory factory = SessionModelFactory.getInstance(); SessionModel sm = factory.getSessionModel(request); + Locale locale = switchLanguage(sm.getCurrentLocale()); - sm.setCurrentLocale(switchLanguage(sm.getCurrentLocale())); + sm.setCurrentLocale(locale); + ArtifactObject artifactFactory = sm.getSelectedArtifactFactory(); + + if (artifactFactory == null) { + request.getSession().setAttribute(Globals.LOCALE_KEY, locale); + return mapping.findForward(SUCCSESS_FORWARD_ID); + } return super.execute(mapping, form, request, response); }
--- a/gnv/src/main/java/de/intevation/gnv/action/WMSAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/WMSAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,22 +1,14 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action; -import de.intevation.gnv.action.sessionmodel.DiagrammOptions; -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; - -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; -import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; -import de.intevation.gnv.artifactdatabase.objects.InputParameter; -import de.intevation.gnv.artifactdatabase.objects.OutputMode; -import de.intevation.gnv.artifactdatabase.objects.OutputParameter; - -import de.intevation.gnv.util.XMLUtils; - import java.text.DateFormat; - import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -26,12 +18,28 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; -import org.w3c.dom.Document; +import de.intevation.gnv.action.sessionmodel.DiagrammOptions; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClient; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +import de.intevation.gnv.artifactdatabase.objects.DefaultInputParameter; +import de.intevation.gnv.artifactdatabase.objects.InputParameter; +import de.intevation.gnv.artifactdatabase.objects.OutputMode; +import de.intevation.gnv.artifactdatabase.objects.OutputParameter; +import de.intevation.gnv.artifactdatabase.objects.map.DefaultLayer; +import de.intevation.gnv.artifactdatabase.objects.map.DefaultMapService; +import de.intevation.gnv.artifactdatabase.objects.map.Layer; +import de.intevation.gnv.artifactdatabase.objects.map.MapService; +import de.intevation.gnv.util.XMLUtils; /** * This controller is used to publish the results of the current artifact as @@ -50,11 +58,20 @@ public static final String XPATH_MAPSERVER_MAPFILE = "/art:meta/art:mapserver/art:map/text()"; + public static final String XPATH_LAYERNODESET = + "/art:meta/art:layer"; + public static final String XPATH_LAYER_TITLE = - "/art:meta/art:layer/art:title/text()"; + "art:title/text()"; - public static final String XPATH_LAYER_TTL = - "/art:meta/art:layer/art:ttl/text()"; + public static final String XPATH_LAYER_NAME = + "art:name/text()"; + + public static final String XPATH_TTL = + "/art:meta/art:mapserver/art:ttl/text()"; + + public static final String XPATH_BBOX = + "/art:meta/art:mapserver/art:Box/art:coordinates/text()"; /** * the logger, used to log exceptions and additonaly information @@ -72,6 +89,10 @@ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { + if (isSessionExhausted(request)) { + return sessionExhaustedForward(mapping, form, request, response); + } + logger.debug("WMSAction.execute"); try { SessionModel sm = SessionModelFactory.getInstance().getSessionModel( @@ -119,16 +140,16 @@ // do wms publishing Document meta = adc.publishWMS(artifactfactory,artifact,ips); + + // read the Server-information String mapserverPath = XMLUtils.getStringXPath( meta, XPATH_MAPSERVER_PATH); String mapfilePath = XMLUtils.getStringXPath( meta, XPATH_MAPSERVER_MAPFILE); - String layer = XMLUtils.getStringXPath( - meta, XPATH_LAYER_TITLE); String tmpTTL = XMLUtils.getStringXPath( - meta, XPATH_LAYER_TTL); - layer = layer != null ? layer : artifact.getId(); - + meta, XPATH_TTL); + + String bbox = XMLUtils.getStringXPath(meta, XPATH_BBOX); String ttl = null; if (tmpTTL != null) { DateFormat df = DateFormat.getDateTimeInstance( @@ -151,22 +172,44 @@ if (logger.isDebugEnabled()) { logger.debug("Mapserver path: " + mapserverPath); logger.debug("Mapfile path: " + mapfilePath); - logger.debug("Layer title: " + layer); logger.debug("Layer ttl: " + ttl); } + // read the layer information + + NodeList layerNodes = XMLUtils.getNodeSetXPath(meta, + XPATH_LAYERNODESET); + Collection<Layer> layers = null; + if (layerNodes != null && layerNodes.getLength() > 0){ + layers = new ArrayList<Layer>(layerNodes.getLength()); + for (int i = 0 ; i < layerNodes.getLength(); i++){ + Node tmpLayerNode = layerNodes.item(i); + String layerName = XMLUtils.getStringXPath( + tmpLayerNode, XPATH_LAYER_NAME); + String layerTitle = XMLUtils.getStringXPath( + tmpLayerNode, XPATH_LAYER_TITLE); + // TODO: write layerTitle to title and not to id + Layer currentLayer = new DefaultLayer(layerTitle, layerName, + false, null); + layers.add(currentLayer); + } + } + - request.setAttribute("wms", true); - request.setAttribute("mapserver", mapserverPath); - request.setAttribute("mapfile", mapfilePath); - request.setAttribute("layer", layer); - request.setAttribute("ttl", ttl); + + + // TODO PUT MAPFILEPATH AND TTL to MapServiceObject + if (mapserverPath != null && - mapfilePath != null && - layer != null){ + mapfilePath != null) { request.setAttribute("wms_published", Boolean.TRUE); + + MapService mapService = new DefaultMapService("0815", layers, + "UMN", mapserverPath, + bbox,ttl); + sm.setLocalMapService(mapService); return super.execute(mapping, form, request, response); }else{ - return super.getExceptionForward(mapping); + return super.execute(mapping, form, request, response); } } catch (Exception e) {
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/MapViewerCallAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,22 +1,16 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.mapviewer; -import de.intevation.gnv.action.ArtifactDatabaseActionBase; - -import de.intevation.gnv.action.mapviewer.parser.ExternalCallParser; -import de.intevation.gnv.action.mapviewer.parser.XMLExternalCallParser; - -import de.intevation.gnv.action.sessionmodel.SessionModel; -import de.intevation.gnv.action.sessionmodel.SessionModelFactory; - -import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; - -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; - -import de.intevation.gnv.artifactdatabase.objects.map.MapService; - import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.InputStream; - import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; @@ -25,12 +19,27 @@ import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.ArtifactDatabaseActionBase; +import de.intevation.gnv.action.mapviewer.parser.ExternalCallParser; +import de.intevation.gnv.action.mapviewer.parser.XMLExternalCallParser; +import de.intevation.gnv.action.sessionmodel.SessionModel; +import de.intevation.gnv.action.sessionmodel.SessionModelFactory; +import de.intevation.gnv.artifactdatabase.client.ArtifactDatabaseClientFactory; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +import de.intevation.gnv.artifactdatabase.objects.map.MapService; +import de.intevation.gnv.util.CaptureInputStream; + /** + * This class provides the businesslogic for handling an + * MV-GNV-Interface-call. + * This call can be done in two ways. + * First is to put the requestbody into the body of the http-post-request. + * Second to put the requestbody to the parameter "document" of the + * http-post-request. * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public class MapViewerCallAction extends ArtifactDatabaseActionBase { @@ -65,9 +74,20 @@ } if (inputStream != null){ + CaptureInputStream capture = log.isDebugEnabled() + ? new CaptureInputStream(inputStream) + : null; + try { - ExternalCallParser ecp = new XMLExternalCallParser(inputStream); + ExternalCallParser ecp = new XMLExternalCallParser( + capture != null ? capture : inputStream); ecp.parse(); + + // print incoming data to log + if (capture != null) { + log.debug("REQUEST DOCUMENT: " + capture.copyToString()); + } + String geometry = ecp.getGeometry(); String srs = ecp.getSRS(); Collection<MapService> mapServices = ecp.getMapServices();
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/ShowMapViewerCallBodyAction.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/ShowMapViewerCallBodyAction.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,17 +1,26 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.mapviewer; -import de.intevation.gnv.action.ArtifactDatabaseActionBase; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; - import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; +import de.intevation.gnv.action.ArtifactDatabaseActionBase; + /** + * This class provides the businesslogic to show the demo GUI for + * testing the MV-GNV-Interface. * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public class ShowMapViewerCallBodyAction extends ArtifactDatabaseActionBase {
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/package.html Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -3,6 +3,6 @@ <head> </head> <body> -DOCUMENT ME! +This package provides actions for handling the MV-GNV-Interface calls. </body> </html>
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParser.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParser.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,20 +1,45 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.mapviewer.parser; +import java.util.Collection; + import de.intevation.gnv.artifactdatabase.objects.map.MapService; -import java.util.Collection; - /** + * Interfacedefinition for an XMl-parser of the MV-GNV-Interface requestdocument. * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public interface ExternalCallParser { + /** + * Returns the geometry which was parsed from the XML-document. + * @return the geometry. + */ String getGeometry(); + /** + * Returns the srid which was parsed from the XML-document. + * @return the srid. + */ String getSRS(); + /** + * Returns the mapservices which was parsed from the XML-document. + * @return the mapservices. + */ Collection<MapService> getMapServices(); + /** + * Does the parsing work. + * @throws ExternalCallParserException + */ void parse() throws ExternalCallParserException; }
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,16 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.mapviewer.parser; /** + * Exceptionclass for qualifying exception which were caused by the + * <code>ExternalCallParser.</code> * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> * */
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/XMLExternalCallParser.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/XMLExternalCallParser.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,24 +1,33 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.mapviewer.parser; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; + +import org.apache.log4j.Logger; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + import de.intevation.gnv.artifactdatabase.objects.map.DefaultLayer; import de.intevation.gnv.artifactdatabase.objects.map.DefaultMapService; import de.intevation.gnv.artifactdatabase.objects.map.Layer; import de.intevation.gnv.artifactdatabase.objects.map.MapService; - import de.intevation.gnv.util.XMLUtils; -import java.io.InputStream; - -import java.util.ArrayList; -import java.util.Collection; - -import org.apache.log4j.Logger; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - /** + * This class provides an XMl-Parser which try's to create an DOM from + * an given Inputstream. Is this is possible it try to read the required + * informations e.g. Mapservices, Layer, SRID and Geometry from the + * document. * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public class XMLExternalCallParser implements ExternalCallParser { @@ -37,47 +46,54 @@ private static String ATTRIBUTE_TYPE = "type"; private static String ATTRIBUTE_URL = "url"; + /** + * The geometry which was parsed from the document. + */ private String geometry = null; + + /** + * The srid which was parsed from the document. + */ private String srs = null; + /** + * The mapservices that were parsed from the document. + */ private Collection<MapService> mapServices = null; + /** + * The inputstream where the data should be read from. + */ private InputStream inputStream = null; /** * Constructor + * @param inputStream The stream where the data should be read from */ public XMLExternalCallParser(InputStream inputStream) { this.inputStream = inputStream; } - /** - * @see de.intevation.gnv.action.mapviewer.parser.ExternalCallParser#getGeometry() - */ public String getGeometry() { return this.geometry; } - /** - * @see de.intevation.gnv.action.mapviewer.parser.ExternalCallParser#getMapServices() - */ public Collection<MapService> getMapServices() { return this.mapServices; } - /** - * @see de.intevation.gnv.action.mapviewer.parser.ExternalCallParser#parse() - */ public void parse() throws ExternalCallParserException { if (inputStream != null){ XMLUtils xmlUtils = new XMLUtils(); Document document = xmlUtils.readDocument(this.inputStream); if (document != null){ - this.geometry = xmlUtils.getStringXPath(document, XPATH_GEOMETRY); + this.geometry = xmlUtils.getStringXPath(document, + XPATH_GEOMETRY); this.srs = xmlUtils.getStringXPath(document, XPATH_SRS); NodeList mapservicesNodes = - xmlUtils.getNodeSetXPath(document, XPATH_MAPSERVICES_NODESET); + xmlUtils.getNodeSetXPath(document, + XPATH_MAPSERVICES_NODESET); if (mapservicesNodes != null){ this.mapServices = new ArrayList<MapService>(mapservicesNodes.getLength()); for (int i = 0; i < mapservicesNodes.getLength(); i++){ @@ -100,13 +116,15 @@ } }else{ - String errMsg = "XML-Document does not contain any Mapservices which are required."; + String errMsg = "XML-Document does not contain any " + + "Mapservices which are required."; log.error(errMsg); throw new ExternalCallParserException(errMsg); } }else{ - String errMsg = "XML-Document could not be read from InputStream."; + String errMsg = "XML-Document could not " + + "be read from InputStream."; log.error(errMsg); throw new ExternalCallParserException(errMsg); } @@ -119,18 +137,21 @@ /** * This Method extracts all Layers and put them into the Collection. - * @param layer - * @param groupId - * @param layerNodes - * @return + * @param layer the collection where the layer should be add to. + * @param groupId the id of the group of the layers + * @param layerNodes the Nodes which should contain the intormations + * about layers + * @return the layer */ - private Collection<Layer> extractLayer(Collection<Layer> layer, String groupId, NodeList layerNodes){ - XMLUtils xmlUtils = new XMLUtils(); + private Collection<Layer> extractLayer(Collection<Layer> layer, + String groupId, + NodeList layerNodes){ for (int i = 0; i < layerNodes.getLength(); i++){ Element layerNode = (Element)layerNodes.item(i); String id = layerNode.getAttribute(ATTRIBUTE_ID); String name = layerNode.getAttribute(ATTRIBUTE_NAME); - NodeList localLayerNodes = xmlUtils.getNodeSetXPath(layerNode, XPATH_LAYER); + NodeList localLayerNodes = XMLUtils.getNodeSetXPath(layerNode, + XPATH_LAYER); Layer tmpLayer = new DefaultLayer(id, name, (localLayerNodes != null && localLayerNodes.getLength() > 0), @@ -143,9 +164,6 @@ return layer; } - /** - * @see de.intevation.gnv.action.mapviewer.parser.ExternalCallParser#getSRS() - */ public String getSRS() { return this.srs; }
--- a/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/package.html Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/mapviewer/parser/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -3,6 +3,7 @@ <head> </head> <body> -DOCUMENT ME! +This package provides the XML-parser for parsing the XML-Documents which +were send by the MapViewer to the GMV-WebClient. </body> </html>
--- a/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/DefaultSessionModel.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/DefaultSessionModel.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,12 @@ -package de.intevation.gnv.action.sessionmodel; +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ -import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; -import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; -import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet; -import de.intevation.gnv.artifactdatabase.objects.OutputMode; +package de.intevation.gnv.action.sessionmodel; import java.util.Collection; import java.util.Iterator; @@ -11,6 +14,12 @@ import org.apache.log4j.Logger; +import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; +import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; +import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet; +import de.intevation.gnv.artifactdatabase.objects.OutputMode; +import de.intevation.gnv.artifactdatabase.objects.map.MapService; + /** * The default implementation of <code>SessionModel</code> which stores the * current artifact object and the digram options selected by the user. @@ -20,6 +29,8 @@ */ public class DefaultSessionModel implements SessionModel { + + /** * the logger, used to log exceptions and additonaly information */ @@ -30,19 +41,41 @@ */ private static final long serialVersionUID = 3431484439985158311L; + /** + * Container for <code>ArtifactFactory</code>-objects. + */ private Collection<ArtifactObject> artifactFactories = null; + /** + * The selected <code>ArtifactFactory</code> + */ private ArtifactObject selectedArtifactFactory = null; + /** + * The currently used artifact. + */ private ArtifactObject currentArtifact = null; + /** + * The Diagrammoptions. + */ private DiagrammOptions diagrammOptions = null; + /** + * The Container for statistic-values. + */ private Collection<ArtifactStatisticsSet> statistics = null; + /** + * The Locale that currently should be used. + */ private Locale currentLocale; /** + * The Mapservice containing all Layers that should be displayed. + */ + private MapService localMapService = null; + /** * Constructor */ public DefaultSessionModel() { @@ -51,7 +84,6 @@ /** * Constructor - * * @param currentLocale A locale used to create the user interface. */ public DefaultSessionModel(Locale currentLocale) { @@ -82,7 +114,7 @@ public void setArtifacteFactories( - Collection<ArtifactObject> artifactFactories) { + Collection<ArtifactObject> artifactFactories) { this.artifactFactories = artifactFactories; } @@ -161,5 +193,13 @@ public void setCurrentLocale(Locale currentLocale) { this.currentLocale = currentLocale; } + + public MapService getLocalMapService() { + return this.localMapService; + } + + public void setLocalMapService(MapService mapService) { + this.localMapService = mapService; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/DiagrammOptions.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/DiagrammOptions.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,17 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.sessionmodel; +import java.text.NumberFormat; + import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -11,7 +22,7 @@ */ public class DiagrammOptions { - private Map<String, String> values = new HashMap<String, String>(); + private Map<String, Object> values = new HashMap<String, Object>(); /** * Constructor @@ -21,21 +32,42 @@ } /** + * Returns the Value to a given Key + * @param key The key of the value that should be returned. * @return the value. */ - public String getValue(String key) { + public Object getValue(String key) { return this.values.get(key); } /** + * Returns the value as string. + * @param key The key of the value that should be returned. + * @param locale A locale object used to format numbers. + * @return the value as string. + */ + public String getValue(String key, Locale locale) { + Object obj = values.get(key); + + if (obj instanceof Double && locale != null) { + Double value = (Double) obj; + NumberFormat format = NumberFormat.getNumberInstance(locale); + + return format.format(value); + } + + return (String) obj; + } + + /** * Set a value with the given key. * * @param key The given key. * @param value The value to be stored. */ - public void setValue(String key, String value) { - this.values.put(key, value); + public void setValue(String key, Object value) { + values.put(key, value); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/SessionModel.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/SessionModel.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,14 +1,22 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.sessionmodel; +import java.io.Serializable; +import java.util.Collection; +import java.util.Locale; + import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet; import de.intevation.gnv.artifactdatabase.objects.OutputMode; - -import java.io.Serializable; - -import java.util.Collection; -import java.util.Locale; +import de.intevation.gnv.artifactdatabase.objects.map.MapService; /** * This interface describe basic methods to store artifacts and diagram options. @@ -19,34 +27,115 @@ */ public interface SessionModel extends Serializable { + /** + * Returns all Artifactfactories which were retrieved from the + * Artifactdatabases which are connected to the Client. + * @return the artifactfactories. + */ Collection<ArtifactObject> getArtifactFactories(); + /** + * Sets all Artifactfactories which were retieved from the Artifactdatabases + * to the SessionModel. + * @param artifactFactories the artifactfactories. + */ void setArtifacteFactories(Collection<ArtifactObject> artifactFactories); + /** + * Set the Artifactfactory which match to the given id to selected. + * @param artiFactFactoryId the id of the artifactfactory which should + * be selected. + */ void selectArtifactFactory(String artiFactFactoryId); + /** + * Returns the Artifactfactory which is selected. + * @return the artifactfactory which is selected. + */ ArtifactObject getSelectedArtifactFactory(); + /** + * Returns the currently used artifact. + * This Artifact will retrieved from the selected artifactfactory and will + * be used to do handle the special businesslogic. + * @return the artifact which is currently used. + */ ArtifactObject getCurrentArtifact(); + /** + * Sets a new Artifact as the artifact that should be used. + * @param artifact the new artifact which should be used. + */ void setCurrentArtifact(ArtifactObject artifact); + /** + * Sets the currently used diagrammoptions to the Sessionmodel. + * Diagrammoptions will be used to manipulate the look of diagramms + * and render the GUI so that the user is enabled to switch the options. + * Diagrammoptions are also used for Histogram, all Exports and WMS + * @param diagrammOptions the Options that should be used. + */ void setDiagrammOptions(DiagrammOptions diagrammOptions); + /** + * Returns the diagrammoptions that currently set to the SessionModel. + * @return the diagrammoptions that currently set to the SessionModel. + */ DiagrammOptions getDiagrammOptions(); + /** + * Returns the Outputmode that matches to the given name of an mode. + * Outputmodes are used to define which kind of modes are defined to + * generate an result for a given Artifact (chart, export, wms,...) + * @param name the name of the OutputMode that should be used + * @return the OutputMode that matches to the given name. + */ OutputMode getOutputMode(String name); + /** + * Returns the description to the currently used Artifact. + * The description can be used to retrieve the supported OutputModes, + * the parameters that could be feed, ... + * @return the description of the artifact which is currently used. + */ ArtifactDescription getArtifactDescription(); + /** + * Reset the Model. So that it will have the status as no Artifactfactory + * was selected. + */ void resetModel(); + /** + * Sets the Statistics that were retrieved from the currently used Artifact + * to the SessionModel. + * @param statistics the Statistics that should be shown in the GUI. + */ void setStatistics(Collection<ArtifactStatisticsSet> statistics); + /** + * Returns the statistics that are currently set to the SessionModel + * @return the statistics that are currently set to the SessionModel + */ Collection<ArtifactStatisticsSet> getStatistics(); + /** + * Sets the locale that should be used. + * The loacle will be used to customize the GUI for a language that matches + * to the locale or it will be used to tell the Artifactdatabase which locale + * has to be used. + * @param locale the locale that should be used. + */ void setCurrentLocale(Locale locale); + /** + * Returns the currently used locale. + * @return the locale that is currently used. + */ Locale getCurrentLocale(); + + void setLocalMapService(MapService mapService); + + MapService getLocalMapService(); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :
--- a/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/SessionModelFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/SessionModelFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.sessionmodel; import javax.servlet.http.HttpServletRequest; @@ -12,7 +20,13 @@ */ public class SessionModelFactory { - public final static String SESSION_MODEL_ID = "de.intevation.gnv.action.sessionmodel.SessionModel.ID"; + /** + * The id of the <code>SessionModel</code> that must be used to lookup the + * model from the given <code>HttpSession<Code> of the request. + */ + public final static String SESSION_MODEL_ID = "de.intevation.gnv.action." + + "sessionmodel.SessionModel.ID"; + /** * the logger, used to log exceptions and additonaly information */ @@ -32,10 +46,10 @@ /** * This Method provides an singleton Instance of this Class. - * * @return an singleton Instance of this Class */ public synchronized static SessionModelFactory getInstance() { + log.debug("SessionModelFactory.getInstance"); if (instance == null) { instance = new SessionModelFactory(); } @@ -44,10 +58,11 @@ /** * Getting the ArtifactDatabaseClient - * + * @param request the tequest from which the SessionModel should be read. * @return the ArtifactDatabaseClient */ public SessionModel getSessionModel(HttpServletRequest request) { + log.debug("SessionModelFactory.getSessionModel"); synchronized (request) { SessionModel sm = null; Object obj = request.getSession().getAttribute(SESSION_MODEL_ID);
--- a/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/package.html Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/action/sessionmodel/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -3,7 +3,8 @@ <head> </head> <body> -Store important values in the session using classes and interfaces in this -package. +This package provides the classes and interface-definitions for providing an +SessionModel for storing Information which can be reused during a session. </body> </html> +
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClient.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,24 +1,29 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.client; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Collection; +import java.util.Locale; + +import org.w3c.dom.Document; + import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseInputException; - import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; import de.intevation.gnv.artifactdatabase.objects.ArtifactObject; import de.intevation.gnv.artifactdatabase.objects.ArtifactStatisticsSet; import de.intevation.gnv.artifactdatabase.objects.InputParameter; - import de.intevation.gnv.artifactdatabase.objects.map.MapService; -import java.io.IOException; -import java.io.OutputStream; - -import java.util.Collection; -import java.util.Locale; - -import org.w3c.dom.Document; - /** * This interface describes basic methods for the communication between artifact * server and this client. @@ -91,11 +96,25 @@ Collection<InputParameter> inputParameter) throws ArtifactDatabaseClientException, ArtifactDatabaseInputException; + /** + * Calls the advancecommand for the given Artifact at the Artifactdatabase. + * Stepping to the given target using the given Artifactfactory + * @param factory the Factory which provide the information about which + * Artifactdatabase has to be called. + * @param artifact the Artifact which should be moved to the next state. + * @param target the Id of the next State which should the artifact should + * be moved to. + * @throws IOException + * @throws ArtifactDatabaseClientException + * @throws ArtifactDatabaseInputException + */ public void doAdvance( ArtifactObject factory, ArtifactObject artifact, String target) - throws IOException, ArtifactDatabaseClientException, ArtifactDatabaseInputException; + throws IOException, + ArtifactDatabaseClientException, + ArtifactDatabaseInputException; /** * @param artifactFactory
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.client; import java.util.Locale;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/DefaultArtifactDatabaseClient.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,8 +1,44 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.client; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import org.apache.log4j.Logger; +import org.restlet.Client; +import org.restlet.Request; +import org.restlet.Response; +import org.restlet.data.ClientInfo; +import org.restlet.data.Language; +import org.restlet.data.Method; +import org.restlet.data.Preference; +import org.restlet.data.Protocol; +import org.restlet.representation.Representation; +import org.restlet.representation.StringRepresentation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseClientException; import de.intevation.gnv.artifactdatabase.client.exception.ArtifactDatabaseInputException; - import de.intevation.gnv.artifactdatabase.objects.Artifact; import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription; import de.intevation.gnv.artifactdatabase.objects.ArtifactFactory; @@ -19,49 +55,12 @@ import de.intevation.gnv.artifactdatabase.objects.OutputParameter; import de.intevation.gnv.artifactdatabase.objects.ParametrizedArtifactFactory; import de.intevation.gnv.artifactdatabase.objects.ParametrizedArtifactObject; - import de.intevation.gnv.artifactdatabase.objects.map.Layer; import de.intevation.gnv.artifactdatabase.objects.map.MapService; - import de.intevation.gnv.propertiesreader.PropertiesReader; import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; - import de.intevation.gnv.util.XMLUtils; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import org.apache.log4j.Logger; - -import org.restlet.Client; - -import org.restlet.data.ClientInfo; -import org.restlet.data.Language; -import org.restlet.data.Method; -import org.restlet.data.Preference; -import org.restlet.data.Protocol; -import org.restlet.data.Request; -import org.restlet.data.Response; - -import org.restlet.representation.Representation; -import org.restlet.representation.StringRepresentation; - -import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; - /** * The default implementation of <code>ArtifactDatabaseClient</code> which * implements methods to communicate via HTTP protocol with the artifact server. @@ -274,6 +273,11 @@ private InputStream doPostRequest(String requestUrl, Document requestBody) throws IOException { + + log.debug("URL: "+ requestUrl); + log.debug("Body"); + log.debug(XMLUtils.writeDocument2String(requestBody)); + Client client = new Client(Protocol.HTTP); Request request = initialize(new Request(Method.POST, requestUrl)); String documentBody = XMLUtils.writeDocument2String(requestBody); @@ -1091,11 +1095,12 @@ Node rootNode = this.createArtifactElement(document, "GetMetaData"); document.appendChild(rootNode); - Element locationNode = this.createArtifactElement(document, "location"); - locationNode.setAttribute("srs", srs); - locationNode.appendChild(document.createTextNode(geometry)); - rootNode.appendChild(locationNode); - + if (geometry != null){ + Element locationNode = this.createArtifactElement(document, "location"); + locationNode.setAttribute("srs", srs); + locationNode.appendChild(document.createTextNode(geometry)); + rootNode.appendChild(locationNode); + } Element mapServicesNode = this.createArtifactElement(document, "mapservices"); Iterator<MapService> it = mapServices.iterator();
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/exception/ArtifactDatabaseClientException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/exception/ArtifactDatabaseClientException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.client.exception; /**
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/exception/ArtifactDatabaseInputException.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/client/exception/ArtifactDatabaseInputException.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.client.exception; /**
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/Artifact.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/Artifact.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.util.Collection; @@ -19,18 +27,63 @@ */ private static final long serialVersionUID = 8606869493141810364L; + /** + * The uuid of this Artifact which must be used to identify + * the artifact at the <code>ArtifactDatabase</code>. + */ private String id = null; + + /** + * The hash of the artifact which was send be the <code>ArtifactDatabase</code>. + */ private String hash = null; + + /** + * Flag which marks if the Artifact is currently selected or not. + */ private boolean selected = false; + /** + * The XML-Node of the current User-Interface + */ private Node currentUI = null; + + /** + * The XML-Nodes of the OutputModes. + */ private Node currentOut = null; + /** + * The ids of the states which could be reached. + */ private Collection<String> reachableStates; + + /** + * The parameters whcih could be feed to the artifact at the current state. + */ private Collection<String> inputParameter; + + /** + * The <code>OutputModes</code> that could be reached at the current state. + */ private Map<String, OutputMode> outputModes; + + /** + * The id of the state which is currently used. + */ private String currentState = null; + /** + * Constructor + * @param uuid the uuid of this Artifact which must be used to identify + * the artifact at the <code>ArtifactDatabase</code> + * @param hash the hash of the artifact which was send be the + * <code>ArtifactDatabase</code> + */ + public Artifact(String uuid, String hash) { + this.id = uuid; + this.hash = hash; + } public Node getCurrentUI() { return currentUI; @@ -71,16 +124,6 @@ this.currentState = currentState; } - /** - * Constructor - */ - public Artifact(String uuid, String hash) { - - this.id = uuid; - this.hash = hash; - } - - public String getHash() { return this.hash; }
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactDescription.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactDescription.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,20 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; /** + * Implementation of an <code>ArtifactObject> which represents an + * <code>ArtifactFactory</code> + * This Class provides the name, the description, the URL where the + * the <code>ArtifactDatabase</code> the factory belongs to could be reached + * and if the <code>ArtifacFactory</code> is currently selected or not. + * * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public class ArtifactFactory implements ArtifactObject { @@ -10,12 +24,25 @@ */ private static final long serialVersionUID = 5453748230625831527L; + /** + * The name of the factory. + */ private String name = null; + /** + * The description of the Factory. + */ private String description = null; + /** + * Flag which mark the Artifactfactory as selected if value is true + * unselected if value is false. + */ private boolean selected = false; + /** + * The URL where the Factory could be reached. + */ private String dataBaseUrl = null; /** @@ -33,7 +60,9 @@ * @param description the description of the Factory * @param dataBaseUrl the URL where the Factory could be reached. */ - public ArtifactFactory(String name, String description, String dataBaseUrl) { + public ArtifactFactory(String name, + String description, + String dataBaseUrl) { super(); this.name = name; this.description = description;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactObject.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactObject.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactStatisticValue.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactStatisticValue.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactStatisticsSet.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ArtifactStatisticsSet.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticValue.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticValue.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; /** @@ -12,8 +20,14 @@ */ private static final long serialVersionUID = -8409111023127835398L; + /** + * The key of the new Value. + */ private String key = null; + /** + * The value of the Object. + */ private String value = null; /**
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticsSet.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultArtifactStatisticsSet.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.util.ArrayList; @@ -16,12 +24,19 @@ */ private static final long serialVersionUID = 6738878381515708602L; + /** + * The name of the StatisticsSet. + */ private String name = null; + /** + * The statisticsvalues which belong to this set. + */ private Collection<ArtifactStatisticValue> statisticValues = new ArrayList<ArtifactStatisticValue>(); /** * Constructor + * @param name the name of the StatisticsSet */ public DefaultArtifactStatisticsSet(String name) { this.name = name;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultExportMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultExportMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; /** @@ -9,8 +17,19 @@ public class DefaultExportMode implements ExportMode { + /** + * The name of this parameter. + */ protected String name; + + /** + * The description of this mode. + */ protected String description; + + /** + * The mimetype used for this mode. + */ protected String mimeType; /**
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultInputParameter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultInputParameter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; /** @@ -8,15 +16,23 @@ */ public class DefaultInputParameter implements InputParameter { + /** + * The UID of this Class. + */ private static final long serialVersionUID = 6597439837482244211L; + /** + * The name of this parameter. + */ private String name = null; + /** + * The values of this parameter. + */ private String[] values = null; /** * Constructor - * * @param name The name of this parameter. * @param values The values of this parameter. */
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.util.Collection; @@ -15,14 +23,33 @@ */ private static final long serialVersionUID = 7487880486604174521L; + /** + * The name of the OutputMode + */ private String name = null; + /** + * The mimetype of the OutputMode + */ private String mimeType = null; + /** + * The parameters that could be used for this OutputMode + */ private Collection<OutputParameter> outputParameter = null; + /** + * The exports that can be called using this outputMode + */ private Map<String, ExportMode> exports; + /** + * Constructor + * @param name The name of the OutputMode + * @param mimeType The mimetype of the OutputMode + * @param outputParameter The parameters that could be used for this OutputMode + * @param exports The exports that can be called using this outputMode + */ public DefaultOutputMode( String name, String mimeType,
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputParameter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/DefaultOutputParameter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; /** @@ -12,20 +20,33 @@ */ private static final long serialVersionUID = -8416057640116638152L; + /** + * The name of the parameter + */ private String name = null; + /** + * The value of the parameter + */ private String value = null; + /** + * The description of the parameter + */ private String description = null; + /** + * The type of the parameter + */ private String type = null; /** * Constructor * - * @param name - * @param value - * @param description + * @param name The name of the parameter + * @param value The value of the parameter + * @param description The description of the parameter + * @param type The type of the parameter */ public DefaultOutputParameter(String name, String value, String description, String type) {
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ExportMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ExportMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/InputParameter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/InputParameter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/OutputMode.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/OutputMode.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/OutputParameter.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/OutputParameter.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.io.Serializable;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ParametrizedArtifactFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ParametrizedArtifactFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.util.Collection;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ParametrizedArtifactObject.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/ParametrizedArtifactObject.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects; import java.util.Collection;
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultLayer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultLayer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects.map; /** @@ -8,16 +16,34 @@ public class DefaultLayer implements Layer { + /** + * The id of this layer. + */ private String id = null; + /** + * The name of this layer. + */ private String name = null; + /** + * Flag which defines if this layer is an grouplayer. + */ private boolean groupLayer = false; + /** + * The id of the parent layer or null if this layer is an rootlayer. + */ private String parentId = null; /** * Constructor + * + * @param id the id of this layer + * @param name the name of this layer + * @param groupLayer flag which defines if this layer is an grouplayer + * @param parentId the id of the parent layer or null if this layer is an + * rootlayer */ public DefaultLayer(String id,String name, boolean groupLayer,String parentId) {
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultMapService.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/DefaultMapService.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects.map; import java.util.Collection; @@ -9,16 +17,43 @@ */ public class DefaultMapService implements MapService { + /** + * The id of this mapservice. + */ private String id = null; + /** + * The layer which are provided by this mapservice. + */ private Collection<Layer> layer = null; + /** + * The type of this mapservice. + */ private String type = null; + /** + * The URl of this mapservice. + */ private String url = null; + + /** + * The Bbox which surrounds the data of the Mapservice + */ + private String bbox = null; + + /** + * The time until the server will provide the data. + */ + private String ttl = null; /** * Constructor + * + * @param id the id of this mapservice + * @param layer the layer which are provided by this mapservice + * @param type the type of this mapservice + * @param url the URl of this mapservice */ public DefaultMapService(String id, Collection<Layer> layer, String type, String url) { @@ -28,6 +63,23 @@ this.type = type; this.url = url; } + + /** + * Constructor + * + * @param id the id of this mapservice + * @param layer the layer which are provided by this mapservice + * @param type the type of this mapservice + * @param url the URl of this mapservice + * @param bbox the Bbox which surrounds the data of the Mapservice + * @param ttl the time until the server will provide the data. + */ + public DefaultMapService(String id, Collection<Layer> layer, + String type, String url, String bbox, String ttl) { + this(id,layer,type,url); + this.bbox = bbox; + this.ttl = ttl; + } public String getID() { @@ -48,5 +100,12 @@ public String getURL() { return this.url; } + + public String getBBoxValue() { + return this.bbox; + } + public String getTtl() { + return this.ttl; +} } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/Layer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/Layer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects.map; /**
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/MapService.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/objects/map/MapService.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.objects.map; import java.util.Collection; @@ -39,5 +47,17 @@ * @return the layers served by a map service. */ Collection<Layer> getLayer(); + + /** + * Retrieves the bboxvalue served by a map service. + * @return the bboxvalue + */ + String getBBoxValue (); + + /** + * Returns the Time until the Service will provide the Data. + * @return the Time until the Service will provide the Data. + */ + String getTtl(); } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
--- a/gnv/src/main/java/de/intevation/gnv/artifactdatabase/package.html Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/artifactdatabase/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -3,6 +3,7 @@ <head> </head> <body> -DOCUMENT ME! +This package and it's subpackages provides the required infrastructure to +communicate with the <code>ArtifactDatabase</code>. </body> </html>
--- a/gnv/src/main/java/de/intevation/gnv/propertiesreader/MapPropertiesReader.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/propertiesreader/MapPropertiesReader.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.propertiesreader; import java.util.Map; @@ -14,10 +22,16 @@ private static Logger log = Logger.getLogger(MapPropertiesReader.class); + /** + * The properties which are served by this <code>PropertiesReader</code>. + */ private Map<String, String> properties = null; /** * Constructs a new MapPropertiesReader with an initial map. + * + * @param properties the properties which should be served by this + * <code>PropertiesReader</code>. */ public MapPropertiesReader(Map<String, String> properties) { super();
--- a/gnv/src/main/java/de/intevation/gnv/propertiesreader/PropertiesReader.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/propertiesreader/PropertiesReader.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.propertiesreader; /**
--- a/gnv/src/main/java/de/intevation/gnv/propertiesreader/PropertiesReaderFactory.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/propertiesreader/PropertiesReaderFactory.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.propertiesreader; import java.util.Map;
--- a/gnv/src/main/java/de/intevation/gnv/propertiesreader/ServletPropertiesReader.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/propertiesreader/ServletPropertiesReader.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.propertiesreader; import java.util.Enumeration; @@ -9,6 +17,11 @@ import org.apache.log4j.Logger; /** + * This reader fetches the properties it will provide from the + * <code>ServletConfig</code> of an <code>Context</code>. + * It will read the InitParameters which could be configured using + * the <code>web.xml</code-file of each <code>context</code>. + * * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> * */ @@ -19,10 +32,16 @@ */ private static Logger log = Logger.getLogger(ServletPropertiesReader.class); + /** + * The properties which are read from the <code>ServletConfig</code>. + */ private Map<String, String> properties = null; /** * Constructor + * + * @param config the <code>ServletConfig</code> where + * the properties should be read from. */ public ServletPropertiesReader(ServletConfig config) { super();
--- a/gnv/src/main/java/de/intevation/gnv/propertiesreader/package.html Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/propertiesreader/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -3,6 +3,7 @@ <head> </head> <body> -DOCUMENT ME! +This package provides reader and factories which will provide properties which +are configured in different files (e.g. web.xml) in the whole system. </body> </html>
--- a/gnv/src/main/java/de/intevation/gnv/servlet/GNVActionServlet.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/servlet/GNVActionServlet.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,17 +1,26 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.servlet; -import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; - import javax.servlet.ServletConfig; import javax.servlet.ServletException; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; +import org.apache.struts.action.ActionServlet; -import org.apache.struts.action.ActionServlet; +import de.intevation.gnv.propertiesreader.PropertiesReaderFactory; /** * The GNV ActionServlet. + * This Servelt will be used to handle all requests which are + * send to the GNV-WebClient. * * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ @@ -22,12 +31,17 @@ */ private static Logger log = null; - static { - // BasicConfigurator.configure(); - } + /** + * The id which must be used to lookup the path to the + * <code>log4j.properties</code> file which is configured + * in the <code>web.xml</code> + */ + private final static String LOGGINIG_CONFIG_FILE_ID = "de.intevation.gnv." + + "servlet.log4j.configuration"; - static String LOGGINIG_CONFIG_FILE_ID = "de.intevation.gnv.servlet.log4j.configuration"; - + /** + * The UID of this class. + */ private static final long serialVersionUID = 3597396283436383943L;
--- a/gnv/src/main/java/de/intevation/gnv/servlet/package.html Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/servlet/package.html Fri Sep 28 12:15:22 2012 +0200 @@ -3,6 +3,7 @@ <head> </head> <body> -DOCUMENT ME! +This package provides the <code>Servlet</code> which will be used to handle +all requests which are send to the GNV-WebClient. </body> </html>
--- a/gnv/src/main/java/de/intevation/gnv/util/ArtifactNamespaceContext.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/util/ArtifactNamespaceContext.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,16 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.util; import java.util.Iterator; import javax.xml.XMLConstants; - import javax.xml.namespace.NamespaceContext; /** @@ -25,9 +32,15 @@ */ public final static String NAMESPACE_PREFIX = "art"; + /** + * The singleton instance of this <code>NamespaceContext</code> + */ public static final ArtifactNamespaceContext INSTANCE = new ArtifactNamespaceContext(); + /** + * Constructor + */ public ArtifactNamespaceContext() { }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/java/de/intevation/gnv/util/CaptureInputStream.java Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + +package de.intevation.gnv.util; + +import java.io.FilterInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +/** + * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha Teichmann</a> + */ +public class CaptureInputStream +extends FilterInputStream +{ + protected ByteArrayOutputStream copy; + + public CaptureInputStream(InputStream in) { + super(in); + copy = new ByteArrayOutputStream(10*1024); + } + + public int read() throws IOException { + int x = in.read(); + if (x != -1) { + copy.write(x); + } + return x; + } + + public int read(byte [] b, int off, int len) throws IOException { + int r = in.read(b, off, len); + if (r > 0) { + copy.write(b, off, r); + } + return r; + } + + public long skip(long n) throws IOException { + long m = in.skip(n); + for (long i = m; i > 0L; --i) { // simulate gab + copy.write(0); + } + return m; + } + + public String copyToString() { + return copy.toString(); + } + + public String copyToString(String charsetName) + throws UnsupportedEncodingException + { + return copy.toString(charsetName); + } + + public byte [] toByteArray() { + return copy.toByteArray(); + } + + public void clear() { + copy.reset(); + } +}
--- a/gnv/src/main/java/de/intevation/gnv/util/XMLUtils.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/util/XMLUtils.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.util; import java.io.IOException; @@ -8,62 +16,99 @@ import javax.xml.namespace.NamespaceContext; import javax.xml.namespace.QName; - import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; - import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; - import javax.xml.transform.dom.DOMSource; - import javax.xml.transform.stream.StreamResult; - import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; import org.apache.log4j.Logger; - import org.w3c.dom.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; - import org.xml.sax.SAXException; /** - * @author Sascha L. Teichmann + * This class provides many helper-Methods for handling different kinds of + * XML-stuff. + * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> + * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> */ public class XMLUtils { + + /** + * the logger, used to log exceptions and additonaly information + */ private static Logger logger = Logger.getLogger(XMLUtils.class); + /** + * Constructor + */ public XMLUtils() { } + /** + * Class which could be used to create XML-Elements + * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> + * + */ public static class ElementCreator { + + /** + * The document the elements should be placed in. + */ protected Document document; + + /** + * The namespace that should be used. + */ protected String ns; + + /** + * The prefix of the namespace that should be used. + */ protected String prefix; + /** + * Constructor + * @param document the document the elements should be placed in + * @param ns the namespace that should be used + * @param prefix the prefix of the namespace that should be used + */ public ElementCreator(Document document, String ns, String prefix) { this.document = document; this.ns = ns; this.prefix = prefix; } + /** + * Creates a new element using the given name. + * @param name the name of the new element. + * @return the new element + */ public Element create(String name) { Element element = document.createElementNS(ns, name); element.setPrefix(prefix); return element; } + /** + * Adds a new attribute to the given element. + * @param element the element where the attribute should be placed in. + * @param name the name of the attribute + * @param value the value of the attribute + */ public void addAttr(Element element, String name, String value) { Attr attr = document.createAttributeNS(ns, name); attr.setValue(value); @@ -72,6 +117,10 @@ } } // class ElementCreator + /** + * Creates a new document. + * @return the new document + */ public static Document newDocument() { try { return DocumentBuilderFactory.newInstance().newDocumentBuilder() @@ -82,10 +131,19 @@ return null; } + /** + * Creates a new <code>XPath</code>-expression + * @return the new <code>XPath</code>-expression + */ public static XPath newXPath() { return newXPath(null); } + /** + * Creates a new <code>XPath</code>-expression + * @param namespaceContext the namespacecontext that should be used. + * @return the new <code>XPath</code>-expression + */ public static XPath newXPath(NamespaceContext namespaceContext) { XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); @@ -95,66 +153,127 @@ return xpath; } - public static Object xpath(Object root, String query, QName returnTyp) { - return xpath(root, query, returnTyp, null); - } - + /** + * Fetch the value of an element or attribute from the given resource + * using the query. + * @param root the source where the value should be fetch from + * @param query the query that should be used to fetch the value + * @param namespaceContext the namespacecontext that must match to + * fetch the value. + * @return the value + */ public static final String xpathString(Object root, String query, NamespaceContext namespaceContext) { return (String) xpath(root, query, XPathConstants.STRING, namespaceContext); } + /** + * Fetch the object rom the given resource using the query. + * @param root the source where the value should be fetch from + * @param query the query that should be used to fetch the object + * @param returnType the Type that must be used to return the object, + * @param namespaceContext the namespacecontext that must match to + * fetch the object. + * @return the value + */ public static final Object xpath(Object root, String query, QName returnType, NamespaceContext namespaceContext) { if (root == null) { return null; } - try { - XPath xpath = new XMLUtils().newXPath(namespaceContext); + XPath xpath = XMLUtils.newXPath(namespaceContext); if (xpath != null) { return xpath.evaluate(query, root, returnType); } } catch (XPathExpressionException xpee) { logger.error(xpee.getLocalizedMessage(), xpee); } - return null; } + /** + * Fetch the object rom the given resource using the query + * and the default <code>ArtifactNamespaceContext</code> + * @param root the source where the value should be fetch from + * @param query the query that should be used to fetch the object + * @param returnType the Type that must be used to return the object + * @return the value + */ public static Object getXPath(Object root, String query, QName returnType) { return getXPath(root,query,returnType,ArtifactNamespaceContext.INSTANCE); } + /** + * Fetch the object rom the given resource using the query + * and the default <code>ArtifactNamespaceContext</code> + * @param root the source where the value should be fetch from + * @param query the query that should be used to fetch the object + * @param returnType the Type that must be used to return the object. + * @param context the namespacecontext that must match to + * fetch the object. + * @return the value + */ public static Object getXPath( Object root, String query, QName returnType, NamespaceContext context ) { return xpath(root, query, returnType, context); } - public static String getStringXPath(String xpath) { - return getStringXPath(xpath, null); - } - + /** + * Fetch a Nodeset value from a XML-Fragment or XML-Document using the + * given query. + * @param root the source where the String should be fetched from + * @param query the query that should be used, + * @return the Nodeset fetched from the source + */ public static NodeList getNodeSetXPath(Object root, String query) { return (NodeList) getXPath(root, query, XPathConstants.NODESET); } + /** + * Fetch a Node from a XML-Fragment or XML-Document using the + * given query. + * @param root the source where the Node should be fetched from + * @param query the query that should be used, + * @return the Node fetched from the source + */ public static Node getNodeXPath(Object root, String query) { return (Node) getXPath(root, query, XPathConstants.NODE); } + /** + * Fetch a String value from a XML-Fragment or XML-Document using the + * given query. + * @param root the source where the String should be fetched from + * @param xpath the query that should be used, + * @return the String fetched from the source + */ public static String getStringXPath(Object root, String xpath) { return getStringXPath(root, xpath, null); } + /** + * Fetch a String value from a XML-Fragment or XML-Document using the + * given query. + * @param root the source where the String should be fetched from + * @param query the query that should be used, + * @param def the default-value that will be returned id no value was found + * @return the String fetched from the source + */ public static String getStringXPath(Object root, String query, String def) { String s = (String) getXPath(root, query, XPathConstants.STRING); return s == null || s.length() == 0 ? def : s; } + /** + * Reads an XML-document from a given <code>InputStream</code> + * @param inputStream the <code>InputStream</code> where the document + * should be read from + * @return the document that could be read. + */ public static Document readDocument(InputStream inputStream) { Document returnValue = null; try { @@ -173,6 +292,11 @@ return returnValue; } + /** + * Writes an single <code>XML-Node</code> to a string + * @param node the <code>XML-Node</code> that should be written + * @return the encoded <code>XML-Node</code> + */ public static String writeNode2String(Node node) { try { DOMSource source = new DOMSource(node); @@ -187,13 +311,25 @@ return null; } + /** + * Reinitialize the doument. + * This is neccessary because the namespace sometimes is invalid + * using a document which was created and used in the same step. + * @param document the document which should be reinitialize + * @return the document + */ public static Document reInitDocument(Document document) { - StringBufferInputStream inputStream = new StringBufferInputStream( writeDocument2String(document)); return readDocument(inputStream); } + /** + * Writes the given Document into a String. + * This is very helpful for debugging. + * @param document the document which should be written to the string. + * @return the encoded xml-document. + */ public static String writeDocument2String(Document document) { try { DOMSource source = new DOMSource(document); @@ -209,8 +345,9 @@ } /** - * @param source - * @return + * Writes a given <code>DOMSource</code> into a String + * @param source the source that should be written to string + * @return the encoded <code>DOMSource</code> * @throws TransformerFactoryConfigurationError * @throws TransformerConfigurationException * @throws TransformerException @@ -228,7 +365,13 @@ return sw.getBuffer().toString(); } - public static boolean toStream(Document document, OutputStream out) { + /** + * Writes a given Document to an <code>OutputStream</code> + * @param document the document that should be written + * @param out the stream where the document should be written to, + * @return true if it was successful, false if not. + */ + public static boolean toStream(Document document, OutputStream out) { try { Transformer transformer = TransformerFactory.newInstance().newTransformer(); @@ -246,7 +389,6 @@ catch (TransformerException te) { logger.error(te.getLocalizedMessage(), te); } - return false; } }
--- a/gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/java/de/intevation/gnv/util/XSLTransformer.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,9 +1,16 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.util; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.UnsupportedEncodingException; - import java.util.HashMap; import java.util.Map; @@ -13,14 +20,11 @@ import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; - import javax.xml.transform.dom.DOMSource; - import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.apache.log4j.Logger; - import org.w3c.dom.Node; /** @@ -30,12 +34,15 @@ * @author <a href="mailto:tim.englich@intevation.de">Tim Englich</a> */ public class XSLTransformer { + /** * the logger, used to log exceptions and additonaly information */ private static Logger log = Logger.getLogger(XSLTransformer.class); - + /** + * The parameter that is required in the XSL sheet. + */ private Map<String, String> params; /** @@ -60,7 +67,6 @@ String templateFileName) { String resultValue = null; try { - //XMLUtils xmlUtils = new XMLUtils(); Source templateSource = new StreamSource(new File(templateFileName)); TransformerFactory xformFactory = TransformerFactory.newInstance(); Transformer transformer = xformFactory
--- a/gnv/src/main/resources/applicationMessages.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/resources/applicationMessages.properties Fri Sep 28 12:15:22 2012 +0200 @@ -44,6 +44,8 @@ gnviewer.select.button = Ausw\u00e4hlen gnviewer.select.button.src = ./images/auswaehlen.png gnviewer.draw.button = Aktualisieren +gnviewer.example.linestring=Beispiel WKT-Linestring einf\u00fcgen +gnviewer.example.polygon=Beispiel WKT-Polygon einf\u00fcgen gnviewer.productselection.overlay.title = Die Anfrage wird bearbeitet. Bitte gedulden Sie sich einen Moment. gnviewer.productselection.fisselection.title = Fachinformationssystem @@ -82,16 +84,16 @@ # wms gnviewer.wms.server.path=URL des WMS -gnviewer.wms.server.layer=Name des Layers gnviewer.wms.layer.ttl=Layer ist g\u00fcltig bis gnviewer.wms.options.header.title=WMS Optionen # attachedOutputOptions gnviewer.output.options.diagramm.alt=Diagramm gnviewer.output.options.histogram.alt=Histogramm -gnviewer.output.options.save.title=Diagramm speichern +gnviewer.output.options.refresh.title=Diagramm aktualisieren gnviewer.output.options.export.csv.title=Daten als CSV exportieren gnviewer.output.options.export.odv.title=Daten als ODV exportieren +gnviewer.output.options.export.png.title=Diagramm als PNG exportieren gnviewer.output.options.export.pdf.title=Diagramm als PDF exportieren gnviewer.output.options.export.svg.title=Diagramm als SVG exportieren gnviewer.output.options.export.zip.title=ZIP-Archiv exportieren @@ -123,3 +125,26 @@ mismatching.checksum=Ung\u00fcltiges Artefakt Dokument gefunden. no.such.factory=Ung\u00fcltiges Artefakt Dokument gefunden. java.io.ioexception..no.such.artifact=Ihr Artefakt ist ung\u00fcltig oder bereits abgelaufen. +java.io.ioexception..java.heap.space =Es ist ein interner Serverfehler aufgetreten. Bitte benachrichtigen Sie den Support. +sessiontimeout.has.occured=Ihre Sitzung ist abgelaufen. + +# the map client +gnvview.mapclient.fullscreen = Vollbild +gnviewer.mapclient.layercontrol = Layerkontrolle +gnviewer.mapclient.layercontrol.baselayer = Hintergrundlayer +gnviewer.mapclient.layercontrol.overlay = Generierte Layer +gnviewer.mapclient.legend = Legende +gnviewer.mapclient.wms.load.title = Weitere Layer hinzuf\u00fcgen +gnviewer.mapclient.wms.load.addlayer = Layer hinzuf\u00fcgen +gnviewer.mapclient.wms.load.grid.name = Name +gnviewer.mapclient.wms.load.grid.title = Titel +gnviewer.mapclient.wms.load.bt.text = Laden +gnviewer.mapclient.wms.load.bt.tooltip = L\u00e4d das Capabilities Dokument vom angegebenen Server +gnviewer.mapclient.wms.load.grid.error.title = Fehler +gnviewer.mapclient.wms.load.grid.error.message = Unter der angegebenen Url konnten keine Layer ermittelt werden. +gnviewer.mapclient.controls.nav.previous.title = Springt zum letzten Kartenausschnitt +gnviewer.mapclient.controls.nav.next.title = Springt zum vorherigen Kartenausschnitt +gnviewer.mapclient.controls.navigate.title = Verschieben der Karte +gnviewer.mapclient.controls.zoombox.title = Zum Zoomen ziehen Sie eine Box auf, indem Sie klicken und ziehen +gnviewer.mapclient.controls.info.title = Detailinformationen zu Objekten durch Klicken in die Karte +gnviewer.mapclient.wms.local.service.name = GNV Web Map Service
--- a/gnv/src/main/resources/applicationMessages_en.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/resources/applicationMessages_en.properties Fri Sep 28 12:15:22 2012 +0200 @@ -44,6 +44,8 @@ gnviewer.select.button = Choose gnviewer.select.button.src = ./images/choose.png gnviewer.draw.button = Update +gnviewer.example.linestring=Insert an example linestring as wkt +gnviewer.example.polygon=Insert an example polygon as wkt gnviewer.productselection.overlay.title = Your request will be processed. Please wait... gnviewer.productselection.fisselection.title = Data set @@ -82,16 +84,16 @@ # wms gnviewer.wms.server.path=WMS URL -gnviewer.wms.server.layer=Layername gnviewer.wms.layer.ttl=Layer is valid to gnviewer.wms.options.header.title=WMS Optionen # attachedOutputOptions gnviewer.output.options.diagramm.alt=Diagram gnviewer.output.options.histogram.alt=Histogram -gnviewer.output.options.save.title=Save Diagram +gnviewer.output.options.refresh.title=Refresh chart gnviewer.output.options.export.csv.title=Export Data as CSV gnviewer.output.options.export.odv.title=Export Data as ODV +gnviewer.output.options.export.png.title=Export chart as PNG gnviewer.output.options.export.pdf.title=Export chart as PDF gnviewer.output.options.export.svg.title=Export chart as SVG gnviewer.output.options.export.zip.title=Export as ZIP archive @@ -109,9 +111,9 @@ java.io.ioexception..connection.reset = The Connection to the ArtifactDatabase is interrupted. Please try again later. java.io.ioexception..unable.to.parse.the.response.http.version..end.of.stream.reached.too.early= The Connection to the ArtifactDatabase was interrupted unexpected. no.inputdata.given..please.select.at.least.one.entry = No Entry was chosen. Please select at least one entry. -de.intevation.gnv.geobackend.base.query.exception.queryexception..java.sql.sqlexception: A internal Server error has occurred. Please contact the Support. -java.io.ioexception..the.server.encountered.an.unexpected.condition.which.prevented.it.from.fulfilling.the.request = A internal Server error has occurred. Please contact the Support. -java.lang.illegalargumentexception..inputstream.cannot.be.null = A internal Server error has occurred. Please contact the Support. +de.intevation.gnv.geobackend.base.query.exception.queryexception..java.sql.sqlexception=An internal server error has occurred. Please contact the support. +java.io.ioexception..the.server.encountered.an.unexpected.condition.which.prevented.it.from.fulfilling.the.request=An internal server error has occurred. Please contact the support. +java.lang.illegalargumentexception..inputstream.cannot.be.null = An internal server error has occurred. Please contact the support. input.is.not.valid.for.this.state=You entered an invalid value. Please try again. input.not.a.integer= is not a valid integer. Please try again. input.not.a.double= is not a valid floating-point number. Please try again. @@ -121,3 +123,26 @@ mismatching.checksum=Invalid artifact found. no.such.factory=Invalid artifact found. java.io.ioexception..no.such.artifact=Your artifact is invalid or out of date. +java.io.ioexception..java.heap.space = An internal server error has occurred. Please contact the support. +sessiontimeout.has.occured=Your session timed out. + +# the map client +gnvview.mapclient.fullscreen = Full screen +gnviewer.mapclient.layercontrol = Layercontrol +gnviewer.mapclient.layercontrol.baselayer = Baselayer +gnviewer.mapclient.layercontrol.overlay = Overlay +gnviewer.mapclient.legend = Legend +gnviewer.mapclient.wms.load.title = Add further Layer +gnviewer.mapclient.wms.load.addlayer = Add Layer +gnviewer.mapclient.wms.load.grid.name = Name +gnviewer.mapclient.wms.load.grid.title = Title +gnviewer.mapclient.wms.load.bt.text = Load +gnviewer.mapclient.wms.load.bt.tooltip = Load the Capabilities document from the given destination. +gnviewer.mapclient.wms.load.grid.error.title = Error +gnviewer.mapclient.wms.load.grid.error.message = No layer could be determined under the given url. +gnviewer.mapclient.controls.nav.previous.title = Jumps to the last Mapview +gnviewer.mapclient.controls.nav.next.title = Jumps to the last Mapview +gnviewer.mapclient.controls.navigate.title = Moves the map +gnviewer.mapclient.controls.zoombox.title = Zoom by clicking an moving the mouse to generate a box +gnviewer.mapclient.controls.info.title = Identify features by clicking +gnviewer.mapclient.wms.local.service.name = GNV Web Map Service
--- a/gnv/src/main/webapp/WEB-INF/classes/log4j.properties Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/classes/log4j.properties Fri Sep 28 12:15:22 2012 +0200 @@ -1,20 +1,18 @@ -# Set root logger level to DEBUG and its only appender to A1. -log4j.rootLogger=DEBUG, A1 -log4j.rootLogger=DEBUG, BSH +#### Log just errors and warnings to a file. +log4j.rootLogger=WARN, BSH -# A1 is set to be a ConsoleAppender. -log4j.appender.A1=org.apache.log4j.ConsoleAppender +## The following line enables the output of the MapViewer call document. +log4j.category.de.intevation.gnv.action.mapviewer.MapViewerCallAction=DEBUG -# A1 uses PatternLayout. -log4j.appender.A1.layout=org.apache.log4j.PatternLayout -log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n +#### Log everything to a file. +#log4j.rootLogger=DEBUG, BSH log4j.appender.BSH=org.apache.log4j.RollingFileAppender log4j.appender.BSH.File=${catalina.base}/logs/gnv.log log4j.appender.BSH.layout=org.apache.log4j.PatternLayout log4j.appender.BSH.layout.ConversionPattern=%d [%t] %-5p %c - %m%n -# Abschalten des geschwätzigen Loggings in dre Klasse JspServlet +# set WARN log level for following packages to reduce output. log4j.category.org.apache.jasper=WARN log4j.category.org.apache.catalina=WARN log4j.category.org.apache.commons=WARN
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/config/reachable-servers.conf Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,34 @@ +['BSH WMS Background','http://gdisrv.bsh.de/arcgis/services/Background/Background/MapServer/WMSServer'], +['BSH WMS CONTIS Administration','http://gdisrv.bsh.de/arcgis/services/CONTIS/Administration/MapServer/WMSServer'], +['BSH WMS CONTIS Facilities','http://gdisrv.bsh.de/arcgis/services/CONTIS/Facilities/MapServer/WMSServer'], +['BSH WMS NAUTHIS Skin of the Earth','http://gdisrv.bsh.de/arcgis/services/Nauthis/SkinOfTheEarth/MapServer/WMSServer '], +['BSH WMS NAUTHIS Navigational Aids','http://gdisrv.bsh.de/arcgis/services/Nauthis/NavigationalAids/MapServer/WMSServer '], +['BSH WMS NAUTHIS Seawards Limits','http://gdisrv.bsh.de/arcgis/services/Nauthis/SeawardsLimits/MapServer/WMSServer'], +['BSH WMS NAUTHIS Rocks Wrecks Obstructions','http://gdisrv.bsh.de/arcgis/services/Nauthis/RocksWrecksObstructions/MapServer/WMSServer'], +['BSH WMS NAUTHIS Hydrography','http://gdisrv.bsh.de/arcgis/services/Nauthis/Hydrography/MapServer/WMSServer'], +['BSH WMS NAUTHIS Topography','http://gdisrv.bsh.de/arcgis/services/Nauthis/Topography/MapServer/WMSServer'], +['BSH WMS Water Pollution Reports','http://gdisrv.bsh.de/arcgis/services/WaterPollution/WaterPollution/MapServer/WMSServer'], +['BSH WMS Marine Environmental Monitoring Network','http://gdisrv.bsh.de/arcgis/services/MARNET/MARNET/MapServer/WMSServer'], +['BSH WMS Remote Sensing Sea Surface Temperature','http://gdisrv.bsh.de/arcgis/services/RemoteSensing/SeaSurfaceTemperature/MapServer/WMSServer'], +['BSH WMS Sea Surface Temperature Analysis','http://gdisrv.bsh.de/arcgis/services/SeaSurfaceTemperature/SeaSurfaceTemperature/MapServer/WMSServer'], +['BSH WMS Prediction Model Current','http://gdisrv.bsh.de/arcgis/services/PredictionModel/WaterCurrent/MapServer/WMSServer'], +['BSH WMS Prediction Model Water Level NN','http://gdisrv.bsh.de/arcgis/services/PredictionModel/WaterLevelNN/MapServer/WMSServer'], +['BSH WMS Prediction Model Water Temperature','http://gdisrv.bsh.de/arcgis/services/PredictionModel/WaterTemperature/MapServer/WMSServer'], +['BSH WMS Prediction Model Salinity','http://gdisrv.bsh.de/arcgis/services/PredictionModel/WaterSalinity/MapServer/WMSServer'], +['BSH WMS SGE Additional Information','http://gdisrv.bsh.de/arcgis/services/SGE/AdditionalInformation/MapServer/WMSServer'], +['BSH WMS SGE Seabed Sediments','http://gdisrv.bsh.de/arcgis/services/SGE/SeabedSediments/MapServer/WMSServer'], +['BSH WMS SGE Subsurface Sediments','http://gdisrv.bsh.de/arcgis/services/SGE/SubsurfaceSediments/MapServer/WMSServer'], +['BSH WMS SGE Survey','http://gdisrv.bsh.de/arcgis/services/SGE/Survey/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Sediment PCB','http://gdisrv.bsh.de/arcgis/services/MUDAB/SedimentPCB/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Sediment Metalle','http://gdisrv.bsh.de/arcgis/services/MUDAB/SedimentMetals/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Sediment HCH','http://gdisrv.bsh.de/arcgis/services/MUDAB/SedimentHCH/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser PCB','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterPCB/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser Nährstoffe','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterNutrients/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser Metalle','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterMetals/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser HCH','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterHCH/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser Physik','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterPhysical/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser PAH','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterPAH/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Wasser Pestizide','http://gdisrv.bsh.de/arcgis/services/MUDAB/WaterPesticide/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Biota PCB','http://gdisrv.bsh.de/arcgis/services/MUDAB/BiotaPCB/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Biota Metalle','http://gdisrv.bsh.de/arcgis/services/MUDAB/BiotaMetals/MapServer/WMSServer'], +['BSH WMS MUDAB BLMP Biota HCH','http://gdisrv.bsh.de/arcgis/services/MUDAB/BiotaHCH/MapServer/WMSServer'] \ No newline at end of file
--- a/gnv/src/main/webapp/WEB-INF/config/struts-config.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/config/struts-config.xml Fri Sep 28 12:15:22 2012 +0200 @@ -156,10 +156,22 @@ name="selectfis" path="/gnv/selectFis.do"/> </action> + <action path="/mapclient" + type="de.intevation.gnv.action.MapClientStandaloneAction" + scope="request" + validate="false"> + <forward + name="success" + path="/WEB-INF/jsp/wmsstandalone.jsp"/> + </action> + <action path="/export" type="de.intevation.gnv.action.DoExportAction" scope="request" validate="false"> + <forward + name="success" + path="/WEB-INF/jsp/mainlayout.jsp"/> </action> <action path="/changeOptions" type="de.intevation.gnv.action.ChangeOptionsAction"
--- a/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui-static.xsl Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui-static.xsl Fri Sep 28 12:15:22 2012 +0200 @@ -43,11 +43,9 @@ <xsl:param name="index" /> <xsl:param name="fis" /> <xsl:if test="$state != ''"> - <xsl:if test="$index = $total"> - <a href="{$back-url}?target={$state}"> - <img title="{$edit}" alt="{$edit}" src="images/back_button.png"/> - </a> - </xsl:if> + <a href="{$back-url}?target={$state}"> + <img title="{$edit}" alt="{$edit}" src="images/back_button.png"/> + </a> </xsl:if> <xsl:if test="$fis"> <a href="{$selectfis}"><img title="{$edit}" alt="{$edit}" src="images/back_button.png"/></a>
--- a/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/config/templates/describe-ui.xsl Fri Sep 28 12:15:22 2012 +0200 @@ -9,6 +9,9 @@ <xsl:output method="html" version="1.0" encoding="UTF-8" omit-xml-declaration="no" /> + <xsl:param name="example-linestring"/> + <xsl:param name="example-polygon"/> + <!-- single select --> <xsl:template match="xform:select1"> <xsl:variable name="selectName" select="@ref"/> @@ -157,10 +160,10 @@ <!-- TODO: Remove this when we have the GIS interface. (slt) --> <xsl:choose> <xsl:when test="$inputName = 'mesh_linestring'"> - <a href="javascript:copy_demo_wkt_line();"><xsl:text>Beispiel WKT-Linestring einfügen:</xsl:text></a><br/> + <a href="javascript:copy_demo_wkt_line();"><xsl:value-of select="$example-linestring"/>:</a><br/> </xsl:when> <xsl:when test="$inputName = 'mesh_polygon'"> - <a href="javascript:copy_demo_wkt_polygon();"><xsl:text>Beispiel WKT-Polygon einfügen:</xsl:text></a><br/> + <a href="javascript:copy_demo_wkt_polygon();"><xsl:value-of select="$example-polygon"/>:</a><br/> </xsl:when> </xsl:choose>
--- a/gnv/src/main/webapp/WEB-INF/jsp/footer.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/footer.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,29 +1,35 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> -<html> - <table class="footerTable"> - <tr> - <td class="footerLine">© 2010 Bundesamt für Seeschifffahrt und Hydrographie</td> - <td></td> - </tr> - <tr> - <td colspan="2"> - <table class="footerTableLinks"> - <tr> - <td align="left"></td> - <td align="right"> - <html:link styleClass="footerLineLinks" href="http://www.bsh.de"><bean:message key="gnviewer.footer.home"/></html:link> - <font size="1.5em" color="white">·</font> - <html:link styleClass="footerLineLinks" href="mailto:"><bean:message key="gnviewer.footer.contact"/></html:link> - <font size="1.5em" color="white">·</font> - <html:link styleClass="footerLineLinks" page="/imprint.do"><bean:message key="gnviewer.footer.about"/></html:link> - </td> - </tr> - </table> - </td> - </tr> - </table> -</html> +<table class="footerTable"> + <tr> + <td class="footerLine">© 2010 Bundesamt für Seeschifffahrt und Hydrographie</td> + <td></td> + </tr> + <tr> + <td colspan="2"> + <table class="footerTableLinks"> + <tr> + <td align="left"></td> + <td align="right"> + <html:link styleClass="footerLineLinks" href="http://www.bsh.de"><bean:message key="gnviewer.footer.home"/></html:link> + <font color="white">·</font> + <html:link styleClass="footerLineLinks" href="mailto:"><bean:message key="gnviewer.footer.contact"/></html:link> + <font color="white">·</font> + <html:link styleClass="footerLineLinks" page="/imprint.do"><bean:message key="gnviewer.footer.about"/></html:link> + </td> + </tr> + </table> + </td> + </tr> +</table> <%--div style="clear: left; margin-top: 40px;"/--%>
--- a/gnv/src/main/webapp/WEB-INF/jsp/header.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/header.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> @@ -9,16 +17,16 @@ <h1 class="headline">BSH Generischer Viewer</h1> </div> -<br> +<br/> <table class="headerTableLinks"> <tr> <td align="left"></td> <td align="right"> - <html:link styleClass="headerLineLinks" page="/start.do"><bean:message key="gnviewer.header.restart"/></html:link> - <font size="1.5em" color="white">·</font> + <html:link styleClass="headerLineLinks" href="./start.do"><bean:message key="gnviewer.header.restart"/></html:link> + <font color="white">·</font> <a class="headerLineLinks" href="<%=response.encodeURL("language.do?uid="+System.currentTimeMillis())%>"><bean:message key="gnviewer.header.language"/></a> - <font size="1.5em" color="white">·</font> + <font color="white">·</font> <html:link styleClass="headerLineLinks" page="/info.do"><bean:message key="gnviewer.header.info"/></html:link> </td> </tr>
--- a/gnv/src/main/webapp/WEB-INF/jsp/imprint.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/imprint.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,4 +1,13 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> @@ -16,7 +25,7 @@ <h1 class="headline">BSH Generischer Viewer</h1> </div> - <br> + <br/> <div id="headerElement"> <table class="headerTableLinks">
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_diagramm_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_diagramm_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_diagramm_options_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_diagramm_options_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="de.intevation.gnv.action.CommunicationKeys"%> @@ -9,6 +17,7 @@ <%@page import="de.intevation.gnv.artifactdatabase.objects.ExportMode"%> <%@page import="java.util.Collection"%> <%@page import="java.util.Iterator"%> +<%@page import="java.util.Locale"%> <%@page import="java.net.URLEncoder"%> <% String exceptionMsg = (String)request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_MESSAGE); @@ -18,6 +27,7 @@ String targetSVG = "svg"; String targetIMG = "img"; SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); + Locale locale = sm.getCurrentLocale(); OutputMode outputMode = sm.getOutputMode(target); DiagrammOptions diagrammOptions = sm.getDiagrammOptions(); @@ -77,23 +87,23 @@ </td> <td> <%if (om.getType().equalsIgnoreCase("boolean")){ - boolean checked = useDiagrammOptions ? "true".equalsIgnoreCase(diagrammOptions.getValue(om.getName())) : om.getValue().equalsIgnoreCase("true"); + boolean checked = useDiagrammOptions ? "true".equalsIgnoreCase(diagrammOptions.getValue(om.getName(), locale)) : om.getValue().equalsIgnoreCase("true"); %> <input type="checkbox" name="<%=om.getName() %>" <%=checked ? " value=\"true\" checked=\"checked\"": "" %>/> <%}else{%> - <input type="text" name="<%=om.getName() %>" value="<%=useDiagrammOptions ? diagrammOptions.getValue(om.getName()): om.getValue()%>"/> + <input type="text" name="<%=om.getName() %>" value="<%=useDiagrammOptions ? diagrammOptions.getValue(om.getName(), locale): om.getValue()%>"/> <%}%> </td> </tr> <%}%> </table> <div class="exportBar"> - <input type="image" name="target" value="chart" src="images/arrow_refresh.png" alt="<bean:message key="gnviewer.draw.button"/>"/> + <input type="image" name="target" value="chart" src="images/arrow_refresh.png" alt="<bean:message key="gnviewer.draw.button"/>" title="<bean:message key="gnviewer.output.options.refresh.title"/>"/> <%}%> <%if (supportIMG != null) { %> - <a href="<%=response.encodeURL("export.do?mimetype="+mimeTypeIMG+"&target="+target+"&mode="+targetIMG+parameterString+"&uid="+System.currentTimeMillis())%>" title="<bean:message key="gnviewer.output.options.save.title"/>"> + <a href="<%=response.encodeURL("export.do?mimetype="+mimeTypeIMG+"&target="+target+"&mode="+targetIMG+parameterString+"&uid="+System.currentTimeMillis())%>" title="<bean:message key="gnviewer.output.options.export.png.title"/>"> <img src="images/diagram_export.png" border="0"/></a> <%}%> <%if (supportPDF != null) { %>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_diagramm_statistics_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_diagramm_statistics_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_export_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_export_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_fis_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_fis_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_histogram_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_histogram_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_histogram_options_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_histogram_options_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="de.intevation.gnv.action.CommunicationKeys"%> @@ -9,6 +17,7 @@ <%@page import="de.intevation.gnv.artifactdatabase.objects.ExportMode"%> <%@page import="java.util.Collection"%> <%@page import="java.util.Iterator"%> +<%@page import="java.util.Locale"%> <%@page import="java.net.URLEncoder"%> <% String exceptionMsg = (String)request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_MESSAGE); @@ -18,6 +27,7 @@ String targetSVG = "svg"; String targetIMG = "img"; SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); + Locale locale = sm.getCurrentLocale(); OutputMode outputMode = sm.getOutputMode(target); DiagrammOptions diagrammOptions = sm.getDiagrammOptions(); @@ -84,7 +94,7 @@ else { check = "checked=\"checked\""; }%> - <input type="checkbox" <%= check %> name="bintype" value="bincount" id="checkCount" onClick="toggleBinType('checkWidth')"> </input> + <input type="checkbox" <%= check %> name="bintype" value="bincount" id="checkCount" onClick="toggleBinType('checkWidth')"/> <%}%> <%if (om.getName().equals("binwidth")) { String check = ""; @@ -94,7 +104,7 @@ else if (diaOpts == null) { check = ""; }%> - <input type="checkbox" <%= check %> name="bintype" value="binwidth" id="checkWidth" onClick="toggleBinType('checkCount')"> </input> + <input type="checkbox" <%= check %> name="bintype" value="binwidth" id="checkWidth" onClick="toggleBinType('checkCount')"/> <%}%> </td> <td class="parameter"> @@ -102,13 +112,13 @@ </td> <td> <%if (om.getType().equalsIgnoreCase("boolean")){ - boolean checked = useDiagrammOptions ? "true".equalsIgnoreCase(diagrammOptions.getValue(om.getName())) : om.getValue().equalsIgnoreCase("true"); + boolean checked = useDiagrammOptions ? "true".equalsIgnoreCase(diagrammOptions.getValue(om.getName(), locale)) : om.getValue().equalsIgnoreCase("true"); %> <input type="checkbox" name="<%=om.getName() %>" <%=checked ? " value=\"true\" checked=\"checked\"": "" %>/> <%}else{%> - <input type="text" name="<%=om.getName() %>" value="<%=useDiagrammOptions ? diagrammOptions.getValue(om.getName()): om.getValue()%>"/> + <input type="text" name="<%=om.getName() %>" value="<%=useDiagrammOptions ? diagrammOptions.getValue(om.getName(), locale): om.getValue()%>"/> <%}%> </td> </tr>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_map_fullscreen_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,19 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> +<div id="headline"> + <h1 class="headline">BSH Generischer Viewer</h1> +</div> +<div id="cap" style="height: 100%; width: 100%; overflow: auto"> + <div id="remoteinput"> + <div id="urlinput" style="width: 96%"><!-- Just a Comment --></div> + <div id="urlbutton"><!-- Just a Comment --></div> + </div> + <div id="capgrid"><!-- Just a Comment --></div> +</div> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_map_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,24 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%> +<jsp:include page="display_wms_basic_informations.jsp" /> +<div> +<p align="right"> + <a target="blank" href="<%=response.encodeURL("mapclient.do?uid="+System.currentTimeMillis())%>"><bean:message key="gnvview.mapclient.fullscreen"/></a> +</p> +</div> +<br/> +<div id="cap" style="height: 100%; width: 100%; overflow: auto"> + <div id="remoteinput"> + <div id="urlinput" style="width: 96%"><!-- Just a Comment --></div> + <div id="urlbutton"><!-- Just a Comment --></div> + </div> + <div id="capgrid"><!-- Just a Comment --></div> +</div> +<div id="mapcontainer" style="width: 100%; height: 100%"><!-- Just a Comment --></div> \ No newline at end of file
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_mapviewercall_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_mapviewercall_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <% String geometry = "POINT (6.3333 56.5)"; String geometrytype = request.getParameter("gt");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_wms_basic_informations.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,32 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%> +<%@page import="de.intevation.gnv.artifactdatabase.objects.map.MapService"%> +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> +<% +SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); +MapService localMapService = sm.getLocalMapService(); +Collection<Layer> layer = localMapService.getLayer(); +%> + +<%@page import="java.util.Collection"%> +<%@page import="de.intevation.gnv.artifactdatabase.objects.map.Layer"%> +<%@page import="java.util.Iterator"%><div id="wms"> + <table> + <tr> + <td class="parameter"><bean:message key="gnviewer.wms.server.path"/>:</td> + <td class="wmsvalue"><%=localMapService.getURL()%>?SERVICE=WMS&REQUEST=GetCapabilities</td> + </tr> + <tr> + <td class="parameter"><bean:message key="gnviewer.wms.layer.ttl"/>:</td> + <td class="wmsvalue"><%=localMapService.getTtl()%></td> + </tr> + </table> +</div>
--- a/gnv/src/main/webapp/WEB-INF/jsp/includes/display_wms_options_inc.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/display_wms_options_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="de.intevation.gnv.action.CommunicationKeys"%> @@ -8,6 +16,7 @@ <%@page import="de.intevation.gnv.artifactdatabase.objects.OutputParameter"%> <%@page import="java.util.Collection"%> <%@page import="java.util.Iterator"%> +<%@page import="java.util.Locale"%> <%@page import="java.net.URLEncoder"%> <% String exceptionMsg = (String) request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_MESSAGE); @@ -15,6 +24,7 @@ String layer = (String) request.getAttribute("layer"); String target = "wms"; SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); + Locale locale = sm.getCurrentLocale(); OutputMode om = sm.getOutputMode(target); DiagrammOptions opts = sm.getDiagrammOptions(); String uuid = sm.getCurrentArtifact().getId(); @@ -44,7 +54,7 @@ <td class="parameter"><bean-el:message key="<%=param.getName()%>"/></td> <td> <%if (param.getType().equalsIgnoreCase("boolean")) { - boolean checked = (opts != null) ? "true".equalsIgnoreCase(opts.getValue(param.getName())) : param.getValue().equalsIgnoreCase("true"); + boolean checked = (opts != null) ? "true".equalsIgnoreCase(opts.getValue(param.getName(), locale)) : param.getValue().equalsIgnoreCase("true"); %> <input type="checkbox" name="<%=param.getName()%>" <%=checked ? " value=\"true\" checked=\"checked\"": "" %>/> <%}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/info_english.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,13 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<div class="info-content"> + <div style="padding-top: 15px;">Further information are available in German only.</div> +</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/info_german.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,67 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<div class="info-content"> + + <h2 class="headline infoheadline">Informationen über den Generischen Viewer in der GDI BSH</h2> + + In der Geodateninfrastruktur des <a href="http://www.bsh.de/" target="_new"> + Bundesamtes für Seeschifffahrt und Hydrographie (BSH)</a> werden alle + wesentlichen marinen Geodaten in einem Data Warehouse vorgehalten. Neben dem + Geodatenportal, dem <a href="http://www.geoseaportal.de/" target="_new"> + GeoSeaPortal</a>, werden v.a. die Parameter, die räumlich und zeitlich + variieren, über den Generischen Viewer bereitgestellt. + <br/>Der Generische Viewer übernimmt die Aufgaben, den umfangreichen + Datenbestand des Data Warehouses Endnutzern strukturierbar anzubieten, um + fachliche Analysen wie Zeitreihen, unterschiedliche Profile, Schnittoperationen + und Statistiken browsergestützt durchführen zu können. Über umfangreiche + Exportfunktionen stehen Fachdaten und Visualisierungsprodukte zur weiteren + Bearbeitung bereit. Der Generische Viewer liefert damit einen zentralen + Zugangspunkt für Fachdaten, die über eine rein kartographische Visualisierung + hinausgehen. + <br/> + Weitere Informationen zur Geodateninfrastruktur des BSH (GDI-BSH) unter + <a href="http://www.geoseaportal.de" target="_new">http://www.geoseaportal.de</a> + + <h2 class="headline infoheadline">Kontakt</h2> + + Projektgruppe GDI BSH im <a href="http://www.bsh.de/" target="_new">Bundesamt + für Seeschifffahrt und Hydrographie</a> Bernhard-Nocht-Straße 78 20359 Hamburg + <br/><br/> + Fachliche Fragen <a href="mailto:juergen.schulz-ohlberg@bsh.de">Jürgen Schulz-Ohlberg</a> + <br/><br/> + Technische Fragen <a href="mailto:joerg.gerdes@bsh.de">Jörg Gerdes</a> + <br/><br/> + <h2 class="headline infoheadline">Über Generischen Viewer (GNV)</h2> + + Die Software "Generische Viewer GDI-BSH" setzt auf dem verteilbaren Softwaresystem + des "Open Water Analyst" auf, um auf die umfangreichen Datenbestände des + Data Warehouses des BSH, realisiert auf ESRI ArcSDE und Oracle. Über ein + einheitliches Protokoll auf der Basis von REST steuert die webgestützte Oberfläche + des Generischen Viewers die Serverkomponente an, die für die Datenbeschaffung, die + -analyse und Ausgabengenerierung verantwortlich ist. Um vor allem Datenzugriffe zu + beschleunigen, sind Caching-Mechanismen integriert worden, die Zwischenergebnisse + vorhalten. + + Die Implementierung ist vollständig auf Basis Freier Software realisiert worden + und bindet alleinig properietäre Elemente zum Zugriff auf ESRI ArcSDE ein. Der + Generische Viewer ist eine Fachapplikation des Open Water Analyst. Die Umsetzung + weitere Fachlösungen ist aufgrund des Designs und eingesetzten Protokolles möglich. + + <h2 class="headline infoheadline">Umsetzung</h2> + + Design und Implementation der Software durch die <a href="http://www.intevation.de" target="_new"> + Intevation GmbH</a>, Bereich Geospatial: Hans Plum (Projektleitung), Tim + Englich, Sascha L. Teichmann und Ingo Weinzierl. + + <h2 class="headline infoheadline">Lizenz</h2> + + Die Software wird voraussichtlich im Sommer 2010 als Freie Software veröffentlicht. +</div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/includes/wms_header_inc.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,48 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +<%@page import="de.intevation.gnv.action.MapClientStandaloneAction"%> +<% +boolean standalone = request.getAttribute(MapClientStandaloneAction.MAPCLIENTSTANDALONE_KEY) != null; +%> + +<head> + <title> + <bean:message key="gnviewer.app.title"/> + </title> + <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> + <meta http-equiv="Content-Script-Type" content="text/javascript"/> + <meta http-equiv="Content-Style-Type" content="text/css"/> + <meta http-equiv="Expires" content="Mon, 01 Jan 1990 00:00:01 GMT"/> + <meta http-equiv="pragma" content="no-cache"/> + <meta http-equiv="cache-control" content="no-cache"/> + <meta name="robots" content="noindex"/> + + <link rel="stylesheet" type="text/css" href="scripts/ext/ext-2.3.0/resources/css/ext-all.css"></link> + <link rel="stylesheet" type="text/css" href="scripts/geoext/geoext-0.6/resources/css/geoext-all.css"></link> + <link rel="stylesheet" type="text/css" href="scripts/openlayers/OpenLayers-2.9/theme/default/style.css"></link> + <link rel="stylesheet" type="text/css" href="styles/gnv.css"/> + <link rel="stylesheet" type="text/css" href="styles/ol_style.css"/> + <link rel="stylesheet" type="text/css" href="styles/extjs-override.css"/> + + <script type="text/javascript" src="scripts/ext/ext-2.3.0/adapter/ext/ext-base.js"></script> + <script type="text/javascript" src="scripts/ext/ext-2.3.0/ext-all.js"></script> + <script type="text/javascript" src="scripts/openlayers/OpenLayers-2.9/OpenLayers.js"></script> + <script type="text/javascript" src="scripts/geoext/geoext-0.6/script/GeoExt.js"></script> + <script type="text/javascript" src="<%=response.encodeURL("scripts/olutils.jsp?uid="+System.currentTimeMillis())%>">"></script> + <script type="text/javascript" src="<%=response.encodeURL("scripts/layers.jsp?uid="+System.currentTimeMillis())%>"></script> + <script type="text/javascript" src="<%=response.encodeURL("scripts/viewport.jsp?uid="+System.currentTimeMillis()+"&"+MapClientStandaloneAction.MAPCLIENTSTANDALONE_KEY+"="+standalone)%>"></script> + + <!-- save necessary variables here --> + <script type="text/javascript"> + var options, layer, extent, map, mapPanel, infoControls, capfield; + var controls,layers, mouseLoc, grid; + var infoActive = false; + </script> + </head> \ No newline at end of file
--- a/gnv/src/main/webapp/WEB-INF/jsp/index.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/index.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean-el" prefix="bean-el" %> <%@page import="java.util.Collection"%> @@ -14,15 +22,10 @@ Object chart = request.getAttribute("chart"); Object statistic = request.getAttribute("statistic"); Object histogram = request.getAttribute("histogram"); - Object wms = request.getAttribute("wms"); Object wms_published = request.getAttribute("wms_published"); - String serverPath = (String) request.getAttribute("mapserver"); - String mapfilePath = (String) request.getAttribute("mapfile"); - String layerName = (String) request.getAttribute("layer"); - String timeToLive = (String) request.getAttribute("ttl"); boolean furthertargets = true; - if (chart == null && statistic == null && histogram == null && wms == null) { + if (chart == null && statistic == null && histogram == null && wms_published == null) { boolean supportChart = sm.getOutputMode("chart") != null; if (supportChart) { chart = "true"; @@ -38,6 +41,10 @@ exceptionMessage = (exceptionMessage != null ? exceptionMessage.toString().replaceAll(" ", ".").replaceAll(":",".").toLowerCase() : null); exceptionMessage = (exceptionMessage != null && exceptionMessage.toString().endsWith(".") ? exceptionMessage.toString().substring(0,exceptionMessage.toString().length()-1) : exceptionMessage); + Object sessionException = request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_SESSION_ID); + sessionException = (sessionException != null ? sessionException.toString().replaceAll(" ", ".").replaceAll(":",".").toLowerCase() : null); + sessionException = (sessionException != null && sessionException.toString().endsWith(".") ? sessionException.toString().substring(0,sessionException.toString().length()-1) : sessionException); + boolean showmapviewercallBody = request.getAttribute("MAPVIEWERCALL") != null; String exceptionProject = (String) request.getAttribute(CommunicationKeys.REQUEST_EXCEPTION_PROJECT); @@ -107,7 +114,7 @@ <%=ui != null ? ui.toString().replaceAll(" ", "") : "" %> <%if(furthertargets){%> - <br> + <br/> <input style="margin-top: 5px;" type="image" src="<bean:message key="gnviewer.select.button.src"/>"/> <%}%> </fieldset> @@ -128,7 +135,7 @@ <%}%> <%-- render wms options --%> - <%if (wms != null) {%> + <%if (wms_published != null) {%> <jsp:include page="/WEB-INF/jsp/includes/display_wms_options_inc.jsp"></jsp:include> <%}%> </div> @@ -144,6 +151,11 @@ </p> </div> <%}%> + <%if (sessionException != null){ %> + <div class="errormsg" id="load_error"> + <bean-el:message key="<%=sessionException.toString()%>"/> + </div> + <%}%> <%if (chart != null) {%> <%-- render chart options if existing for this state --%> <jsp:include page="includes/display_diagramm_inc.jsp"></jsp:include> @@ -161,25 +173,7 @@ <%-- render wms layer --%> <%if (wms_published != null) {%> - <div class="outerMap"> - <div id="wms"> - <table> - <tr> - <td class="parameter"><bean:message key="gnviewer.wms.server.path"/>:</td> - <td class="wmsvalue"><%=serverPath%>?SERVICE=WMS&REQUEST=GetCapabilities</td> - </tr> - <tr> - <td class="parameter"><bean:message key="gnviewer.wms.server.layer"/>:</td> - <td class="wmsvalue"><%=layerName%></td> - </tr> - <tr> - <td class="parameter"><bean:message key="gnviewer.wms.layer.ttl"/>:</td> - <td class="wmsvalue"><%=timeToLive%></td> - </tr> - </table> - </div> - <div id="map"></div> - </div> + <jsp:include page="includes/display_map_inc.jsp"></jsp:include> <%}%> </td> </tr>
--- a/gnv/src/main/webapp/WEB-INF/jsp/info.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/info.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,6 +1,23 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +<%@ page import="de.intevation.gnv.action.sessionmodel.SessionModel"%> +<%@ page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> +<%@ page import="java.util.Locale"%> + +<% + SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); + Locale locale = sm.getCurrentLocale(); +%> <html xmlns="http://www.w3.org/1999/xhtml"> <head> @@ -16,7 +33,7 @@ <h1 class="headline">BSH Generischer Viewer</h1> </div> - <br> + <br/> <div id="headerElement"> <table class="headerTableLinks"> @@ -31,7 +48,18 @@ </table> </div> <div id="contentElement" class="contentElement"> - TODO: Info + <% + if (locale.getLanguage().equals(Locale.GERMAN.getLanguage())) { + %> + <jsp:include page="/WEB-INF/jsp/includes/info_german.jsp" /> + <% + } + else { + %> + <jsp:include page="/WEB-INF/jsp/includes/info_english.jsp" /> + <% + } + %> </div> <div id="footerElement"> <jsp:include page="footer.jsp" />
--- a/gnv/src/main/webapp/WEB-INF/jsp/mainlayout.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/mainlayout.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,5 +1,14 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <html xmlns="http://www.w3.org/1999/xhtml"> <head> @@ -69,13 +78,11 @@ <div id="overlay"></div> <div style="width:100%;left:0;top:0;width:100%;height:100%;position:absolute;visibility:hidden;"> <div id="overlayContent"> - <p> - <bean:message key="gnviewer.productselection.overlay.title"/> - <p class="reload"> - <a href="<%=response.encodeURL("describe.do?uid="+System.currentTimeMillis())%>" title="<bean:message key="application.reload"/>"> - <bean:message key="application.reload"/> - </a> - </p> + <bean:message key="gnviewer.productselection.overlay.title"/> + <p class="reload"> + <a href="<%=response.encodeURL("describe.do?uid="+System.currentTimeMillis())%>" title="<bean:message key="application.reload"/>"> + <bean:message key="application.reload"/> + </a> </p> </div> </div>
--- a/gnv/src/main/webapp/WEB-INF/jsp/version.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/version.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,7 +1,16 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> -<html xhtml="true" locale="true"> +<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> <bean:message key="gnviewer.app.title"/> @@ -42,4 +51,4 @@ <jsp:include page="footer.jsp" /> </div> </body> -</html> \ No newline at end of file +</html>
--- a/gnv/src/main/webapp/WEB-INF/jsp/wmslayout.jsp Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/jsp/wmslayout.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -1,84 +1,20 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> -<% - String serverPath = (String) request.getAttribute("mapserver"); - String mapfilePath = (String) request.getAttribute("mapfile"); - String layerName = (String) request.getAttribute("layer"); - String timeToLive = (String) request.getAttribute("ttl"); -%> - -<html xmlns="http://www.w3.org/1999/xhtml"> - <head> - <title> - <bean:message key="gnviewer.app.title"/> - </title> - <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> - <meta http-equiv="Content-Script-Type" content="text/javascript"/> - <meta http-equiv="Content-Style-Type" content="text/css"/> - <meta http-equiv="Expires" content="Mon, 01 Jan 1990 00:00:01 GMT"/> - <meta http-equiv="pragma" content="no-cache"/> - <meta http-equiv="cache-control" content="no-cache"/> - <meta name="robots" content="noindex"/> - <link href="styles/gnv.css" rel="stylesheet" type="text/css"/> - <script type="text/javascript" src="http://www.openlayers.org/api/OpenLayers.js"></script> - <script type="text/javascript"> - var lon = 5; - var lat = 55; - var zoom = 5; - var map, layer; - function init() { - <%if(request.getAttribute("wms_published") != null){ %> - map = new OpenLayers.Map('map'); - var server = '<%=serverPath%>'; - var back1 = new OpenLayers.Layer.WMS( - "Background1", - "http://gdisrv.bsh.de/arcgis/services/Background/Background/MapServer/WMSServer?", - { - layers: '0', - format: 'image/png', - transparent: false - }, - { - isBaseLayer: 'true', - singleTile: 'true' - } - ); +<%-- + Copyright (c) 2010 by Intevation GmbH - layer = new OpenLayers.Layer.WMS( - "MyWMS", - server, - { - layers: '<%=layerName%>', - format: 'image/png', - transparent: 'true' - }, - { - singleTile: 'true' - } - ); + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> - map.addLayers([back1, layer]); - map.setCenter(new OpenLayers.LonLat(lon, lat), zoom); - <%}%> - } - - function toggle(element) { - var ele = document.getElementById(element); - var vis = ele.style.visibility; - if (vis != "visible") { - ele.style.visibility = "visible"; - } - else { - ele.style.visibility = "hidden"; - } - } - - </script> - </head> - - <body id="gnviewerbody" onLoad="init()"> +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%> +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +<html xmlns="http://www.w3.org/1999/xhtml"> + <jsp:include page="/WEB-INF/jsp/includes/wms_header_inc.jsp" /> + <body id="gnviewerbody"> <div id="overlay"></div> <div style="width:100%;left:0;top:0;width:100%;height:100%;position:absolute;visibility:hidden;"> <div id="overlayContent"> @@ -94,7 +30,7 @@ <div id="contentElement" class="contentElement"> <jsp:include page="index.jsp" /> </div> - <br> + <br/> <div id="footerElement"> <jsp:include page="footer.jsp" /> </div>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/WEB-INF/jsp/wmsstandalone.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,16 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<%-- + Copyright (c) 2010 by Intevation GmbH + + This program is free software under the LGPL (>=v2.1) + Read the file LGPL.txt coming with the software for details + or visit http://www.gnu.org/licenses/ if it does not exist. +--%> + +<html xmlns="http://www.w3.org/1999/xhtml"> + <jsp:include page="/WEB-INF/jsp/includes/wms_header_inc.jsp" /> + <body id="gnviewerbody"> + <jsp:include page="/WEB-INF/jsp/includes/display_map_fullscreen_inc.jsp" /> + </body> +</html>
--- a/gnv/src/main/webapp/WEB-INF/web.xml Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/WEB-INF/web.xml Fri Sep 28 12:15:22 2012 +0200 @@ -15,15 +15,6 @@ <param-value>/WEB-INF/config/struts-config.xml</param-value> </init-param> - <!-- The Log4J Configuration, relative to the Project-Folder, - which should be used in this Project. --> - <!-- - <init-param> - <param-name>de.intevation.gnv.servlet.log4j.configuration</param-name> - <param-value>WEB-INF/config/log4j.properties</param-value> - </init-param> - --> - <!-- The Number of ArtifacDatabases which are configured in this Document. --> <init-param> <param-name>de.intevation.gnv.artifactdatabase.client.ArtifactDatabase.count</param-name>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/scripts/ext/readme Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,3 @@ +curl "http://www.extjs.com/deploy/ext-2.3.0.zip" > ext-2.3.0.zip +unzip ext-2.3.0.zip +rm ext-2.3.0.zip \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/scripts/geoext/readme Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,4 @@ +curl "http://trac.geoext.org/attachment/wiki/Download/GeoExt-release-0.6.zip?format=raw" > GeoExt-release-0.6.zip +unzip GeoExt-release-0.6.zip +mv GeoExt geoext-0.6 +rm GeoExt-release-0.6.zip \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/scripts/layers.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,62 @@ + +<%@page import="java.util.Iterator"%> +<%@page import="de.intevation.gnv.artifactdatabase.objects.map.Layer"%> +<%@page import="de.intevation.gnv.artifactdatabase.objects.map.MapService"%> +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModel"%>/** + * This function is called while initializing the application. You are allowed + * to change/add/remove layers. But be are of the comments inline this code! + */ +function initLayers() { + /** + * XXX This application needs a layer that is stored in a variable called + * 'layer'. So do not change the name of this variable. Just change the WMS + * layer itself. + */ + layer = new OpenLayers.Layer.WMS( + "Background1", + "http://gdisrv.bsh.de/arcgis/services/Background/Background/MapServer/WMSServer?", + { + layers: '0', + format: 'image/png', + transparent: false + }, + { + isBaseLayer: true, + singleTile: true + } + + ); + /** + * XXX This application needs an ARRAY that stores some layers (or a single + * layer). Do not change the name of the following variable 'layers'. + */ + layers = []; + layers[0] = layer; + + <% + SessionModel sm = SessionModelFactory.getInstance().getSessionModel(request); + MapService localMapService = sm.getLocalMapService(); + Iterator<Layer> it = localMapService.getLayer().iterator(); + int i = 1; + while (it.hasNext()){ + Layer layer = it.next(); + %> + layer<%=i%> = new OpenLayers.Layer.WMS( + "<%=layer.getID() %>", + "<%=localMapService.getURL() %>", + { + layers: '<%=layer.getName()%>', + format: 'image/png', + transparent: true + }, + { + isBaseLayer: false, + singleTile: true + } + + ); + layers[<%=i%>] = layer<%=i++%>; + <%}%> + +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/scripts/olutils.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,238 @@ +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +function handleMeasurements(event) { + var geometry = event.geometry; + var units = event.units; + var order = event.order; + var measure = event.measure; + var element = document.getElementById('measurements'); + + var out = ""; + if(order == 1) { + out += "L\u00e4nge: " + measure.toFixed(3) + " " + units; + } else { + out += "Fl\u00e4che: " + measure.toFixed(3) + " " + units + "<sup>2</sup>"; + } + + element.innerHTML=out; +}; + + + +function readWMC(merge) { + var layers = mapPanel.layers; + map = mapPanel.map; + + var format = new OpenLayers.Format.WMC({'layerOptions': {buffer: 0}}); + var text = document.getElementById("wmc").value; + + merge = true; + if(merge) { + try { + map = format.read(text, {map: map}); + } catch(err) { + document.getElementById("wmc").value = err; + } + } else { + map.destroy(); + try { + var jsonFormat = new OpenLayers.Format.JSON(); + var mapOptions = jsonFormat.read(); + map = format.read(text, {map: mapOptions}); + } catch(err) { + document.getElementById("wmc").value = err; + } + } + + // create MapPanel + mapPanel = new GeoExt.MapPanel({ + border: true, + title: "Karte", + region: "center", + map: map, + zoom: 1, + layers: map.layers + }); +} + + +function writeWMC(merge) { + var format = new OpenLayers.Format.WMC({'layerOptions': {buffer: 0}}); + + try { + var text = format.write(map); + document.getElementById("wmc").value = text; + } catch(err) { + document.getElementById("wmc").value = err; + } +} + + + +function toggleGetFeatureInfo(evt) { + if (infoActive) { + infoControls.click.deactivate(); + infoActive = false; + } + else { + infoControls.click.activate(); + infoActive = true; + } +} + + +function showInfo(evt) { +} + + +function addLayer() { + var records = grid.getSelectionModel().getSelections(); + for (rec in records){ + + var record = records[rec]; + // TODO: Look for something better than object + if (typeof record == "object"){ + var copy = record.copy(); + copy.set("layer", record.get("layer")); + copy.get("layer").mergeNewParams({ + format: "image/png", + transparent: true + }); + mapPanel.layers.add(copy); + } + } + +} + + +// this is just copied from OpenLayers.Util +function urlAppend(url, paramStr) { + var newUrl = url; + if(paramStr) { + var parts = (url + " ").split(/[?&]/); + newUrl += (parts.pop() === " " ? + paramStr : + parts.length ? "&" + paramStr : "?" + paramStr); + } + return newUrl; +} + +function showWarning(){ + if (store.data.length == 0){ + Ext.MessageBox.alert("<bean:message key="gnviewer.mapclient.wms.load.grid.error.title"/>", '<bean:message key="gnviewer.mapclient.wms.load.grid.error.message"/>', grid); + return; + } +} + + +function updateCapabilities() { + + var url = capfield.getValue(); + var service = "SERVICE=WMS"; + var request = "REQUEST=GetCapabilities"; + var version = "VERSION=1.1.1"; + url = urlAppend(url, service); + url = urlAppend(url, request); + url = urlAppend(url, version); + + store = new GeoExt.data.WMSCapabilitiesStore({ + url: url, + layerOptions: {singleTile: true} + }); + store.load({ + callback: showWarning + }); + + grid.destroy(); + grid = new Ext.grid.GridPanel({ + id: 'wmsgrid', + collapsible: false, + split: false, + border: true, + // TODO: autoHeight might cause trouble + autoHeight: true, + overflow: 'auto', + store: store, + cm: new Ext.grid.ColumnModel([ + { + header: '<bean:message key="gnviewer.mapclient.wms.load.grid.name"/>', + dataIndex: 'name', + sortable: true + }, + { + id: 'title', + header: '<bean:message key="gnviewer.mapclient.wms.load.grid.title"/>', + dataIndex: 'title', + sortable: true + }]), + renderTo: 'capgrid', + bbar: [{ + text: '<bean:message key="gnviewer.mapclient.wms.load.addlayer"/>', + handler: addLayer + }] + }); +} + + +function editFeature(e) { + var feature = e.feature; + + // TODO SET FEATURE ATTRIBUTES + //feature.attributes['lawa'] = 999; + //feature.attributes['lawa_id'] = 999; + //feature.attributes['w_gwk_lawa'] = 999; + //feature.attributes['w_wrrl'] = 999; + //feature.attributes['length_fee'] = 999; +} + +function updateControls() { + var controls = panel.controls; + + controls.remove(drawPointControl); + controls.remove(drawPathControl); + controls.remove(drawPolygonControl); + + panel.destroy(); + panel = new OpenLayers.Control.Panel(); + panel.addControls(controls); + + if (points.getVisibility()) + panel.addControls(drawPointControl); + if (lines.getVisibility()) + panel.addControls(drawPathControl); + if (polygons.getVisibility()) + panel.addControls(drawPolygonControl); + + map.addControl(panel); +} +function parseGetFeatureInfoData(event) { + var contentHTML = "<div>"; + var features = event.features; + var first = true; + for (feat in features){ + if (feat != 'remove'){ + var feature = features[feat]; + var attributes = feature.attributes; + if (first){ + first = false; + }else{ + contentHTML += "<br/>"; + } + contentHTML += "<table>"; + for (att in attributes){ + contentHTML += "<tr><td><b>"+att+":</b></td><td>" + attributes[att] + "</td></tr>"; + } + contentHTML += "</table>"; + } + + } + contentHTML += "</div>"; + + mapPanel.map.addPopup(new OpenLayers.Popup.FramedCloud( + "chicken", + mapPanel.map.getLonLatFromPixel(event.xy), + null, + contentHTML, + null, + true + )); +} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/scripts/openlayers/readme Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,3 @@ +curl "http://www.openlayers.org/download/OpenLayers-2.9.zip" > OpenLayers.zip +unzip OpenLayers.zip +rm OpenLayers.zip \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/scripts/viewport.jsp Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,301 @@ +<%@page import="de.intevation.gnv.action.sessionmodel.SessionModelFactory"%> +<%@page import="de.intevation.gnv.action.MapClientStandaloneAction"%> +<%@page import="de.intevation.gnv.artifactdatabase.objects.map.MapService"%> +<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> +<% +boolean standalone = request.getParameter(MapClientStandaloneAction.MAPCLIENTSTANDALONE_KEY) != null && +request.getParameter(MapClientStandaloneAction.MAPCLIENTSTANDALONE_KEY).equals("true"); +MapService mapService = SessionModelFactory.getInstance().getSessionModel(request).getLocalMapService(); +%> +OpenLayers.ImgPath = "images/ol/"; +OpenLayers.ProxyHost= "/cgi-bin/proxy.cgi?url="; +OpenLayers.Lang.setCode('<%=SessionModelFactory.getInstance().getSessionModel(request).getCurrentLocale().getLanguage() %>'); +Ext.BLANK_IMAGE_URL = "scripts/openlayers/OpenLayers-2.9/theme/default/img/blank.gif"; + +/** + * XXX + * Change specific attributes for map, wfs-t, etc here. Do not change these + * settings inline the code! + */ +PROJECTION = "EPSG:4326"; +MAX_EXTENT = new OpenLayers.Bounds(-90,-180,90,180); +CURRENT_EXTENT = new OpenLayers.Bounds(<%=mapService.getBBoxValue().replace(' ',',')%>); +INITIAL_CENTER = new OpenLayers.LonLat(5, 55); +GETFEATUREINFO_URL = "<%=mapService.getURL()%>"; + +Ext.onReady(function() { + + /* this function call initialized the layers that are defined by the user. + * The variable 'layer' and 'layers' are initialized in this function as + * well, that are used in the following code! So do not remove this function + * call. + */ + initLayers(); + + var options = { + maxExtent: MAX_EXTENT, + projection: PROJECTION, + controls: [], + units: 'm' + }; + + +/* ------------------------ Create map and add controls ---------------------*/ + // create map + map = new OpenLayers.Map(options); + map.displayProjection = new OpenLayers.Projection(PROJECTION); + + // add controls + + + var nav = new OpenLayers.Control.NavigationHistory(); + nav.previous.title = "<bean:message key="gnviewer.mapclient.controls.nav.previous.title"/>"; + nav.next.title = "<bean:message key="gnviewer.mapclient.controls.nav.next.title"/>"; + map.addControl(nav); + + panel = new OpenLayers.Control.Panel(); + controls = { + previous: nav.previous, + next : nav.next, + navigate: new OpenLayers.Control.Navigation( + { + displayClass: 'olControlPan', + autoActivate: 'false', + title:'<bean:message key="gnviewer.mapclient.controls.navigate.title"/>' + } + ), + zoombox: new OpenLayers.Control.ZoomBox( + { + displayClass: 'olControlZoomBox', + title: '<bean:message key="gnviewer.mapclient.controls.zoombox.title"/>' + } + ), + info : new OpenLayers.Control.WMSGetFeatureInfo({ + displayClass: "olControlFeatureInfo", + url: GETFEATUREINFO_URL, + title: '<bean:message key="gnviewer.mapclient.controls.info.title"/>', + queryVisible: true, + infoFormat: 'application/vnd.ogc.gml', + eventListeners: { + getfeatureinfo: parseGetFeatureInfoData + } + }) + }; + + for (var key in controls) { + panel.addControls([controls[key]]); + } + + map.addControl(panel); + map.addControl(new OpenLayers.Control.PanZoomBar({zoomWorldIcon: 'true'})); + // Displaying the mouse postion + mousePosition = new OpenLayers.Control.MousePosition(); + map.addControl(mousePosition); + +/* --------------------------------------------------------------------------- */ + + // create MapPanel + mapPanel = new GeoExt.MapPanel({ + border: true, + region: "center", + map: map, + layers: layers + }); + + //map.setCenter(INITIAL_CENTER); + + + store = new GeoExt.data.WMSCapabilitiesStore({ + }); + + grid = new Ext.grid.GridPanel({ + id: 'wmsgrid', + collapsible: false, + split: false, + border: true, + //height: 400, + autoHeight: true, + store: store, + cm: new Ext.grid.ColumnModel([ + { + header: '<bean:message key="gnviewer.mapclient.wms.load.grid.name"/>', + dataIndex: 'name', + sortable: true + }, + { + id: 'title', + header: '<bean:message key="gnviewer.mapclient.wms.load.grid.title"/>', + dataIndex: 'title', + sortable: true + }]), + renderTo: 'capgrid', + bbar: [{ + text: '<bean:message key="gnviewer.mapclient.wms.load.addlayer"/>', + handler: addLayer + }] + }); + var cap = new Ext.Panel({ + id: 'wmspanel', + border: true, + region: 'east', + title: '<bean:message key="gnviewer.mapclient.wms.load.title"/>', + collapsible: false, + split: false, + height: 400, + contentEl: 'cap' + + }); + + var capstore = new Ext.data.SimpleStore({ + fields: ['name','url'], + data : [['<bean:message key="gnviewer.mapclient.wms.local.service.name"/>','<%=mapService.getURL()%>'],<jsp:include page="/WEB-INF/config/reachable-servers.conf" />] + }); + capfield = new Ext.form.ComboBox({ + id: 'capfield', + store: capstore, + displayField:'name', + width: 245, + valueField: 'url', + mode: 'local', + triggerAction: 'all', + selectOnFocus: true, + renderTo: 'urlinput', + editable: false, + value: '<%=mapService.getURL()%>' + + }); + + + + var capbutton = new Ext.Button({ + id: 'capbutton', + region: 'west', + handler: updateCapabilities, + text: '<bean:message key="gnviewer.mapclient.wms.load.bt.text"/>', + tooltip: '<bean:message key="gnviewer.mapclient.wms.load.bt.tooltip"/>', + renderTo: 'urlbutton' + }); + + + + +/* --------------------------- Layer Tree ----------------------------------- */ + + + // LayerTree + var tree = new Ext.tree.TreePanel({ + border: true, + enableDD: true, + region: "east", + title: "<bean:message key="gnviewer.mapclient.layercontrol"/>", + width: 200, + split: true, + collapsible: false, + collapseMode: "mini", + autoScroll: true, + loader: new Ext.tree.TreeLoader({ + applyLoader: false, + }), + root: { + nodeType: "async", + children: [{ + nodeType: "gx_baselayercontainer", + text: "<bean:message key="gnviewer.mapclient.layercontrol.baselayer"/>", + expanded: true + }, { + nodeType: "gx_overlaylayercontainer", + text: "<bean:message key="gnviewer.mapclient.layercontrol.overlay"/>", + expanded: true, + loader: { + filter: function(record) { + var layer = record.get("layer"); + return layer.displayInLayerSwitcher === true && + layer.isBaseLayer === false; + } + } + }] + }, + rootVisible: false, + lines: false + }); + +/*-------------------------------- Feature grid -------------------------------*/ + + // create legend paneclass="headerLineLinksl + legendPanel = new GeoExt.LegendPanel({ + id: 'legendpanel', + dynamic: true, + border: true, + title: '<bean:message key="gnviewer.mapclient.legend"/>', + collapsible: false, + split: false, + defaults: { + labelCls: 'legend', + style: 'padding: 5px' + }, + bodyStyle: 'padding:5px', + width: 250, + autoScroll: true, + region: 'east', + }); + + +// use separate panels + // Create GUI + + var mylegend = new Ext.Panel( + { + region: "west", + title: '', + split: true, + width: 250, + minSize: 225, + maxSize: 400, + collapsible: false, + overflow: 'auto', + margins: '0 0 0 5', + layout: 'accordion', + layoutConfig: { + animate: true, + activeOnTop: false + }, + items: [ + tree, + legendPanel, + cap + ] + } + ); + <%if (!standalone){%> + // The main panel + new Ext.Panel({ + renderTo: "mapcontainer", + layout: "border", + height: 400, + items: [mapPanel, mylegend] + }); + <%}else{ %> + // Create GUI + new Ext.Viewport({ + layout: "border", + items: [ + { + region: "north", + contentEl: "headline", + cls: 'title', + height: 40 + }, + mylegend, + mapPanel + ] + }); + <%}%> + map.zoomToExtent(CURRENT_EXTENT); + + // some code for automatically resizing the map panel if the window size + // changes + window.onresize=function() { + var mapcontainer = Ext.get('mapcontainer'); + mapPanel.setSize(mapcontainer.getSize()); + } +});
--- a/gnv/src/main/webapp/styles/calendar-blue.css Fri Sep 28 12:13:58 2012 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -/* The main calendar widget. DIV containing a table. */ - -div.calendar { position: relative; } - -.calendar, .calendar table { - border: 1px solid #556; - font-size: 11px; - color: #000; - cursor: default; - background: #eef; - font-family: tahoma,verdana,sans-serif; -} - -/* Header part -- contains navigation buttons and day names. */ - -.calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ - text-align: center; /* They are the navigation buttons */ - padding: 2px; /* Make the buttons seem like they're pressing */ -} - -.calendar .nav { - background: #778 url(menuarrow.gif) no-repeat 100% 100%; -} - -.calendar thead .title { /* This holds the current "month, year" */ - font-weight: bold; /* Pressing it will take you to the current date */ - text-align: center; - background: #fff; - color: #000; - padding: 2px; -} - -.calendar thead .headrow { /* Row <TR> containing navigation buttons */ - background: #778; - color: #fff; -} - -.calendar thead .daynames { /* Row <TR> containing the day names */ - background: #bdf; -} - -.calendar thead .name { /* Cells <TD> containing the day names */ - border-bottom: 1px solid #556; - padding: 2px; - text-align: center; - color: #000; -} - -.calendar thead .weekend { /* How a weekend day name shows in header */ - color: #a66; -} - -.calendar thead .hilite { /* How do the buttons in header appear when hover */ - background-color: #aaf; - color: #000; - border: 1px solid #04f; - padding: 1px; -} - -.calendar thead .active { /* Active (pressed) buttons in header */ - background-color: #77c; - padding: 2px 0px 0px 2px; -} - -/* The body part -- contains all the days in month. */ - -.calendar tbody .day { /* Cells <TD> containing month days dates */ - width: 2em; - color: #456; - text-align: right; - padding: 2px 4px 2px 2px; -} -.calendar tbody .day.othermonth { - font-size: 80%; - color: #bbb; -} -.calendar tbody .day.othermonth.oweekend { - color: #fbb; -} - -.calendar table .wn { - padding: 2px 3px 2px 2px; - border-right: 1px solid #000; - background: #bdf; -} - -.calendar tbody .rowhilite td { - background: #def; -} - -.calendar tbody .rowhilite td.wn { - background: #eef; -} - -.calendar tbody td.hilite { /* Hovered cells <TD> */ - background: #def; - padding: 1px 3px 1px 1px; - border: 1px solid #bbb; -} - -.calendar tbody td.active { /* Active (pressed) cells <TD> */ - background: #cde; - padding: 2px 2px 0px 2px; -} - -.calendar tbody td.selected { /* Cell showing today date */ - font-weight: bold; - border: 1px solid #000; - padding: 1px 3px 1px 1px; - background: #fff; - color: #000; -} - -.calendar tbody td.weekend { /* Cells showing weekend days */ - color: #a66; -} - -.calendar tbody td.today { /* Cell showing selected date */ - font-weight: bold; - color: #00f; -} - -.calendar tbody .disabled { color: #999; } - -.calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ - visibility: hidden; -} - -.calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ - display: none; -} - -/* The footer part -- status bar and "Close" button */ - -.calendar tfoot .footrow { /* The <TR> in footer (only one right now) */ - text-align: center; - background: #556; - color: #fff; -} - -.calendar tfoot .ttip { /* Tooltip (status bar) cell <TD> */ - background: #fff; - color: #445; - border-top: 1px solid #556; - padding: 1px; -} - -.calendar tfoot .hilite { /* Hover style for buttons in footer */ - background: #aaf; - border: 1px solid #04f; - color: #000; - padding: 1px; -} - -.calendar tfoot .active { /* Active (pressed) style for buttons in footer */ - background: #77c; - padding: 2px 0px 0px 2px; -} - -/* Combo boxes (menus that display months/years for direct selection) */ - -.calendar .combo { - position: absolute; - display: none; - top: 0px; - left: 0px; - width: 4em; - cursor: default; - border: 1px solid #655; - background: #def; - color: #000; - font-size: 90%; - z-index: 100; -} - -.calendar .combo .label, -.calendar .combo .label-IEfix { - text-align: center; - padding: 1px; -} - -.calendar .combo .label-IEfix { - width: 4em; -} - -.calendar .combo .hilite { - background: #acf; -} - -.calendar .combo .active { - border-top: 1px solid #46a; - border-bottom: 1px solid #46a; - background: #eef; - font-weight: bold; -} - -.calendar td.time { - border-top: 1px solid #000; - padding: 1px 0px; - text-align: center; - background-color: #f4f0e8; -} - -.calendar td.time .hour, -.calendar td.time .minute, -.calendar td.time .ampm { - padding: 0px 3px 0px 4px; - border: 1px solid #889; - font-weight: bold; - background-color: #fff; -} - -.calendar td.time .ampm { - text-align: center; -} - -.calendar td.time .colon { - padding: 0px 2px 0px 3px; - font-weight: bold; -} - -.calendar td.time span.hilite { - border-color: #000; - background-color: #667; - color: #fff; -} - -.calendar td.time span.active { - border-color: #f00; - background-color: #000; - color: #0f0; -}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/styles/extjs-override.css Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,35 @@ +.x-panel-header { + background: #F2F1F5; + border:1px solid #003A66; + color:#003A66; +} + +.x-border-layout-ct { + background:#F2F1F5; +} + +.x-panel-body { + border:1px solid #003A66; +} + +.x-toolbar{ + background:#F2F1F5; +} + +.x-panel-bbar .x-toolbar { + border:1px solid #003A66; +} + +.x-tool { + background:transparent url(../images/ol/tool-sprites.gif) no-repeat; +} + +.x-tree-node-expanded .x-tree-node-icon{ + background-image:url(../images/ol/folder-open.gif); +} +.x-tree-node-leaf .x-tree-node-icon{ + background-image:url(../images/ol/leaf.gif); +} +.x-tree-node-collapsed .x-tree-node-icon{ + background-image:url(../images/ol/folder.gif); +} \ No newline at end of file
--- a/gnv/src/main/webapp/styles/gnv.css Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/main/webapp/styles/gnv.css Fri Sep 28 12:15:22 2012 +0200 @@ -80,6 +80,13 @@ padding: 10px; } +.infoheadline { + border: 0; + color: #4C7594; + font-family: "Arial Black",Arial,Helvetica,sans-serif; + padding: 0; +} + .headerTableLinks { width: 100%; background-color: #003a66; @@ -128,6 +135,11 @@ vertical-align: top; } +.info-content { + padding-left : 15px; + padding-right: 15px; +} + #parameterColumn { width: 400px; }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gnv/src/main/webapp/styles/ol_style.css Fri Sep 28 12:15:22 2012 +0200 @@ -0,0 +1,69 @@ +.wmcbox { + width: 100%; + height: 480px; +} + +.olControlPanel div { + background-color: white; + float: left; + display: block; + position: relative; + left: 80px; + margin: 5px; + width: 24px; + height: 24px; +} + +.olControlPanel .olControlFeatureInfoItemActive { + width: 22px; + height: 22px; + background-image: url("../images/ol/feature_info_on.png"); +} +.olControlPanel .olControlFeatureInfoItemInactive { + width: 22px; + height: 22px; + background-image: url("../images/ol/feature_info_off.png"); +} + + +.olControlNavigationHistory { + background-image: url("../images/ol/navigation_history.png"); + background-repeat: no-repeat; + width: 22px; + height: 22px; + +} + +.olControlPanel .olControlPanItemActive { + width: 22px; + height: 22px; + background-image: url("../images/ol/pan_on.png"); +} +.olControlPanel .olControlPanItemInactive { + width: 22px; + height: 22px; + background-image: url("../images/ol/pan_off.png"); +} + +.olControlPanel .olControlZoomBoxItemActive { + width: 22px; + height: 22px; + background-image: url("../images/ol/zoom_box_on.png"); +} +.olControlPanel .olControlZoomBoxItemInactive { + width: 22px; + height: 22px; + background-image: url("../images/ol/zoom_box_off.png"); +} + +div.olControlMousePosition { + color:#003A66; + background-color: #F2F1F5; + filter: alpha(opacity=75); + opacity: 0.75 +} + +.olHandlerBoxZoomBox { + border: 2px solid #003A66; + background-color: #F2F1F5;; +}
--- a/gnv/src/test/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/test/java/de/intevation/gnv/action/mapviewer/parser/ExternalCallParserTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.action.mapviewer.parser; import de.intevation.gnv.artifactdatabase.objects.map.Layer;
--- a/gnv/src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/test/java/de/intevation/gnv/artifactdatabase/client/ArtifactDatabaseClientTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.artifactdatabase.client; import de.intevation.gnv.artifactdatabase.objects.ArtifactDescription;
--- a/gnv/src/test/java/de/intevation/gnv/util/XSLTransformerTestCase.java Fri Sep 28 12:13:58 2012 +0200 +++ b/gnv/src/test/java/de/intevation/gnv/util/XSLTransformerTestCase.java Fri Sep 28 12:15:22 2012 +0200 @@ -1,3 +1,11 @@ +/* + * Copyright (c) 2010 by Intevation GmbH + * + * This program is free software under the LGPL (>=v2.1) + * Read the file LGPL.txt coming with the software for details + * or visit http://www.gnu.org/licenses/ if it does not exist. + */ + package de.intevation.gnv.util; import de.intevation.gnv.artifactdatabase.client.DefaultArtifactDatabaseClient;