<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://alida.informatik.uni-halle.de/index.php?action=history&amp;feed=atom&amp;title=Java_quick</id>
	<title>Java quick - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://alida.informatik.uni-halle.de/index.php?action=history&amp;feed=atom&amp;title=Java_quick"/>
	<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;action=history"/>
	<updated>2026-04-08T14:55:13Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=280&amp;oldid=prev</id>
		<title>Posch: /* Graphical workflow editor: Grappa */</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=280&amp;oldid=prev"/>
		<updated>2016-03-17T16:16:07Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Graphical workflow editor: Grappa&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:16, 17 March 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l754&quot;&gt;Line 754:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 754:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;saving workflows, and accessing the online help. At the bottom of the window a&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;saving workflows, and accessing the online help. At the bottom of the window a&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;panel displaying status and progress messages is available.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;panel displaying status and progress messages is available.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A demo workflow is supplied with the distribution. To load this workflow right click into the workbench area to pop up the&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;context menue. Select &amp;lt;code&gt;'Load'&amp;lt;/code&gt; navigate to the base directory where you unpacked the distribution.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;From there navigate further to &amp;lt;code&gt;share/examples/workflows&amp;lt;/code&gt; select &amp;lt;code&gt;Demo.awf&amp;lt;/code&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and load the sample workflow. This workflow is also described in manual of Alida.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Operator node selection menu ==  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Operator node selection menu ==  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=262&amp;oldid=prev</id>
		<title>Posch: /* Graphical workflow editor: Grappa */</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=262&amp;oldid=prev"/>
		<updated>2016-02-23T22:32:51Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Graphical workflow editor: Grappa&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:32, 24 February 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l723&quot;&gt;Line 723:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 723:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the curly brackets can be prefixed by a derive class definition starting with a dollar sign&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the curly brackets can be prefixed by a derive class definition starting with a dollar sign&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;and ending with a colon as shown for the summarizing operators above.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;and ending with a colon as shown for the summarizing operators above.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l841&quot;&gt;Line 841:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 844:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;From the context menu of the workbench the item  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;From the context menu of the workbench the item  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;'Run'&amp;lt;/code&amp;gt; is available which executes the complete workflow, i.e., all nodes&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;code&amp;gt;'Run'&amp;lt;/code&amp;gt; is available which executes the complete workflow, i.e., all nodes&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;currently present on the tab. From the context menu of a single node and its &amp;lt;code&amp;gt;'Run&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;\ldots&lt;/del&gt;'&amp;lt;/code&amp;gt; item also the whole workflow can be executed (item &amp;lt;code&amp;gt;'Workflow'&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;currently present on the tab. From the context menu of a single node and its &amp;lt;code&amp;gt;'Run &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;...&lt;/ins&gt;'&amp;lt;/code&amp;gt; item also the whole workflow can be executed (item &amp;lt;code&amp;gt;'Workflow'&amp;lt;/code&amp;gt;).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Alternatively, via the item &amp;lt;code&amp;gt;'Nodes from here'&amp;lt;/code&amp;gt; it is possible to only execute the nodes of the workflow subgraph for which the  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Alternatively, via the item &amp;lt;code&amp;gt;'Nodes from here'&amp;lt;/code&amp;gt; it is possible to only execute the nodes of the workflow subgraph for which the  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;current node is the root (of course considering required dependencies). Finally, the item &amp;lt;code&amp;gt;'Node'&amp;lt;/code&amp;gt; allows for running the workflow&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;current node is the root (of course considering required dependencies). Finally, the item &amp;lt;code&amp;gt;'Node'&amp;lt;/code&amp;gt; allows for running the workflow&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=261&amp;oldid=prev</id>
		<title>Posch: /* Menubar and shortcuts */</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=261&amp;oldid=prev"/>
		<updated>2016-02-23T22:31:21Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Menubar and shortcuts&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:31, 24 February 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l858&quot;&gt;Line 858:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 858:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;one of its preceeding nodes, was changed.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;one of its preceeding nodes, was changed.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Menubar &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and shortcuts &lt;/del&gt;==  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Menubar ==  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The Grappa main window features a menubar offering quick&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The Grappa main window features a menubar offering quick&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;access to the basic functions of Grappa and some additional convenience functionality simplifying&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;access to the basic functions of Grappa and some additional convenience functionality simplifying&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=260&amp;oldid=prev</id>
		<title>Posch: /* Graphical workflow editor: Grappa */</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=260&amp;oldid=prev"/>
		<updated>2016-02-23T22:30:50Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Graphical workflow editor: Grappa&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;amp;diff=260&amp;amp;oldid=259&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=259&amp;oldid=prev</id>
		<title>Posch at 22:20, 23 February 2016</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=259&amp;oldid=prev"/>
		<updated>2016-02-23T22:20:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 00:20, 24 February 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l723&quot;&gt;Line 723:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 723:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the curly brackets can be prefixed by a derive class definition starting with a dollar sign&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the curly brackets can be prefixed by a derive class definition starting with a dollar sign&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;and ending with a colon as shown for the summarizing operators above.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;and ending with a colon as shown for the summarizing operators above.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;= Graphical workflow editor: Grappa =&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Most of the time complex data analysis tasks cannot be solved by only applying a&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;single operator to the data. Rather, selections of various operators need to be&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;combined into more sophisticated {\em workflows} to extract desired result data.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Alida inherently supports the development of such workflows. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Grappa, the Graphical Programming &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Editor for Alida allows for designing and manipulating workflows via graph edit operations, hence, offers &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;an intuitive interface and large flexibility for developing workflows.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A workflow in Alida is defined as a graph data structure. Each node of the graph represents an Alida operator, while edges between &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;different nodes encode the flow of data and control. Each node owns a selection of input and output ports which are associated with the&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;operator's parameters. Consequently, edges are directed, i.e., an edge always&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;connects an output port of one operator node with an input port of another. Grappa visualizes such workflow graphs and supports manual editing, manipulation, and also workflow execution&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and analysis of results.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=258&amp;oldid=prev</id>
		<title>Posch: /* Adding more data types as parameters */</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=258&amp;oldid=prev"/>
		<updated>2016-02-23T12:12:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Adding more data types as parameters&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:12, 23 February 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l670&quot;&gt;Line 670:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 670:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		smoothedExperiment = new ExperimentalData1D( experiment.getDescription() + &amp;quot; (smoothed)&amp;quot;,  &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;		smoothedExperiment = new ExperimentalData1D( experiment.getDescription() + &amp;quot; (smoothed)&amp;quot;,  &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				smoothedData, experiment.isBaselineCorrected(), experiment.getTimeResolution());&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;				smoothedData, experiment.isBaselineCorrected(), experiment.getTimeResolution());&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        }&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=257&amp;oldid=prev</id>
		<title>Posch: /* Adding more data types as parameters */</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=257&amp;oldid=prev"/>
		<updated>2016-02-23T12:10:06Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Adding more data types as parameters&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;a href=&quot;https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;amp;diff=257&amp;amp;oldid=87&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Posch</name></author>
	</entry>
	<entry>
		<id>https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=87&amp;oldid=prev</id>
		<title>Sysop: Created page with &quot;Here we introduce Alida's operator concept with some code snippets of &lt;code&gt;ALDOperator&lt;/code&gt; and sub-classed demo operators. we focus on Alida's capabilities to automatically g...&quot;</title>
		<link rel="alternate" type="text/html" href="https://alida.informatik.uni-halle.de/index.php?title=Java_quick&amp;diff=87&amp;oldid=prev"/>
		<updated>2012-03-09T16:17:35Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;Here we introduce Alida&amp;#039;s operator concept with some code snippets of &amp;lt;code&amp;gt;ALDOperator&amp;lt;/code&amp;gt; and sub-classed demo operators. we focus on Alida&amp;#039;s capabilities to automatically g...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Here we introduce Alida's operator concept with some code snippets of &amp;lt;code&amp;gt;ALDOperator&amp;lt;/code&amp;gt; and sub-classed demo operators.&lt;br /&gt;
we focus on Alida's capabilities to automatically generate user interfaces.&lt;br /&gt;
&lt;br /&gt;
=  First operator =&lt;br /&gt;
&lt;br /&gt;
As a first example of an Alida operator we implement the row or column wise&lt;br /&gt;
sum for a 2D array of Doubles.&lt;br /&gt;
The class &amp;lt;code&amp;gt;MatrixSum&amp;lt;/code&amp;gt; extending &amp;lt;code&amp;gt;ALDOperator&amp;lt;/code&amp;gt; features three member variables&lt;br /&gt;
holding the input 2D array, an enum to indicate the mode of summation (&amp;lt;code&amp;gt;ROW&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;COLUMN&amp;lt;/code&amp;gt;), and&lt;br /&gt;
an 1D array of the sums to be computed and returned by the operator.&lt;br /&gt;
Alida requires only to annotate these members with the @Parameter annotation&lt;br /&gt;
which declares &lt;br /&gt;
&lt;br /&gt;
* the direction (&amp;lt;code&amp;gt;IN&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;INOUT&amp;lt;/code&amp;gt;), &lt;br /&gt;
* whether the parameter is required,&lt;br /&gt;
* an optional textual description,&lt;br /&gt;
* and a label used, e.g. in the graphical user interface automatically generated&lt;br /&gt;
		to execute the operator.&lt;br /&gt;
&lt;br /&gt;
It is important to add a public standard constructor (without arguments)&lt;br /&gt;
to be able to use Java's reflection mechanism.&lt;br /&gt;
Finally, the abstract method &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt; of &amp;lt;code&amp;gt;ALDOperator&amp;lt;/code&amp;gt; has to be overridden&lt;br /&gt;
implementing the functionality of the operator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@ALDAOperator(genericExecutionMode=ALDAOperator.ExecutionMode.ALL,&lt;br /&gt;
				level=ALDAOperator.Level.APPLICATION)&lt;br /&gt;
public class MatrixSum extends ALDOperator {&lt;br /&gt;
&lt;br /&gt;
  /** Choose row or colum wise sum&lt;br /&gt;
    */&lt;br /&gt;
  public static enum SummarizeMode {&lt;br /&gt;
	/** row wise */&lt;br /&gt;
	ROW,&lt;br /&gt;
&lt;br /&gt;
	/** column wise */&lt;br /&gt;
	COLUMN&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Input matrix&lt;br /&gt;
   */&lt;br /&gt;
  @Parameter( label= &amp;quot;Input matrix&amp;quot;, required = true, &lt;br /&gt;
  		direction = Parameter.Direction.IN, description = &amp;quot;Input matrix.&amp;quot;)&lt;br /&gt;
  private Double[][] matrix;&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Mode of summarizing&lt;br /&gt;
   */&lt;br /&gt;
  @Parameter( label= &amp;quot;Summarize mode&amp;quot;, required = true, &lt;br /&gt;
  		direction = Parameter.Direction.IN, description = &amp;quot;Sum over columns or rows?&amp;quot;)&lt;br /&gt;
  private SummarizeMode summarizeMode = SummarizeMode.ROW;&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * 1D Array of sums.&lt;br /&gt;
   */&lt;br /&gt;
  @Parameter( label= &amp;quot;sums&amp;quot;,  &lt;br /&gt;
  		direction = Parameter.Direction.OUT, description = &amp;quot;Row or column wise sums.&amp;quot;)&lt;br /&gt;
  private Double[] sums = null;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Default constructor.&lt;br /&gt;
	 * @throws ALDOperatorException&lt;br /&gt;
	 */&lt;br /&gt;
	public MatrixSum() throws ALDOperatorException {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Constructor.&lt;br /&gt;
	 * &lt;br /&gt;
	 * @param matrix	Input matrix.&lt;br /&gt;
	 * @throws ALDOperatorException&lt;br /&gt;
	 */&lt;br /&gt;
	public MatrixSum(Double[] [] matrix) throws ALDOperatorException {&lt;br /&gt;
		this.matrix = matrix;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void operate() {&lt;br /&gt;
		if ( matrix == null ) &lt;br /&gt;
			sums = null;&lt;br /&gt;
&lt;br /&gt;
		// calculate sums&lt;br /&gt;
		if ( summarizeMode == SummarizeMode.ROW ) {&lt;br /&gt;
			sums = new Double[matrix.length];&lt;br /&gt;
			for ( int row = 0 ; row &amp;lt; matrix.length ; row++ ) {&lt;br /&gt;
				sums[row] = 0.0;&lt;br /&gt;
				for ( int col = 0 ; col &amp;lt; matrix[0].length ; col++ )&lt;br /&gt;
					sums[row] += matrix[row][col];&lt;br /&gt;
			}&lt;br /&gt;
		} else {&lt;br /&gt;
			sums = new Double[matrix[0].length];&lt;br /&gt;
			for ( int col = 0 ; col &amp;lt; matrix[0].length ; col++ ) {&lt;br /&gt;
				sums[col] = 0.0;&lt;br /&gt;
				for ( int row = 0 ; row &amp;lt; matrix.length ; row++ )&lt;br /&gt;
					sums[col] += matrix[row][col];&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These are the basic requirements for the operator to be used on the programming level.&lt;br /&gt;
An example of this use is included in the example in the next section.&lt;br /&gt;
&lt;br /&gt;
If we further annotate the class with &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@ALDAOperator(genericExecutionMode=ALDAOperator.ExecutionMode.ALL)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
this is all needed to also facilitate &lt;br /&gt;
execution of this operator via a graphical and a command line user interface&lt;br /&gt;
automatically generated by Alida.&lt;br /&gt;
(Setting &amp;lt;code&amp;gt;level=ALDAOperator.Level.APPLICATION&amp;lt;/code&amp;gt; declares this operator an application&lt;br /&gt;
which is used in the GUI to control display of available operators.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Invocation via a graphical user interface ==&lt;br /&gt;
&lt;br /&gt;
Alida comes with one single application to execute Alida operators&lt;br /&gt;
with a automatically generated graphical user interface which may be&lt;br /&gt;
started from command line by&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunnerGUI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will pop up a window to choose an operator to execute.&lt;br /&gt;
Arranged according to the package structure all operators allows to be executed&lt;br /&gt;
via the graphical user interface according to their &amp;lt;code&amp;gt;genericExecutionMode&amp;lt;/code&amp;gt;&lt;br /&gt;
are displayed.&lt;br /&gt;
Initially packages are unfolded up to a predefined depth.&lt;br /&gt;
Unfold the demo package, select &amp;lt;code&amp;gt;MatrixSum&amp;lt;/code&amp;gt;, and choose the &amp;quot;Configure Operator&amp;quot; button.&lt;br /&gt;
This will pop up another window which allows you to configure the input parameters&lt;br /&gt;
of the operator.&lt;br /&gt;
Important note: After finishing to input the data matrix entering the final matrix elements&lt;br /&gt;
you have to select a previous matrix element due to subtle AWT details.&lt;br /&gt;
For the enumeration to select the mode Alida has automatically generated&lt;br /&gt;
a combo box to allow convenient selections.&lt;br /&gt;
If you are finished with the parameter configuration you want to invoke the operator&lt;br /&gt;
using the run button.&lt;br /&gt;
On completion of &amp;lt;code&amp;gt;MatrixSum&amp;lt;/code&amp;gt; the interface will pop up the result window which allows you&lt;br /&gt;
to inspect the outcome of the operation.&lt;br /&gt;
&lt;br /&gt;
==   Invocation via command line ==&lt;br /&gt;
&lt;br /&gt;
The command line user interface of Alida allows to invoke all Alida operator&lt;br /&gt;
properly annotated to allows generic execution.&lt;br /&gt;
&lt;br /&gt;
You may invoke the matrix summation operator by&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner MatrixSum matrix='[[1,2,3],[4,5,6]]' sums=-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
which returns as result on standard output&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sums = [6.0,15.0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Parameter values are specified as name=value pairs.&lt;br /&gt;
Alida's syntax for 2D array should be self-explanatory  from this example.&lt;br /&gt;
As the mode of summation is not supplied as a parameter its default is used&lt;br /&gt;
&lt;br /&gt;
Note, the command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner MatrixSum matrix='[[1,2,3],[4,5,6]]' &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
will return no output as the command line user interface returns only output parameters requested.&lt;br /&gt;
&lt;br /&gt;
The enumeration defined in &amp;lt;code&amp;gt;MatrixSum&amp;lt;/code&amp;gt; is supported by the&lt;br /&gt;
user interface without further action required as shown in the next example.&lt;br /&gt;
This also demonstrates redirection of output&lt;br /&gt;
to a file, sums.out in this case.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner MatrixSum matrix='[[1,2,3],[4,5,6]]' &lt;br /&gt;
	summarizeMode=COLUMN sums=@sums.out+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Input can be read from file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner MatrixSum matrix=@data sums=-+&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the file data contains the string defining the matrix, e.g., &amp;lt;code&amp;gt;[[1,2,3],[4,5,6]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Adding more features to an operator =&lt;br /&gt;
&lt;br /&gt;
We now generalize this example to realize not only summation over rows or&lt;br /&gt;
columns, but arbitrary summarizing operations.&lt;br /&gt;
This shows Alida's feature to allow an operator as parameter of another operator.&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
&lt;br /&gt;
First we generalize &amp;lt;code&amp;gt;ALDArraySum&amp;lt;/code&amp;gt; to the operator &amp;lt;code&amp;gt;ApplyToMatrix&amp;lt;/code&amp;gt;&lt;br /&gt;
which also takes a 2D array and an enum indicating the mode of marginalization (&amp;lt;code&amp;gt;ROW&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;COLUMN&amp;lt;/code&amp;gt;).&lt;br /&gt;
It takes an additional input parameter which specifies the operation to be applied on each&lt;br /&gt;
row or column.&lt;br /&gt;
&lt;br /&gt;
This parameter is itself an Alida operator and of type &amp;lt;code&amp;gt;ALDSummarizeArrayOp&amp;lt;/code&amp;gt;&lt;br /&gt;
which is implemented as an abstract class.&lt;br /&gt;
This abstract operator defines a summarizing operator&lt;br /&gt;
which takes a 1D array as input and returns a summarizing scalar.&lt;br /&gt;
As this is an abstract class there is no need to override the &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt;&lt;br /&gt;
method, however some getter and setter methods are provided.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  @Parameter( label= &amp;quot;Input 1D array&amp;quot;, required = true, &lt;br /&gt;
  		direction = Parameter.Direction.IN, description = &amp;quot;Input array (1D).&amp;quot;)&lt;br /&gt;
  protected Double[] data;&lt;br /&gt;
&lt;br /&gt;
  /**&lt;br /&gt;
   * Summarizing scalar&lt;br /&gt;
   */&lt;br /&gt;
  @Parameter( label= &amp;quot;Summarizing scalar&amp;quot;,  &lt;br /&gt;
  		direction = Parameter.Direction.OUT, description = &amp;quot;Summarizing scalar of the 1D arra&amp;quot;)&lt;br /&gt;
  protected Double summary = null;&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Default constructor.&lt;br /&gt;
	 * @throws ALDOperatorException&lt;br /&gt;
	 */&lt;br /&gt;
	public ALDSummarizeArrayOp() throws ALDOperatorException {&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Returns the 1D array&lt;br /&gt;
	 * @return data array&lt;br /&gt;
	 */&lt;br /&gt;
	public Double[] getData() {&lt;br /&gt;
		return this.data;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Sets the 1D array&lt;br /&gt;
	 * @param data&lt;br /&gt;
	 */&lt;br /&gt;
	public void setData( Double[] data) {&lt;br /&gt;
		this.data = data;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we add concrete examples of such a summarizing operation, in this case&lt;br /&gt;
summation (&amp;lt;code&amp;gt;ALDArraySum&amp;lt;/code&amp;gt;), to return the mean (&amp;lt;code&amp;gt;ALDArrayMean&amp;lt;/code&amp;gt;), and the minimum (&amp;lt;code&amp;gt;ALDArrayMin&amp;lt;/code&amp;gt;).&lt;br /&gt;
Each implements the  &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt; method and has to supply a standard constructor.&lt;br /&gt;
In this example we add another constructor for convenience.&lt;br /&gt;
This operators are declared as operators on the standard in contrast to &lt;br /&gt;
application level, as they are not expected to be invoked as an application.&lt;br /&gt;
However, setting the level to standard in the menu of the graphical user interface&lt;br /&gt;
stills allows their execution.&lt;br /&gt;
When extending the abstract super class it is necessary to annotate the&lt;br /&gt;
class with &amp;lt;code&amp;gt;@ALDDerivedClass&amp;lt;/code&amp;gt; in order to allow Alida's dataIO mechanism to find the derived class&lt;br /&gt;
in the automatically generated user interface.&lt;br /&gt;
This holds for other parameter types as well.&lt;br /&gt;
More specifically, if an instance of a class is to be supplied in an automatically &lt;br /&gt;
generated user interface as a value for a parameter of one of its super classes,&lt;br /&gt;
Alida requires the annotation &amp;lt;code&amp;gt;@ALDDerivedClass&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@ALDDerivedClass&lt;br /&gt;
@ALDAOperator(genericExecutionMode=ALDAOperator.ExecutionMode.ALL,&lt;br /&gt;
        level=ALDAOperator.Level.STANDARD)&lt;br /&gt;
public class ALDArraySum extends ALDSummarizeArrayOp {&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void operate() {&lt;br /&gt;
        summary = 0.0;&lt;br /&gt;
        for ( int i = 0 ; i &amp;lt; data.length ; i++ )&lt;br /&gt;
            summary += data[i];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Default constructor.&lt;br /&gt;
     * @throws ALDOperatorException&lt;br /&gt;
     */&lt;br /&gt;
    public ALDArraySum() throws ALDOperatorException {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we are ready to implement &lt;br /&gt;
the &amp;lt;code&amp;gt;ApplyToMatrix&amp;lt;/code&amp;gt; operator, which also demonstrates supplemental parameters.&lt;br /&gt;
This supplementals, e.g., control debugging output or returning of intermediate results.&lt;br /&gt;
For demo purposes we declare a supplemental input parameter &amp;lt;code&amp;gt;returnElapsedTime&amp;lt;/code&amp;gt;.&lt;br /&gt;
If it is set to true the operator will return the elapsed time in a second&lt;br /&gt;
supplemental parameter with direction output.&lt;br /&gt;
&lt;br /&gt;
Again, the operation is implemented in the  &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt; method and the remainder of the&lt;br /&gt;
class supplies getter and setter methods for convenience.&lt;br /&gt;
The  &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt; method give also an example of the invocation of an operator on the&lt;br /&gt;
programming level.&lt;br /&gt;
In this case, an instance of the operator is already passed as a parameter.&lt;br /&gt;
Its parameters are set, in this case each 1D array to be summarized in turn.&lt;br /&gt;
Upon return from the method &amp;lt;code&amp;gt;runOp()&amp;lt;/code&amp;gt; the results may be retrieved from the operator object,&lt;br /&gt;
in this example with the &amp;lt;code&amp;gt;getSummary()&amp;lt;/code&amp;gt; method.&lt;br /&gt;
Besides getter and setter methods as implemented in each operator&lt;br /&gt;
Alida provides also a generic get and set methods applicable to&lt;br /&gt;
all parameters of an operator.&lt;br /&gt;
Note, that the operator is not invoked by its  &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt; method, but via&lt;br /&gt;
the &amp;lt;code&amp;gt;runOp()&amp;lt;/code&amp;gt; method implemented the base class &amp;lt;code&amp;gt;ALDOperator&amp;lt;/code&amp;gt;.&lt;br /&gt;
This methods validates the parameters before invocation of  &amp;lt;code&amp;gt;operate()&amp;lt;/code&amp;gt;.&lt;br /&gt;
Furthermore, it take all necessary measures for Alida's processing&lt;br /&gt;
history which automatically logs&lt;br /&gt;
all manipulative actions on the data and corresponding parameter settings. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@ALDAOperator(genericExecutionMode=ALDAOperator.ExecutionMode.ALL,&lt;br /&gt;
            level=ALDAOperator.Level.APPLICATION)&lt;br /&gt;
public class ApplyToMatrix extends ALDOperator {&lt;br /&gt;
&lt;br /&gt;
    /** Choose row or colum wise sum&lt;br /&gt;
      */&lt;br /&gt;
    public static enum SummarizeMode {&lt;br /&gt;
      /** row wise */&lt;br /&gt;
      ROW,&lt;br /&gt;
      /** column wise */&lt;br /&gt;
      COLUMN&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Input matrix&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Input matrix&amp;quot;, required = true, &lt;br /&gt;
          direction = Parameter.Direction.IN, description = &amp;quot;Input matrix.&amp;quot;)&lt;br /&gt;
    private Double[][] matrix;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Mode of summarizing&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Summarize mode&amp;quot;, required = true, &lt;br /&gt;
          direction = Parameter.Direction.IN, description = &amp;quot;Sum over columns or rows.&amp;quot;)&lt;br /&gt;
    private SummarizeMode summarizeMode = SummarizeMode.ROW;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Summarizing opererator&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Summarizing operator&amp;quot;, required = true, &lt;br /&gt;
          direction = Parameter.Direction.IN, description = &amp;quot;Specifies the summarizing operation to apply&amp;quot;)&lt;br /&gt;
    private ALDSummarizeArrayOp summarizeOp;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * 1D Array of summaries.&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;summaries&amp;quot;,  &lt;br /&gt;
          direction = Parameter.Direction.OUT, description = &amp;quot;Row or column wise summaries&amp;quot;)&lt;br /&gt;
    private Double[] summaries = null;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Supplemental to request elapsed time to be returned&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Return elapsed time&amp;quot;, &lt;br /&gt;
          direction = Parameter.Direction.IN, description = &amp;quot;Request elapsed time consumed to be returned&amp;quot;,&lt;br /&gt;
        supplemental=true)&lt;br /&gt;
    private boolean returnElapsedTime = false;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Elpased time &lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Elapsed time&amp;quot;,  &lt;br /&gt;
          direction = Parameter.Direction.OUT, description = &amp;quot;Elapsed time of operation in milliseconds&amp;quot;,&lt;br /&gt;
        supplemental=true)&lt;br /&gt;
    private long elapsedTime;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Default constructor.&lt;br /&gt;
     * @throws ALDOperatorException&lt;br /&gt;
     */&lt;br /&gt;
    public ApplyToMatrix() throws ALDOperatorException {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructor.&lt;br /&gt;
     * &lt;br /&gt;
     * @param matrix    Input matrix.&lt;br /&gt;
     * @throws ALDOperatorException&lt;br /&gt;
     */&lt;br /&gt;
    public ApplyToMatrix(Double[] [] matrix) throws ALDOperatorException {&lt;br /&gt;
        this.matrix = matrix;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void operate() throws ALDOperatorException,ALDProcessingDAGException {&lt;br /&gt;
        if ( returnElapsedTime ) &lt;br /&gt;
            elapsedTime = System.currentTimeMillis();&lt;br /&gt;
&lt;br /&gt;
        if ( matrix == null ) &lt;br /&gt;
            summaries = null;&lt;br /&gt;
&lt;br /&gt;
        // calculate summaries&lt;br /&gt;
        if ( summarizeMode == SummarizeMode.ROW ) {&lt;br /&gt;
            summaries = new Double[matrix.length];&lt;br /&gt;
            for ( int row = 0 ; row &amp;lt; matrix.length ; row++ ) {&lt;br /&gt;
                summarizeOp.setData(matrix[row]);&lt;br /&gt;
                summarizeOp.runOp();&lt;br /&gt;
                summaries[row] = summarizeOp.getSummary();&lt;br /&gt;
            }&lt;br /&gt;
        } else {&lt;br /&gt;
            summaries = new Double[matrix[0].length];&lt;br /&gt;
            Double[] tmp = new Double[matrix.length];&lt;br /&gt;
            for ( int col = 0 ; col &amp;lt; matrix[0].length ; col++ ) {&lt;br /&gt;
                for ( int row = 0 ; row &amp;lt; matrix.length ; row++ )&lt;br /&gt;
                    tmp[row] = matrix[row][col];&lt;br /&gt;
&lt;br /&gt;
                summarizeOp.setData(tmp);&lt;br /&gt;
                summarizeOp.runOp();&lt;br /&gt;
                summaries[col] = summarizeOp.getSummary();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        if ( returnElapsedTime ) &lt;br /&gt;
            elapsedTime = System.currentTimeMillis() - elapsedTime;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // ==============================================================&lt;br /&gt;
    // Getter and setter methods&lt;br /&gt;
    /** Get value of returnElapsedTime.&lt;br /&gt;
      * Explanation: Request elapsed time consumed to be returned.&lt;br /&gt;
      * @return value of returnElapsedTime&lt;br /&gt;
      */&lt;br /&gt;
    public boolean getReturnElapsedTime(){&lt;br /&gt;
        return returnElapsedTime;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /** Set value of returnElapsedTime.&lt;br /&gt;
      * Explanation: Request elapsed time consumed to be returned.&lt;br /&gt;
      * @param value New value of returnElapsedTime&lt;br /&gt;
      */&lt;br /&gt;
    public void setReturnElapsedTime( boolean value){&lt;br /&gt;
        this.returnElapsedTime = value;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==   Invocation via a graphical user interface ==&lt;br /&gt;
&lt;br /&gt;
If the graphical interface is still running just select our new operator&lt;br /&gt;
and begin to configure it.&lt;br /&gt;
For the parameter summarizing operator you have a choice of all operators extending&lt;br /&gt;
the abstract operator &amp;lt;code&amp;gt;ALDSummarizeArrayOp&amp;lt;/code&amp;gt;.&lt;br /&gt;
All which is necessary on the implementation side is proper annotation of the extending&lt;br /&gt;
classes with &amp;lt;code&amp;gt;@ALDDerivedClass&amp;lt;/code&amp;gt;.&lt;br /&gt;
As the selected operator may have its own parameters you may want to configure it.&lt;br /&gt;
In our example this is not necessary as the input array is, of course, supplied&lt;br /&gt;
by the &amp;lt;code&amp;gt;ApplyToMatrix&amp;lt;/code&amp;gt; operator.&lt;br /&gt;
Do not forget to input your data before hitting the run button.&lt;br /&gt;
After return, again a result window give you the results of the operation.&lt;br /&gt;
Note, if you did not tick Return elapsed time&amp;quot; this window will show zero&lt;br /&gt;
for the time elapsed as the operator has not been request to stop the time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==   Invocation via command line ==&lt;br /&gt;
&lt;br /&gt;
When invoking the &amp;lt;code&amp;gt;ApplyToMatrix&amp;lt;/code&amp;gt; operator from command line&lt;br /&gt;
we have to handle derived classes as value for parameters.&lt;br /&gt;
In the graphical user interface Alida features a combo box where&lt;br /&gt;
we may choose from.&lt;br /&gt;
In the command line interface Alida allows to prefix the value of a parameter&lt;br /&gt;
with a derived class to be passed to the operator.&lt;br /&gt;
This is necessary as Alida as, of course, no way to itself&lt;br /&gt;
decide if and which derived class is to be used.&lt;br /&gt;
Alida's syntax is to enclose the class name in a dollar sign and a colon.&lt;br /&gt;
As evident in the following example, abbreviations are of the fully&lt;br /&gt;
qualified class name are accepted as long as they are unambiguous.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner Apply \&lt;br /&gt;
	matrix='[[1,2,3],[4,5,6]]' \&lt;br /&gt;
	summarizeMode=ROW \&lt;br /&gt;
	summarizeOp='&amp;lt;math&amp;gt;ALDArrayMean:{}' \&lt;br /&gt;
	summaries=-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
results in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
summaries = [2.0,5.0]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;ALDOpRunner&amp;lt;/code&amp;gt; may be persuaded to show all operators derived from &amp;lt;code&amp;gt;ALDSummarizeArrayOp&amp;lt;/code&amp;gt;&lt;br /&gt;
and known within the user interface if we enter an invalid class name:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner \&lt;br /&gt;
	Apply matrix='[[1,2,3],[4,5,6]]' \&lt;br /&gt;
	summarizeMode=ROW summarizeOp='&amp;lt;/math&amp;gt;dd:{}' \&lt;br /&gt;
	summaries=-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
yields&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ALDStandardizedDataIOCmdline::readData found 0 derived classes matching &amp;lt;dd&amp;gt;&lt;br /&gt;
      derived classes available:&lt;br /&gt;
	de.unihalle.informatik.Alida.demo.ALDArrayMean&lt;br /&gt;
	de.unihalle.informatik.Alida.demo.ALDArrayMin&lt;br /&gt;
	de.unihalle.informatik.Alida.demo.ALDArraySum&lt;br /&gt;
ERROR: reading parameter &amp;lt;summarizeOp&amp;gt; returns null&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Supplemental parameters are handled like other parameters&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner Apply \&lt;br /&gt;
	matrix='[[1,2,3],[4,5,6]]' \&lt;br /&gt;
	summarizeMode=COLUMN \&lt;br /&gt;
	summarizeOp='&amp;lt;math&amp;gt;ALDArrayMin:{}' \&lt;br /&gt;
	summaries=- \&lt;br /&gt;
	returnElapsedTime=true \&lt;br /&gt;
	elapsedTime=-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gives&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	summaries = [1.0,2.0,3.0]&lt;br /&gt;
	elapsedTime = 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=   Adding more data types as parameters =&lt;br /&gt;
&lt;br /&gt;
Alida provides automatic IO of primitive data types, enumerations, arrays, collections,&lt;br /&gt;
and operators.&lt;br /&gt;
In addition so called parameterized classes are supported.&lt;br /&gt;
Any Java class may be declared to be a parameterized class in Alida&lt;br /&gt;
by annotating the class &amp;lt;code&amp;gt;@ALDParametrizedClass&amp;lt;/code&amp;gt; as shown in the&lt;br /&gt;
class &amp;lt;code&amp;gt;ExperimentalData&amp;lt;/code&amp;gt;.&lt;br /&gt;
All member variables to be known to and handled by Alida's user interface&lt;br /&gt;
simply need to be annotated with &amp;lt;code&amp;gt;@ALDClassParameter&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Here we implement a toy version of experimental data &amp;lt;code&amp;gt;ExperimentalData&amp;lt;/code&amp;gt;.&lt;br /&gt;
A complete experiment consists of a number of independent repetitions of&lt;br /&gt;
sub experiments. &lt;br /&gt;
In each of these the same features (measurements) are recorded.&lt;br /&gt;
The measurements a represented in &lt;br /&gt;
a 2D array of Doubles, where each column represents&lt;br /&gt;
one sub experiment and the rows the distinct features.&lt;br /&gt;
The measurements may be normalized which is indicated by the&lt;br /&gt;
normalized member variable.&lt;br /&gt;
&lt;br /&gt;
The class is annotated by &amp;lt;code&amp;gt;@ALDParametrizedClass&amp;lt;/code&amp;gt;, and&lt;br /&gt;
and all members to be handle in Alida'a user interfaces are&lt;br /&gt;
to be annotated with &amp;lt;code&amp;gt;@ALDParametrizedClass&amp;lt;/code&amp;gt;.&lt;br /&gt;
The label field has the same semantics as for parameters of operators.&lt;br /&gt;
These annotations are the only implementational overhead&lt;br /&gt;
to allow Alida to automatically generate user interfaces&lt;br /&gt;
where the parameterized class acts a a parameter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@ALDParametrizedClass&lt;br /&gt;
@ALDMetaInfo(export=ALDMetaInfo.ExportPolicy.MANDATORY)&lt;br /&gt;
public class ExperimentalData {&lt;br /&gt;
    @ALDClassParameter(label=&amp;quot;description&amp;quot;)&lt;br /&gt;
    private String description = null;&lt;br /&gt;
&lt;br /&gt;
    @ALDClassParameter(label=&amp;quot;data&amp;quot;)&lt;br /&gt;
    private Double[][] data = null;&lt;br /&gt;
&lt;br /&gt;
    /** are the data normalized&lt;br /&gt;
      */&lt;br /&gt;
    @ALDClassParameter(label=&amp;quot;Is normalized&amp;quot;)&lt;br /&gt;
    private boolean normalized = false;&lt;br /&gt;
&lt;br /&gt;
    /** Standard constructor is needed&lt;br /&gt;
      */&lt;br /&gt;
    public ExperimentalData() {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /** Constructor for an experiment.&lt;br /&gt;
      * Normalized is assumed to be false.&lt;br /&gt;
      *&lt;br /&gt;
      * @param  description   a textual desciption of the experiment&lt;br /&gt;
      * @param  data   measurements&lt;br /&gt;
      */&lt;br /&gt;
    public ExperimentalData( String description, Double[][] data) {    &lt;br /&gt;
        this( description, data, false);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /** Constructor for an experiment.&lt;br /&gt;
      *&lt;br /&gt;
      * @param  description   a textual desciption of the experiment&lt;br /&gt;
      * @param  data   measurements&lt;br /&gt;
      * @param  normalized   are the data normalized&lt;br /&gt;
      */&lt;br /&gt;
    public ExperimentalData( String description, Double[][] data, boolean normalized) {    &lt;br /&gt;
        this.normalized = normalized;&lt;br /&gt;
        this.description = description;&lt;br /&gt;
        this.setData( data, normalized);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is shown below for a simple normalizing operator &amp;lt;code&amp;gt;NormalizeExperimentalDataOp&amp;lt;/code&amp;gt;&lt;br /&gt;
which takes experimental data as input an returns a new instance&lt;br /&gt;
of &amp;lt;code&amp;gt;ExperimentalData&amp;lt;/code&amp;gt; which contains normalized data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@ALDAOperator(genericExecutionMode=ALDAOperator.ExecutionMode.ALL,&lt;br /&gt;
                level=ALDAOperator.Level.APPLICATION)&lt;br /&gt;
public class NormalizeExperimentalDataOp extends ALDOperator {&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Input data&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Experimental data&amp;quot;, required = true, &lt;br /&gt;
          direction = Parameter.Direction.IN, description = &amp;quot;Experimental data to be normalized&amp;quot;)&lt;br /&gt;
    private ExperimentalData experiment = null;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Normalized experiment to be returned&lt;br /&gt;
     */&lt;br /&gt;
    @Parameter( label= &amp;quot;Normalized experiment&amp;quot;,  &lt;br /&gt;
          direction = Parameter.Direction.OUT, description = &amp;quot;Normalized experiment&amp;quot;)&lt;br /&gt;
    private ExperimentalData result = null;&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Default constructor.&lt;br /&gt;
     * @throws ALDOperatorException&lt;br /&gt;
     */&lt;br /&gt;
    public NormalizeExperimentalDataOp() throws ALDOperatorException {&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    /**&lt;br /&gt;
     * Constructor.&lt;br /&gt;
     * &lt;br /&gt;
     * @param experiment    Experimental data&lt;br /&gt;
     * @throws ALDOperatorException&lt;br /&gt;
     */&lt;br /&gt;
    public NormalizeExperimentalDataOp(ExperimentalData experiment) throws ALDOperatorException {&lt;br /&gt;
        this.experiment = experiment;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    @Override&lt;br /&gt;
    protected void operate()  throws ALDOperatorException,ALDProcessingDAGException {&lt;br /&gt;
        &lt;br /&gt;
        ApplyToMatrix normalizeOp = new ApplyToMatrix( experiment.getData());&lt;br /&gt;
        normalizeOp.setSummarizeMode( ApplyToMatrix.SummarizeMode.ROW);&lt;br /&gt;
        normalizeOp.setSummarizeOp( new ALDArrayMean());&lt;br /&gt;
        normalizeOp.runOp();&lt;br /&gt;
&lt;br /&gt;
        Double[][] normalizedData = (Double[][])(experiment.getData().clone());&lt;br /&gt;
        for ( int e = 0; e &amp;lt; experiment.getNumExperiments(); e++ ) {&lt;br /&gt;
            for ( int f = 0 ; f &amp;lt; experiment.getNumFeatures()  ; f++ ) {&lt;br /&gt;
                normalizedData[f][e] -=  normalizeOp.getSummaries()[f];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        result = new ExperimentalData( experiment.getDescription() + &amp;quot; (Normalized)&amp;quot;, normalizedData, true);&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This mechanism applies in a recursive fashion, i.e. a parameterized class may&lt;br /&gt;
(recursively) contain a member variable which itself is a parametrized class.&lt;br /&gt;
Likewise, an operator acting as a parameter of another operator&lt;br /&gt;
may in turn have a parameter of type &amp;lt;code&amp;gt;ALDOperator&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==   Invocation via a graphical user interface ==&lt;br /&gt;
&lt;br /&gt;
Invoking and configuring &amp;lt;code&amp;gt;NormalizeExperimentalDataOp&amp;lt;/code&amp;gt; from the graphical user interface&lt;br /&gt;
shows as the only required parameter the experimental data.&lt;br /&gt;
This parameterized class can be configured in a separate  window&lt;br /&gt;
very similar to to configuration of operators.&lt;br /&gt;
Likewise the resulting normalized experimental data&lt;br /&gt;
may be inspected in their own window.&lt;br /&gt;
&lt;br /&gt;
Obviously this is a toy example, as we would not expect the measurements to&lt;br /&gt;
be entered manually, but rather stored and read from file in a specialized format.&lt;br /&gt;
This is one of the rare cases where &lt;br /&gt;
custom data IO provider need to be implemented, in this&lt;br /&gt;
case for &amp;lt;code&amp;gt;ExperimentalData&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==   Invocation via command line ==&lt;br /&gt;
&lt;br /&gt;
Again, invocation from command line is provided by Alida in an automatic&lt;br /&gt;
way with no further implementational overhead.&lt;br /&gt;
The syntax for parameterized classes es a comma separated list of name=value pairs&lt;br /&gt;
enclosed in curly brackets where name refers to annotated member variables of&lt;br /&gt;
the parameterized class.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
java de.unihalle.informatik.Alida.tools.ALDOpRunner NormalizeExperimentalDataOp \&lt;br /&gt;
	experiment='{data=[[1,2,3],[2,2,2],[100,103,110]],description=&amp;quot;Demo experiment&amp;quot;}' \&lt;br /&gt;
	result=-&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
yields&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
result = { normalized = true , &lt;br /&gt;
          description = &amp;quot;Demo experiment&amp;quot; (Normalized) , &lt;br /&gt;
          data = [[-1.0,0.0,1.0],[0.0,0.0,0.0],&lt;br /&gt;
                  [-4.333333333333329,-1.3333333333333286,5.666666666666671]] }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a class derived from &amp;lt;code&amp;gt;ExperimentalData&amp;lt;/code&amp;gt; was to be supplied to the operator,&lt;br /&gt;
the curly brackets can be prefixed by a derive class definition starting with a dollar sign&lt;br /&gt;
and ending with a colon as shown for the summarizing operators above.&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>
	</entry>
</feed>