Modified: 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessHelper.java
 Tue Mar 28 03:19:16 2017
@@ -20,14 +20,11 @@ package org.apache.openmeetings.util.pro
 
 import static java.nio.charset.StandardCharsets.UTF_8;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.concurrent.TimeoutException;
+import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.openmeetings.util.OpenmeetingsVariables;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -35,49 +32,6 @@ import org.slf4j.Logger;
 public class ProcessHelper {
        public static final Logger log = 
Red5LoggerFactory.getLogger(ProcessHelper.class, 
OpenmeetingsVariables.webAppRootKey);
 
-       private static class Worker extends Thread {
-               private final Process process;
-               private Integer exitCode;
-
-               private Worker(Process process) {
-                       this.process = process;
-               }
-
-               @Override
-               public void run() {
-                       try {
-                               exitCode = process.waitFor();
-                       } catch (InterruptedException ignore) {
-                               return;
-                       }
-               }
-       }
-
-       private static class StreamWatcher extends Thread {
-               public StringBuilder output;
-               private final InputStream is;
-               private final BufferedReader br;
-
-               private StreamWatcher(Process process, boolean isError) {
-                       output = new StringBuilder();
-                       is = isError ? process.getErrorStream() : 
process.getInputStream();
-                       br = new BufferedReader(new InputStreamReader(is, 
UTF_8));
-               }
-
-               @Override
-               public void run() {
-                       try {
-                               String line = br.readLine();
-                               while (line != null) {
-                                       output.append(line).append('\n');
-                                       line = br.readLine();
-                               }
-                       } catch (IOException ioexception) {
-                               return;
-                       }
-               }
-       }
-
        public static ConverterProcessResult executeScriptWindows(String 
process, String[] argv) {
                try {
                        String[] cmd = new String[argv.length + 2];
@@ -119,13 +73,14 @@ public class ProcessHelper {
        }
 
        public static ConverterProcessResult executeScript(String process, 
String[] argv, Map<? extends String, ? extends String> env) {
-               ConverterProcessResult returnMap = new ConverterProcessResult();
-               returnMap.setProcess(process);
+               ConverterProcessResult res = new ConverterProcessResult();
+               res.setProcess(process);
                debugCommandStart(process, argv);
 
+               Process proc = null;
                try {
-                       returnMap.setCommand(getCommand(argv));
-                       returnMap.setOut("");
+                       res.setCommand(getCommand(argv));
+                       res.setOut("");
 
                        // By using the process Builder we have access to 
modify the
                        // environment variables
@@ -133,56 +88,29 @@ public class ProcessHelper {
                        ProcessBuilder pb = new ProcessBuilder(argv);
                        pb.environment().putAll(env);
 
-                       Process proc = pb.start();
+                       proc = pb.start();
 
                        // 20-minute timeout for command execution
                        // FFMPEG conversion of Recordings may take a real long 
time until
                        // its finished
-                       long timeout = 60000 * 20;
-
-                       StreamWatcher errorWatcher = new StreamWatcher(proc, 
true);
-                       Worker worker = new Worker(proc);
-                       StreamWatcher inputWatcher = new StreamWatcher(proc, 
false);
-                       errorWatcher.start();
-                       inputWatcher.start();
-                       worker.start();
-
-                       try {
-                               worker.join(timeout);
-                               if (worker.exitCode != null) {
-                                       returnMap.setExitCode(worker.exitCode);
-                                       log.debug("exitVal: " + 
worker.exitCode);
-                                       
returnMap.setError(errorWatcher.output.toString());
-                               } else {
-                                       returnMap.setException("timeOut");
-                                       
returnMap.setError(errorWatcher.output.toString());
-                                       returnMap.setExitCode(-1);
-
-                                       throw new TimeoutException();
-                               }
-                       } catch (InterruptedException ex) {
-                               worker.interrupt();
-                               errorWatcher.interrupt();
-                               inputWatcher.interrupt();
-                               Thread.currentThread().interrupt();
-
-                               returnMap.setError(ex.getMessage());
-                               returnMap.setExitCode(-1);
-
-                               throw ex;
-                       } finally {
-                               proc.destroy();
-                       }
+                       proc.waitFor(20, TimeUnit.MINUTES);
 
+                       res.setExitCode(proc.exitValue());
+                       res.setOut(IOUtils.toString(proc.getInputStream(), 
UTF_8));
+                       res.setError(IOUtils.toString(proc.getErrorStream(), 
UTF_8));
                } catch (Throwable t) {
                        log.error("executeScript", t);
-                       returnMap.setError(t.getMessage());
-                       returnMap.setException(t.toString());
-                       returnMap.setExitCode(-1);
+                       res.setError(t.getMessage());
+                       res.setException(t.toString());
+                       res.setExitCode(-1);
+               } finally {
+                       if (proc != null) {
+                               proc.destroy();
+                       }
                }
 
                debugCommandEnd(process);
-               return returnMap;
+               return res;
        }
-
 }
+

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupForm.java
 Tue Mar 28 03:19:16 2017
@@ -27,7 +27,7 @@ import static org.apache.openmeetings.we
 
 import java.io.File;
 
-import org.apache.openmeetings.core.converter.GenerateImage;
+import org.apache.openmeetings.core.converter.ImageConverter;
 import org.apache.openmeetings.db.dao.user.GroupDao;
 import org.apache.openmeetings.db.dao.user.GroupUserDao;
 import org.apache.openmeetings.db.entity.user.Group;
@@ -71,7 +71,7 @@ public class GroupForm extends AdminBase
 
                @Override
                protected void processImage(StoredFile sf, File f) throws 
Exception {
-                       getBean(GenerateImage.class).resize(f, 
getGroupLogo(GroupForm.this.getModelObject().getId(), false), null, 28);
+                       getBean(ImageConverter.class).resize(f, 
getGroupLogo(GroupForm.this.getModelObject().getId(), false), null, 28);
                }
 
                @Override

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/UploadableProfileImagePanel.java
 Tue Mar 28 03:19:16 2017
@@ -23,7 +23,7 @@ import static org.apache.openmeetings.we
 
 import java.io.File;
 
-import org.apache.openmeetings.core.converter.GenerateImage;
+import org.apache.openmeetings.core.converter.ImageConverter;
 import org.apache.openmeetings.util.StoredFile;
 
 public class UploadableProfileImagePanel extends UploadableImagePanel {
@@ -37,7 +37,7 @@ public class UploadableProfileImagePanel
 
        @Override
        protected void processImage(StoredFile sf, File f) throws Exception {
-               getBean(GenerateImage.class).convertImageUserProfile(f, userId, 
sf.isAsIs());
+               getBean(ImageConverter.class).convertImageUserProfile(f, 
userId, sf.isAsIs());
        }
 
        @Override

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/WbPanel.java
 Tue Mar 28 03:19:16 2017
@@ -42,6 +42,7 @@ import org.apache.openmeetings.util.OmFi
 import org.apache.openmeetings.web.room.RoomPanel;
 import org.apache.openmeetings.web.room.RoomResourceReference;
 import org.apache.openmeetings.web.user.record.JpgRecordingResourceReference;
+import org.apache.openmeetings.web.user.record.Mp4RecordingResourceReference;
 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.behavior.AttributeAppender;
@@ -64,6 +65,10 @@ import com.github.openjson.JSONObject;
 
 public class WbPanel extends Panel {
        private static final long serialVersionUID = 1L;
+       private static final int UPLOAD_WB_LEFT = 0;
+       private static final int UPLOAD_WB_TOP = 0;
+       private static final int DEFAULT_WIDTH = 640;
+       private static final int DEFAULT_HEIGHT = 480;
        public static final String FUNC_ACTION = "wbAction";
        public static final String PARAM_ACTION = "action";
        public static final String PARAM_OBJ = "obj";
@@ -266,22 +271,28 @@ public class WbPanel extends Panel {
                return _file;
        }
        private JSONObject addFileUrl(String ruid, JSONObject _file, FileItem 
fi, Client c) {
-               final PageParameters pp = new PageParameters();
+               JSONObject file = new JSONObject(_file, 
JSONObject.getNames(_file)); //FIXME TODO openjson 1.0.2
                final FileSystemResourceReference ref;
-               pp.add("id", fi.getId()).add("ruid", ruid).add("wuid", 
_file.optString("uid"));
+               final PageParameters pp = new PageParameters()
+                               .add("id", fi.getId()).add("uid", c.getUid())
+                               .add("ruid", ruid).add("wuid", 
_file.optString("uid"));
                switch (fi.getType()) {
                        case Video:
-                               pp.add("preview", true);
                                ref = new RoomResourceReference();
+                               file.put("_src", urlFor(ref, pp));
+                               file.put("_poster", urlFor(ref, new 
PageParameters(pp).add("preview", true)));
                                break;
                        case Recording:
-                               ref = new JpgRecordingResourceReference();
+                               ref = new Mp4RecordingResourceReference();
+                               file.put("_src", urlFor(ref, pp));
+                               file.put("_poster", urlFor(new 
JpgRecordingResourceReference(), pp));
                                break;
                        default:
                                ref = new RoomResourceReference();
+                               file.put("src", urlFor(ref, pp));
                                break;
                }
-               return new JSONObject(_file, 
JSONObject.getNames(_file)).put("src", urlFor(ref, pp.add("uid", c.getUid()))); 
 //FIXME TODO openjson 1.0.2
+               return file;
        }
 
        /*
@@ -317,7 +328,7 @@ public class WbPanel extends Panel {
 
        public void sendFileToWb(FileItem fi, boolean clean) {
                if (isVisible() && fi.getId() != null && FileItem.Type.Folder 
!= fi.getType()) {
-                       //FIXME TODO WmlFile special handling
+                       //FIXME TODO WmlFile/Chart special handling
                        Whiteboards wbs = 
getBean(WhiteboardCache.class).get(roomId);
                        String wuid = UUID.randomUUID().toString();
                        Whiteboard wb = 
wbs.getWhiteboards().values().iterator().next(); //TODO active
@@ -326,10 +337,10 @@ public class WbPanel extends Panel {
                                        .put("fileId", fi.getId())
                                        .put("fileType", fi.getType().name())
                                        .put("type", "image")
-                                       .put("left", 0) //FIXME TODO constant
-                                       .put("top", 0) //FIXME TODO constant
-                                       .put("width", 800/*fi.getWidth()*/) 
//FIXME TODO check null
-                                       .put("height", 600/*fi.getHeight()*/) 
//FIXME TODO constant
+                                       .put("left", UPLOAD_WB_LEFT)
+                                       .put("top", UPLOAD_WB_TOP)
+                                       .put("width", fi.getWidth() == null ? 
DEFAULT_WIDTH : fi.getWidth())
+                                       .put("height", fi.getHeight() == null ? 
DEFAULT_HEIGHT : fi.getHeight())
                                        //,"angle":32.86
                                        //,"crossOrigin":""
                                        .put("uid", wuid)
@@ -345,7 +356,7 @@ public class WbPanel extends Panel {
                                        , (o, c) -> {
                                                        return o.put("func", 
String.format("WbArea.%s(%s);"
                                                                        , 
Action.createObj.name()
-                                                                       , 
getObjWbJson(wb.getId(), addFileUrl(ruid, file, fi, c)).toString()) //FIXME 
TODO openjson 1.0.2
+                                                                       , 
getObjWbJson(wb.getId(), addFileUrl(ruid, file, fi, c)).toString())
                                                                ).toString();
                                                }
                                        );

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/wb/wb.js
 Tue Mar 28 03:19:16 2017
@@ -616,7 +616,6 @@ var Wb = function() {
                        wbId: wbId
                        , obj: json
                }));
-               //console.log('Wb Object Created', json, o);
        };
        var objAddedHandler = function (e) {
                var o = e.target;
@@ -635,8 +634,14 @@ var Wb = function() {
                        wbId: wbId
                        , obj: toOmJson(o)
                }));
-               //console.log('Object Modified', o);
        };
+       var objSelectedHandler = function (e) {
+               var o = e.target;
+               s.find('.wb-dim-x').val(o.left);
+               s.find('.wb-dim-y').val(o.top);
+               s.find('.wb-dim-w').val(o.width);
+               s.find('.wb-dim-h').val(o.height);
+       }
        var pathCreatedHandler = function (o) {
                o.path.uid = UUID.generate();
                wbObjCreatedHandler(o.path);
@@ -657,10 +662,12 @@ var Wb = function() {
                        t = a.find('.tools'), c = a.find('canvas'), s = 
a.find(".wb-settings");
                        c.attr('id', 'can-' + tid);
                        canvas = new fabric.Canvas(c.attr('id'));
+                       canvas.wbId = _wbId;
                        //TODO create via WS canvas:cleared
                        canvas.on({
                                'object:added': objAddedHandler
                                , 'object:modified': objModifiedHandler
+                               , 'object:selected': objSelectedHandler
                                , 'path:created': pathCreatedHandler
                                //, 'text:editing:exited': textEditedHandler
                                //, 'text:changed': textChangedHandler
@@ -746,7 +753,16 @@ var WbArea = (function() {
                canvas.add(_o);
        }
        function _createHandler(canvas, _o) {
-               canvas.add(_o);
+               if ('Video' === _o.fileType || 'Recording' === _o.fileType) {
+                       var vid = $('<video>').hide().attr('id', 'video-' + 
_o.uid).attr('poster', _o._poster + '&preview=true')
+                               .append($('<source>').attr('type', 
'video/mp4').attr('src', _o._src))
+                       $('#wb-tab-' + canvas.wbId).append(vid);
+                       //canvas.add(new fabric.Image(vid[0], _o));
+                       canvas.add(new fabric.Image(vid[0], {}));
+                       //vid.toJSON(['uid', 'fileId', 'fileType']);
+               } else {
+                       canvas.add(_o);
+               }
        }
        function _findObject(canvas, uid) {
                var _o = {};
@@ -832,6 +848,12 @@ var WbArea = (function() {
                                break;
                        default:
                                _createObject(canvas, [o], _createHandler);
+                               if ('Video' === o.fileType || 'Recording' === 
o.fileType) {
+                                       fabric.util.requestAnimFrame(function 
render() {
+                                               canvas.renderAll();
+                                               
fabric.util.requestAnimFrame(render);
+                                       });
+                               }
                                break;
                }
        };
@@ -871,11 +893,9 @@ var WbArea = (function() {
        self.resize = function(posX, w, h) {
                if (!container) return;
                var hh = h - 5;
-               container.width(w).css('left', posX      + "px");
-               area.width(w);
+               container.width(w).height(h).css('left', posX + "px");
+               area.width(w).height(hh);
 
-               container.height(h);
-               area.height(hh);
                var wbTabs = area.find(".tabs.ui-tabs");
                wbTabs.height(hh);
                var tabPanels = wbTabs.find(".ui-tabs-panel");
@@ -899,6 +919,7 @@ $(function() {
                                }
                        }
                } catch (err) {
+                       console.log(err);
                        //no-op
                }
        });

Modified: 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
URL: 
http://svn.apache.org/viewvc/openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml?rev=1789036&r1=1789035&r2=1789036&view=diff
==============================================================================
--- 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 (original)
+++ 
openmeetings/application/trunk/openmeetings-web/src/main/webapp/WEB-INF/classes/openmeetings-applicationContext.xml
 Tue Mar 28 03:19:16 2017
@@ -7,16 +7,16 @@
   to you under the Apache License, Version 2.0 (the
   "License"); you may not use this file except in compliance
   with the License.  You may obtain a copy of the License at
-  
+
       http://www.apache.org/licenses/LICENSE-2.0
-  
+
   Unless required by applicable law or agreed to in writing,
   software distributed under the License is distributed on an
   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
   KIND, either express or implied.  See the License for the
   specific language governing permissions and limitations
   under the License.
-  
+
 -->
 <beans xmlns="http://www.springframework.org/schema/beans";
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
@@ -198,9 +198,8 @@
        <bean id="omCalendarDao" 
class="org.apache.openmeetings.db.dao.calendar.OmCalendarDao" />
 
        <!-- No Interface -->
-       <bean id="generateImage" 
class="org.apache.openmeetings.core.converter.GenerateImage" />
-       <bean id="generateThumbs" 
class="org.apache.openmeetings.core.converter.GenerateThumbs" />
-       <bean id="generatePDF" 
class="org.apache.openmeetings.core.documents.GeneratePDF" />
+       <bean id="imageConverter" 
class="org.apache.openmeetings.core.converter.ImageConverter" />
+       <bean id="documentConverter" 
class="org.apache.openmeetings.core.converter.DocumentConverter" />
        <bean id="smsHandler" 
class="org.apache.openmeetings.core.mail.SMSHandler" />
        <bean id="importInitvalues" 
class="org.apache.openmeetings.installation.ImportInitvalues" />
        <bean id="generateSWF" 
class="org.apache.openmeetings.core.converter.GenerateSWF" />


Reply via email to