Index: trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorTest.java
===================================================================
--- trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorTest.java	(revision 1090)
+++ trunk/autoquest-htmlmonitor-test/src/test/java/de/ugoe/cs/autoquest/htmlmonitor/HtmlMonitorTest.java	(revision 1229)
@@ -146,6 +146,6 @@
         htmlMonitor = null;
 
-        File logFile = new File(LOG_FILE_DIR + File.separator + clientId + File.separator +
-                                "htmlmonitor_" + clientId + "_000.log");
+        File logFile = new File(LOG_FILE_DIR + File.separator + "host" + File.separator +
+                                clientId + File.separator + "htmlmonitor_" + clientId + "_000.log");
         
         assertTrue(logFile.exists());
@@ -362,6 +362,6 @@
         htmlMonitor = null;
 
-        File logFile = new File(LOG_FILE_DIR + File.separator + clientId + File.separator +
-                                "htmlmonitor_" + clientId + "_000.log");
+        File logFile = new File(LOG_FILE_DIR + File.separator + "host" + File.separator +
+                                clientId + File.separator + "htmlmonitor_" + clientId + "_000.log");
         
         assertTrue(logFile.exists());
@@ -527,6 +527,7 @@
         // assert 9 already rotated log files
         for (int i = 0; i < numberOfSessions; i++) {
-            File logFile = new File(LOG_FILE_DIR + File.separator + clientId + File.separator +
-                                    "htmlmonitor_" + clientId + "_00" + i + ".log");
+            File logFile = new File(LOG_FILE_DIR + File.separator + "host" + File.separator +
+                                    clientId + File.separator + "htmlmonitor_" + clientId + "_00" +
+                                    i + ".log");
        
             assertTrue(logFile.exists());
@@ -603,4 +604,163 @@
             assertEvent(sequence.get(0), 12345, MouseClick.class, node, 194, 7);
         }
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testRevertOfOldFiles() throws Exception {
+        String clientId = "123";
+        
+        String message =
+            "{" +
+            "  \"message\": {" +
+            "    \"clientInfos\": {" +
+            "      \"clientId\":\"" + clientId + "\"," +
+            "      \"userAgent\":\"Agent\"," +
+            "      \"title\":\"Title\"," +
+            "      \"url\":\"http://host/path\"" +
+            "    }," +
+            "    \"guiModel\": {" +
+            "      \"tagName\":\"html\"," +
+            "      \"index\":\"0\"," +
+            "      \"children\":" +
+            "      [ {" +
+            "          \"tagName\":\"head\"," +
+            "          \"index\":\"0\"," +
+            "        }," +
+            "        {" +
+            "          \"tagName\":\"body\"," +
+            "          \"htmlId\":\"gsr\"," +
+            "        }" +
+            "      ]" +
+            "    }," +
+            "    \"events\":" +
+            "    [ {" +
+            "        \"time\":\"12345\"," +
+            "        \"path\":\"/html[0]/body(htmlId=gsr)\"," +
+            "        \"eventType\":\"onclick\"" +
+            "        \"coordinates\": [\"194\", \"7\"]" +
+            "      }" +
+            "    ]" +
+            "  }" +
+            "}";
+
+        sendMessageAndAssertResponse(message);
+        
+        htmlMonitor.stop();
+        htmlMonitor = null;
+
+        File logFile1 = new File(LOG_FILE_DIR + File.separator + "host" + File.separator +
+                                 clientId + File.separator + "htmlmonitor_" + clientId + "_000.log");
+        
+        assertTrue(logFile1.exists());
+        
+        // Move file to a the directory in which it would resist in the old structure and then
+        // restart the server, resend the message and ensure two separate log files in the new
+        // structure
+        File oldLogFile = new File(LOG_FILE_DIR + File.separator + clientId + File.separator +
+                                   "htmlmonitor_" + clientId + "_000.log");
+        
+        assertTrue(oldLogFile.getParentFile().mkdirs());
+        assertTrue(logFile1.renameTo(oldLogFile));
+
+        htmlMonitor = new HtmlMonitor(new String[] { LOG_FILE_DIR, Integer.toString(PORT) });
+        htmlMonitor.init();
+        htmlMonitor.start();
+
+        sendMessageAndAssertResponse(message);
+        
+        htmlMonitor.stop();
+        htmlMonitor = null;
+
+        assertTrue(logFile1.exists());
+
+        File logFile2 = new File(LOG_FILE_DIR + File.separator + "host" + File.separator +
+                                 clientId + File.separator + "htmlmonitor_" + clientId + "_001.log");
+         
+        assertTrue(logFile2.exists());
+         
+        HTMLLogParser parser = new HTMLLogParser();
+        
+        parser.parseFile(logFile1);
+        parser.parseFile(logFile2);
+        
+        // check the GUI model
+        GUIModel guiModel = parser.getGuiModel();
+        assertNotNull(guiModel);
+        
+        List<IGUIElement> nodes = guiModel.getRootElements();
+        assertNotNull(nodes);
+        assertEquals(1, nodes.size());
+        
+        // get server node
+        IGUIElement node = nodes.get(0);
+        assertNotNull(node);
+        assertTrue(node instanceof HTMLServer);
+        assertEquals("HTML", node.getPlatform());
+        assertFalse(node.isUsed());
+        
+        nodes = guiModel.getChildren(node);
+        assertNotNull(nodes);
+        assertEquals(1, nodes.size());
+        
+        // get document node
+        node = nodes.get(0);
+        assertNotNull(node);
+        assertTrue(node instanceof HTMLDocument);
+        assertEquals("HTML", node.getPlatform());
+        assertFalse(node.isUsed());
+        
+        nodes = guiModel.getChildren(node);
+        assertNotNull(nodes);
+        assertEquals(1, nodes.size());
+        
+        // get html node
+        node = nodes.get(0);
+        assertNotNull(node);
+        assertTrue(node instanceof HTMLPageElement);
+        assertEquals("HTML", node.getPlatform());
+        assertFalse(node.isUsed());
+        
+        nodes = guiModel.getChildren(node);
+        assertNotNull(nodes);
+        assertEquals(1, nodes.size()); // only one child as the head tag should have been ignored
+        
+        // get body node
+        node = nodes.get(0);
+        assertNotNull(node);
+        assertTrue(node instanceof HTMLPageElement);
+        assertEquals("HTML", node.getPlatform());
+        assertTrue(node.isUsed());
+
+        nodes = guiModel.getChildren(node);
+        assertNotNull(nodes);
+        assertEquals(0, nodes.size());
+        
+        // check the sequences
+        Collection<List<Event>> sequences = parser.getSequences();
+        
+        assertNotNull(sequences);
+        
+        Iterator<List<Event>> iterator = sequences.iterator();
+        assertTrue(iterator.hasNext());
+        
+        List<Event> sequence = iterator.next();
+        
+        assertNotNull(sequence);
+        assertEquals(1, sequence.size());
+        
+        assertEvent(sequence.get(0), 12345, MouseClick.class, node, 194, 7);
+
+        assertTrue(iterator.hasNext());
+        
+        sequence = iterator.next();
+        assertFalse(iterator.hasNext());
+        
+        assertNotNull(sequence);
+        assertEquals(1, sequence.size());
+        
+        assertEvent(sequence.get(0), 12345, MouseClick.class, node, 194, 7);
     }
 
