Author: seba.wagner
Date: Wed Dec 24 08:12:41 2008
New Revision: 1731

Added:
    trunk/webapp/src/app/logback.xml
    trunk/webapp/src/test/org/openmeetings/test/record/
    trunk/webapp/src/test/org/openmeetings/test/record/BatchConversion.java
Modified:
    trunk/webapp/conf/test.svg
    trunk/webapp/conf/whiteboardevent.xml
    trunk/webapp/filetest.keystore
    trunk/webapp/src/app/hibernate.cfg.xml
     
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingConversionJobDaoImpl.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingDaoImpl.java
     
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/WhiteBoardEventDaoImpl.java
     
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.hbm.xml
     
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.java
    trunk/webapp/src/app/org/openmeetings/app/remote/Application.java

Log:
Fixes:
First approach for new conversion tool
Issue 550 Rework Recorder
Fixes:
Logback.xml for running JUnit with more handy log-level with latest Sources

Modified: trunk/webapp/conf/test.svg
==============================================================================
--- trunk/webapp/conf/test.svg  (original)
+++ trunk/webapp/conf/test.svg  Wed Dec 24 08:12:41 2008
@@ -1,23 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
  <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN'
            'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
-<svg xmlns:xlink="http://www.w3.org/1999/xlink"; style="fill-opacity:1;  
color-rendering:auto; color-interpolation:auto; text-rendering:auto;  
stroke:black; stroke-linecap:square; enable-background:new;  
stroke-miterlimit:10; shape-rendering:auto; stroke-opacity:1; fill:black;  
stroke-dasharray:none; font-weight:normal; stroke-width:1;  
font-family:&apos;Dialog&apos;; font-style:normal; stroke-linejoin:miter;  
font-size:12; stroke-dashoffset:0; image-rendering:auto;"  
xmlns="http://www.w3.org/2000/svg";
+<svg xmlns:xlink="http://www.w3.org/1999/xlink"; style="fill-opacity:1;  
color-rendering:auto; color-interpolation:auto; text-rendering:auto;  
stroke:black; stroke-linecap:square; stroke-miterlimit:10;  
shape-rendering:auto; stroke-opacity:1; fill:black; stroke-dasharray:none;  
font-weight:normal; stroke-width:1; font-family:&apos;Dialog&apos;;  
font-style:normal; stroke-linejoin:miter; font-size:12;  
stroke-dashoffset:0; image-rendering:auto;"  
xmlns="http://www.w3.org/2000/svg";
  ><!--Generated by the Batik Graphics2D SVG Generator--><defs  
id="genericDefs"
    /><g
-  ><defs id="defs1"
-    ><filter width="100%" x="0%" height="100%" y="0%"  
id="alphaCompositeSrc" filterUnits="objectBoundingBox"
-      ><feFlood style="flood-color:white; flood-opacity:1;" result="flood"
-        /><feComposite k2="1" in2="BackgroundImage" operator="arithmetic"  
result="composite" in="SourceGraphic"
-        /><feMerge
-        ><feMergeNode in="flood"
-          /><feMergeNode in="composite"
-        /></feMerge
-      ></filter
-    ></defs
-    ><g style="fill:red; stroke-linecap:round; stroke-linejoin:bevel;  
stroke:red;"
-    ><path d="M102 99 L295 580 L302 577 Q301 589 300 600 Q293 593 284 585  
L290 582 L98 101 L102 99 Z" style="fill:none; opacity:0.5;  
filter:url(#alphaCompositeSrc);"
-      /><path d="M102 99 L295 580 L302 577 Q301 589 300 600 Q293 593 284  
585 L290 582 L98 101 L102 99 Z" style="fill:blue; opacity:0.5; stroke:none;  
filter:url(#alphaCompositeSrc);"
-    /></g
-  ></g
-></svg
+/></svg
  >

Modified: trunk/webapp/conf/whiteboardevent.xml
==============================================================================
--- trunk/webapp/conf/whiteboardevent.xml       (original)
+++ trunk/webapp/conf/whiteboardevent.xml       Wed Dec 24 08:12:41 2008
@@ -1,22 +1,439 @@
  <linked-hash-map>
    <entry>
      <int>0</int>
-    <string>whiteboard</string>
+    <linked-hash-map>
+      <entry>
+        <int>0</int>
+        <string>paint</string>
+      </entry>
+      <entry>
+        <int>1</int>
+        <linked-hash-map>
+          <entry>
+            <int>0</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>228</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>59</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>228</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>59</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>1</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>228</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>59</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>161</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>63</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>2</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>161</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>63</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>133</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>75</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>3</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>133</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>75</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>126</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>85</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>4</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>126</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>85</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>134</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>107</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>5</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>134</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>107</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>155</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>128</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>6</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>155</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>128</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>186</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>151</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>7</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>186</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>151</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>206</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>171</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>8</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>206</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>171</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>216</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>189</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>9</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>216</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>189</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>218</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>209</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>10</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>218</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>209</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>213</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>237</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>11</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>213</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>237</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>176</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>296</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>12</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>176</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>296</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>150</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>319</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>13</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>150</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>319</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>137</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>324</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+          <entry>
+            <int>14</int>
+            <linked-hash-map>
+              <entry>
+                <int>0</int>
+                <string>point</string>
+              </entry>
+              <entry>
+                <int>1</int>
+                <int>137</int>
+              </entry>
+              <entry>
+                <int>2</int>
+                <int>324</int>
+              </entry>
+              <entry>
+                <int>3</int>
+                <int>132</int>
+              </entry>
+              <entry>
+                <int>4</int>
+                <int>326</int>
+              </entry>
+            </linked-hash-map>
+          </entry>
+        </linked-hash-map>
+      </entry>
+      <entry>
+        <int>2</int>
+        <string>0x000000</string>
+      </entry>
+      <entry>
+        <int>3</int>
+        <int>2</int>
+      </entry>
+      <entry>
+        <int>4</int>
+        <int>16737792</int>
+      </entry>
+      <entry>
+        <int>5</int>
+        <int>1</int>
+      </entry>
+      <entry>
+        <int>6</int>
+        <int>0</int>
+      </entry>
+      <entry>
+        <int>7</int>
+        <int>125</int>
+      </entry>
+      <entry>
+        <int>8</int>
+        <int>58</int>
+      </entry>
+      <entry>
+        <int>9</int>
+        <int>102</int>
+      </entry>
+      <entry>
+        <int>10</int>
+        <int>267</int>
+      </entry>
+      <entry>
+        <int>11</int>
+        <string>paint_1230125297293</string>
+      </entry>
+    </linked-hash-map>
    </entry>
    <entry>
      <int>1</int>
-    <date>2008-12-22 16:25:16.416 CET</date>
-  </entry>
-  <entry>
-    <int>2</int>
-    <string>draw</string>
-  </entry>
-  <entry>
-    <int>3</int>
      <linked-hash-map>
        <entry>
          <int>0</int>
-        <string>line</string>
+        <string>uline</string>
        </entry>
        <entry>
          <int>1</int>
@@ -24,27 +441,27 @@
        </entry>
        <entry>
          <int>2</int>
-        <int>2</int>
+        <int>20</int>
        </entry>
        <entry>
          <int>3</int>
-        <int>1</int>
+        <double>0.5</double>
        </entry>
        <entry>
          <int>4</int>
-        <int>1</int>
+        <int>237</int>
        </entry>
        <entry>
          <int>5</int>
-        <int>124</int>
+        <int>1</int>
        </entry>
        <entry>
          <int>6</int>
-        <int>315</int>
+        <int>1</int>
        </entry>
        <entry>
          <int>7</int>
-        <int>1</int>
+        <int>219</int>
        </entry>
        <entry>
          <int>8</int>
@@ -52,23 +469,23 @@
        </entry>
        <entry>
          <int>9</int>
-        <int>146</int>
+        <int>288</int>
        </entry>
        <entry>
          <int>10</int>
-        <int>129</int>
+        <int>115</int>
        </entry>
        <entry>
          <int>11</int>
-        <int>316</int>
+        <int>256</int>
        </entry>
        <entry>
          <int>12</int>
-        <int>125</int>
+        <int>238</int>
        </entry>
        <entry>
          <int>13</int>
-        <string>line_1229959515873</string>
+        <string>uline_1230125300661</string>
        </entry>
      </linked-hash-map>
    </entry>

Modified: trunk/webapp/filetest.keystore
==============================================================================
Binary files. No diff available.

Modified: trunk/webapp/src/app/hibernate.cfg.xml
==============================================================================
--- trunk/webapp/src/app/hibernate.cfg.xml      (original)
+++ trunk/webapp/src/app/hibernate.cfg.xml      Wed Dec 24 08:12:41 2008
@@ -3,13 +3,42 @@

  <hibernate-configuration>
    <session-factory>
-    <property  
name="hibernate.connection.driver_class">org.postgresql.Driver</property>
-    <property  
name="hibernate.connection.url">jdbc:postgresql://localhost/xmlcrm</property>
-    <property name="hibernate.connection.username">postgres</property>
-    <property name="hibernate.connection.password">*****</property>
-    <property  
name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
-    <property name="hibernate.show_sql">true</property>
-    <property name="hibernate.hbm2ddl.auto">update</property>
+               <!-- User  / Password -->
+               <property name="connection.username">root</property>
+               <property name="connection.password"></property>
+               
+               <!-- Database Settings -->
+               <property 
name="connection.driver_class">com.mysql.jdbc.Driver</property>
+               <property  
name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
+               <property  
name="connection.url">jdbc:mysql://localhost/openmeetings_lps42?useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8</property>
        
+               
+               <property name="hibernate.connection.CharSet">utf8</property>
+               <property 
name="hibernate.connection.characterEncoding">utf8</property>
+               <property name="hibernate.connection.useUnicode">true</property>
+
+               
+               <!-- Database Scheme Auto Update -->
+               <property name="hbm2ddl.auto">update</property>                 
+
+               <!-- properties -->
+               
+               <property name="show_sql">false</property>
+               <property name="format_sql">false</property>
+               <property name="use_outer_join">false</property>
+               <property  
name="hibernate.query.factory_class">org.hibernate.hql.ast.ASTQueryTranslatorFactory</property>
+        <property  
name="connection.provider_class 
">org.hibernate.connection.C3P0ConnectionProvider</property>
+        <property  
name="cache.provider_class">org.hibernate.cache.NoCacheProvider </property>
+        <property name="cache.use_query_cache">false </property>
+        <property name="cache.use_second_level_cache">false </property>
+        <property name="generate_statistics">false</property>
+        <property name="cache.use_structured_entries">false</property>
+
+
+               <property name="c3p0.max_size">20</property>
+               <property name="c3p0.min_size">2</property>
+               <property name="c3p0.max_statements">100</property>
+               <property name="c3p0.timeout">3600</property>
+               
      <mapping  
resource="org/openmeetings/app/hibernate/beans/adresses/Adresses.hbm.xml"/>
      <mapping  
resource="org/openmeetings/app/hibernate/beans/adresses/Adresses_Emails.hbm.xml"/>
      <mapping  
resource="org/openmeetings/app/hibernate/beans/adresses/Emails.hbm.xml"/>

Added: trunk/webapp/src/app/logback.xml
==============================================================================
--- (empty file)
+++ trunk/webapp/src/app/logback.xml    Wed Dec 24 08:12:41 2008
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+This configures the Debug-Level at JUnit-Tests inside Eclipse
+ -->
+<configuration>
+  <!--
+  <appender name="FLOG2"  
class="ch.qos.logback.core.rolling.RollingFileAppender">
+    <Threshold>DEBUG</Threshold>
+    <File>openmeetings.log</File>
+    <layout class="ch.qos.logback.classic.PatternLayout">
+      <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t]  
- %m%n</pattern>
+    </layout>
+    <rollingPolicy  
class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+      <maxIndex>1</maxIndex>
+    </rollingPolicy>
+  </appender>
+   -->
+  <appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
+    <layout class="ch.qos.logback.classic.PatternLayout">
+      <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t]  
- %m%n</pattern>
+    </layout>
+  </appender>
+  <logger name="org.apache.axis2">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="com.mchange.v2">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.hibernate.cache">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.apache.axiom">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.hibernate.jdbc">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.hibernate.SQL">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.apache.commons.httpclient">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.hibernate.tool.hbm2ddl">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.hibernate">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="de.hunsicker.jalopy.io">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="org.apache.axis2.enterprise">
+    <level value="ERROR"/>
+  </logger>
+  <logger name="httpclient.wire.header">
+    <level value="ERROR"/>
+  </logger>
+  <root>
+    <level value="DEBUG"/>
+    <!--
+    <appender-ref ref="FLOG2"/>
+     -->
+    <appender-ref ref="CONSOLE2"/>
+  </root>
+</configuration>

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
        
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardConvertionJobManager.java
        
Wed Dec 24 08:12:41 2008
@@ -4,6 +4,7 @@
  import java.io.FileWriter;
  import java.io.StringWriter;
  import java.util.Date;
+import java.util.HashMap;
  import java.util.List;
  import java.util.Map;

@@ -14,8 +15,10 @@
  import org.apache.commons.logging.LogFactory;
  import org.openmeetings.app.data.record.dao.RecordingConversionJobDaoImpl;
  import org.openmeetings.app.data.record.dao.RecordingDaoImpl;
+import org.openmeetings.app.data.record.dao.WhiteBoardEventDaoImpl;
  import org.openmeetings.app.hibernate.beans.recording.Recording;
  import  
org.openmeetings.app.hibernate.beans.recording.RecordingConversionJob;
+import org.openmeetings.app.hibernate.beans.recording.WhiteBoardEvent;
  import org.openmeetings.app.remote.Application;
  import org.openmeetings.app.remote.StreamService;
  import org.openmeetings.utils.math.CalendarPatterns;
@@ -28,6 +31,10 @@

  public class WhiteboardConvertionJobManager {
        
+       //This is the amount of time the Conversion Job will create an SVN
+       //So 200 Milliseconds == 5 Images per second
+       private static Long numberOfMilliseconds = 200L;
+       
        private static boolean isRunning = false;

        private static final Log log =  
LogFactory.getLog(WhiteboardConvertionJobManager.class);
@@ -56,7 +63,7 @@
                                        recording.setWhiteBoardConverted(true);
                                        
RecordingDaoImpl.getInstance().updateRecording(recording);
                                }
-                               log.debug("initJobs: 
"+recordingsNonConversionStarted.size());
+                               //log.debug("initJobs: 
"+recordingsNonConversionStarted.size());
                                
                                for (Recording recording : 
recordingsNonConversionStarted) {
                                        
@@ -71,7 +78,7 @@
                                }
                                
                                
-                               //processJobs();
+                               processJobs();
                                
                                
                                isRunning = false;
@@ -94,7 +101,7 @@
                        
                        for (RecordingConversionJob recordingConversionJob :  
listOfConversionJobs) {
                                
-                               log.debug("TIM  
INITIAL : "+recordingConversionJob.getEndTimeInMilliSeconds());
+                               //log.debug("TIME  
INITIAL : "+recordingConversionJob.getEndTimeInMilliSeconds());
                                
                                if 
(recordingConversionJob.getEndTimeInMilliSeconds().equals(0L)) {
                                        
@@ -103,65 +110,90 @@
                                        XStream xStream_temp = new XStream(new 
XppDriver());
                                        
xStream_temp.setMode(XStream.NO_REFERENCES);
                                        
-                                       Map initWhiteBoardObjects = (Map)  
xStream_temp.fromXML(recordingConversionJob.getRecording().
-                                                                               
                                        
getRoomRecording().getInitwhiteboardvarsInXml());
+                                       String roomRecordingInXML =  
recordingConversionJob.getRecording().getRoomRecording().getInitwhiteboardvarsInXml();
                                        
-                                       // Get a DOMImplementation.
-                               DOMImplementation domImpl =
-                                   
GenericDOMImplementation.getDOMImplementation();
-
-                               // Create an instance of org.w3c.dom.Document.
-                               //String svgNS = "http://www.w3.org/2000/svg";;
-                               String svgNS = 
SVGDOMImplementation.SVG_NAMESPACE_URI;
-
-                               Document document = 
domImpl.createDocument(svgNS, "svg", null);
-                       
-                               // Get the root element (the 'svg' element).
-                               Element svgRoot = document.getDocumentElement();
-
-                       
-                               // Set the width and height attributes on the 
root 'svg'  
element.
-                               svgRoot.setAttributeNS(null, "width", ""+660);
-                               svgRoot.setAttributeNS(null, "height", ""+620);
-                       
-
-                               // Create an instance of the SVG Generator.
-                               SVGGraphics2D svgGenerator = new 
SVGGraphics2D(document);
-                       
-                               svgGenerator =  
WhiteboardMapToSVG.getInstance().convertMapToSVG(svgGenerator,  
initWhiteBoardObjects);
-                                       
-                               // Finally, stream out SVG to the standard 
output using
-                               // UTF-8 encoding.
-                               boolean useCSS = true; // we want to use CSS 
style attributes
-                               //Writer out = new 
OutputStreamWriter(System.out, "UTF-8");
-                       
-                              //log.debug(out.toString());
-                       
-                              String recordingRootDir = Application.webAppPath 
+  
File.separatorChar + StreamService.folderForRecordings;
-                              File recordingRootDirFolder = new 
File(recordingRootDir);
-                              if (!recordingRootDirFolder.exists()) {
-                                  recordingRootDirFolder.mkdir();
-                              }
-                       
-                              String recordingFileDir = recordingRootDir + 
File.separatorChar  
+ recordingConversionJob.getRecordingConversionJobId();
-                              File recordingFileDirFolder = new 
File(recordingFileDir);
-                              if (!recordingFileDirFolder.exists()) {
-                                  recordingFileDirFolder.mkdir();
-                              }
-                       
-                              String firstImageName = recordingFileDir + 
File.separatorChar  
+ "record0.svg";
-                              FileWriter fileWriter = new 
FileWriter(firstImageName);
-                       
-                              svgGenerator.stream(fileWriter, useCSS);
-                       
-                              
recordingConversionJob.setEndTimeInMilliSeconds(1000L);
-                       
-                               
RecordingConversionJobDaoImpl.getInstance().updateRecordingConversionJobs(recordingConversionJob);
+                                       Map initWhiteBoardObjects = (Map)  
xStream_temp.fromXML(roomRecordingInXML);
+                                       
+                                       
this.generateFileAsSVG(initWhiteBoardObjects, roomRecordingInXML,  
recordingConversionJob);
                        
                                } else {
                                        
+                                       log.debug("DRAW NEXT IMAGE");
                                        
+                                       if 
(recordingConversionJob.getRecording().getDuration() >=  
recordingConversionJob.getEndTimeInMilliSeconds()) {
                                        
+                                               List<WhiteBoardEvent> 
whiteBoardEventList =  
WhiteBoardEventDaoImpl.getInstance().
+                                                               
getWhiteboardEventsInRange(
+                                                                               
recordingConversionJob.getEndTimeInMilliSeconds(),
+                                                                               
 
recordingConversionJob.getEndTimeInMilliSeconds()+(numberOfMilliseconds-1),
+                                                                               
 
recordingConversionJob.getRecording().getRoomRecording().getRoomrecordingId());
+                                               
+                                               
+                                               log.debug("whiteBoardEventList 
SIZE "+whiteBoardEventList.size());
+                                               
+                                               XStream xStream_temp = new 
XStream(new XppDriver());
+                                               
xStream_temp.setMode(XStream.NO_REFERENCES);
+                                               
+                                               String roomRecordingInXML =  
recordingConversionJob.getCurrentWhiteBoardAsXml();
+                                               Map whiteBoardObjects = (Map)  
xStream_temp.fromXML(roomRecordingInXML);
+                                                       
+                                               //Do simulate Whiteboard Events 
in Temp Object
+                                               
+                                               for (WhiteBoardEvent 
whiteBoardEvent : whiteBoardEventList) {
+                                                       
+                                                       
log.debug("whiteBoardEvent: "+whiteBoardEvent.getStarttime());
+                                                       
+                                                       XStream 
xStream_temp_action = new XStream(new XppDriver());
+                                                       
xStream_temp_action.setMode(XStream.NO_REFERENCES);
+                                                       
+                                                       Map actionObj = (Map)  
xStream_temp_action.fromXML(whiteBoardEvent.getAction());
+                                                       
+                                                       
log.debug("whiteBoardEvent: "+actionObj);
+                                                       
+                                                       Date dateOfEvent = 
(Date) actionObj.get(1);
+                                                       String action = 
actionObj.get(2).toString();    
+                                                       Map actionObject = 
(Map) actionObj.get(3);
+                                                       
+                                                       log.debug("action: 
"+action);
+                                                       
+                                                       if 
(action.equals("draw") || action.equals("redo")){
+                                                               
+                                                               
//log.debug(actionObject);
+                                                               
//log.debug(actionObject.size()-1);
+                                                               
//log.debug(actionObject.get(actionObject.size()-1));
+                                                               
+                                                               String 
objectOID =  
actionObject.get(actionObject.size()-1).toString();
+                                                               
log.debug("objectOID: "+objectOID);
+                                                               
whiteBoardObjects.put(objectOID, actionObject);
+                                                       } else if 
(action.equals("clear")) {
+                                                               
whiteBoardObjects = new HashMap<String,Map>();
+                                                       } else if 
(action.equals("delete") || action.equals("undo")) {
+                                                               String 
objectOID =  
actionObject.get(actionObject.size()-1).toString();
+                                                               
log.debug("removal of objectOID: "+objectOID);
+                                                               
whiteBoardObjects.remove(objectOID);
+                                                       } else if 
(action.equals("size") || action.equals("editProp")
+                                                                       || 
action.equals("editText")) {
+                                                               String 
objectOID =  
actionObject.get(actionObject.size()-1).toString();
+                                                               //Map roomItem 
= (Map) whiteBoardObjects.get(objectOID);
+                                                               
whiteBoardObjects.put(objectOID, actionObject);
+                                                               
+                                                       } else {
+                                                               
log.warn("Unkown Type: "+action+" actionObject: "+actionObject);
+                                                       }
+                                                       
+                                               }
+                                               
+                                               XStream xStream_temp_store = 
new XStream(new XppDriver());
+                                               
xStream_temp_store.setMode(XStream.NO_REFERENCES);
+                                               String roomRecordingInXMLToSave 
=  
xStream_temp_store.toXML(whiteBoardObjects);
+                                               
+                                               
this.generateFileAsSVG(whiteBoardObjects, roomRecordingInXMLToSave,  
recordingConversionJob);
+                                       
+                                       } else {
+                                               
+                                               log.debug("THIS FILE IS  
PROCESSED: "+recordingConversionJob.getRecordingConversionJobId());
+                                               
+                                       }
                                }
                                
                        }
@@ -169,6 +201,95 @@
                } catch (Exception err) {
                        log.error("[processJobs]",err);
                }
+       }
+       
+       private void generateFileAsSVG(Map whiteBoardObjects, String  
roomRecordingInXML, RecordingConversionJob recordingConversionJob) throws  
Exception {
+               
+               // Get a DOMImplementation.
+        DOMImplementation domImpl =
+            GenericDOMImplementation.getDOMImplementation();
+
+        // Create an instance of org.w3c.dom.Document.
+        //String svgNS = "http://www.w3.org/2000/svg";;
+        String svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+
+        Document document = domImpl.createDocument(svgNS, "svg", null);
+
+        // Get the root element (the 'svg' element).
+        Element svgRoot = document.getDocumentElement();
+
+
+        // Set the width and height attributes on the root 'svg' element.
+        svgRoot.setAttributeNS(null, "width", ""+660);
+        svgRoot.setAttributeNS(null, "height", ""+620);
+
+
+        // Create an instance of the SVG Generator.
+        SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
+
+        svgGenerator =  
WhiteboardMapToSVG.getInstance().convertMapToSVG(svgGenerator,  
whiteBoardObjects);
+               
+        // Finally, stream out SVG to the standard output using
+        // UTF-8 encoding.
+        boolean useCSS = true; // we want to use CSS style attributes
+        //Writer out = new OutputStreamWriter(System.out, "UTF-8");
+
+       //log.debug(out.toString());
+
+       Long fileNumber = recordingConversionJob.getEndTimeInMilliSeconds();
+
+//       String firstImageName =  
this.generateFileName(recordingConversionJob.getRecordingConversionJobId(),  
fileNumber);
+//       log.debug("Write File To: "+firstImageName);
+//
+//       FileWriter fileWriter = new FileWriter(firstImageName);
+//
+//       svgGenerator.stream(fileWriter, useCSS);
+
+//       StringWriter stringWriter = new StringWriter();
+//
+//       svgGenerator.stream(stringWriter, useCSS);
+//
+//       log.debug("stringWriter"+stringWriter.toString());
+
+               String firstImageName =  
this.generateSVGFileDebug(recordingConversionJob.getRecordingConversionJobId(), 
 
fileNumber);
+               log.debug("Write File To: " + firstImageName);
+
+               FileWriter fileWriter = new FileWriter(firstImageName);
+               svgGenerator.stream(fileWriter, useCSS);
+
+                
recordingConversionJob.setEndTimeInMilliSeconds(recordingConversionJob.getEndTimeInMilliSeconds()
  
+ numberOfMilliseconds);
+               
recordingConversionJob.setCurrentWhiteBoardAsXml(roomRecordingInXML);
+
+                
RecordingConversionJobDaoImpl.getInstance().updateRecordingConversionJobs(recordingConversionJob);
+
+       }
+       
+       private String generateSVGFileDebug(Long conversionJobId, Long  
fileNumber) throws Exception {
+       String recordingRootDir   
= 
"/Users/swagner/Documents/work/red5_distros/red5_r3200_snapshot/webapps/openmeetings/test/";
+
+       String recordingFileDir = recordingRootDir + File.separatorChar +  
conversionJobId;
+       File recordingFileDirFolder = new File(recordingFileDir);
+       if (!recordingFileDirFolder.exists()) {
+          recordingFileDirFolder.mkdir();
+       }
+
+       return recordingFileDir + File.separatorChar + fileNumber + ".svg";
+       }
+       
+       private String generateSVGFileName(Long conversionJobId, Long 
fileNumber)  
throws Exception {
+               String recordingRootDir = Application.webAppPath + 
File.separatorChar  
+ "upload" + File.separatorChar + StreamService.folderForRecordings;
+       File recordingRootDirFolder = new File(recordingRootDir);
+       if (!recordingRootDirFolder.exists()) {
+          recordingRootDirFolder.mkdir();
+       }
+
+       String recordingFileDir = recordingRootDir + File.separatorChar +  
conversionJobId;
+       File recordingFileDirFolder = new File(recordingFileDir);
+       if (!recordingFileDirFolder.exists()) {
+          recordingFileDirFolder.mkdir();
+       }
+
+       return recordingFileDir + File.separatorChar + "record+" +  
fileNumber + ".svg";
        }
        
  }

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java   
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/WhiteboardMapToSVG.java   
 
Wed Dec 24 08:12:41 2008
@@ -34,10 +34,14 @@
        
        public SVGGraphics2D convertMapToSVG(SVGGraphics2D svgGenerator, Map  
whiteBoardMap) throws Exception {
                
+               log.debug("convertMapToSVG: "+whiteBoardMap.size());
+               
          for (Iterator iter =  
whiteBoardMap.keySet().iterator();iter.hasNext();) {
                Map graphObject = (Map) whiteBoardMap.get(iter.next());
                
                String graphType = graphObject.get(0).toString();
+               
+               log.debug("graphType: "+graphType);
                
                if (graphType.equals("paint")) {
                        

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingConversionJobDaoImpl.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingConversionJobDaoImpl.java
     
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingConversionJobDaoImpl.java
     
Wed Dec 24 08:12:41 2008
@@ -32,6 +32,9 @@
        public Long addRecordingConversionJob(RecordingConversionJob  
recordingConversionJob) {
                try {
                        
+                       log.debug("[addRecordingConversionJob]  
RecordingConversionJobId 
"+recordingConversionJob.getRecordingConversionJobId());
+                       log.debug("[addRecordingConversionJob]  
Recording_id "+recordingConversionJob.getRecording().getRecording_id());
+                       
                        Object idf = HibernateUtil.createSession();
                        Session session = HibernateUtil.getSession();
                        Transaction tx = session.beginTransaction();

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingDaoImpl.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingDaoImpl.java 
 
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/RecordingDaoImpl.java 
 
Wed Dec 24 08:12:41 2008
@@ -171,11 +171,14 @@
        
        public void updateRecording(Recording rec){
                try {
+                       
+                       log.debug("updateRecording SET TO TRUE  
NOW!!! "+rec.getRecording_id()+" "+rec.getWhiteBoardConverted());
+                       
                        Object idf = HibernateUtil.createSession();
                        Session session = HibernateUtil.getSession();
                        Transaction tx = session.beginTransaction();
                        session.update(rec);
-                       session.refresh(rec);
+                       //session.refresh(rec);
                        tx.commit();
                        HibernateUtil.closeSession(idf);
                } catch (HibernateException ex) {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/WhiteBoardEventDaoImpl.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/WhiteBoardEventDaoImpl.java
    
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/data/record/dao/WhiteBoardEventDaoImpl.java
    
Wed Dec 24 08:12:41 2008
@@ -1,10 +1,14 @@
  package org.openmeetings.app.data.record.dao;

+import java.util.List;
+
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import org.hibernate.HibernateException;
+import org.hibernate.Query;
  import org.hibernate.Session;
  import org.hibernate.Transaction;
+import org.openmeetings.app.hibernate.beans.recording.Recording;
  import org.openmeetings.app.hibernate.beans.recording.WhiteBoardEvent;
  import org.openmeetings.app.hibernate.utils.HibernateUtil;

@@ -23,6 +27,35 @@
                }

                return instance;
+       }
+       
+       public List<WhiteBoardEvent> getWhiteboardEventsInRange(long startTime, 
 
long endTime, long roomrecordingId) {
+               try {
+                       
+                       String hql = "select wbe from WhiteBoardEvent as wbe " +
+                                       "where wbe.starttime between :startTime 
and :endTime " +
+                                       "AND wbe.roomRecording.roomrecordingId 
= :roomrecordingId";
+                       
+                       Object idf = HibernateUtil.createSession();
+                       Session session = HibernateUtil.getSession();
+                       Transaction tx = session.beginTransaction();
+                       Query query = session.createQuery(hql);
+                       query.setLong("startTime", startTime);
+                       query.setLong("endTime", endTime);
+                       query.setLong("roomrecordingId", roomrecordingId);
+                       List<WhiteBoardEvent> ll = query.list();
+                       
+                       tx.commit();
+                       HibernateUtil.closeSession(idf);
+                       
+                       return ll;
+                       
+               } catch (HibernateException ex) {
+                       log.error("[getWhiteboardEventsInRange]: " , ex);
+               } catch (Exception ex2) {
+                       log.error("[getWhiteboardEventsInRange]: " , ex2);
+               }
+               return null;
        }
        
        public Long addWhiteBoardEvent(WhiteBoardEvent whiteBoardEvent) {

Modified:  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.hbm.xml
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.hbm.xml
       
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.hbm.xml
       
Wed Dec 24 08:12:41 2008
@@ -9,7 +9,7 @@
      <many-to-one outer-join="true" insert="true" column="recording_id"  
lazy="false" update="true" name="recording"  
class="org.openmeetings.app.hibernate.beans.recording.Recording"/>
      <property name="started" type="java.util.Date" column="started"/>
      <property name="ended" type="java.util.Date" column="ended"/>
-    <property name="currentWhiteBoardAsXml" type="string"  
column="currentwhiteboardasxml"/>
+    <property name="currentWhiteBoardAsXml" type="text"  
column="currentwhiteboardasxml"/>
      <property name="endTimeInMilliSeconds" type="long"  
column="endtimeinmilliseconds"/>
    </class>
  </hibernate-mapping>

Modified:  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.java
==============================================================================
---  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.java
  
(original)
+++  
trunk/webapp/src/app/org/openmeetings/app/hibernate/beans/recording/RecordingConversionJob.java
  
Wed Dec 24 08:12:41 2008
@@ -73,7 +73,7 @@
        /**
       * @hibernate.property
       *  column="currentwhiteboardasxml"
-     *  type="string"
+     *  type="text"
       */       
        public String getCurrentWhiteBoardAsXml() {
                return currentWhiteBoardAsXml;

Modified: trunk/webapp/src/app/org/openmeetings/app/remote/Application.java
==============================================================================
--- trunk/webapp/src/app/org/openmeetings/app/remote/Application.java    
(original)
+++ trunk/webapp/src/app/org/openmeetings/app/remote/Application.java   Wed  
Dec 24 08:12:41 2008
@@ -119,7 +119,7 @@
                        QuartzSessionClear bwHelp = new QuartzSessionClear();
                        QuartzRecordingJob recordingJob = new 
QuartzRecordingJob();
                        String jobName = addScheduledJob(300000,bwHelp);
-                       //String jobName2 = addScheduledJob(3000,recordingJob);
+                       String jobName2 = addScheduledJob(3000,recordingJob);
                        //String jobName = addScheduledJob(1000,bwHelp);
                        log.debug("jobName: "+jobName);
                } catch (Exception err) {

Added:  
trunk/webapp/src/test/org/openmeetings/test/record/BatchConversion.java
==============================================================================
--- (empty file)
+++ trunk/webapp/src/test/org/openmeetings/test/record/BatchConversion.java     
 
Wed Dec 24 08:12:41 2008
@@ -0,0 +1,32 @@
+package org.openmeetings.test.record;
+
+import junit.framework.TestCase;
+
+import org.openmeetings.app.data.record.WhiteboardConvertionJobManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class BatchConversion extends TestCase {
+       
+       private static final Logger log =  
LoggerFactory.getLogger(BatchConversion.class);
+       
+       public BatchConversion(String testname){
+               super(testname);
+       }
+       
+       public void testBatchConversion(){
+               try {
+                       
+                       for (int i=0;i<300;i++) {
+                               
WhiteboardConvertionJobManager.getInstance().initJobs();
+                       }
+                       
+               } catch (Exception err) {
+                       
+                       log.error("testBatchConversion",err);
+                       
+               }
+               
+       }
+
+}

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"OpenMeetings developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/openmeetings-dev?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to