Index: trunk/autoquest-plugin-html/.classpath
===================================================================
--- trunk/autoquest-plugin-html/.classpath	(revision 950)
+++ trunk/autoquest-plugin-html/.classpath	(revision 950)
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
Index: trunk/autoquest-plugin-html/.project
===================================================================
--- trunk/autoquest-plugin-html/.project	(revision 950)
+++ trunk/autoquest-plugin-html/.project	(revision 950)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>autoquest-plugin-html</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
Index: trunk/autoquest-plugin-html/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- trunk/autoquest-plugin-html/.settings/org.eclipse.jdt.core.prefs	(revision 950)
+++ trunk/autoquest-plugin-html/.settings/org.eclipse.jdt.core.prefs	(revision 950)
@@ -0,0 +1,5 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
Index: trunk/autoquest-plugin-html/.settings/org.eclipse.m2e.core.prefs
===================================================================
--- trunk/autoquest-plugin-html/.settings/org.eclipse.m2e.core.prefs	(revision 950)
+++ trunk/autoquest-plugin-html/.settings/org.eclipse.m2e.core.prefs	(revision 950)
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
Index: trunk/autoquest-plugin-html/data/guimappings/guimapping-html.txt
===================================================================
--- trunk/autoquest-plugin-html/data/guimappings/guimapping-html.txt	(revision 950)
+++ trunk/autoquest-plugin-html/data/guimappings/guimapping-html.txt	(revision 950)
@@ -0,0 +1,2 @@
+html = de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLPanel
+body = de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLPanel
Index: trunk/autoquest-plugin-html/data/robots/robotfilter.txt
===================================================================
--- trunk/autoquest-plugin-html/data/robots/robotfilter.txt	(revision 950)
+++ trunk/autoquest-plugin-html/data/robots/robotfilter.txt	(revision 950)
@@ -0,0 +1,66 @@
+findlinks
+discobot
+Googlebot
+Slurp
+YandexBot
+Spider
+ScholarUniverse
+Baiduspider
+Exabot
+Robot
+MetaGer-Bot
+YandexImages
+Gigabot
+SiteBot
+bingbot
+Ezooms
+Jeeves/Teoma
+msnbot
+DotBot
+changedetection.com/bot.html
+FAST Enterprise Crawler 6
+psbot
+http://ws.daum.net/aboutWebSearch.html
+NerdByNature.Bot
+Sogou web spider
+ssearch_bot
+Purebot
+http://www.icjobs.de
+scoutjet
+Netcraft Web Server Survey
+TurnitinBot
+ia_archiver
+MJ12bot
+Domnutch-Bot
+Eurobot
+GarlikCrawler
+CMS Crawler
+MSIECrawler
+NaverBot
+80legs
+AhrefsBot
+SISTRIX Crawler
+NetcraftSurveyAgent
+Search17Bot
+Semager
+YandexFavicons
+heritrix
+suggybot
+Netluchs
+Ocelli
+PHPCrawl
+SolomonoBot
+Sosospider
+Xerka WebBot
+YahooCacheSystem
+Xenu Link Sleuth
+cmsworldmap
+suchen.de
+amaredo.com/de/suche.html
+ibot
+w3af.sourceforge.net
+w3af.sf.net
+yacybot
+larbin2
+t-h-u-n-d-e-r-s-t-o-n-e
+sqlmap
Index: trunk/autoquest-plugin-html/pom.xml
===================================================================
--- trunk/autoquest-plugin-html/pom.xml	(revision 950)
+++ trunk/autoquest-plugin-html/pom.xml	(revision 950)
@@ -0,0 +1,62 @@
+<project
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+>
+    <parent>
+        <groupId>de.ugoe.cs.autoquest</groupId>
+        <artifactId>autoquest</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>autoquest-plugin-html</artifactId>
+    <name>autoquest-plugin-html</name>
+    <licenses>
+        <license>
+            <name>The Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+        </license>
+    </licenses>
+    <scm>
+        <url>${autoquest-scm-trunk-dir}/autoquest-plugin-html</url>
+    </scm>
+    <dependencies>
+        <dependency>
+            <groupId>de.ugoe.cs</groupId>
+            <artifactId>java-utils</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>de.ugoe.cs.autoquest</groupId>
+            <artifactId>autoquest-plugin-core</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>de.ugoe.cs.autoquest</groupId>
+            <artifactId>autoquest-core-events</artifactId>
+            <version>${project.parent.version}</version>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <artifactId>maven-assembly-plugin</artifactId>
+                <version>2.2-beta-2</version>
+                <configuration>
+                    <descriptors>
+                        <descriptor>src/main/assembly/config.xml</descriptor>
+                    </descriptors>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>make-assembly</id>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>single</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
Index: trunk/autoquest-plugin-html/src/main/assembly/config.xml
===================================================================
--- trunk/autoquest-plugin-html/src/main/assembly/config.xml	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/assembly/config.xml	(revision 950)
@@ -0,0 +1,19 @@
+<assembly
+    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
+  <id>config</id>
+  <formats>
+    <format>zip</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>data</directory>
+      <outputDirectory></outputDirectory>
+      <includes>
+        <include>**/*</include>
+      </includes>
+    </fileSet>
+  </fileSets>
+</assembly>
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLLogParser.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLLogParser.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLLogParser.java	(revision 950)
@@ -0,0 +1,431 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.gui.IInteraction;
+import de.ugoe.cs.autoquest.eventcore.gui.KeyboardFocusChange;
+import de.ugoe.cs.autoquest.eventcore.gui.MouseButtonInteraction;
+import de.ugoe.cs.autoquest.eventcore.gui.MouseClick;
+import de.ugoe.cs.autoquest.eventcore.gui.Scroll;
+import de.ugoe.cs.autoquest.eventcore.gui.TextInput;
+import de.ugoe.cs.autoquest.eventcore.guimodel.GUIElementFactory;
+import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModelException;
+import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
+import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElementSpec;
+import de.ugoe.cs.autoquest.eventcore.guimodel.ITextArea;
+import de.ugoe.cs.autoquest.eventcore.guimodel.ITextField;
+import de.ugoe.cs.autoquest.plugin.html.eventcore.HTMLEvent;
+import de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLGUIElementSpec;
+import de.ugoe.cs.util.FileTools;
+import de.ugoe.cs.util.console.Console;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLLogParser {
+
+    /**
+     * <p>
+     * Name and path of the robot filter.
+     * </p>
+     */
+    private static final String ROBOTFILTERFILE = "data/robots/robotfilter.txt";
+
+    /**
+     * <p>
+     * Field that contains a regular expression that matches all robots
+     * contained in {@link #ROBOTFILTERFILE}.
+     * </p>
+     */
+    private String robotRegex = null;
+
+    /**
+     * 
+     */
+    private Pattern htmlElementPattern = Pattern.compile("(\\w+)(\\[(\\d+)\\]|\\(id=([\\w-]+)\\))");
+
+    /**
+     * 
+     */
+    private List<List<Event>> sequences;
+    
+    /**
+     * 
+     */
+    private GUIModel guiModel;
+    
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     * 
+     * @param source
+     */
+    public void parseFile(String source) throws IllegalArgumentException {
+        if (source == null) {
+            throw new IllegalArgumentException("source must not be null");
+        }
+
+        parseFile(new File(source));
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     * 
+     * @param source
+     */
+    public void parseFile(File source) throws IllegalArgumentException {
+        if (source == null) {
+            throw new IllegalArgumentException("source must not be null");
+        }
+        else if (!source.exists()) {
+            throw new IllegalArgumentException("source file does not exist");
+        }
+        else if (!source.isFile()) {
+            throw new IllegalArgumentException("source is not a file");
+        }
+
+        guiModel = new GUIModel();
+        
+        BufferedReader reader = null;
+        
+        try {
+            reader =
+                new BufferedReader(new InputStreamReader(new FileInputStream(source), "UTF-8"));
+        
+            loadRobotRegex();
+
+            List<Event> sequence = new ArrayList<Event>();
+
+            int lineCounter = 0;
+            String line = reader.readLine();
+            while ((line != null) && (!"".equals(line))) {
+                lineCounter++;
+                String[] values = line.substring(1, line.length() - 1).split("\" \"");
+
+                String clientId = values[0];
+                long timestamp = Long.parseLong(values[1]);
+                String title = values[2];
+                String uriString = values[3];
+                String agent = values[4];
+                String eventName = values[5];
+                String htmlElementPath = values[6];
+
+                List<String> eventParameters = null;
+                if (values.length > 7) {
+                    eventParameters = new ArrayList<String>();
+
+                    for (int i = 7; i < values.length; i++) {
+                        eventParameters.add(values[i]);
+                    }
+                }
+                
+                if (isRobot(agent)) {
+                    // do not handle sessions of robots
+                    Console.println("ignoring robot session: " + agent);
+                    break;
+                }
+                
+                
+                try {
+                    URL url = new URL(uriString);
+                    IGUIElement guiElement = getGUIElement(url, title, htmlElementPath);
+                    IInteraction interaction =
+                        getInteraction(eventName, guiElement, eventParameters);
+                    
+                    if (interaction != null) {
+                        Event event =
+                            createEvent(clientId, interaction, guiElement, timestamp, agent);
+                        sequence.add(event);
+                    }
+                }
+                catch (MalformedURLException e) {
+                    Console.traceln(Level.FINE, "Ignored line " + lineCounter + ": " +
+                                    e.getMessage());
+                }
+                
+                line = reader.readLine();
+            }
+            
+            Console.traceln(Level.INFO, "read user sequence with " + sequence.size() +
+                            " events from " + source);
+            
+            sequences = new ArrayList<List<Event>>();
+            sequences.add(sequence);
+        }
+        catch (Exception e) {
+            Console.printerrln("could not parse file " + source + ": " + e);
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     * 
+     * @return
+     */
+    public Collection<List<Event>> getSequences() {
+        return sequences;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     * 
+     * @return
+     */
+    public GUIModel getGuiModel() {
+        return guiModel;
+    }
+
+    /**
+     * <p>
+     * Reads {@link #ROBOTFILTERFILE} and creates a regular expression that
+     * matches all the robots defined in the file. The regular expression is
+     * stored in the field {@link #robotRegex}.
+     * </p>
+     * 
+     * @throws IOException
+     *             thrown if there is a problem reading the robot filter
+     * @throws FileNotFoundException
+     *             thrown if the robot filter is not found
+     */
+    private void loadRobotRegex() throws IOException, FileNotFoundException {
+        String[] lines = FileTools.getLinesFromFile(ROBOTFILTERFILE);
+        StringBuilder regex = new StringBuilder();
+        for (int i = 0; i < lines.length; i++) {
+            regex.append("(.*" + lines[i] + ".*)");
+            if (i != lines.length - 1) {
+                regex.append('|');
+            }
+        }
+        robotRegex = regex.toString();
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param htmlElementPath
+     * @return
+     * @throws GUIModelException 
+     * @throws  
+     */
+    private IGUIElement getGUIElement(URL url, String title, String htmlElementPath)
+        throws GUIModelException
+    {
+        String[] pathElements = htmlElementPath.split("/");
+        List<IGUIElementSpec> guiElementPath = new ArrayList<IGUIElementSpec>();
+        
+        for (String pathElement : pathElements) {
+            if ((pathElement != null) && (!"".equals(pathElement))) {            
+                Matcher matcher = htmlElementPattern.matcher(pathElement);
+                if (!matcher.matches()) {
+                    throw new IllegalArgumentException("could not parse HTML element " + pathElement);
+                }
+
+                String type = matcher.group(1);
+                String indexStr = matcher.group(3);
+                String id = matcher.group(4);
+
+                int index = -1;
+
+                if ((indexStr != null) && (!"".equals(indexStr))) {
+                    index = Integer.parseInt(indexStr);
+                }
+
+                guiElementPath.add(new HTMLGUIElementSpec(url, title, type, id, index));
+            }
+        }
+        
+        return guiModel.integratePath(guiElementPath, GUIElementFactory.getInstance());
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param eventName
+     * @param guiElement 
+     * @param eventParameters
+     * @return
+     */
+    private IInteraction getInteraction(String       eventName,
+                                        IGUIElement  guiElement,
+                                        List<String> eventParameters)
+    {
+        IInteraction result = null;
+        
+        if ("onclick".equals(eventName)) {
+            int[] coordinates =
+                getCoordinateParameter(eventName, eventParameters, 0, "click coordinates");
+            result = new MouseClick
+                (MouseButtonInteraction.Button.LEFT, coordinates[0], coordinates[1]);
+        }
+        else if ("onfocus".equals(eventName)) {
+            result = new KeyboardFocusChange();
+        }
+        else if ("onscroll".equals(eventName)) {
+            int[] coordinates =
+                getCoordinateParameter(eventName, eventParameters, 0, "click coordinates");
+            result = new Scroll(coordinates[0], coordinates[1]);
+        }
+        else if ("onchange".equals(eventName)) {
+            String value = getStringParameter(eventName, eventParameters, 0, "selected value");
+            
+            if ((guiElement instanceof ITextArea) || (guiElement instanceof ITextField)) {
+                result = new TextInput(value, null);
+            }
+            else {
+                throw new IllegalArgumentException("can not handle onchange events on GUI " +
+                                                   "elements of type " + guiElement.getClass()); 
+            }
+        }
+        else if ("onunload".equals(eventName) || "onbeforeunload".equals(eventName) ||
+                 "onpagehide".equals(eventName))
+        {
+            Console.traceln(Level.FINE, "Ignored event name \"onunload\"");
+        }
+        else {
+            throw new IllegalArgumentException("unknown event name: \"" + eventName + "\""); 
+        }
+        
+        return result;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param clientId
+     * @param interaction
+     * @param guiElement
+     * @param timestamp
+     * @param agent
+     * @return
+     */
+    private Event createEvent(String       clientId,
+                              IInteraction interaction,
+                              IGUIElement  guiElement,
+                              long         timestamp,
+                              String       agent)
+    {
+        return new HTMLEvent(clientId, interaction, guiElement, timestamp, agent);
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param eventName
+     * @param eventParameters
+     * @param i
+     * @param string
+     * @return
+     */
+    private String getStringParameter(String       eventName,
+                                      List<String> eventParameters,
+                                      int          parameterIndex,
+                                      String       parameterDesc)
+        throws IllegalArgumentException
+    {
+        String value =
+            eventParameters.size() > parameterIndex ? eventParameters.get(parameterIndex) : null;
+        
+        if (value == null) {
+            throw new IllegalArgumentException
+                (eventName + " event does not provide the " + parameterDesc);
+        }
+        
+        return value;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param eventName
+     * @param eventParameters
+     * @return
+     */
+    private int[] getCoordinateParameter(String       eventName,
+                                         List<String> eventParameters,
+                                         int          parameterIndex,
+                                         String       parameterDesc)
+    {
+        String value =
+            getStringParameter(eventName, eventParameters, parameterIndex, parameterDesc);
+        
+        String[] intStrs = value.split(",");
+        
+        if ((intStrs == null) || (intStrs.length != 2)) {
+            throw new IllegalArgumentException("the " + parameterDesc + " of an " + eventName +
+                                               " event does not provide two correct coordinates");
+        }
+        
+        try {
+            return new int[] { Integer.parseInt(intStrs[0]), Integer.parseInt(intStrs[1]) };
+        }
+        catch (NumberFormatException e) {
+            throw new IllegalArgumentException("the coordinates provided as " + parameterDesc +
+                                               " of an " + eventName + " event are no numbers");
+        }
+    }
+
+    /**
+     * <p>
+     * Checks whether an agent is a robot.
+     * </p>
+     * 
+     * @param agent
+     *            agent that is checked
+     * @return true, if the agent is a robot; false otherwise
+     */
+    private boolean isRobot(String agent) {
+        return agent.matches(robotRegex);
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLPlugin.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLPlugin.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/HTMLPlugin.java	(revision 950)
@@ -0,0 +1,60 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import de.ugoe.cs.autoquest.plugin.AutoQUESTPlugin;
+
+/**
+ * <p>
+ * Identifier class for the AutoQUEST HTML plug-in.
+ * </p>
+ * 
+ * @author Patrick Harms
+ * @version 1.0
+ */
+public class HTMLPlugin implements AutoQUESTPlugin {
+
+    /**
+     * <p>
+     * The command packages of this plug-in.
+     * </p>
+     */
+    private final static String[] commandPackages = new String[]
+        { "de.ugoe.cs.autoquest.plugin.html.commands" };
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.plugin.AutoQUESTPlugin#getTitle()
+     */
+    @Override
+    public String getTitle() {
+        return "HTML-Plugin";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.plugin.AutoQUESTPlugin#getCommandPackages()
+     */
+    @Override
+    public List<String> getCommandPackages() {
+        return Collections.unmodifiableList(Arrays.asList(commandPackages));
+    }
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDparseDirHTML.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDparseDirHTML.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDparseDirHTML.java	(revision 950)
@@ -0,0 +1,101 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.commands;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+
+import de.ugoe.cs.autoquest.CommandHelpers;
+import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.plugin.html.HTMLLogParser;
+import de.ugoe.cs.util.console.Command;
+import de.ugoe.cs.util.console.Console;
+import de.ugoe.cs.util.console.GlobalDataContainer;
+
+/**
+ * <p>
+ * Command that tries to parse all files in a folder as if they were log files generated by the
+ * HTMLMonitor. The result is one set of sequences for all files (not one set of sequences for each
+ * file!).
+ * </p>
+ * 
+ * @author Patrick Harms
+ * @version 1.0
+ */
+public class CMDparseDirHTML implements Command {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.util.console.Command#run(java.util.List)
+     */
+    @Override
+    public void run(List<Object> parameters) {
+        String path;
+        String sequencesName = "sequences";
+
+        try {
+            path = (String) parameters.get(0);
+            if (parameters.size() >= 2) {
+                sequencesName = (String) parameters.get(1);
+            }
+        }
+        catch (Exception e) {
+            throw new IllegalArgumentException();
+        }
+
+        File folder = new File(path);
+        if (!folder.isDirectory()) {
+            Console.printerrln(path + " is not a directory");
+            return;
+        }
+
+        HTMLLogParser parser = new HTMLLogParser();
+
+        String absolutPath = folder.getAbsolutePath();
+        for (String filename : folder.list()) {
+            String source = absolutPath + "/" + filename;
+            Console.traceln(Level.INFO, "Processing file: " + source);
+
+            parser.parseFile(source);
+        }
+
+        Collection<List<Event>> sequences = parser.getSequences();
+
+        GUIModel targets = parser.getGuiModel();
+
+        if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) {
+            CommandHelpers.dataOverwritten(sequencesName);
+        }
+
+        if (GlobalDataContainer.getInstance().addData(sequencesName + "_targets", targets)) {
+            CommandHelpers.dataOverwritten(sequencesName + "_targets");
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.util.console.Command#help()
+     */
+    @Override
+    public String help() {
+        return "parseDirHTML <directory> {<sequencesName>}";
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDparseHTML.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDparseHTML.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/commands/CMDparseHTML.java	(revision 950)
@@ -0,0 +1,83 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.commands;
+
+import java.util.Collection;
+import java.util.List;
+
+import de.ugoe.cs.autoquest.CommandHelpers;
+import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
+import de.ugoe.cs.autoquest.plugin.html.HTMLLogParser;
+import de.ugoe.cs.util.console.Command;
+import de.ugoe.cs.util.console.GlobalDataContainer;
+
+/**
+ * <p>
+ * Command to parse a file with sessions monitored by AutoQUESTs HTML monitor.
+ * </p>
+ * 
+ * @author Patrick Harms
+ * @version 1.0
+ */
+public class CMDparseHTML implements Command {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.util.console.Command#run(java.util.List)
+     */
+    @Override
+    public void run(List<Object> parameters) {
+        String filename;
+        String sequencesName = "sequences";
+
+        try {
+            filename = (String) parameters.get(0);
+            if (parameters.size() >= 2) {
+                sequencesName = (String) parameters.get(1);
+            }
+        }
+        catch (Exception e) {
+            throw new IllegalArgumentException();
+        }
+
+        HTMLLogParser parser = new HTMLLogParser();
+
+        parser.parseFile(filename);
+        Collection<List<Event>> sequences = parser.getSequences();
+
+        GUIModel targets = parser.getGuiModel();
+
+        if (GlobalDataContainer.getInstance().addData(sequencesName, sequences)) {
+            CommandHelpers.dataOverwritten(sequencesName);
+        }
+
+        if (GlobalDataContainer.getInstance().addData(sequencesName + "_targets", targets)) {
+            CommandHelpers.dataOverwritten(sequencesName + "_targets");
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.util.console.Command#help()
+     */
+    @Override
+    public String help() {
+        return "parseHTML <filename> {<sequencesName>}";
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/eventcore/HTMLEvent.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/eventcore/HTMLEvent.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/eventcore/HTMLEvent.java	(revision 950)
@@ -0,0 +1,93 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.eventcore;
+
+import de.ugoe.cs.autoquest.eventcore.Event;
+import de.ugoe.cs.autoquest.eventcore.gui.IInteraction;
+import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLEvent extends Event {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 
+     */
+    private String clientId;
+
+    /**
+     * 
+     */
+    private long timestamp;
+
+    /**
+     * 
+     */
+    private String agent;
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param clientId
+     * @param interaction
+     * @param guiElement
+     * @param timestamp
+     * @param agent
+     */
+    public HTMLEvent(String       clientId,
+                     IInteraction interaction,
+                     IGUIElement  guiElement,
+                     long         timestamp,
+                     String       agent)
+    {
+        super(interaction, guiElement);
+        
+        this.clientId = clientId;
+        this.timestamp = timestamp;
+        this.agent = agent;
+    }
+
+    /**
+     * @return the clientId
+     */
+    public String getClientId() {
+        return clientId;
+    }
+
+    /**
+     * @return the timestamp
+     */
+    public long getTimestamp() {
+        return timestamp;
+    }
+
+    /**
+     * @return the agent
+     */
+    public String getAgent() {
+        return agent;
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLButton.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLButton.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLButton.java	(revision 950)
@@ -0,0 +1,53 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.guimodel;
+
+import de.ugoe.cs.autoquest.eventcore.guimodel.IButton;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLButton extends HTMLGUIElement implements IButton {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param specification
+     * @param parent
+     */
+    public HTMLButton(HTMLGUIElementSpec specification, HTMLGUIElement parent) {
+        super(specification, parent);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLGUIElement#getElementDescriptor()
+     */
+    @Override
+    protected String getElementDescriptor() {
+        return "Button";
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLGUIElement.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLGUIElement.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLGUIElement.java	(revision 950)
@@ -0,0 +1,186 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.guimodel;
+
+import java.net.URL;
+
+import de.ugoe.cs.autoquest.eventcore.guimodel.AbstractDefaultGUIElement;
+import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElementSpec;
+
+/**
+ * <p>
+ * Base class for all HTML GUI elements.
+ * </p>
+ * 
+ * @version 1.0
+ * @author Patrick Harms
+ */
+public class HTMLGUIElement extends AbstractDefaultGUIElement {
+
+    /**
+     * <p>
+     * Id for object serialization.
+     * </p>
+     */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p>
+     * Specification of the GUI Element
+     * </p>
+     */
+    private HTMLGUIElementSpec specification;
+
+    /**
+     * <p>
+     * Constructor. Creates a new HTMLGUIElement.
+     * </p>
+     * 
+     * @param specification
+     *            specification of created GUI element
+     * @param parent
+     *            parent of the created GUI element; null means that the element is a top-level
+     *            window
+     */
+    public HTMLGUIElement(HTMLGUIElementSpec specification, HTMLGUIElement parent) {
+        super(specification, parent);
+        this.specification = specification;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.eventcore.IEventTarget#getPlatform()
+     */
+    @Override
+    public String getPlatform() {
+        return "HTML";
+    }
+
+    /**
+     * <p>
+     * Returns web page to which this GUI element belongs
+     * </p>
+     * 
+     * @return the page URL
+     */
+    URL getPageURL() {
+        return specification.getPageURL();
+    }
+
+    /**
+     * <p>
+     * Returns the title of the page to which the GUI element belongs
+     * </p>
+     * 
+     * @return the title
+     */
+    String getPageTitle() {
+        return specification.getPageTitle();
+    }
+
+    /**
+     * <p>
+     * Returns the type of the GUI element, i.e., the name of its tag in HTML
+     * </p>
+     * 
+     * @return the tag in HTML
+     */
+    String getTagName() {
+        return specification.getType();
+    }
+
+    /**
+     * <p>
+     * Returns the id of the tag in HTML
+     * </p>
+     * 
+     * @return the id of the HTML tag
+     */
+    String getTagId() {
+        return specification.getTagId();
+    }
+
+    /**
+     * <p>
+     * Returns the child index of the tag referring to all tags with the same type within the same
+     * parent tag 
+     * </p>
+     * 
+     * @return the index
+     */
+    int getIndex() {
+        return specification.getIndex();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement#updateSpecification(de.ugoe.cs.autoquest.eventcore
+     * .guimodel.IGUIElementSpec)
+     */
+    @Override
+    public void updateSpecification(IGUIElementSpec updateSpecification) {
+        if (updateSpecification instanceof HTMLGUIElementSpec) {
+            specification.update(((HTMLGUIElementSpec) updateSpecification));
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String getStringIdentifier() {
+        String str = this.toString();
+        if (getParent() != null) {
+            return getParent().getStringIdentifier() + "->" + str;
+        }
+        return str;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        String str = getElementDescriptor() + "(" + getTagName();
+        if (getTagId() != null) {
+            str += "(id=" + getTagId() + ")";
+        }
+        else {
+            str += "[" + getIndex() + "]";
+        }
+        
+        str += ")";
+        return str;
+    }
+
+    /**
+     * <p>
+     * A short string describing the GUI element, e.g., Button, Canvas, or ScrollBar.
+     * </p>
+     * 
+     * @return short element descriptor
+     */
+    protected String getElementDescriptor() {
+        return "Default";
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLGUIElementSpec.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLGUIElementSpec.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLGUIElementSpec.java	(revision 950)
@@ -0,0 +1,164 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.guimodel;
+
+import java.net.URL;
+
+import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElementSpec;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLGUIElementSpec implements IGUIElementSpec {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+    
+    /** */
+    private URL pageURL;
+    
+    /** */
+    private String pageTitle;
+    
+    /** */
+    private String type;
+    
+    /** */
+    private String id;
+    
+    /** */
+    private int index;
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param type
+     * @param index
+     * @param id
+     */
+    public HTMLGUIElementSpec(URL pageURL, String pageTitle, String type, String id, int index) {
+        if (pageURL == null) {
+            throw new IllegalArgumentException("page URL must not be null");
+        }
+        else if (type == null) {
+            throw new IllegalArgumentException("type must not be null");
+        }
+        else if ((id == null) && (index < 0)) {
+            throw new IllegalArgumentException
+              ("either id must not be null or the index must be greater or equal to 0");
+        }
+        
+        this.pageURL = pageURL;
+        this.pageTitle = pageTitle;
+        this.type = type;
+        this.id = id;
+        this.index = index;
+    }
+
+    /* (non-Javadoc)
+     * @see de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElementSpec#getType()
+     */
+    @Override
+    public String getType() {
+        return type;
+    }
+
+    /* (non-Javadoc)
+     * @see de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElementSpec#getSimilarity(IGUIElementSpec)
+     */
+    @Override
+    public boolean getSimilarity(IGUIElementSpec other) {
+        if (other instanceof HTMLGUIElementSpec) {
+            HTMLGUIElementSpec otherSpec = (HTMLGUIElementSpec) other;
+            
+            if (!type.equals(otherSpec.type)) {
+                return false;
+            }
+            
+            if (id != null) {
+                return id.equals(otherSpec.id);
+            }
+            else if (index >= 0) {
+                return index == otherSpec.index;
+            }
+        }
+        
+        return false;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @return
+     */
+    URL getPageURL() {
+        return pageURL;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @return
+     */
+    String getPageTitle() {
+        return pageTitle;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @return
+     */
+    String getTagId() {
+        return id;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @return
+     */
+    int getIndex() {
+        return index;
+    }
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param htmlguiElementSpec
+     */
+    void update(HTMLGUIElementSpec htmlguiElementSpec) {
+        // TODO Auto-generated method stub
+        System.out.println("TODO: implement HTMLGUIElementSpec.update ");
+        
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLLink.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLLink.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLLink.java	(revision 950)
@@ -0,0 +1,53 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.guimodel;
+
+import de.ugoe.cs.autoquest.eventcore.guimodel.IButton;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLLink extends HTMLGUIElement implements IButton {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param specification
+     * @param parent
+     */
+    public HTMLLink(HTMLGUIElementSpec specification, HTMLGUIElement parent) {
+        super(specification, parent);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLGUIElement#getElementDescriptor()
+     */
+    @Override
+    protected String getElementDescriptor() {
+        return "Link";
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLPanel.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLPanel.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLPanel.java	(revision 950)
@@ -0,0 +1,53 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.guimodel;
+
+import de.ugoe.cs.autoquest.eventcore.guimodel.IPanel;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLPanel extends HTMLGUIElement implements IPanel {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param specification
+     * @param parent
+     */
+    public HTMLPanel(HTMLGUIElementSpec specification, HTMLGUIElement parent) {
+        super(specification, parent);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLGUIElement#getElementDescriptor()
+     */
+    @Override
+    protected String getElementDescriptor() {
+        return "Panel";
+    }
+
+}
Index: trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLTextArea.java
===================================================================
--- trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLTextArea.java	(revision 950)
+++ trunk/autoquest-plugin-html/src/main/java/de/ugoe/cs/autoquest/plugin/html/guimodel/HTMLTextArea.java	(revision 950)
@@ -0,0 +1,53 @@
+//   Copyright 2012 Georg-August-Universität Göttingen, Germany
+//
+//   Licensed under the Apache License, Version 2.0 (the "License");
+//   you may not use this file except in compliance with the License.
+//   You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//   Unless required by applicable law or agreed to in writing, software
+//   distributed under the License is distributed on an "AS IS" BASIS,
+//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//   See the License for the specific language governing permissions and
+//   limitations under the License.
+
+package de.ugoe.cs.autoquest.plugin.html.guimodel;
+
+import de.ugoe.cs.autoquest.eventcore.guimodel.ITextArea;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @author Patrick Harms
+ */
+public class HTMLTextArea extends HTMLGUIElement implements ITextArea {
+
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     * @param specification
+     * @param parent
+     */
+    public HTMLTextArea(HTMLGUIElementSpec specification, HTMLGUIElement parent) {
+        super(specification, parent);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.autoquest.plugin.html.guimodel.HTMLGUIElement#getElementDescriptor()
+     */
+    @Override
+    protected String getElementDescriptor() {
+        return "TextArea";
+    }
+
+}
