Project

General

Profile

Download (4.07 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.ui.element.AbstractFormSection;
23
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
24
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
25
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
26
import eu.etaxonomy.taxeditor.ui.element.ImageElement;
27
import eu.etaxonomy.taxeditor.ui.element.KeyValueViewerElement;
28
import eu.etaxonomy.taxeditor.ui.element.NumberWithLabelElement;
29

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

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

    
42
	public ImageFileElement(CdmFormFactory cdmFormFactory,
43
			AbstractFormSection section, ImageFile element,
44
			SelectionListener removeListener, int style) {
45
		super(cdmFormFactory, section, element, removeListener, style);
46
	}
47

    
48
	/** {@inheritDoc} */
49
	@Override
50
	public void createControls(ICdmFormElement formElement, int style) {
51
		super.createControls(formElement, style);
52

    
53
		text_height = formFactory.createNumberTextWithLabelElement(formElement, "Height", null, style);
54
		text_height.setEnabled(false);
55
		text_width = formFactory.createNumberTextWithLabelElement(formElement, "Width", null, style);
56
		text_width.setEnabled(false);
57
		element_image = formFactory.createImageElement(formElement, null, style);
58
		element_keyValue = formFactory.createKeyValueViewerElement(formElement, "Key", "Value", null);
59
	}
60

    
61
	/** {@inheritDoc} */
62
	@Override
63
	public void setEntity(ImageFile entity) {
64
		super.setEntity(entity);
65
		text_height.setNumber(entity.getHeight());
66
		text_width.setNumber(entity.getWidth());
67
		try {
68
			loadImage(entity.getUri(), false);
69
		} catch (Exception e) {
70
			handleException(e);
71
		}
72
	}
73

    
74
	private void loadImage(URI uri, boolean updateDimensions) throws IOException, HttpException{
75
		element_image.initImageUri(uri);
76

    
77
		element_image.loadImage();
78

    
79

    
80
		if(uri == null){
81
			return;
82
		}
83

    
84
		ImageInfo imageInfo = ImageInfo.NewInstanceWithMetaData(uri, 10000);
85

    
86
		element_keyValue.setInput(imageInfo.getMetaData());
87

    
88
		if(updateDimensions){
89
			text_size.setText(FileUtils.byteCountToDisplaySize(imageInfo.getLength()));
90
			// KLUDGE this is not save for very large files, because of the int cast.
91
			// But then, I don't think we will handle such large files in the near future
92
			getEntity().setSize((int) imageInfo.getLength());
93

    
94
			text_height.setNumber(imageInfo.getHeight());
95
			getEntity().setHeight(imageInfo.getHeight());
96

    
97
			text_width.setNumber(imageInfo.getWidth());
98
			getEntity().setWidth(imageInfo.getWidth());
99
		}
100

    
101

    
102
	}
103

    
104
	/** {@inheritDoc} */
105
	@Override
106
	public void handleEvent(Object eventSource) {
107
		if(eventSource == text_uri){
108
			try {
109
			    URI uri = text_uri.parseText();
110
				getEntity().setUri(uri);
111
				if(uri==null){
112
				    //buffer URI if parsing error occurred
113
				    MediaDetailElement parentMediaDetailElement = getParentMediaDetailElement();
114
				    if(parentMediaDetailElement!=null){
115
				        parentMediaDetailElement.setUriBuffer(text_uri.getText());
116
				    }
117
				}
118

    
119
				loadImage(getEntity().getUri(), true);
120

    
121
				firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
122
			} catch (Exception e) {
123
				handleException(e);
124
			} finally {
125
				firePropertyChangeEvent(this);
126
			}
127
		}
128
	}
129

    
130
	protected void handleException(Exception e) {
131
		element_image.unloadImage();
132
		text_height.setNumber(0);
133
		text_width.setNumber(0);
134

    
135
		element_image.loadImage();
136
	}
137
}
(2-2/10)