FINERACT-288 - Client's Image Uploaded Not Showing on UI in Amazon S3

Project: http://git-wip-us.apache.org/repos/asf/incubator-fineract/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-fineract/commit/628fb303
Tree: http://git-wip-us.apache.org/repos/asf/incubator-fineract/tree/628fb303
Diff: http://git-wip-us.apache.org/repos/asf/incubator-fineract/diff/628fb303

Branch: refs/heads/develop
Commit: 628fb30347898e5051b297598c69a628eec4152a
Parents: b60779b
Author: Nazeer Hussain Shaik <[email protected]>
Authored: Fri Dec 9 16:07:35 2016 +0530
Committer: Nazeer Hussain Shaik <[email protected]>
Committed: Fri Dec 9 16:07:35 2016 +0530

----------------------------------------------------------------------
 .../contentrepository/S3ContentRepository.java  |  9 +-
 .../documentmanagement/data/ImageData.java      | 86 +++++++++++++++-----
 .../service/ImageReadPlatformServiceImpl.java   |  4 +-
 3 files changed, 76 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/628fb303/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/contentrepository/S3ContentRepository.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/contentrepository/S3ContentRepository.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/contentrepository/S3ContentRepository.java
index ce7cd5e..28109fe 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/contentrepository/S3ContentRepository.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/contentrepository/S3ContentRepository.java
@@ -38,6 +38,7 @@ import com.amazonaws.AmazonServiceException;
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3Client;
+import com.amazonaws.services.s3.model.AmazonS3Exception;
 import com.amazonaws.services.s3.model.DeleteObjectRequest;
 import com.amazonaws.services.s3.model.GetObjectRequest;
 import com.amazonaws.services.s3.model.ObjectMetadata;
@@ -134,8 +135,12 @@ public class S3ContentRepository implements 
ContentRepository {
 
     @Override
     public ImageData fetchImage(final ImageData imageData) {
-        final S3Object s3object = this.s3Client.getObject(new 
GetObjectRequest(this.s3BucketName, imageData.location()));
-        imageData.updateContent(s3object.getObjectContent());
+       try {
+               final S3Object s3object = this.s3Client.getObject(new 
GetObjectRequest(this.s3BucketName, imageData.location()));
+            imageData.updateContent(s3object.getObjectContent());      
+       }catch(AmazonS3Exception e) {
+               logger.error(e.getMessage());
+       }
         return imageData;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/628fb303/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/data/ImageData.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/data/ImageData.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/data/ImageData.java
index a0373d1..3196efc 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/data/ImageData.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/data/ImageData.java
@@ -25,6 +25,7 @@ import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
@@ -35,9 +36,13 @@ import org.apache.commons.lang.StringUtils;
 import 
org.apache.fineract.infrastructure.documentmanagement.contentrepository.ContentRepositoryUtils;
 import 
org.apache.fineract.infrastructure.documentmanagement.domain.StorageType;
 import org.apache.poi.util.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ImageData {
 
+    private final static Logger logger = 
LoggerFactory.getLogger(ImageData.class);
+
     @SuppressWarnings("unused")
     private final Long imageId;
     private final String location;
@@ -56,17 +61,17 @@ public class ImageData {
     }
 
     public byte[] getContent() {
-        // TODO Vishwas Fix error handling
         try {
-            if (this.inputStream == null) {
+            if (this.storageType.equals(StorageType.S3.getValue()) && 
this.inputStream != null) {
+                return IOUtils.toByteArray(this.inputStream);
+            } else if 
(this.storageType.equals(StorageType.FILE_SYSTEM.getValue()) && this.file != 
null) {
                 final FileInputStream fileInputStream = new 
FileInputStream(this.file);
                 return IOUtils.toByteArray(fileInputStream);
             }
-
-            return IOUtils.toByteArray(this.inputStream);
-        } catch (final IOException e) {
-            return null;
+        } catch (IOException e) {
+            logger.error(e.getMessage());
         }
+        return null;
     }
 
     public byte[] resizeImage(InputStream in, int maxWidth, int maxHeight) 
throws IOException {
@@ -102,22 +107,33 @@ public class ImageData {
     }
 
     public byte[] getContentOfSize(Integer maxWidth, Integer maxHeight) {
-        if (maxWidth == null && maxHeight == null) { return getContent(); }
-        FileInputStream fis = null;
-        try {
-            fis = new FileInputStream(this.file);
-            byte[] out = resizeImage(fis, maxWidth != null ? maxWidth : 
Integer.MAX_VALUE, maxHeight != null ? maxHeight
-                    : Integer.MAX_VALUE);
-            return out;
-        } catch (IOException ex) {
-            return null;
-        } finally {
-            if (fis != null) {
-                try {
-                    fis.close();
-                } catch (IOException ex) {}
+        if (maxWidth == null && maxHeight != null) { return getContent(); }
+        byte[] out = null;
+        if (this.storageType.equals(StorageType.S3.getValue()) && 
this.inputStream != null) {
+            try {
+                out = resizeImage(this.inputStream, maxWidth != null ? 
maxWidth : Integer.MAX_VALUE,
+                        maxHeight != null ? maxHeight : Integer.MAX_VALUE);
+            } catch (IOException e) {
+                logger.error(e.getMessage());
+            }
+        } else if (this.storageType.equals(StorageType.FILE_SYSTEM.getValue()) 
&& this.file != null) {
+            FileInputStream fis = null;
+            try {
+                fis = new FileInputStream(this.file);
+                out = resizeImage(fis, maxWidth != null ? maxWidth : 
Integer.MAX_VALUE, maxHeight != null ? maxHeight : Integer.MAX_VALUE);
+            } catch (IOException ex) {
+                logger.error(ex.getMessage());
+            } finally {
+                if (fis != null) {
+                    try {
+                        fis.close();
+                    } catch (IOException ex) {
+                        logger.error(ex.getMessage());
+                    }
+                }
             }
         }
+        return out;
     }
 
     private void setImageContentType(String filename) {
@@ -161,4 +177,34 @@ public class ImageData {
         return this.entityDisplayName;
     }
 
+    public boolean available() {
+        int available = -1; // not -1
+        if (this.storageType.equals(StorageType.S3.getValue()) && 
this.inputStream != null) {
+            try {
+                available = this.inputStream.available();
+            } catch (IOException e) {
+                logger.error(e.getMessage());
+            }
+        } else if (this.storageType.equals(StorageType.FILE_SYSTEM.getValue()) 
&& this.file != null) {
+            FileInputStream fileInputStream = null;
+            try {
+                fileInputStream = new FileInputStream(this.file);
+                available = fileInputStream.available();
+                fileInputStream.close();
+            } catch (FileNotFoundException e) {
+                logger.error(e.getMessage());
+            } catch (IOException e) {
+                logger.error(e.getMessage());
+            } finally {
+                if (fileInputStream != null) {
+                    try {
+                        fileInputStream.close();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+        return available >= 0;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/628fb303/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/service/ImageReadPlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/service/ImageReadPlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/service/ImageReadPlatformServiceImpl.java
index 9348268..c62fc91 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/service/ImageReadPlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/documentmanagement/service/ImageReadPlatformServiceImpl.java
@@ -103,7 +103,9 @@ public class ImageReadPlatformServiceImpl implements 
ImageReadPlatformService {
             final ContentRepository contentRepository = 
this.contentRepositoryFactory.getRepository(imageData.storageType());
             final ImageData result = contentRepository.fetchImage(imageData);
 
-            if (result.getContent() == null) { throw new 
ImageNotFoundException(entityType, entityId); }
+          //Once we read content EofSensorInputStream, the wrappedStream 
object is becoming null. So further image source is becoming null 
+            //For Amazon S3. If file is not present, already 
S3ContentRepository would have thrown this exception.
+            if (!result.available()) { throw new 
ImageNotFoundException(entityType, entityId); }
 
             return result;
         } catch (final EmptyResultDataAccessException e) {

Reply via email to