3 * Copyright (C) 2014 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.ui
.section
.media
;
13 import java
.util
.List
;
16 import org
.apache
.sanselan
.ImageReadException
;
17 import org
.eclipse
.swt
.SWT
;
18 import org
.eclipse
.swt
.widgets
.Label
;
20 import eu
.etaxonomy
.cdm
.common
.UriUtils
;
21 import eu
.etaxonomy
.cdm
.common
.media
.ImageInfo
;
22 import eu
.etaxonomy
.cdm
.model
.media
.ImageFile
;
23 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
24 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentation
;
25 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentationPart
;
26 import eu
.etaxonomy
.cdm
.model
.media
.MediaUtils
;
27 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
28 import eu
.etaxonomy
.taxeditor
.preference
.IPreferenceKeys
;
29 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
30 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
31 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
32 import eu
.etaxonomy
.taxeditor
.ui
.element
.ImageElement
;
33 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
34 import eu
.etaxonomy
.taxeditor
.ui
.element
.UriWithLabelElement
;
35 import eu
.etaxonomy
.taxeditor
.ui
.section
.AbstractCdmDetailElement
;
42 public class MediaDetailElement
extends AbstractCdmDetailElement
<Media
>{
44 private UriWithLabelElement textUri
;
45 private MediaRepresentationSection section_mediaRepresentation
;
47 private boolean isAdvancedMediaView
;
48 private MediaRepresentationPart singleMediaRepresentationPart
;
49 private ICdmFormElement parentFormElement
;
53 * Used to store the URI even if it is invalid and thus cannot be stored in CDM
55 private String uriBuffer
;
56 private ImageElement element_image
;
57 private Label lblNoImage
;
59 public MediaDetailElement(CdmFormFactory formFactory
, ICdmFormElement formElement
) {
60 super(formFactory
, formElement
);
64 protected void createControls(ICdmFormElement formElement
, Media entity
, int style
) {
65 this.parentFormElement
= formElement
;
70 public void setEntity(Media entity
) {
71 super.setEntity(entity
);
72 if(singleMediaRepresentationPart
==null){
73 singleMediaRepresentationPart
= MediaUtils
.initFirstMediaRepresentationPart(entity
, true);
75 initIsAdvancedMediaView();
80 public void handleEvent(Object eventSource
){
81 if(eventSource
==textUri
){
82 textUri
.setBackground(getPersistentBackground());
83 URI uri
= textUri
.parseText();
84 singleMediaRepresentationPart
.setUri(uri
);
86 uriBuffer
=textUri
.getText();
89 createImageElement(uri
);
94 private void createImageElement(URI uri
) {
100 //first check if uri refers to an actual (non-image) file
101 UriUtils
.getInputStream(uri
);// will fail with a FileNotFoundException if not
102 imageInfo
= ImageInfo
.NewInstance(uri
, 10000);//will fail when it is no image file
103 singleMediaRepresentationPart
.setSize((int) imageInfo
.getLength());
104 if(singleMediaRepresentationPart
instanceof ImageFile
){
105 ((ImageFile
) singleMediaRepresentationPart
).setHeight(imageInfo
.getHeight());
106 ((ImageFile
) singleMediaRepresentationPart
).setWidth(imageInfo
.getWidth());
108 singleMediaRepresentationPart
.getMediaRepresentation().setMimeType(imageInfo
.getMimeType());
109 singleMediaRepresentationPart
.getMediaRepresentation().setSuffix(imageInfo
.getSuffix());
110 element_image
= formFactory
.createImageElement(parentFormElement
, uri
, style
);
111 element_image
.initImageUri(uri
);
112 element_image
.loadImage();
114 } catch (Exception e
){
115 if(e
.getCause()!=null && e
.getCause().getClass().equals(ImageReadException
.class)){
117 handleException(uri
, "No preview available for this file type");
121 handleException(uri
, "No file found");
126 private void disposeErrorLabel() {
127 if(lblNoImage
!=null){
128 lblNoImage
.dispose();
133 public void toggleAdvancedMediaView() {
134 if (getEntity().getRepresentations() != null
135 && (getEntity().getRepresentations().size() > 1 ||
136 (getEntity().getRepresentations().size() == 1
137 && getEntity().getRepresentations().iterator().next().getParts().size() > 1))) {
138 MessagingUtils
.informationDialog("Toggling not possible",
139 "Media has consists of multiple representations or representatio parts");
140 // toggling is only possible if there are no more than one
141 // MediaRepresentation resp. MediaRepresentationParts
144 isAdvancedMediaView
= !isAdvancedMediaView
;
146 reflowParentScrolledForm(true);
149 private void showAdvancedView() {
150 if(isAdvancedMediaView
){
152 removeElementsAndControls(textUri
);
154 if(element_image
!=null){
155 element_image
.dispose();
156 element_image
= null;
158 section_mediaRepresentation
= formFactory
.createMediaRepresentationSection(getConversationHolder(), parentFormElement
, style
);
159 section_mediaRepresentation
.setLayoutData(LayoutConstants
.FILL_HORIZONTALLY(2, 1));
160 section_mediaRepresentation
.setEntity(getEntity());
161 //set buffered uri as text if uri had parsing problems in simple view
163 section_mediaRepresentation
.getLayoutComposite().getChildren();
167 if(section_mediaRepresentation
!=null){
168 removeElementsAndControls(section_mediaRepresentation
);
170 textUri
= formFactory
.createUriWithLabelElement(parentFormElement
, "Media URI", null, style
);
171 URI uri
= singleMediaRepresentationPart
.getUri();
172 textUri
.setParsedText(uri
);
173 //set buffered uri as text if uri had parsing problems in advanced view
174 if(uri
==null && uriBuffer
!=null){
175 textUri
.setText(uriBuffer
);
178 textUri
.getLayoutComposite().layout();
180 createImageElement(singleMediaRepresentationPart
.getUri());
184 private void initIsAdvancedMediaView(){
185 if(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.SHOW_ADVANCED_MEDIA_SECTION
)){
186 isAdvancedMediaView
= true;
189 Set
<MediaRepresentation
> representations
= getEntity().getRepresentations();
190 if(representations
.size()>1){
191 isAdvancedMediaView
= true;
194 if(representations
.size()==1){
195 List
<MediaRepresentationPart
> parts
= representations
.iterator().next().getParts();
197 isAdvancedMediaView
= true;
201 isAdvancedMediaView
= false;
204 private void handleException(URI uri
, String labelText
) {
205 if(element_image
!=null){
206 element_image
.unloadImage();
207 element_image
.loadImage();
208 element_image
.dispose();
210 if(lblNoImage
==null){
211 lblNoImage
= formFactory
.createLabel(getLayoutComposite(), labelText
);
212 lblNoImage
.setLayoutData(LayoutConstants
.FILL_HORIZONTALLY(2, 1));
213 lblNoImage
.setAlignment(SWT
.CENTER
);
217 public boolean isAdvancedMediaView() {
218 return isAdvancedMediaView
;
221 public void setUriBuffer(String uriBuffer
) {
222 this.uriBuffer
= uriBuffer
;
225 public String
getUriBuffer() {