Project

General

Profile

Download (4.49 KB) Statistics
| Branch: | Tag: | Revision:
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.ui.section.media;
12

    
13
import java.io.IOException;
14
import java.net.URI;
15

    
16
import org.apache.commons.io.FileUtils;
17
import org.apache.http.HttpException;
18
import org.eclipse.swt.events.SelectionListener;
19

    
20
import eu.etaxonomy.cdm.common.media.ImageInfo;
21
import eu.etaxonomy.cdm.model.media.ImageFile;
22
import eu.etaxonomy.taxeditor.model.AbstractUtility;
23
import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
24
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
25
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
26
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
27
import eu.etaxonomy.taxeditor.ui.element.ImageElement;
28
import eu.etaxonomy.taxeditor.ui.element.KeyValueViewerElement;
29
import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
30

    
31
/**
32
 * @author n.hoffmann
33
 * @created Mar 26, 2010
34
 * @version 1.0
35
 */
36
public class ImageFileElement extends MediaRepresentationPartElement<ImageFile> {
37

    
38
	private NumberWithLabelElement text_height;
39
	private NumberWithLabelElement text_width;
40
	private KeyValueViewerElement element_keyValue;
41
	private ImageElement element_image;
42

    
43

    
44
	private final Runnable postRunnable = new Runnable(){
45
		@Override
46
        public void run() {
47
			AbstractUtility.reflowDetailsViewer();
48
			AbstractUtility.reflowSupplementalViewer();
49
		}
50
	};
51

    
52

    
53
	public ImageFileElement(CdmFormFactory cdmFormFactory,
54
			AbstractFormSection section, ImageFile element,
55
			SelectionListener removeListener, int style) {
56
		super(cdmFormFactory, section, element, removeListener, style);
57
	}
58

    
59
	/** {@inheritDoc} */
60
	@Override
61
	public void createControls(ICdmFormElement formElement, int style) {
62
		super.createControls(formElement, style);
63

    
64
		text_height = formFactory.createNumberTextWithLabelElement(formElement, "Height", null, style);
65
		text_height.setEnabled(false);
66
		text_width = formFactory.createNumberTextWithLabelElement(formElement, "Width", null, style);
67
		text_width.setEnabled(false);
68
		element_image = formFactory.createImageElement(formElement, null, style);
69
		element_keyValue = formFactory.createKeyValueViewerElement(formElement, "Key", "Value", null);
70
	}
71

    
72
	/** {@inheritDoc} */
73
	@Override
74
	public void setEntity(ImageFile entity) {
75
		super.setEntity(entity);
76
		text_height.setNumber(entity.getHeight());
77
		text_width.setNumber(entity.getWidth());
78
		try {
79
			loadImage(entity.getUri(), false);
80
		} catch (Exception e) {
81
			handleException(e);
82
		}
83
	}
84

    
85
	private void loadImage(URI uri, boolean updateDimensions) throws IOException, HttpException{
86
		element_image.initImageUri(uri);
87

    
88
		element_image.loadImage(postRunnable );
89

    
90

    
91
		if(uri == null){
92
			return;
93
		}
94

    
95
		ImageInfo imageInfo = ImageInfo.NewInstanceWithMetaData(uri, 10000);
96

    
97
		element_keyValue.setInput(imageInfo.getMetaData());
98

    
99
		if(updateDimensions){
100
			text_size.setText(FileUtils.byteCountToDisplaySize(imageInfo.getLength()));
101
			// KLUDGE this is not save for very large files, because of the int cast.
102
			// But then, I don't think we will handle such large files in the near future
103
			getEntity().setSize((int) imageInfo.getLength());
104

    
105
			text_height.setNumber(imageInfo.getHeight());
106
			getEntity().setHeight(imageInfo.getHeight());
107

    
108
			text_width.setNumber(imageInfo.getWidth());
109
			getEntity().setWidth(imageInfo.getWidth());
110
		}
111

    
112

    
113
	}
114

    
115
	/** {@inheritDoc} */
116
	@Override
117
	public void handleEvent(Object eventSource) {
118
		if(eventSource == text_uri){
119
			try {
120
			    URI uri = text_uri.getUri();
121
				getEntity().setUri(uri);
122
				if(uri==null){
123
				    //buffer URI if parsing error occurred
124
				    MediaDetailElement parentMediaDetailElement = getParentMediaDetailElement();
125
				    if(parentMediaDetailElement!=null){
126
				        parentMediaDetailElement.setUriBuffer(text_uri.getText());
127
				    }
128
				}
129

    
130
				loadImage(getEntity().getUri(), true);
131

    
132
				firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
133
			} catch (Exception e) {
134
				handleException(e);
135
			} finally {
136
				firePropertyChangeEvent(this);
137
			}
138
		}
139
	}
140

    
141
	protected void handleException(Exception e) {
142
		element_image.unloadImage(postRunnable);
143
		text_height.setNumber(0);
144
		text_width.setNumber(0);
145

    
146
		element_image.loadImage(new Runnable(){
147
			@Override
148
            public void run() {
149
				AbstractUtility.reflowDetailsViewer();
150
				AbstractUtility.reflowSupplementalViewer();
151
			}
152
		});
153
	}
154
}
(2-2/10)