diff doc/config-manual/model_of_transitions.tex @ 949:11d8cc2deb92 1.0

merged doc/1.0
author Thomas Arendsen Hein <thomas@intevation.de>
date Fri, 28 Sep 2012 12:13:58 +0200
parents 975bb59bb136
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/config-manual/model_of_transitions.tex	Fri Sep 28 12:13:58 2012 +0200
@@ -0,0 +1,860 @@
+\section{Model of transitions}
+\subsection{Overview of Subject-Specific Configuration: From FIS, Products, States,
+Transitions and SQL-statements}
+
+The GNV-system provides several expert information systems (FIS). Within a FIS
+users can select products for analysing and visualising different
+subject-specific issues like timeseries diagrams and different types of
+profiles. In order to generate these products, different kind of data out of the
+dataware house is needed.
+
+The configuration is mainly split up into two steps\footnote{Except for
+integrating the MapViewer. There is a third step necessary by configuring
+additional tables in the datawarehouse}:
+\begin{enumerate}
+    \item FIS and their according products (Metainformation)
+    \item Products with their states, transitions, outputs and SQL-statements
+    (Implementation)
+\end{enumerate}
+
+%% TODO to improve: Add a Screenshot of the GNV WebClient marking GUI elements for FIS,
+%% product, states and transitions
+
+Main entry point for the configuration also is the file {\tt conf/conf.xml }
+defining the list of FIS and the according products based on the different
+datamodels in the datawarehouse. 
+
+The provided datamodels are:
+
+\begin{enumerate}
+    \item ESRI ArcMarineBSH with following subtypes
+        \begin{enumerate}
+            \item TimeSeriesPoints
+            \item MeshFeatures
+            \item Measurements/InstantaneousPoints
+            \item Marine Features
+        \end{enumerate}
+    \item ESRI ArcS57,
+    \item CONTIS
+\end{enumerate}
+
+Each product configuration consists of a datamodel specific configuration
+organized in a product specific folder in {\tt conf/products} \footnote{The
+special case of a {\tt Horizontales Schnittprofil} is configured in
+{\tt conf/horizontalprofile/conf\_mesh\_cross.xml} }. The directory layout looks
+like this:
+
+\begin{verbatim}
+products/
+|-- horizontalcrosssection
+|   `-- conf_mesh.xml
+|-- horizontalprofile
+|   |-- conf_instantaneouspoint.xml
+|   |-- conf_mesh.xml
+|   `-- conf_mesh_cross.xml
+|-- layer
+|   `-- conf.xml
+|-- timeseries
+|   |-- conf_mesh.xml
+|   |-- conf_timeseriespoint.xml
+|   `-- timegap_definition.xml
+|-- verticalcrosssection
+|   `-- conf_mesh.xml
+`-- verticalprofile
+    |-- conf_instantaneouspoint.xml
+    |-- conf_mesh.xml
+    `-- conf_timeseriespoint.xml
+\end{verbatim}
+
+The subtypes of the ArcMarineBSH based datamodel are configured in the files below:
+\begin{itemize}
+   \item TimeSeriesPoints: {\tt conf\_timeseriespoint.xml}
+   \item Mesh: {\tt conf\_mesh.xml}
+   \item InstantaneousPoints: {\tt conf\_instantaneouspoint.xml}
+\end{itemize}
+
+Within each of these files, the steps for gathering the values for the
+parameterisation are configured by defining states, transitions and outputs
+(c.f. \ref{ref:config-a-product}).  The definition of states, transitions and
+outputs reference the actual SQL-statements via an identifier. The SQL-statements
+are gathered in the file {\tt conf/queries.properties}.
+
+
+\subsection{Background information of the XML configuration}
+
+It is possible to configure the GNV in many ways.
+It is possible to add or remove FIS, add or remove products from a FIS or
+to manipulate the steps which must be prepared until products like
+a diagram or CSV-export can be generated.
+
+The configuration of the provided FIS are divided in three main parts.
+
+\begin{itemize}
+    \item Configuration of the list of FIS via {\tt artifact-factories}
+    \item Configuration of main {\tt artifacts} which will be instantiated if an 
+  {\tt artifact-factory} was called.
+    \item Configuration of the different {\tt artifacts} which provides products which can be 
+  served by the FIS.
+\end{itemize}
+
+\subsubsection{Configuration of a FIS}
+The point of entry into the system is to configure an {\tt artifact-factory}.
+Each artifact-factory represents one FIS.
+It is possible to configure several {\tt artifact-factories}, which
+represent the list of FIS in GUI.
+The {\tt artifact-factories} will be configured in the section 
+\texttt{/artifact-database/artifact-factories} of the configuration-file.
+
+\begin{lstlisting}
+<artifact-factory name='fis_NEWFISNAME' 
+                  description='Factory to create an artifact to be used with the FIS NEWFISNAME'  
+                  ttl='3600000' 
+                  artifact='de.intevation.artifactdatabase.ProxyArtifact'>
+                  de.intevation.gnv.artifacts.GNVProductArtifactFactory
+</artifact-factory>
+\end{lstlisting}
+
+At this moment the following attributes of an {\tt artifact-factory} are
+configurable:
+\begin{itemize}
+    \item {\tt name}: The name of the {\tt artifact}. Must be unique in one {\tt artifact-server}
+    \item {\tt description}: Short description which job the {\tt artifact-factory} has to do.
+    \item {\tt ttl}: The time to live: The time using milliseconds an
+    {\tt artifact}, created using this factory, can live without any
+    user-interaction.
+    \item {\tt artifact}: The name of the class of the {\tt artifact} which should be created.
+\end{itemize}
+
+The next listing shows the dependencies between the FIS and the name
+of the {\tt artifact-factory} which belongs to it.
+
+\begin{itemize}
+    \item Marnet: {\tt fis\_marnet}
+    \item IMIS: {\tt fis\_imis}
+    \item STAUN: {\tt fis\_staun}
+    \item Modeldata {\tt fis\_modeldata}
+    \item Iceclimatology: {\tt fis\_eisklimatologie}
+    \item Ice Station Report: {\tt fis\_icestations}
+    \item SST: {\tt fis\_sst}
+    \item Delphin: {\tt fis\_delphin}
+    \item Thermosalinograph: {\tt fis\_thermosalinograph}
+    \item Chemusurvey: {\tt fis\_chemusurvey}
+    \item GTS: {\tt fis\_gts}
+    \item CTD: {\tt fis\_bsh\_ctd}
+    \item XBT: {\tt fis\_bsh\_xbt}
+    \item SeaCat: {\tt fis\_seacat}
+    \item Sea State: {\tt fis\_seastate}
+    \item Current Meter: {\tt fis\_currentmeter}
+    \item Nauthis: {\tt fis\_nauthis}
+    \item Contis: {\tt fis\_contis}
+    \item Marine Features: {\tt fis\_marinefeatures}
+\end{itemize}
+
+\subsubsection{Configuration of main Artifact}
+For each {\tt artifact-factory} it is necessary to configure one {\tt artifact} which will be 
+created using the factory.
+This {\tt artifact} is the representation of the specific FIS.
+It contains the configuration which products will be served for this FIS.
+
+The {\tt artifacts} are configured in the section {\tt /artifact-database/artifacts} of 
+the configurationfile.
+
+\begin{lstlisting}
+<artifact name='fis_NEWFISNAME'>
+    <products>
+     ...
+    </products>
+</artifact>
+\end{lstlisting}
+
+The key is to use the same name for the {\tt artifact} as used for the {\tt artifact-factory}.
+The name has to be unique.
+In the section {\tt /artifact/products} it is possible to define several products as 
+explained in the next section.
+
+\subsection{Products to an FIS}
+One FIS can provide several products.
+To do this it is required to configure them as shown below in the section 
+{\tt /artifact/products}
+
+\begin{lstlisting}
+<product name= "timeSeries">
+      <artifact-factory name="timeSeries" 
+                        description="Artiefactfactory for Instantiating the Artifact for TimeSeries on TimeSeriesPoints"  
+                        ttl="300000" 
+                        artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">
+           de.intevation.gnv.artifacts.GNVArtifactFactory
+      </artifact-factory>
+      <parameters>
+          <parameter name="sourceid" 
+                     value="4"/>
+          <parameter name="fisname" 
+                     value="fis\_marnet"/>
+      </parameters>
+ </product>
+ \end{lstlisting}
+
+Each {\tt product} is also represented by an {\tt artifact}. In order to
+create this {\tt artifact}, the {\tt artifact-factory} has to be used.
+It is configured in each product 
+({\tt /product/artifact-factory}).
+
+Each product can have several parameters ({\tt
+/product/parameters/parameters}).  The {\tt parameter} named {\tt
+sourceid} and {\tt fisname} are required parameters.
+
+The parameter {\tt fisname} contains the key to the name of the FIS. The
+key must be unique.  The parameter {\tt sourceid} contains the key to
+identify the FIS in the datawarehouse. ({\tt MEDIAN.SOURCEINFO})
+
+
+\subsubsection{Configuration of an Product}
+\label{ref:config-a-product}
+The {\tt products} of the different FIS are also modeled as artifact-objects.
+The different products which are currently available are stored in separate
+files in the folder {\tt project}.
+
+In those files the workflow of each product is configured.  Each step which is
+required to model a new diagram is represented using a {\tt state} in the
+configuration-file.
+
+%% FIXME: fix wording
+To move between those {\tt states} it is required to model {\tt transitions} which define
+between which states it is possible to move and which conditions must be
+fulfilled.
+
+The last step is called {\tt output-state}. This state is responsible to generate the
+output for the different formats which can be served from the product ({\tt Diagram,
+CSV, ODV, WMS,..}.).
+
+\paragraph{States}
+A {\tt state} is one step which is required to fetch the data for generating e.g. an
+diagram.
+
+For example in each product it is possible to choose one or more parameters.
+
+To configure a state you have to use a XML-fragment as shown below:
+
+\begin{lstlisting}
+<state id="timeseries_parameter" description="timeseries_parameter" state="de.intevation.gnv.state.DefaultState">
+   <queryID>timeseries_parameter</queryID>
+   <dataname>parameterid</dataname>
+   <data-multiselect>true</data-multiselect>
+   <inputvalues>
+      ...
+   </inputvalues>
+</state>
+\end{lstlisting}
+
+At this moment the following attributes of an {\tt state} are configurable.
+\begin{itemize}
+    \item {\tt id}: The name of the artifact. Must be unique in one artifact-server
+    \item {\tt description}: Short description which job the artifact-factory has to do.
+    \item {\tt queryID}: The id of the query which should be used to fetch the data 
+                   displayed in this state. All queries are defined in the file
+                   conf/queries.properties
+    \item {\tt dataname}: The id of the data which will be displayed in this state.
+                    The id will be use to localize the description of the data.
+                    The localization is located in module gnv-artifacts in folder
+                    src/main/resources.
+    \item {\tt data-multiselect}: {\tt true} it is possible to select 1 or more items.
+                                 {\tt false} it is possible to select only one item.
+    \item {\tt inputvalues}: The values which can be "feed" to this state and which 
+                       will be used as values in SQL-statements.
+\end{itemize}
+
+\paragraph{Input Values of a State}
+At section {\tt /state/inputvalues} it is possible to add definitions for inputvalues.
+Those values have two meanings for the {\tt state}.
+
+\begin{itemize}
+     \item They were used to fill the SQL-statements to fetch the data.
+           (Each entry replace one ore more "?" )
+     \item They were used to validate the inputdata which is "feed" to
+           the FIS in the current state.
+\end{itemize}
+
+{\bf WARNING: The order of the input-values is significant at which position the value will
+be put into the SQL-statement!}
+
+It is possible to add one inputvalue twice or more often to put its value at
+different positions of the SQL-statement.
+
+\begin{lstlisting}
+<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="true" usedinquery="0"/>
+</inputvalues>
+\end{lstlisting}
+
+\begin{itemize}
+    \item {\tt name}: Name of the value that could be feed or should be used in SQL-statment.
+                The name must fit to one dataname configured in this state or one other
+                state which was visited before.
+    \item {\tt type}: The type of the value. This is required for the validation 
+                of the value.
+                This might be String, Integer, Double, Date, Point, LineString, 
+                Polygon, Coordinate, Geometry and AttributeName. \\
+                Coordinate is a format which accepts geographical coordinates in 
+                the following Syntax: 56n30 6e20 \\
+                AttributeName marks a stringvalue which will be used in 
+                SQL-statement without surrounding with "'" in the statement.
+                Usage is e.g. for determining the Axis (i or j) in the workflow
+                of Horizontalprofiles.
+    \item {\tt multiselect}: true if more than on value can be feed or put into the SQL-statement.
+                       false if one on value will be accepted.
+    \item {\tt usedinquery}: Number how often the value should be put into the SQL-statement:
+                       0: Value will not out into the statement.
+                       1: Value will put once into the statement,
+                       2 or more: Value will be put as often as configured 
+                                  into the SQL-statement (this is useful if 
+                                  inner-selects are used)
+\end{itemize}
+
+The next part will explain the usage of inputvalues.
+
+This SQL-statement is configured to use in the state above, which will fetch
+all parameter-ids with the according german name which are reffered to the given
+TimeSeriesPoint (e.g.Arkona Basin Buoy FeatureID = 100011 )
+
+ 
+\begin{lstlisting}
+SELECT DISTINCT 
+       p.PARAMETERID KEY, 
+       p.GERMANNAME || '  ['|| p.UNIT ||']' VALUE, 
+       p.GERMANNAME 
+FROM MEDIAN.PARAMETER P, 
+     MEDIAN.TIMESERIES TS, 
+     MEDIAN.TIMESERIESVALUE 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
+\end{lstlisting}
+
+Including inputvalues, the example for choosing the FIS ({\tt fisname})
+and the Station 342 ({\tt featureid}: Arkona Basin Buoy) will look like
+this: 
+\begin{itemize}
+    \item {\tt featureid}: 100011 (Marnet $\rightarrow$ Arkona Basin Buoy)
+    \item {\tt fisname}: fis\_marnet
+    \item {\tt parameterid}: not set because it's the value that should be 
+                       chosen in this state. 
+\end{itemize}
+
+\begin{lstlisting}
+SELECT DISTINCT 
+       p.PARAMETERID KEY, 
+       p.GERMANNAME || '  ['|| p.UNIT ||']' VALUE, 
+       p.GERMANNAME 
+FROM MEDIAN.PARAMETER P,  
+       MEDIAN.TIMESERIES TS, 
+       MEDIAN.TIMESERIESVALUE 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 = 100011
+ORDER BY P.GERMANNAME
+\end{lstlisting}
+
+The value of {\tt featureid} will be inserted into the query because
+the attribute {\tt usedinquery} is set to "1".
+
+The values of the inputvalues {\tt fisname} and {\tt parameterid} will be
+excluded because the attribute {\tt usedinquery} is set to "0"
+
+
+If the attribute {\tt usedinquery} of the inputvalue {\tt featureid} is set to "2"
+this might happen.
+
+\begin{lstlisting}
+<inputvalues>
+    <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="2"/>
+    <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/>
+    <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="0"/>
+</inputvalues>
+\end{lstlisting}
+
+\begin{lstlisting}
+SELECT DISTINCT 
+    ...
+    TSP.FEATUREID = ? AND
+    TSP.FEATUREID = ? 
+ ORDER BY P.GERMANNAME
+\end{lstlisting}
+
+This SQL-statement will be modified to
+
+\begin{lstlisting}
+SELECT DISTINCT 
+    ...
+    TSP.FEATUREID = 100011 AND
+    TSP.FEATUREID = 100011 
+ORDER BY P.GERMANNAME
+\end{lstlisting}
+
+
+At the next step of the workflow it is nessesary to determine all depths where
+the choosen parameters are measured.
+To do this we might have the following inputvalues:
+
+\begin{lstlisting}
+<inputvalues>
+    <inputvalue name="featureid" type="Integer" multiselect="false" usedinquery="2"/>
+    <inputvalue name="fisname" type="String" multiselect="false" usedinquery="0"/>
+    <inputvalue name="parameterid" type="Integer" multiselect="true" usedinquery="1"/>
+    <inputvalue name="measurementid" type="Integer" multiselect="true" usedinquery="0"/>
+</inputvalues>
+\end{lstlisting}
+
+\begin{itemize}
+   \item {\tt featureid}: 100011 (Marnet $\rightarrow$ Arkona Basin Buoy)
+   \item {\tt fisname}: fis\_marnet
+   \item {\tt parameterid}: 2 (Salzgehalt [pSal])
+   \item {\tt measurementid}: not set because it's the value that should be
+                        chosen in this state.
+\end{itemize}
+
+\begin{lstlisting}
+SELECT DISTINCT 
+       M.MEASUREMENTID KEY, 
+       M.ZLOCATION VALUE, 
+       P.PARAMETERID PARAMETERID 
+FROM MEDIAN.MEASUREMENT M, 
+     MEDIAN.TIMESERIESVALUE 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 
+      M.FEATUREID = ? AND 
+      P.PARAMETERID IN (?)
+ORDER BY m.ZLOCATION DESC
+\end{lstlisting}
+
+This SQL-statement will be modified to
+
+\begin{lstlisting}
+SELECT DISTINCT 
+       M.MEASUREMENTID KEY, 
+       M.ZLOCATION VALUE, 
+       P.PARAMETERID PARAMETERID 
+FROM MEDIAN.MEASUREMENT M, 
+     MEDIAN.TIMESERIESVALUE 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 = 100011 AND 
+      M.FEATUREID = 100011 AND 
+      P.PARAMETERID IN (2)
+ORDER BY m.ZLOCATION DESC
+\end{lstlisting}
+
+The queries which are shown above are configurable.
+Configuring takes place in the \\ file \texttt{queries.properties } which will
+be explained in the next paragraph.
+
+\paragraph{Query-configuration (queries.properties)}
+\label{ref:queries.properties}
+
+This file contains key-value-pairs to define SQL-statements.
+All queries will be handle using the prepared-statement-syntax using "?"
+to define a place where an dynamic value should be placed into the statement.
+ 
+There is one special implementation to support spatial access to the 
+{\tt ESRI ArcSDE}-database. This mechanism is used to realize the access to spatial-
+objects.
+
+All queries containing the following literals will be handled separatly
+using the ESRI ArcSDE-API.
+
+\begin{itemize}
+    \item {\tt ST\_ASTEXT(SHAPE)}: Will return the geometry as an WellKnowText (WKT)
+    \item {\tt ST\_ASTEXT(RASTER)}: Will return the raster in an readable way.
+    \item {\tt INTERSECTS(SHAPE,"?")}: Will only return the elements which geometry
+                                 intersects the given geometry ("?" will be
+                                 replace with an WKT)
+\end{itemize}
+
+
+\paragraph{Transitions}
+
+To move between two states it is necessary to configure dependencies
+between the different states.  This dependencies are called {\tt
+transitions}.
+
+There are different kinds of {\tt transitions} which can be used.
+\begin{itemize}
+  \item Transitions which only link two states
+  \item Transition which link two states with a additional condition. 
+        (e.g. If a region was selected in the Regionfilter or not )
+\end{itemize}
+
+The listing below shows a transition with an additional condition.
+\begin{lstlisting}
+<transition transition="de.intevation.gnv.transition.ValueCompareTransition">
+    <from state="timeseries_area"/>
+    <to state="timeseries_without_geom"/>
+    <condition inputvalue="areaid" value="n/n" operator="equal"/>
+</transition>
+\end{lstlisting}
+
+\begin{itemize}
+  \item {\tt from}: The {\tt id} of the {\tt state} which you have to come from
+  \item {\tt to}:   The {\tt id} of the {\tt state} which can be reached.
+  \item {\tt condition}: The condition which have to be fulfilled.
+\end{itemize}
+
+At this moment only {\tt EQUAL} and {\tt NOTEQUAL} are supported as 
+{\tt condition} for an {\tt ValueCompare\-Transition}.
+
+\paragraph{Outputstate}
+
+The {\tt outputstate} is a special {\tt state} which was created to define
+the different possibilities of outputs for each product.
+An {\tt outputstate} is handled as a {\tt state} which is described above.
+Additionally you are able to configure which kind of outputs should
+be provided.
+
+There are several {\tt outputstates}. Each one is designed to create 
+the output for one special product.
+
+\begin{itemize}
+  \item TimeSeries: {\tt TimeSeriesOutputState}
+  \item Horizontalprofile: {\tt HorizontalProfileOutputState}
+  \item Horizontalprofile on Meshes: {\tt HorizontalProfileMeshOutputState}
+  \item Verticalcrosssection: {\tt VerticalCrossSectionOutputState}
+  \item Verticalprofiles: {\tt VerticalProfileOutputState}
+  \item Horizontalcrosssections: {\tt HorizontalCrossSectionMeshOutputState}
+  \item Layer: {\tt LayerOutputState}
+\end{itemize}
+
+All these outputstates are implemented in {\tt package de.intevation.gnv.state}
+and its {\tt sub\-packages}. 
+
+The fullqualified name of the {\tt outputstate} to the attribute 
+{\tt state} is shown below.
+
+An example for an {\tt outputstate}:
+
+\begin{lstlisting}
+<state id="timeseries_calculate_results" description="timeseries_interval" state="de.intevation.gnv.state.timeseries.TimeSeriesOutputState">
+    <queryID>timeseries_chart_data</queryID>
+     ...
+    <outputsModes>
+        <outputsMode name="chart" description="Chartrepresentation of the Values" mime-type="image/png">
+        ...
+        </outputsMode>
+    </outputsModes>
+ </state>
+\end{lstlisting}
+
+At section {\tt /state/outputsModes} it is possible to add one ore more 
+{\tt outputmodes} to one state as shown in the next paragraph.
+
+\paragraph{OutputModes}
+
+It is possible to configure several {\tt outputmodes} in one {\tt outputstate}.
+Inserting or deleting the configuration of a special
+{\tt outputmode} will control if an item in the GUI will be displayed.
+
+{\bf
+WARNING: IT MIGHT BE POSSIBLE THAT ONE OR MORE OUTPUTMODES ARE NOT
+         SUPPORTED BY AN PRODUCT. IN THAT CASE IT IS NECESSARY TO
+         IMPLEMENT THE REQUIRED FUNCTIONALITY BEFORE IT IS POSSIBLE
+         TO OFFER THIS OUTPUTMODE.
+}
+
+Currently the following {\tt outputmodes} are supported:
+
+\begin{itemize}
+   \item {\tt chart}
+   \item {\tt histogram}
+   \item {\tt csv}
+   \item {\tt odv}
+   \item {\tt statistics}
+   \item {\tt wms}
+   \item {\tt shapefile}
+\end{itemize}
+
+The following example shows how to configure an {\tt outputmode chart}:
+
+\begin{lstlisting}
+<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>
+\end{lstlisting}
+
+
+\begin{itemize}
+   \item {\tt name}: The name of the mode. This must not be changed because it 
+                     is used by the program.
+   \item {\tt description}: a short description of this outputmode. 
+   \item {\tt parameters}: one ore more parameters which will be shown in the 
+                           GUI e.g. for changing the size of an chart.
+   \item {\tt exportModes} : one or more formats which can be served.
+\end{itemize}
+
+
+\section{Adding a new FIS}
+In this section it will be explained which steps have to be done to integrate a
+new FIS into the {\tt artifact-server}.  This will be done using the configuration for
+a FIS which uses data from the table {\tt MEDIAN.TIMESERIES} section of
+the datawarehouse (e.g. MARNET or STAUN).
+
+For publishing the changes to the {\tt artifact-server}, it needs to be
+restarted. 
+
+\subsection{Adding a new Artifact-factory}
+First step is to add a new {\tt artifact-factory} to the configuration conf/conf.xml
+To do this you have to add a new XML-fragment into the section 
+/factories/artifact-factories  which look like that:
+
+\begin{lstlisting}
+<artifact-factory name='fis_NEWFISNAME' 
+                  description='Factory to create an artifact to be used with the FIS NEWFISNAME'  
+                  ttl='3600000' 
+                  artifact='de.intevation.artifactdatabase.ProxyArtifact'>
+                  de.intevation.gnv.artifacts.GNVProductArtifactFactory
+</artifact-factory>
+\end{lstlisting}
+ 
+In this XML-fragment you only have to replace the placeholder {\tt NEWFISNAME}
+with a unique short name for the new FIS.
+
+\paragraph*{Example}
+This example shows how to add a FIS and illustrates the effect on the
+artifact-server's output.
+
+First , the following {\tt artifact-factory} has to be added into the file 
+{\tt conf/conf.xml} in section {\tt /artifact-database/artifact-factories} 
+adding a new FIS called {\tt justanewfis} to the server:
+
+\begin{lstlisting}
+<artifact-factory name='fis_justanewfis' 
+                  description='Factory to create an artifact to be used with the FIS NEWFISNAME'  
+                  ttl='3600000' 
+                  artifact='de.intevation.artifactdatabase.ProxyArtifact'>
+                  de.intevation.gnv.artifacts.GNVProductArtifactFactory
+</artifact-factory>
+\end{lstlisting}
+
+Restart the {\tt artifact-database} executing:
+
+\begin{lstlisting}
+/etc/init.d/artifact-server restart
+\end{lstlisting}
+
+Checking if the new FIS is served by the REST-Server
+calling the following command:
+
+\begin{lstlisting}
+curl http://localhost:8181/factories | xmllint --format - | grep fis_justanewfis
+\end{lstlisting}
+
+If the FIS was added, the new {\tt artifact-factory} will be found in the generated 
+XML-output. Otherwise no XML-output will be shown.
+
+\subsection{Adding a new Artifact for Artifact-factory}
+The next step is to define the artifact itself.
+For this it is necessary to add an XML-fragment into the section 
+{\tt /artifacts} of the main configurationfile {\tt /conf/conf.xml}.
+
+\begin{lstlisting}
+<artifact name='fis_NEWFISNAME'>
+    <products>
+     ...
+    </products>
+</artifact>
+\end{lstlisting}
+
+In this XML-fragment it is also required to replace the placeholder {\tt NEWFISNAME}
+with the name which was used to configure the {\tt artifact-factory}.
+
+Now the {\tt artifact-server} can handle an additional FIS without any products yet.
+
+To prevent needless configuration-work, it is a useful way to clone an
+existing artifact handling the same kind of work.
+
+
+\paragraph*{Example}
+Now will an artifact to the FIS {\tt fis\_justanewfis}, will be configured.
+
+The following XML-fragment has to be added to the file 
+{\tt conf/conf.xml} in section {\tt /artifact-database/artifacts}:
+
+\begin{lstlisting}
+<artifact name='fis_justanewfis'>
+    <products>
+    </products>
+</artifact>
+\end{lstlisting}
+
+Restart the artifact-server
+
+\begin{lstlisting}
+/etc/init.d/artifact-server restart
+\end{lstlisting}
+
+Now it should be possible to choose the artifact.
+
+The listbox in the GUI would be empty.
+\begin{lstlisting}
+curl -d "@sample-documents/create-artifact.xml"  http://localhost:8181/create | xmllint --format -
+\end{lstlisting}
+
+\subsection{Adding/Removing Products to the Specific Artifact}
+Next step is, to configure the different products which the FIS should
+be able to provide.  To do this it is necessary to copy the
+XML-fragments of the products into the XML-element {\tt products} of the
+previously integrated artifact.
+
+\begin{lstlisting}
+<artifact name='fis_NEWFISNAME'>
+     <products>
+         <product name= "timeSeries">
+              <artifact-factory name="timeSeries" 
+                                description="Artifactfactory for instantiating the artifact for TimeSeries on TimeSeriesPoints"  
+                                ttl="300000" 
+                                artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">
+                  de.intevation.gnv.artifacts.GNVArtifactFactory
+              </artifact-factory>
+              <parameters>
+                  <parameter name="sourceid" 
+                             value="VALUEOFSOURCEID"/>
+                  <parameter name="fisname" 
+                             value="fis\_NEWFISNAME"/>
+              </parameters>
+          </product>
+          <product name= "verticalProfile">
+              <artifact-factory name="verticalProfile" 
+                                description="Artifactfactory for instantiating the artifact for Verticalprofiles on TimeSeriesPoints"  
+                                ttl="300000" 
+                                artifact="de.intevation.gnv.profile.vertical.VerticalProfileArtifact">
+                  de.intevation.gnv.artifacts.GNVArtifactFactory
+              </artifact-factory>
+              <parameters>
+                  <parameter name="sourceid" 
+                             value="VALUEOFSOURCEID"/>
+                  <parameter name="fisname" 
+                             value="fis\_NEWFISNAME"/>
+              </parameters>
+          </product>
+     </products>
+</artifact>
+\end{lstlisting}
+
+In this XML-fragment the placeholders {\tt NEWFISNAME} have to be
+replaced. The source-id \texttt{VALUEOFSOURCEID} with the value for the new
+FIS as defined in the table {\tt MEDIAN.SOURCEINFO} needs to be added.
+
+\paragraph*{Example}
+Adding a product to the new FIS, choosing sourceid of an existing FIS
+(e.g 4 $\rightarrow$ Marnet).
+
+Add the following XML-fragment to the new artifact.
+\begin{lstlisting}
+<product name= "timeSeries">
+    <artifact-factory name="timeSeries" 
+                      description="Artifactfactory for instantiating the artifact for TimeSeries on TimeSeriesPoints"  
+                      ttl="300000" 
+                      artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">
+                      de.intevation.gnv.artifacts.GNVArtifactFactory
+    </artifact-factory>
+    <parameters>
+        <parameter name="sourceid" 
+                 value="4"/>
+        <parameter name="fisname" 
+                 value="fis\_justanewfis"/>
+    </parameters>
+</product>
+\end{lstlisting}
+
+Restart the artifact-server
+
+\begin{lstlisting}
+/etc/init.d/artifact-server restart
+\end{lstlisting}
+
+If 
+\begin{lstlisting}
+curl -d "@sample-documents/create-artifact.xml"  http://localhost:8181/create | xmllint --format -
+\end{lstlisting}
+
+is called, the product {\tt timeSeries} should be available for the FIS {\tt justanewfis}.
+ 
+Now, it should be able to choose the product.
+This product including the definied outputformats should be available in
+the GUI.
+
+\subsection{Adding a new Product}
+To add a new product to the system it is necessary that the required 
+artifact representation is implemented in the {\tt sourcecode}.
+Without doing that step it is not possible to create a new product.
+
+All products are configured in separated files that will be included into the 
+main configuration using Xlink-references.
+
+First step is to create a new file in the folder {\tt products} and in the 
+sub-folder where the product belongs to ({\tt timeseries,verticalprofile,
+horizontalprofile,horizontal\-crosssection,layer,...})
+
+Then the new product can be referenced in the file {\tt /conf/conf.xml} in the
+section {\tt/artifacts} using the following XML-fragment.
+
+\begin{lstlisting}
+<artifact name="timeSeries" 
+          xmlns:xlink="http://www.w3.org/1999/xlink" 
+          xlink:href="${artifacts.config.dir}/products/PATHTOFILE" /> 
+\end{lstlisting}
+
+The placeholder {\tt PATHTOFILE} has to be replaced with the relative path and
+the name of the file starting in the folder products.  
+
+Then it is possible to add the product to a FIS as explained in the next section.
+Please note that the defined name of the {\tt artifact-factory} has to match to the 
+name of the added products which is also designed as an artifact.
+
+\subsection{Adding an additional Product to a FIS}
+To add an additional product to a FIS the XML-fragment which 
+represents the product to the artifact-configuration of the FIS in section
+{\tt /artifacts/artifact/products} needs to be added.
+
+\begin{lstlisting}
+ <product name= "timeSeries">
+     <artifact-factory name="timeSeries" 
+                       description="Artifactfactory for instantiating the artifact for TimeSeries on TimeSeriesPoints"  
+                       ttl="300000" 
+                       artifact="de.intevation.gnv.timeseries.TimeSeriesArtifact">
+          de.intevation.gnv.artifacts.GNVArtifactFactory
+     </artifact-factory>
+     <parameters>
+         <parameter name="sourceid" 
+                    value="VALUEOFSOURCEID"/>
+         <parameter name="fisname" 
+                    value="fis\_NEWFISNAME"/>
+     </parameters>
+ </product>
+ \end{lstlisting}
+
+Please note that the placeholders have to be explained above.

http://dive4elements.wald.intevation.org