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
.eclipse
.swt
.SWT
;
17 import org
.eclipse
.swt
.widgets
.Label
;
19 import eu
.etaxonomy
.cdm
.common
.media
.ImageInfo
;
20 import eu
.etaxonomy
.cdm
.model
.media
.Media
;
21 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentation
;
22 import eu
.etaxonomy
.cdm
.model
.media
.MediaRepresentationPart
;
23 import eu
.etaxonomy
.cdm
.model
.media
.MediaUtils
;
24 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
25 import eu
.etaxonomy
.taxeditor
.preference
.IPreferenceKeys
;
26 import eu
.etaxonomy
.taxeditor
.preference
.PreferencesUtil
;
27 import eu
.etaxonomy
.taxeditor
.ui
.element
.CdmFormFactory
;
28 import eu
.etaxonomy
.taxeditor
.ui
.element
.ICdmFormElement
;
29 import eu
.etaxonomy
.taxeditor
.ui
.element
.ImageElement
;
30 import eu
.etaxonomy
.taxeditor
.ui
.element
.LayoutConstants
;
31 import eu
.etaxonomy
.taxeditor
.ui
.element
.UriWithLabelElement
;
32 import eu
.etaxonomy
.taxeditor
.ui
.section
.AbstractCdmDetailElement
;
39 public class MediaDetailElement
extends AbstractCdmDetailElement
<Media
>{
41 private UriWithLabelElement textUri
;
42 private MediaRepresentationSection section_mediaRepresentation
;
44 private boolean isAdvancedMediaView
;
45 private MediaRepresentationPart singleMediaRepresentationPart
;
46 private ICdmFormElement parentFormElement
;
50 * Used to store the URI even if it is invalid and thus cannot be stored in CDM
52 private String uriBuffer
;
53 private ImageElement element_image
;
54 private Label lblNoImage
;
56 public MediaDetailElement(CdmFormFactory formFactory
, ICdmFormElement formElement
) {
57 super(formFactory
, formElement
);
61 protected void createControls(ICdmFormElement formElement
, Media entity
, int style
) {
62 this.parentFormElement
= formElement
;
67 public void setEntity(Media entity
) {
68 super.setEntity(entity
);
69 if(singleMediaRepresentationPart
==null){
70 singleMediaRepresentationPart
= MediaUtils
.initFirstMediaRepresentationPart(entity
, true);
72 initIsAdvancedMediaView();
77 public void handleEvent(Object eventSource
){
78 if(eventSource
==textUri
){
79 textUri
.setBackground(getPersistentBackground());
80 URI uri
= textUri
.parseText();
81 singleMediaRepresentationPart
.setUri(uri
);
83 uriBuffer
=textUri
.getText();
86 createImageElement(uri
);
91 private void createImageElement(URI uri
) {
94 imageInfo
= ImageInfo
.NewInstance(uri
, 10000);
95 singleMediaRepresentationPart
.getMediaRepresentation().setMimeType(imageInfo
.getMimeType());
96 singleMediaRepresentationPart
.getMediaRepresentation().setSuffix(imageInfo
.getSuffix());
97 element_image
= formFactory
.createImageElement(parentFormElement
, uri
, style
);
98 element_image
.initImageUri(uri
);
99 element_image
.loadImage();
103 if(lblNoImage
!=null){
104 lblNoImage
.dispose();
107 } catch (Exception e
) {
112 public void toggleAdvancedMediaView() {
113 if (getEntity().getRepresentations() != null
114 && (getEntity().getRepresentations().size() > 1 ||
115 (getEntity().getRepresentations().size() == 1
116 && getEntity().getRepresentations().iterator().next().getParts().size() > 1))) {
117 MessagingUtils
.informationDialog("Toggling not possible",
118 "Media has consists of multiple representations or representatio parts");
119 // toggling is only possible if there are no more than one
120 // MediaRepresentation resp. MediaRepresentationParts
123 isAdvancedMediaView
= !isAdvancedMediaView
;
125 reflowParentScrolledForm(true);
128 private void showAdvancedView() {
129 if(isAdvancedMediaView
){
131 removeElementsAndControls(textUri
);
133 if(element_image
!=null){
134 element_image
.dispose();
135 element_image
= null;
137 section_mediaRepresentation
= formFactory
.createMediaRepresentationSection(getConversationHolder(), parentFormElement
, style
);
138 section_mediaRepresentation
.setLayoutData(LayoutConstants
.FILL_HORIZONTALLY(2, 1));
139 section_mediaRepresentation
.setEntity(getEntity());
140 //set buffered uri as text if uri had parsing problems in simple view
142 section_mediaRepresentation
.getLayoutComposite().getChildren();
146 if(section_mediaRepresentation
!=null){
147 removeElementsAndControls(section_mediaRepresentation
);
149 textUri
= formFactory
.createUriWithLabelElement(parentFormElement
, "Media URI", null, style
);
150 URI uri
= singleMediaRepresentationPart
.getUri();
151 textUri
.setParsedText(uri
);
152 //set buffered uri as text if uri had parsing problems in advanced view
153 if(uri
==null && uriBuffer
!=null){
154 textUri
.setText(uriBuffer
);
157 textUri
.getLayoutComposite().layout();
159 createImageElement(singleMediaRepresentationPart
.getUri());
163 private void initIsAdvancedMediaView(){
164 if(PreferencesUtil
.getPreferenceStore().getBoolean(IPreferenceKeys
.SHOW_ADVANCED_MEDIA_SECTION
)){
165 isAdvancedMediaView
= true;
168 Set
<MediaRepresentation
> representations
= getEntity().getRepresentations();
169 if(representations
.size()>1){
170 isAdvancedMediaView
= true;
173 if(representations
.size()==1){
174 List
<MediaRepresentationPart
> parts
= representations
.iterator().next().getParts();
176 isAdvancedMediaView
= true;
180 isAdvancedMediaView
= false;
183 private void handleException() {
184 if(element_image
!=null){
185 element_image
.unloadImage();
186 element_image
.loadImage();
187 element_image
.dispose();
189 if(lblNoImage
==null){
190 lblNoImage
= formFactory
.createLabel(getLayoutComposite(), "No Image found");
191 lblNoImage
.setLayoutData(LayoutConstants
.FILL_HORIZONTALLY(2, 1));
192 lblNoImage
.setAlignment(SWT
.CENTER
);
196 public boolean isAdvancedMediaView() {
197 return isAdvancedMediaView
;
200 public void setUriBuffer(String uriBuffer
) {
201 this.uriBuffer
= uriBuffer
;
204 public String
getUriBuffer() {