Repository: openmeetings
Updated Branches:
  refs/heads/3.3.x d096de19f -> 6540aea60


[OPENMEETINGS-1671] more tests on file converter


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

Branch: refs/heads/3.3.x
Commit: 6540aea60fee18c29a585138b8563081e51451ec
Parents: d096de1
Author: Maxim Solodovnik <[email protected]>
Authored: Thu Sep 28 12:02:47 2017 +0700
Committer: Maxim Solodovnik <[email protected]>
Committed: Thu Sep 28 12:10:21 2017 +0700

----------------------------------------------------------------------
 .../core/converter/BaseConverter.java           |  4 +-
 .../core/converter/ImageConverter.java          | 43 ++++++++++++---
 .../openmeetings/db/dto/file/FileItemDTO.java   | 17 ++++--
 .../test/core/file/TestFileProcessor.java       | 58 ++++++++++++++++++++
 .../test/webservice/AbstractWebServiceTest.java |  8 +--
 5 files changed, 110 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6540aea6/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 a8dffe2..728357d 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
@@ -58,7 +58,7 @@ public abstract class BaseConverter {
        public final static String EXEC_EXT = 
System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") < 0 ? "" : 
".exe";
 
        @Autowired
-       private ConfigurationDao configurationDao;
+       private ConfigurationDao cfgDao;
        @Autowired
        private RecordingMetaDataDao metaDataDao;
        @Autowired
@@ -75,7 +75,7 @@ public abstract class BaseConverter {
        }
 
        private String getPath(String key, String app) {
-               String path = configurationDao.getConfValue(key, String.class, 
"");
+               String path = cfgDao.getConfValue(key, String.class, "");
                if (!Strings.isEmpty(path) && !path.endsWith(File.separator)) {
                        path += File.separator;
                }

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6540aea6/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 e9fe235..eea8949 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
@@ -18,16 +18,21 @@
  */
 package org.apache.openmeetings.core.converter;
 
+import static org.apache.commons.io.FileUtils.copyFile;
 import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG;
+import static org.apache.openmeetings.util.OmFileHelper.JPG_MIME_TYPE;
 import static 
org.apache.openmeetings.util.OmFileHelper.getUploadProfilesUserDir;
 import static org.apache.openmeetings.util.OmFileHelper.profileFileName;
 import static org.apache.openmeetings.util.OmFileHelper.profileImagePrefix;
-import static org.apache.openmeetings.util.OmFileHelper.thumbImagePrefix;
 import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
+import static org.apache.openmeetings.util.process.ConverterProcessResult.ZERO;
+import static org.apache.tika.metadata.HttpHeaders.CONTENT_TYPE;
 
 import java.io.File;
 import java.io.FileFilter;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.openmeetings.db.dao.user.UserDao;
@@ -38,9 +43,15 @@ import org.apache.openmeetings.util.StoredFile;
 import org.apache.openmeetings.util.process.ConverterProcessResult;
 import org.apache.openmeetings.util.process.ConverterProcessResultList;
 import org.apache.openmeetings.util.process.ProcessHelper;
+import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TIFF;
+import org.apache.tika.parser.ParseContext;
+import org.apache.tika.parser.Parser;
+import org.apache.tika.parser.image.ImageParser;
 import org.red5.logging.Red5LoggerFactory;
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.xml.sax.helpers.DefaultHandler;
 
 public class ImageConverter extends BaseConverter {
        private static final Logger log = 
Red5LoggerFactory.getLogger(ImageConverter.class, webAppRootKey);
@@ -57,14 +68,10 @@ public class ImageConverter extends BaseConverter {
 
                        log.debug("##### convertImage destinationFile: " + jpg);
                        returnMap.addItem("processJPG", convertSingleJpg(img, 
jpg));
+               } else if (!jpg.exists()){
+                       copyFile(f.getFile(sf.getExt()), jpg);
                }
-               ConverterProcessResult res = ProcessHelper.executeScript("get 
image dimensions :: " + f.getId()
-                               , new String[] {getPathToIdentify(), "-format", 
"%wx%h", jpg.getCanonicalPath()});
-               returnMap.addItem("get JPG dimensions", res);
-               Dimension dim = getDimension(res.getOut());
-               f.setWidth(dim.width);
-               f.setHeight(dim.height);
-               returnMap.addItem("processThumb", 
generateThumb(thumbImagePrefix, jpg, 50));
+               returnMap.addItem("get JPG dimensions", initSize(f, jpg, 
JPG_MIME_TYPE));
                return returnMap;
        }
 
@@ -109,6 +116,26 @@ public class ImageConverter extends BaseConverter {
                return returnMap;
        }
 
+       private static ConverterProcessResult initSize(BaseFileItem f, File 
img, String mime) {
+               ConverterProcessResult res = new ConverterProcessResult();
+               res.setProcess("get image dimensions :: " + f.getId());
+               final Parser parser = new ImageParser();
+               try (InputStream is = new FileInputStream(img)) {
+                       Metadata metadata = new Metadata();
+                       metadata.set(CONTENT_TYPE, mime);
+                       parser.parse(is, new DefaultHandler(), metadata, new 
ParseContext());
+                       
f.setWidth(Integer.valueOf(metadata.get(TIFF.IMAGE_WIDTH)));
+                       
f.setHeight(Integer.valueOf(metadata.get(TIFF.IMAGE_LENGTH)));
+                       res.setExitCode(ZERO);
+               } catch (Exception e) {
+                       log.error("Error while getting dimensions", e);
+                       res.setError("Error while getting dimensions");
+                       res.setException(e.getMessage());
+                       res.setExitCode(-1);
+               }
+               return res;
+       }
+
        /**
         * -density 150 -resize 800
         * @throws IOException

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6540aea6/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
index 563eafe..125b1ba 100644
--- 
a/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
+++ 
b/openmeetings-db/src/main/java/org/apache/openmeetings/db/dto/file/FileItemDTO.java
@@ -26,8 +26,8 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
-import org.apache.openmeetings.db.entity.file.FileItem;
 import org.apache.openmeetings.db.entity.file.BaseFileItem.Type;
+import org.apache.openmeetings.db.entity.file.FileItem;
 
 /**
  * This Object will represent a File on the File-System
@@ -101,16 +101,18 @@ public class FileItemDTO implements Serializable {
                return name;
        }
 
-       public void setName(String name) {
+       public FileItemDTO setName(String name) {
                this.name = name;
+               return this;
        }
 
        public String getHash() {
                return hash;
        }
 
-       public void setHash(String hash) {
+       public FileItemDTO setHash(String hash) {
                this.hash = hash;
+               return this;
        }
 
        public Long getParentId() {
@@ -157,24 +159,27 @@ public class FileItemDTO implements Serializable {
                return externalId;
        }
 
-       public void setExternalId(String externalId) {
+       public FileItemDTO setExternalId(String externalId) {
                this.externalId = externalId;
+               return this;
        }
 
        public String getExternalType() {
                return externalType;
        }
 
-       public void setExternalType(String externalType) {
+       public FileItemDTO setExternalType(String externalType) {
                this.externalType = externalType;
+               return this;
        }
 
        public Type getType() {
                return type;
        }
 
-       public void setType(Type type) {
+       public FileItemDTO setType(Type type) {
                this.type = type;
+               return this;
        }
 
        public Integer getWidth() {

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6540aea6/openmeetings-web/src/test/java/org/apache/openmeetings/test/core/file/TestFileProcessor.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/core/file/TestFileProcessor.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/core/file/TestFileProcessor.java
new file mode 100644
index 0000000..82ca41a
--- /dev/null
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/core/file/TestFileProcessor.java
@@ -0,0 +1,58 @@
+/*
+ * 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.test.core.file;
+
+import static 
org.apache.openmeetings.util.OmFileHelper.getDefaultProfilePicture;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.UUID;
+
+import org.apache.openmeetings.core.data.file.FileProcessor;
+import org.apache.openmeetings.db.dto.file.FileItemDTO;
+import org.apache.openmeetings.db.entity.file.BaseFileItem;
+import org.apache.openmeetings.db.entity.file.FileItem;
+import org.apache.openmeetings.test.AbstractJUnitDefaults;
+import org.apache.openmeetings.util.process.ConverterProcessResultList;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class TestFileProcessor extends AbstractJUnitDefaults {
+       private static final String FILE_NAME = "test_name";
+
+       @Autowired
+       protected FileProcessor processor;
+
+       @Test
+       public void testProcessJpeg() throws Exception {
+               for (String ext : new String[] {null, "txt", "png"}) {
+                       FileItem f = new FileItemDTO()
+                                       .setName(String.format("%s.%s", 
FILE_NAME, ext))
+                                       .setHash(UUID.randomUUID().toString())
+                                       
.setType(BaseFileItem.Type.Recording).get();
+                       try (InputStream is = new 
FileInputStream(getDefaultProfilePicture())) {
+                               ConverterProcessResultList result = 
processor.processFile(f, is);
+                               assertFalse("Conversion should be successful", 
result.hasError());
+                               assertEquals("Type should be image", 
BaseFileItem.Type.Image, f.getType());
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/openmeetings/blob/6540aea6/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
----------------------------------------------------------------------
diff --git 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
index 598de43..17cfd57 100644
--- 
a/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
+++ 
b/openmeetings-web/src/test/java/org/apache/openmeetings/test/webservice/AbstractWebServiceTest.java
@@ -149,10 +149,10 @@ public class AbstractWebServiceTest extends 
AbstractJUnitDefaults {
 
                FileItemDTO f1 = null;
                try (InputStream is = new FileInputStream(fsFile)) {
-                       FileItemDTO file = new FileItemDTO();
-                       file.setName(name);
-                       file.setHash(UUID.randomUUID().toString());
-                       file.setType(type);
+                       FileItemDTO file = new FileItemDTO()
+                                       .setName(name)
+                                       .setHash(UUID.randomUUID().toString())
+                                       .setType(type);
                        List<Attachment> atts = new ArrayList<>();
                        atts.add(new Attachment("file", 
MediaType.APPLICATION_JSON, file));
                        atts.add(new Attachment("stream", 
MediaType.APPLICATION_OCTET_STREAM, is));

Reply via email to