Repository: openmeetings
Updated Branches:
  refs/heads/master ae40f805f -> 466c0a04f


no jira: error handling while file upload is improved


Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo
Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/466c0a04
Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/466c0a04
Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/466c0a04

Branch: refs/heads/master
Commit: 466c0a04f566593fe94036b79ac5a97ca2ca51b8
Parents: ae40f80
Author: Maxim Solodovnik <[email protected]>
Authored: Mon Oct 16 12:58:13 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Mon Oct 16 12:58:13 2017 +0700

----------------------------------------------------------------------
 .../core/converter/BaseConverter.java           |  47 ++++----
 .../core/converter/DocumentConverter.java       |  13 ++-
 .../core/converter/ImageConverter.java          |  24 ++--
 .../core/converter/InterviewConverter.java      |   5 +-
 .../core/converter/RecordingConverter.java      |   4 +-
 .../core/converter/VideoConverter.java          |  81 +++++++++++++
 .../core/data/file/FileProcessor.java           | 116 +++++++++----------
 .../util/process/ProcessResult.java             |   3 +-
 .../util/process/ProcessResultList.java         |  34 ++----
 .../web/room/sidebar/UploadDialog.java          |   5 +-
 10 files changed, 201 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
index 7d814bd..5ba2a97 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java
@@ -39,7 +39,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.directory.api.util.Strings;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
 import org.apache.openmeetings.db.dao.file.FileItemLogDao;
 import org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
@@ -52,6 +51,8 @@ import 
org.apache.openmeetings.db.entity.record.RecordingMetaDelta;
 import org.apache.openmeetings.util.OmFileHelper;
 import org.apache.openmeetings.util.process.ProcessHelper;
 import org.apache.openmeetings.util.process.ProcessResult;
+import org.apache.openmeetings.util.process.ProcessResultList;
+import org.apache.wicket.util.string.Strings;
 import org.red5.io.flv.impl.FLVWriter;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -90,12 +91,13 @@ public abstract class BaseConverter {
        }
 
        private String getPath(String key, String app) {
-               String path = cfgDao.getString(key, "");
-               if (!Strings.isEmpty(path) && !path.endsWith(File.separator)) {
-                       path += File.separator;
+               final String cfg = cfgDao.getString(key, "");
+               StringBuilder path = new StringBuilder(cfg);
+               if (!Strings.isEmpty(path) && !cfg.endsWith(File.separator)) {
+                       path.append(File.separator);
                }
-               path += app;
-               return path;
+               path.append(app).append(EXEC_EXT);
+               return path.toString();
        }
 
        public String getPathToFFMPEG() {
@@ -107,7 +109,7 @@ public abstract class BaseConverter {
        }
 
        protected String getPathToConvert() {
-               return getPath(CONFIG_PATH_IMAGEMAGIC, "convert") + EXEC_EXT;
+               return getPath(CONFIG_PATH_IMAGEMAGIC, "convert");
        }
 
        protected File getStreamFolder(Recording recording) {
@@ -160,14 +162,14 @@ public abstract class BaseConverter {
                return argv.toArray(new String[0]);
        }
 
-       protected void stripAudioFirstPass(Recording recording, 
List<ProcessResult> returnLog,
+       protected void stripAudioFirstPass(Recording recording, 
ProcessResultList logs,
                        List<File> waveFiles, File streamFolder)
        {
-               stripAudioFirstPass(recording, returnLog, waveFiles, 
streamFolder
+               stripAudioFirstPass(recording, logs, waveFiles, streamFolder
                                , 
metaDataDao.getAudioMetaDataByRecording(recording.getId()));
        }
 
-       private String[] addSoxPad(List<ProcessResult> returnLog, String job, 
double length, double position, File inFile, File outFile) throws IOException {
+       private String[] addSoxPad(ProcessResultList logs, String job, double 
length, double position, File inFile, File outFile) throws IOException {
                if (length < 0 || position < 0) {
                        log.debug("::addSoxPad {} Invalid parameters: length = 
{}; position = {}; inFile = {}", job, length, position, inFile);
                }
@@ -175,7 +177,7 @@ public abstract class BaseConverter {
                                , String.valueOf(length < 0 ? 0 : length)
                                , String.valueOf(position < 0 ? 0 : position) };
 
-               returnLog.add(ProcessHelper.executeScript(job, argv));
+               logs.add(ProcessHelper.executeScript(job, argv));
                return argv;
        }
 
@@ -250,7 +252,7 @@ public abstract class BaseConverter {
        }
 
        protected void stripAudioFirstPass(Recording recording,
-                       List<ProcessResult> returnLog,
+                       ProcessResultList logs,
                        List<File> waveFiles, File streamFolder,
                        List<RecordingMetaData> metaDataList) {
                try {
@@ -281,7 +283,7 @@ public abstract class BaseConverter {
                                                        , "-af", 
"aresample=32k:min_comp=0.001:min_hard_comp=0.100000"
                                                        , 
outputWav.getCanonicalPath()};
 
-                                       
returnLog.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv));
+                                       
logs.add(ProcessHelper.executeScript("stripAudioFromFLVs", argv));
                                }
 
                                if (outputWav.exists() && outputWav.length() != 
0) {
@@ -308,9 +310,9 @@ public abstract class BaseConverter {
                                                if (metaDelta.getDeltaTime() != 
null) {
                                                        double gapSeconds = 
diffSeconds(metaDelta.getDeltaTime());
                                                        if 
(metaDelta.isStartPadding()) {
-                                                               soxArgs = 
addSoxPad(returnLog, "fillGap", gapSeconds, 0, inputFile, outputGapFullWav);
+                                                               soxArgs = 
addSoxPad(logs, "fillGap", gapSeconds, 0, inputFile, outputGapFullWav);
                                                        } else if 
(metaDelta.isEndPadding()) {
-                                                               soxArgs = 
addSoxPad(returnLog, "fillGap", 0, gapSeconds, inputFile, outputGapFullWav);
+                                                               soxArgs = 
addSoxPad(logs, "fillGap", 0, gapSeconds, inputFile, outputGapFullWav);
                                                        }
                                                }
 
@@ -334,7 +336,7 @@ public abstract class BaseConverter {
                                        // Calculate delta at ending
                                        double endPad = 
diffSeconds(recording.getRecordEnd(), metaData.getRecordEnd());
 
-                                       addSoxPad(returnLog, 
"addStartEndToAudio", startPad, endPad, outputGapFullWav, outputFullWav);
+                                       addSoxPad(logs, "addStartEndToAudio", 
startPad, endPad, outputGapFullWav, outputFullWav);
 
                                        // Fix for Audio Length - Invalid Audio 
Length in Recorded Files
                                        // Audio must match 100% the Video
@@ -382,15 +384,15 @@ public abstract class BaseConverter {
                return argv;
        }
 
-       protected String convertToMp4(Recording r, List<String> _argv, 
List<ProcessResult> returnLog) throws IOException {
+       protected String convertToMp4(Recording r, List<String> _argv, 
ProcessResultList logs) throws IOException {
                String mp4path = r.getFile().getCanonicalPath();
                List<String> argv = new 
ArrayList<>(Arrays.asList(getPathToFFMPEG(), "-y"));
                argv.addAll(_argv);
-               returnLog.add(ProcessHelper.executeScript("generate MP4", 
addMp4OutParams(r, argv, mp4path).toArray(new String[]{})));
+               logs.add(ProcessHelper.executeScript("generate MP4", 
addMp4OutParams(r, argv, mp4path).toArray(new String[]{})));
                return mp4path;
        }
 
-       protected void convertToPng(BaseFileItem f, String mp4path, 
List<ProcessResult> logs) throws IOException {
+       protected void convertToPng(BaseFileItem f, String mp4path, 
ProcessResultList logs) throws IOException {
                // Extract first Image for preview purpose
                // ffmpeg -i movie.mp4 -vf  "thumbnail,scale=640:-1" -frames:v 
1 movie.png
                File png = f.getFile(EXTENSION_PNG);
@@ -400,7 +402,6 @@ public abstract class BaseConverter {
                                , "-vf", "thumbnail,scale=640:-1" //
                                , "-frames:v", "1" //
                                , png.getCanonicalPath() };
-
                logs.add(ProcessHelper.executeScript(String.format("generate 
preview PNG :: %s", f.getHash()), argv));
        }
 
@@ -416,15 +417,15 @@ public abstract class BaseConverter {
                return new Dimension(100, 100); // will return 100x100 for 
non-video to be able to play
        }
 
-       protected void postProcess(Recording r, String mp4path, 
List<ProcessResult> logs, List<File> waveFiles) throws IOException {
+       protected void postProcess(Recording r, String mp4path, 
ProcessResultList logs, List<File> waveFiles) throws IOException {
                convertToPng(r, mp4path, logs);
 
                updateDuration(r);
                r.setStatus(Recording.Status.PROCESSED);
 
                logDao.delete(r);
-               for (ProcessResult returnMap : logs) {
-                       logDao.add("generateFFMPEG", r, returnMap);
+               for (ProcessResult res : logs.getJobs()) {
+                       logDao.add("generateFFMPEG", r, res);
                }
 
                // Delete Wave Files

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
index 76b6305..3fc14d4 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/DocumentConverter.java
@@ -50,21 +50,23 @@ public class DocumentConverter {
        private ImageConverter imageConverter;
 
        public ProcessResultList convertPDF(FileItem f, StoredFile sf) throws 
Exception {
-               ProcessResultList result = new ProcessResultList();
+               return convertPDF(f, sf, new ProcessResultList());
+       }
 
+       public ProcessResultList convertPDF(FileItem f, StoredFile sf, 
ProcessResultList logs) throws Exception {
                boolean fullProcessing = !sf.isPdf();
                File original = f.getFile(sf.getExt());
                File pdf = f.getFile(EXTENSION_PDF);
                log.debug("fullProcessing: " + fullProcessing);
                if (fullProcessing) {
                        log.debug("-- running JOD --");
-                       result.addItem("processOpenOffice", 
doJodConvert(original, pdf));
+                       logs.add(doJodConvert(original, pdf));
                } else if (!EXTENSION_PDF.equals(sf.getExt())) {
                        copyFile(original, pdf);
                }
 
                log.debug("-- generate page images --");
-               return imageConverter.convertDocument(result, f, pdf);
+               return imageConverter.convertDocument(f, pdf, logs);
        }
 
        public static void createOfficeManager(String officePath, 
Consumer<OfficeManager> consumer) {
@@ -100,8 +102,7 @@ public class DocumentConverter {
                        log.error("doJodConvert", ex);
                        return new ProcessResult("doJodConvert", 
ex.getMessage(), ex);
                }
-               ProcessResult result = new ProcessResult("doJodConvert", 
"Document converted successfully", null);
-               result.setExitCode(0);
-               return result;
+               return new ProcessResult("doJodConvert", "Document converted 
successfully", null)
+                               .setExitCode(0);
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
index beefb99..b87b963 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java
@@ -67,19 +67,21 @@ public class ImageConverter extends BaseConverter {
        private UserDao userDao;
 
        public ProcessResultList convertImage(BaseFileItem f, StoredFile sf) 
throws IOException {
-               ProcessResultList returnMap = new ProcessResultList();
+               return convertImage(f, sf, new ProcessResultList());
+       }
 
+       public ProcessResultList convertImage(BaseFileItem f, StoredFile sf, 
ProcessResultList logs) throws IOException {
                File jpg = f.getFile(EXTENSION_JPG);
                if (!sf.isJpg()) {
                        File img = f.getFile(sf.getExt());
 
                        log.debug("##### convertImage destinationFile: " + jpg);
-                       returnMap.addItem("processJPG", convertSingleJpg(img, 
jpg));
+                       logs.add(convertSingleJpg(img, jpg));
                } else if (!jpg.exists()){
                        copyFile(f.getFile(sf.getExt()), jpg);
                }
-               returnMap.addItem("get JPG dimensions", initSize(f, jpg, 
JPG_MIME_TYPE));
-               return returnMap;
+               logs.add(initSize(f, jpg, JPG_MIME_TYPE));
+               return logs;
        }
 
        public ProcessResultList convertImageUserProfile(File file, Long 
userId, boolean skipConvertion) throws Exception {
@@ -95,7 +97,7 @@ public class ImageConverter extends BaseConverter {
 
                File destinationFile = 
OmFileHelper.getNewFile(getUploadProfilesUserDir(userId), PROFILE_FILE_NAME, 
EXTENSION_JPG);
                if (!skipConvertion) {
-                       returnMap.addItem("processJPG", convertSingleJpg(file, 
destinationFile));
+                       returnMap.add(convertSingleJpg(file, destinationFile));
                } else {
                        FileUtils.copyFile(file, destinationFile);
                }
@@ -123,7 +125,7 @@ public class ImageConverter extends BaseConverter {
                return cfgDao.getString(CONFIG_DOCUMENT_QUALITY, "90");
        }
 
-       private static ProcessResult initSize(BaseFileItem f, File img, String 
mime) {
+       private ProcessResult initSize(BaseFileItem f, File img, String mime) {
                ProcessResult res = new ProcessResult();
                res.setProcess("get image dimensions :: " + f.getId());
                final Parser parser = new ImageParser();
@@ -171,7 +173,7 @@ public class ImageConverter extends BaseConverter {
         * @return - result of conversion
         * @throws IOException in case IO exception occurred
         */
-       public ProcessResultList convertDocument(ProcessResultList list, 
FileItem f, File pdf) throws IOException {
+       public ProcessResultList convertDocument(FileItem f, File pdf, 
ProcessResultList logs) throws IOException {
                log.debug("convertDocument");
                String[] argv = new String[] {
                        getPathToConvert()
@@ -180,17 +182,17 @@ public class ImageConverter extends BaseConverter {
                        , "-quality", getQuality()
                        , new File(pdf.getParentFile(), 
PAGE_TMPLT).getCanonicalPath()
                        };
-               ProcessResult res = 
ProcessHelper.executeScript("convertDocument", argv);
-               list.addItem("convert PDF to images", res);
+               ProcessResult res = ProcessHelper.executeScript("convert PDF to 
images", argv);
+               logs.add(res);
                if (res.isOk()) {
                        File[] pages = pdf.getParentFile().listFiles(fi -> 
fi.isFile() && fi.getName().startsWith(DOC_PAGE_PREFIX) && 
fi.getName().endsWith(EXTENSION_PNG));
                        if (pages == null || pages.length == 0) {
                                f.setCount(0);
                        } else {
                                f.setCount(pages.length);
-                               list.addItem("get PNG page dimensions", 
initSize(f, pages[0], PNG_MIME_TYPE));
+                               logs.add(initSize(f, pages[0], PNG_MIME_TYPE));
                        }
                }
-               return list;
+               return logs;
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
index 5761869..d1b2d12 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/InterviewConverter.java
@@ -34,8 +34,9 @@ import 
org.apache.openmeetings.db.dao.record.RecordingMetaDataDao;
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
 import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.process.ProcessResult;
 import org.apache.openmeetings.util.process.ProcessHelper;
+import org.apache.openmeetings.util.process.ProcessResult;
+import org.apache.openmeetings.util.process.ProcessResultList;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -107,7 +108,7 @@ public class InterviewConverter extends BaseConverter 
implements IRecordingConve
                        r.setStatus(Recording.Status.CONVERTING);
                        r = recordingDao.update(r);
 
-                       List<ProcessResult> logs = new ArrayList<>();
+                       ProcessResultList logs = new ProcessResultList();
                        List<File> waveFiles = new ArrayList<>();
                        File streamFolder = getStreamFolder(r);
                        List<RecordingMetaData> metaDataList = 
metaDataDao.getAudioMetaDataByRecording(r.getId());

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
index 4ecca4e..8701558 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/RecordingConverter.java
@@ -34,8 +34,8 @@ import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData;
 import org.apache.openmeetings.db.entity.record.RecordingMetaData.Status;
 import org.apache.openmeetings.util.OmFileHelper;
-import org.apache.openmeetings.util.process.ProcessResult;
 import org.apache.openmeetings.util.process.ProcessHelper;
+import org.apache.openmeetings.util.process.ProcessResultList;
 import org.apache.wicket.util.string.Strings;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
@@ -62,7 +62,7 @@ public class RecordingConverter extends BaseConverter 
implements IRecordingConve
                try {
                        log.debug("recording " + r.getId());
 
-                       List<ProcessResult> logs = new ArrayList<>();
+                       ProcessResultList logs = new ProcessResultList();
                        List<File> waveFiles = new ArrayList<>();
                        File streamFolder = getStreamFolder(r);
 

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/VideoConverter.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/VideoConverter.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/VideoConverter.java
new file mode 100644
index 0000000..765f15e
--- /dev/null
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/VideoConverter.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * 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.
+ */
+package org.apache.openmeetings.core.converter;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_MP4;
+import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.util.process.ProcessHelper;
+import org.apache.openmeetings.util.process.ProcessResult;
+import org.apache.openmeetings.util.process.ProcessResultList;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
+import org.springframework.stereotype.Component;
+
+@Component
+public class VideoConverter extends BaseConverter {
+       private static final Logger log = 
Red5LoggerFactory.getLogger(VideoConverter.class, getWebAppRootKey());
+
+       public void convertVideo(FileItem f, String ext, ProcessResultList 
logs) {
+               try {
+                       File mp4 = f.getFile(EXTENSION_MP4);
+                       f.setType(Type.Video);
+                       String input = f.getFile(ext).getCanonicalPath();
+                       boolean sameExt = EXTENSION_MP4.equals(ext);
+                       Path tmp = null;
+                       if (sameExt) {
+                               //we should do in-place conversion
+                               tmp = Files.createTempFile("video", ".mp4");
+                               input = Files.move(mp4.toPath(), tmp, 
REPLACE_EXISTING).toFile().getCanonicalPath();
+                       }
+                       String[] args = new String[] { getPathToFFMPEG(), "-y"
+                                       , "-i", input //
+                                       , "-c:v", "h264" //
+                                       , "-c:a", "libfaac" //
+                                       , "-c:a", "libfdk_aac" //
+                                       , "-pix_fmt", "yuv420p" //
+                                       , mp4.getCanonicalPath() };
+                       ProcessResult res = 
ProcessHelper.executeScript("convert to MP4 :: " + f.getHash(), args);
+                       logs.add(res);
+                       if (sameExt && tmp != null) {
+                               if (res.isOk()) {
+                                       Files.delete(tmp);
+                               } else {
+                                       //conversion fails, need to move temp 
file back
+                                       Files.move(tmp, mp4.toPath(), 
REPLACE_EXISTING);
+                               }
+                       }
+                       //Parse the width height from the FFMPEG output
+                       Dimension dim = getDimension(res.getError());
+                       f.setWidth(dim.getWidth());
+                       f.setHeight(dim.getHeight());
+                       convertToPng(f, mp4.getCanonicalPath(), logs);
+               } catch (Exception err) {
+                       log.error("[convertToFLV]", err);
+                       logs.add(new ProcessResult("convertToMP4", 
err.getMessage(), err));
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
index ca74063..1d90502 100644
--- 
a/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
+++ 
b/openmeetings-core/src/main/java/org/apache/openmeetings/core/data/file/FileProcessor.java
@@ -25,12 +25,11 @@ import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKe
 
 import java.io.File;
 import java.io.InputStream;
-import java.util.List;
 import java.util.UUID;
 
 import org.apache.openmeetings.core.converter.DocumentConverter;
-import org.apache.openmeetings.core.converter.FlvExplorerConverter;
 import org.apache.openmeetings.core.converter.ImageConverter;
+import org.apache.openmeetings.core.converter.VideoConverter;
 import org.apache.openmeetings.db.dao.file.FileItemDao;
 import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
 import org.apache.openmeetings.db.entity.file.FileItem;
@@ -48,7 +47,7 @@ public class FileProcessor {
 
        //Spring loaded Beans
        @Autowired
-       private FlvExplorerConverter flvExplorerConverter;
+       private VideoConverter videoConverter;
        @Autowired
        private FileItemDao fileDao;
        @Autowired
@@ -58,87 +57,84 @@ public class FileProcessor {
 
        //TODO this method need to be refactored to throw exceptions
        public ProcessResultList processFile(FileItem f, InputStream is) throws 
Exception {
-               ProcessResultList result = new ProcessResultList();
+               ProcessResultList logs = new ProcessResultList();
                // Generate a random string to prevent any problems with
                // foreign characters and duplicates
                String hash = UUID.randomUUID().toString();
 
                File temp = null;
                try {
+                       temp = File.createTempFile(String.format("upload_%s", 
hash), ".tmp");
+                       copyInputStreamToFile(is, temp);
+
                        String ext = getFileExt(f.getName());
                        log.debug("file extension: {}", ext);
-                       StoredFile sf = new StoredFile(hash, ext, is);
-                       // Check variable to see if this file is a presentation
-                       // check if this is a a file that can be converted by
-                       // openoffice-service
-                       boolean isOffice = sf.isOffice();
-                       boolean isPdf = sf.isPdf();
-                       boolean isImage = sf.isImage();
-                       boolean isChart = sf.isChart();
-                       boolean isAsIs = sf.isAsIs();
-                       boolean isVideo = sf.isVideo();
+                       //this method moves stream, so temp file MUST be 
created first
+                       StoredFile sf = new StoredFile(hash, ext, temp);
 
-                       log.debug("isAsIs: " + isAsIs);
+                       log.debug("isAsIs: {}", sf.isAsIs());
 
-                       // add outputfolders for profiles
-                       // if it is a presenation it will be copied to another 
place
-                       if (!(isOffice || isPdf || isImage || isVideo || 
isAsIs)) {
-                               result.addItem("wrongType", new 
ProcessResult("The file type cannot be converted"));
-                               return result;
-                       }
-                       if (isImage) {
+                       if (sf.isImage()) {
                                f.setType(Type.Image);
-                       } else if (isVideo) {
+                       } else if (sf.isVideo()) {
                                f.setType(Type.Video);
-                       } else if (isChart) {
+                       } else if (sf.isChart()) {
                                f.setType(Type.PollChart);
-                       } else if (isPdf || isOffice) {
+                       } else if (sf.isPdf() || sf.isOffice()) {
                                f.setType(Type.Presentation);
+                       } else {
+                               logs.add(new ProcessResult("The file type 
cannot be converted :: " + f.getName()));
+                               return logs;
                        }
                        f.setHash(hash);
 
-                       File file = f.getFile(ext);
-                       log.debug("writing file to: {}", file);
-                       if (!file.getParentFile().exists() && 
!file.getParentFile().mkdirs()) {
-                               result.addItem("No parent", new 
ProcessResult("Unable to create parent for file: " + file.getCanonicalPath()));
-                               return result;
-                       }
-
-                       temp = File.createTempFile(String.format("upload_%s", 
hash), ".tmp");
-                       copyInputStreamToFile(is, temp);
-                       log.debug("canBeConverted: {}", isOffice);
-                       if (isOffice || isPdf) {
-                               copyFile(temp, file);
-                               // convert to pdf, thumbs, swf and 
xml-description
-                               result = docConverter.convertPDF(f, sf);
-                       } else if (isChart) {
-                               //TODO should be implemented
-                               log.debug("uploaded chart file");
-                       } else if (isImage) {
-                               // convert it to JPG
-                               log.debug("##### convert it to JPG: ");
-                               copyFile(temp, file);
-                               result = imageConverter.convertImage(f, sf);
-                       } else if (isVideo) {
-                               copyFile(temp, file);
-                               List<ProcessResult> returnList = 
flvExplorerConverter.convertVideo(f, ext);
-
-                               int i = 0;
-                               for (ProcessResult returnMap : returnList) {
-                                       result.addItem("processVideo " + i++, 
returnMap);
-                               }
-                       }
-                       f = fileDao.update(f);
-                       log.debug("fileId: {}", f.getId());
+                       processFile(f, sf, temp, logs);
                } catch (Exception e) {
                        log.debug("Error while processing the file", e);
-                       result.addItem("exception", new 
ProcessResult("Unexpected exception: " + e.getMessage()));
+                       logs.add(new ProcessResult("Unexpected exception: " + 
e.getMessage()));
                        throw e;
                } finally {
                        if (temp != null && temp.exists() && temp.isFile()) {
                                log.debug("Clean up was successful ? {}", 
temp.delete());
                        }
                }
-               return result;
+               return logs;
+       }
+
+       private void processFile(FileItem f, StoredFile sf, File temp, 
ProcessResultList logs) throws Exception {
+               try {
+                       File file = f.getFile(sf.getExt());
+                       log.debug("writing file to: {}", file);
+                       if (!file.getParentFile().exists() && 
!file.getParentFile().mkdirs()) {
+                               logs.add(new ProcessResult("Unable to create 
parent for file: " + file.getCanonicalPath()));
+                               return;
+                       }
+                       switch(f.getType()) {
+                               case Presentation:
+                                       log.debug("Office document: {}", file);
+                                       copyFile(temp, file);
+                                       // convert to pdf, thumbs, swf and 
xml-description
+                                       docConverter.convertPDF(f, sf, logs);
+                                       break;
+                               case PollChart:
+                                       log.debug("uploaded chart file"); // 
NOT implemented yet
+                                       break;
+                               case Image:
+                                       // convert it to JPG
+                                       log.debug("##### convert it to JPG: ");
+                                       copyFile(temp, file);
+                                       imageConverter.convertImage(f, sf);
+                                       break;
+                               case Video:
+                                       copyFile(temp, file);
+                                       videoConverter.convertVideo(f, 
sf.getExt(), logs);
+                                       break;
+                               default:
+                                       break;
+                       }
+               } finally {
+                       f = fileDao.update(f);
+                       log.debug("fileId: {}", f.getId());
+               }
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java
 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java
index 8bf7ec9..01c271f 100644
--- 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java
+++ 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResult.java
@@ -96,8 +96,9 @@ public class ProcessResult {
                return exitCode;
        }
 
-       public void setExitCode(Integer exitCode) {
+       public ProcessResult setExitCode(Integer exitCode) {
                this.exitCode = exitCode;
+               return this;
        }
 
        public boolean isOk() {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResultList.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResultList.java
 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResultList.java
index df89c7e..52677f4 100644
--- 
a/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResultList.java
+++ 
b/openmeetings-util/src/main/java/org/apache/openmeetings/util/process/ProcessResultList.java
@@ -18,14 +18,8 @@
  */
 package org.apache.openmeetings.util.process;
 
-import static 
org.apache.openmeetings.util.OpenmeetingsVariables.getWebAppRootKey;
-import static org.red5.logging.Red5LoggerFactory.getLogger;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.slf4j.Logger;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  *
@@ -35,16 +29,10 @@ import org.slf4j.Logger;
  *
  */
 public class ProcessResultList {
-       private static final Logger log = getLogger(ProcessResultList.class, 
getWebAppRootKey());
+       private List<ProcessResult> jobs = new ArrayList<>();
 
-       private Map<String, ProcessResult> jobs = new LinkedHashMap<>();
-
-       public ProcessResult addItem(String name, ProcessResult processResult) {
-               if (jobs.containsKey(name)) {
-                       log.error("Duplicate key in jobslist:: " + name);
-                       return null;
-               }
-               return jobs.put(name, processResult);
+       public void add(ProcessResult res) {
+               jobs.add(res);
        }
 
        /**
@@ -53,8 +41,8 @@ public class ProcessResultList {
         * @return
         */
        public boolean hasError() {
-               for (Entry<String, ProcessResult> entry : jobs.entrySet()) {
-                       if (!entry.getValue().isOk()) {
+               for (ProcessResult res : jobs) {
+                       if (!res.isOk()) {
                                return true;
                        }
                }
@@ -68,11 +56,11 @@ public class ProcessResultList {
         */
        public String getLogMessage() {
                StringBuilder logMessage = new StringBuilder();
-               for (Entry<String, ProcessResult> entry : jobs.entrySet()) {
+               for (ProcessResult res : jobs) {
                        logMessage.append("key: ");
-                       logMessage.append(entry.getKey());
+                       logMessage.append(res.getProcess());
                        logMessage.append("\r\n");
-                       logMessage.append(entry.getValue().buildLogMessage());
+                       logMessage.append(res.buildLogMessage());
                }
                return logMessage.toString();
        }
@@ -81,7 +69,7 @@ public class ProcessResultList {
                return jobs.size();
        }
 
-       public Map<String, ProcessResult> getJobs() {
+       public List<ProcessResult> getJobs() {
                return jobs;
        }
 }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/466c0a04/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
index d3f46a9..7923ba2 100644
--- 
a/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
+++ 
b/openmeetings-web/src/main/java/org/apache/openmeetings/web/room/sidebar/UploadDialog.java
@@ -24,7 +24,6 @@ import static 
org.apache.openmeetings.web.app.WebSession.getUserId;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map.Entry;
 
 import org.apache.openmeetings.core.data.file.FileProcessor;
 import org.apache.openmeetings.db.dao.basic.ConfigurationDao;
@@ -197,8 +196,8 @@ public class UploadDialog extends 
AbstractFormDialog<String> {
 
                                try {
                                        ProcessResultList logs = 
getBean(FileProcessor.class).processFile(f, fu.getInputStream());
-                                       for (Entry<String, ProcessResult> entry 
: logs.getJobs().entrySet()) {
-                                               
getBean(FileItemLogDao.class).add(entry.getValue().getProcess(), f, 
entry.getValue());
+                                       for (ProcessResult res : 
logs.getJobs()) {
+                                               
getBean(FileItemLogDao.class).add(res.getProcess(), f, res);
                                        }
                                        room.getSidebar().updateFiles(target);
                                        if (logs.hasError()) {

Reply via email to