Implemented MobotOpenUrl UI
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / section / supplemental / ImageFileElement.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10
11 package eu.etaxonomy.taxeditor.section.supplemental;
12
13 import java.io.IOException;
14 import java.net.URI;
15 import java.net.URISyntaxException;
16
17 import org.apache.commons.io.FileUtils;
18 import org.eclipse.swt.events.SelectionListener;
19
20 import eu.etaxonomy.cdm.api.service.IMediaService;
21 import eu.etaxonomy.cdm.common.mediaMetaData.ImageMetaData;
22 import eu.etaxonomy.cdm.model.media.ImageFile;
23 import eu.etaxonomy.taxeditor.editor.EditorUtil;
24 import eu.etaxonomy.taxeditor.forms.AbstractFormSection;
25 import eu.etaxonomy.taxeditor.forms.CdmFormFactory;
26 import eu.etaxonomy.taxeditor.forms.ICdmFormElement;
27 import eu.etaxonomy.taxeditor.forms.ImageElement;
28 import eu.etaxonomy.taxeditor.forms.KeyValueViewerElement;
29 import eu.etaxonomy.taxeditor.forms.NumberWithLabelElement;
30 import eu.etaxonomy.taxeditor.store.CdmStore;
31
32 /**
33 * <p>ImageFileElement class.</p>
34 *
35 * @author n.hoffmann
36 * @created Mar 26, 2010
37 * @version 1.0
38 */
39 public class ImageFileElement extends AbstractMediaRepresentationPartElement<ImageFile> {
40
41 private NumberWithLabelElement text_height;
42 private NumberWithLabelElement text_width;
43 private KeyValueViewerElement element_keyValue;
44 private ImageElement element_image;
45
46 /**
47 * <p>Constructor for ImageFileElement.</p>
48 *
49 * @param cdmFormFactory a {@link eu.etaxonomy.taxeditor.forms.CdmFormFactory} object.
50 * @param section a {@link eu.etaxonomy.taxeditor.forms.AbstractFormSection} object.
51 * @param element a {@link eu.etaxonomy.cdm.model.media.ImageFile} object.
52 * @param removeListener a {@link org.eclipse.swt.events.SelectionListener} object.
53 * @param style a int.
54 */
55 public ImageFileElement(CdmFormFactory cdmFormFactory,
56 AbstractFormSection section, ImageFile element,
57 SelectionListener removeListener, int style) {
58 super(cdmFormFactory, section, element, removeListener, style);
59 }
60
61 /** {@inheritDoc} */
62 @Override
63 public void createControls(ICdmFormElement formElement, int style) {
64 super.createControls(formElement, style);
65
66 text_height = formFactory.createIntegerTextWithLabelElement(formElement, "Height", null, style);
67 text_height.setEnabled(false);
68 text_width = formFactory.createIntegerTextWithLabelElement(formElement, "Width", null, style);
69 text_width.setEnabled(false);
70 element_image = formFactory.createImageElement(formElement, null, style);
71
72 element_keyValue = formFactory.createKeyValueViewerElement(formElement, "Key", "Value", null);
73 }
74
75 /** {@inheritDoc} */
76 @Override
77 public void setEntity(ImageFile entity) {
78 this.entity = entity;
79 if(entity.getUri() != null){
80 text_uri.setText(entity.getUri().toString());
81 }
82 if(entity.getSize() != null){
83 text_size.setText(FileUtils.byteCountToDisplaySize(entity.getSize()));
84 }
85 text_height.setInteger(entity.getHeight());
86 text_width.setInteger(entity.getWidth());
87
88 showImage(entity.getUri());
89 }
90
91 private void showImage(URI uri){
92 if(uri == null){
93 return;
94 }
95 try {
96
97 Integer size = CdmStore.getService(IMediaService.class).getImageSize(uri, 10000);
98
99 if(size != null){
100 text_size.setText(FileUtils.byteCountToDisplaySize(size));
101 getEntity().setSize(size);
102 }
103
104
105 ImageMetaData imageInfo;
106 try {
107
108 imageInfo = CdmStore.getService(IMediaService.class).getImageInfo(uri, 10000);
109
110 text_height.setInteger(imageInfo.getHeight());
111 getEntity().setHeight(imageInfo.getHeight());
112
113 text_width.setInteger(imageInfo.getWidth());
114 getEntity().setWidth(imageInfo.getWidth());
115 element_keyValue.setInput(imageInfo.getMetaData());
116
117 element_image.setImageUri(uri);
118
119 element_image.loadImage(new Runnable(){
120 public void run() {
121 getLayoutComposite().layout();
122 EditorUtil.reflowDetailsViewer();
123 }
124 });
125
126 } catch (IOException e) {
127 EditorUtil.error(getClass(), e);
128 }
129 } catch (Exception e) {
130 EditorUtil.error(getClass(), "Image could not be shown: ", e);
131 }
132 }
133
134 /*
135 * (non-Javadoc)
136 * @see eu.etaxonomy.taxeditor.section.AbstractEntityCollectionElement#handleEvent(java.lang.Object)
137 */
138 /** {@inheritDoc} */
139 @Override
140 public void handleEvent(Object eventSource) {
141 if(eventSource == text_uri){
142 try {
143 getEntity().setUri(new URI(text_uri.getText()));
144 } catch (URISyntaxException e) {
145 EditorUtil.warningDialog("Could not parse URI", getClass(), e.getMessage());
146 }
147 showImage(getEntity().getUri());
148 }
149 }
150 }