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:'Dialog'; 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:'Dialog';
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&createDatabaseIfNotExist=true&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
-~----------~----~----~----~------~----~------~--~---