Handle image loading
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaDetailElement.java
index cf5abd37782ee4ecc6bf02ec3d259da656e7b300..a2a6de62061cf58a6979d624fa55a0e59315df85 100644 (file)
@@ -15,12 +15,14 @@ import java.util.List;
 import java.util.Set;
 
 import org.apache.http.HttpException;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Label;
 
+import eu.etaxonomy.cdm.common.media.ImageInfo;
 import eu.etaxonomy.cdm.model.media.Media;
 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
 import eu.etaxonomy.cdm.model.media.MediaUtils;
-import eu.etaxonomy.taxeditor.model.AbstractUtility;
 import eu.etaxonomy.taxeditor.model.MessagingUtils;
 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
@@ -51,14 +53,7 @@ public class MediaDetailElement extends AbstractCdmDetailElement<Media>{
      */
     private String uriBuffer;
     private ImageElement element_image;
-
-    private final Runnable postRunnable = new Runnable(){
-        @Override
-        public void run() {
-            AbstractUtility.reflowDetailsViewer();
-            AbstractUtility.reflowSupplementalViewer();
-        }
-    };
+    private Label lblNoImage;
 
     public MediaDetailElement(CdmFormFactory formFactory, ICdmFormElement formElement) {
         super(formFactory, formElement);
@@ -89,10 +84,18 @@ public class MediaDetailElement extends AbstractCdmDetailElement<Media>{
             if(uri==null){
                 uriBuffer=textUri.getText();
             }
-            try {
-                loadImage(singleMediaRepresentationPart.getUri(), true);
-            } catch (Exception e) {
-                handleException(e);
+            else{
+
+                ImageInfo imageInfo;
+                try {
+                    imageInfo = ImageInfo.NewInstance(uri, 10000);
+                    singleMediaRepresentationPart.getMediaRepresentation().setMimeType(imageInfo.getMimeType());
+                    singleMediaRepresentationPart.getMediaRepresentation().setSuffix(imageInfo.getSuffix());
+                    element_image = formFactory.createImageElement(parentFormElement, uri, style);
+                    loadImage(singleMediaRepresentationPart.getUri());
+                } catch (Exception e) {
+                    handleException();
+                }
             }
         }
     }
@@ -146,9 +149,9 @@ public class MediaDetailElement extends AbstractCdmDetailElement<Media>{
 
             element_image = formFactory.createImageElement(parentFormElement, null, style);
             try {
-                loadImage(singleMediaRepresentationPart.getUri(), false);
+                loadImage(singleMediaRepresentationPart.getUri());
             } catch (Exception e) {
-                handleException(e);
+                handleException();
             }
         }
     }
@@ -173,24 +176,27 @@ public class MediaDetailElement extends AbstractCdmDetailElement<Media>{
         isAdvancedMediaView =  false;
     }
 
-    private void loadImage(URI uri, boolean updateDimensions) throws IOException, HttpException{
+    private void loadImage(URI uri) throws IOException, HttpException{
         element_image.initImageUri(uri);
-        element_image.loadImage(postRunnable);
+        element_image.loadImage();
         if(uri == null){
             return;
         }
+        lblNoImage.dispose();
+        lblNoImage = null;
     }
 
-    private void handleException(Exception e) {
-        element_image.unloadImage(postRunnable);
-        element_image.loadImage(new Runnable(){
-            @Override
-            public void run() {
-                AbstractUtility.reflowDetailsViewer();
-                AbstractUtility.reflowSupplementalViewer();
-            }
-        });
+    private void handleException() {
+        element_image.unloadImage();
+        element_image.loadImage();
+        element_image.dispose();
+        if(lblNoImage==null){
+            lblNoImage = formFactory.createLabel(getLayoutComposite(), "No Image found");
+            lblNoImage.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
+            lblNoImage.setAlignment(SWT.CENTER);
+        }
     }
+
     public boolean isAdvancedMediaView() {
         return isAdvancedMediaView;
     }