X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/a644d73a7df42034b8216d1ef7869091fa23694d..4b30e08bd7dda419269eb80d4eba302f25e32621:/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java diff --git a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java index cf5abd377..5e033d780 100644 --- a/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java +++ b/eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/ui/section/media/MediaDetailElement.java @@ -9,18 +9,21 @@ */ package eu.etaxonomy.taxeditor.ui.section.media; -import java.io.IOException; import java.net.URI; import java.util.List; import java.util.Set; -import org.apache.http.HttpException; +import org.apache.sanselan.ImageReadException; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Label; +import eu.etaxonomy.cdm.common.UriUtils; +import eu.etaxonomy.cdm.common.media.ImageInfo; +import eu.etaxonomy.cdm.model.media.ImageFile; 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 +54,7 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ */ 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,14 +85,51 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ if(uri==null){ uriBuffer=textUri.getText(); } - try { - loadImage(singleMediaRepresentationPart.getUri(), true); - } catch (Exception e) { - handleException(e); + else{ + createImageElement(uri); + } + } + } + + private void createImageElement(URI uri) { + ImageInfo imageInfo; + try { + if(uri == null){ + return; + } + //first check if uri refers to an actual (non-image) file + UriUtils.getInputStream(uri);// will fail with a FileNotFoundException if not + imageInfo = ImageInfo.NewInstance(uri, 10000);//will fail when it is no image file + singleMediaRepresentationPart.setSize((int) imageInfo.getLength()); + if(singleMediaRepresentationPart instanceof ImageFile){ + ((ImageFile) singleMediaRepresentationPart).setHeight(imageInfo.getHeight()); + ((ImageFile) singleMediaRepresentationPart).setWidth(imageInfo.getWidth()); } + singleMediaRepresentationPart.getMediaRepresentation().setMimeType(imageInfo.getMimeType()); + singleMediaRepresentationPart.getMediaRepresentation().setSuffix(imageInfo.getSuffix()); + element_image = formFactory.createImageElement(parentFormElement, uri, style); + element_image.initImageUri(uri); + element_image.loadImage(); + disposeErrorLabel(); + } catch (Exception e){ + if(e.getCause()!=null && e.getCause().getClass().equals(ImageReadException.class)){ + disposeErrorLabel(); + handleException(uri, "No preview available for this file type"); + } + else{ + disposeErrorLabel(); + handleException(uri, "No file found"); + } } } + private void disposeErrorLabel() { + if(lblNoImage!=null){ + lblNoImage.dispose(); + } + lblNoImage = null; + } + public void toggleAdvancedMediaView() { if (getEntity().getRepresentations() != null && (getEntity().getRepresentations().size() > 1 || @@ -144,12 +177,7 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ } textUri.getLayoutComposite().layout(); - element_image = formFactory.createImageElement(parentFormElement, null, style); - try { - loadImage(singleMediaRepresentationPart.getUri(), false); - } catch (Exception e) { - handleException(e); - } + createImageElement(singleMediaRepresentationPart.getUri()); } } @@ -173,24 +201,19 @@ public class MediaDetailElement extends AbstractCdmDetailElement{ isAdvancedMediaView = false; } - private void loadImage(URI uri, boolean updateDimensions) throws IOException, HttpException{ - element_image.initImageUri(uri); - element_image.loadImage(postRunnable); - if(uri == null){ - return; + private void handleException(URI uri, String labelText) { + if(element_image!=null){ + element_image.unloadImage(); + element_image.loadImage(); + element_image.dispose(); + } + if(lblNoImage==null){ + lblNoImage = formFactory.createLabel(getLayoutComposite(), labelText); + lblNoImage.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1)); + lblNoImage.setAlignment(SWT.CENTER); } } - private void handleException(Exception e) { - element_image.unloadImage(postRunnable); - element_image.loadImage(new Runnable(){ - @Override - public void run() { - AbstractUtility.reflowDetailsViewer(); - AbstractUtility.reflowSupplementalViewer(); - } - }); - } public boolean isAdvancedMediaView() { return isAdvancedMediaView; }