Project

General

Profile

Download (4.9 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
import java.net.URISyntaxException;
16

    
17
import org.apache.commons.io.FileUtils;
18
import org.apache.commons.lang.StringUtils;
19
import org.eclipse.swt.events.SelectionListener;
20

    
21
import eu.etaxonomy.cdm.api.service.IMediaService;
22
import eu.etaxonomy.cdm.common.media.ImageInfo;
23
import eu.etaxonomy.cdm.model.media.ImageFile;
24
import eu.etaxonomy.taxeditor.store.CdmStore;
25
import eu.etaxonomy.taxeditor.store.StoreUtil;
26
import eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection;
27
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
28
import eu.etaxonomy.taxeditor.ui.forms.CdmPropertyChangeEvent;
29
import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
30
import eu.etaxonomy.taxeditor.ui.forms.ImageElement;
31
import eu.etaxonomy.taxeditor.ui.forms.KeyValueViewerElement;
32
import eu.etaxonomy.taxeditor.ui.forms.NumberWithLabelElement;
33
import eu.etaxonomy.taxeditor.ui.section.supplemental.AbstractMediaRepresentationPartElement;
34

    
35
/**
36
 * <p>ImageFileElement class.</p>
37
 *
38
 * @author n.hoffmann
39
 * @created Mar 26, 2010
40
 * @version 1.0
41
 */
42
public class ImageFileElement extends AbstractMediaRepresentationPartElement<ImageFile> {
43

    
44
	private NumberWithLabelElement text_height;
45
	private NumberWithLabelElement text_width;
46
	private KeyValueViewerElement element_keyValue;
47
	private ImageElement element_image;
48
	
49
	/**
50
	 * <p>Constructor for ImageFileElement.</p>
51
	 *
52
	 * @param cdmFormFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
53
	 * @param section a {@link eu.etaxonomy.taxeditor.ui.forms.AbstractFormSection} object.
54
	 * @param element a {@link eu.etaxonomy.cdm.model.media.ImageFile} object.
55
	 * @param removeListener a {@link org.eclipse.swt.events.SelectionListener} object.
56
	 * @param style a int.
57
	 */
58
	public ImageFileElement(CdmFormFactory cdmFormFactory,
59
			AbstractFormSection section, ImageFile element,
60
			SelectionListener removeListener, int style) {
61
		super(cdmFormFactory, section, element, removeListener, style);
62
	}
63
	
64
	/** {@inheritDoc} */
65
	@Override
66
	public void createControls(ICdmFormElement formElement, int style) {
67
		super.createControls(formElement, style);
68
		
69
		text_height = formFactory.createIntegerTextWithLabelElement(formElement, "Height", null, style);
70
		text_height.setEnabled(false);
71
		text_width = formFactory.createIntegerTextWithLabelElement(formElement, "Width", null, style);
72
		text_width.setEnabled(false);
73
		element_image = formFactory.createImageElement(formElement, null, style);
74
		
75
		element_keyValue = formFactory.createKeyValueViewerElement(formElement, "Key", "Value", null);
76
	}
77
	
78
	/** {@inheritDoc} */
79
	@Override
80
	public void setEntity(ImageFile entity) {
81
		this.entity = entity;
82
		if(entity.getUri() != null){
83
			text_uri.setText(entity.getUri().toString());
84
		}		
85
		if(entity.getSize() != null){
86
			text_size.setText(FileUtils.byteCountToDisplaySize(entity.getSize()));
87
		}
88
		text_height.setInteger(entity.getHeight());
89
		text_width.setInteger(entity.getWidth());
90

    
91
		showImage(entity.getUri());
92
	}
93
	
94
	private void showImage(URI uri){
95
		if(uri == null){
96
			return;
97
		}
98
		try {
99
			
100
			Integer size = CdmStore.getService(IMediaService.class).getImageSize(uri, 10000);			
101
			
102
			if(size != null){
103
				text_size.setText(FileUtils.byteCountToDisplaySize(size));
104
				getEntity().setSize(size);
105
			}
106
			
107
			
108
			try {
109
				
110
				ImageInfo imageInfo = ImageInfo.NewInstanceWithMetaData(uri, 10000);
111
					
112
				text_height.setInteger(imageInfo.getHeight());
113
				getEntity().setHeight(imageInfo.getHeight());
114
					
115
				text_width.setInteger(imageInfo.getWidth());
116
				getEntity().setWidth(imageInfo.getWidth());
117
				element_keyValue.setInput(imageInfo.getMetaData());
118
				
119
				element_image.setImageUri(uri);
120
				
121
				element_image.loadImage(new Runnable(){
122
					public void run() {
123
						StoreUtil.reflowDetailsViewer();
124
						StoreUtil.reflowSupplementalViewer();
125
					}
126
				});
127
				
128
			} catch (IOException e) {
129
				StoreUtil.error(getClass(), e);
130
			}
131
		}  catch (Exception e) {
132
			StoreUtil.error(getClass(), "Image could not be shown: ", e);
133
		}
134
	}
135

    
136
	/*
137
	 * (non-Javadoc)
138
	 * @see eu.etaxonomy.taxeditor.section.AbstractEntityCollectionElement#handleEvent(java.lang.Object)
139
	 */
140
	/** {@inheritDoc} */
141
	@Override
142
	public void handleEvent(Object eventSource) {
143
		if(eventSource == text_uri){
144
			try {
145
				String uriString = text_uri.getText();
146
				URI uri = StringUtils.isNotEmpty(uriString) ? new URI(uriString) : null;
147
				getEntity().setUri(uri);
148
				
149
				showImage(getEntity().getUri());
150

    
151
				firePropertyChangeEvent(new CdmPropertyChangeEvent(this, null));
152
			} catch (URISyntaxException e) {
153
				StoreUtil.warningDialog("Could not parse URI", getClass(), e.getMessage());
154
			}			
155
		}
156
		
157
	}
158
}
(1-1/6)