Refactoring of selection elements. Additional minor refactoring. Fixed a bug with...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaRepresentationElement.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.ui.section.media;
12
13 import java.io.IOException;
14 import java.net.URI;
15 import java.util.Collection;
16
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.cdm.model.media.MediaRepresentation;
23 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
24 import eu.etaxonomy.taxeditor.store.StoreUtil;
25 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
26 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
27 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory.EntityDetailType;
28 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
29 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
30 import eu.etaxonomy.taxeditor.ui.element.TextWithLabelElement;
31 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
32
33 /**
34 * <p>MediaRepresentationElement class.</p>
35 *
36 * @author n.hoffmann
37 * @created Mar 24, 2010
38 * @version 1.0
39 */
40 public class MediaRepresentationElement extends AbstractEntityCollectionElement<MediaRepresentation> {
41
42 private MediaRepresentationPartSection section_mediaRepresentationPart;
43 private TextWithLabelElement text_mimeType;
44 private TextWithLabelElement text_suffix;
45
46 /**
47 * <p>Constructor for MediaRepresentationElement.</p>
48 *
49 * @param cdmFormFactory a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory} object.
50 * @param section a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection} object.
51 * @param element a {@link eu.etaxonomy.cdm.model.media.MediaRepresentation} object.
52 * @param removeListener a {@link org.eclipse.swt.events.SelectionListener} object.
53 * @param style a int.
54 */
55 public MediaRepresentationElement(CdmFormFactory cdmFormFactory,
56 AbstractFormSection section,
57 MediaRepresentation element, SelectionListener removeListener,
58 int style) {
59 super(cdmFormFactory, section, element, removeListener, null, style);
60 }
61
62 /* (non-Javadoc)
63 * @see eu.etaxonomy.taxeditor.forms.section.AbstractEntityCollectionElement#createControls(eu.etaxonomy.taxeditor.forms.ICdmFormElement, int)
64 */
65 /** {@inheritDoc} */
66 @Override
67 public void createControls(ICdmFormElement element, int style) {
68 text_mimeType = formFactory.createTextWithLabelElement(element, "Mime Type", null, style);
69 text_suffix = formFactory.createTextWithLabelElement(element, "Suffix", null, style);
70 section_mediaRepresentationPart = (MediaRepresentationPartSection) formFactory.createEntityDetailSection(EntityDetailType.MEDIAREPRESENTATIONPART, getConversationHolder(), element, style);
71 section_mediaRepresentationPart.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
72 }
73
74 /** {@inheritDoc} */
75 @Override
76 public void setEntity(MediaRepresentation element) {
77 this.entity = element;
78 section_mediaRepresentationPart.setEntity(element);
79 text_mimeType.setText(element.getMimeType());
80 text_suffix.setText(element.getSuffix());
81 }
82
83 /*
84 * (non-Javadoc)
85 * @see eu.etaxonomy.taxeditor.section.AbstractEntityCollectionElement#handleEvent(java.lang.Object)
86 */
87 /** {@inheritDoc} */
88 @Override
89 public void handleEvent(Object eventSource) {
90 if(eventSource == text_mimeType){
91 getEntity().setMimeType(text_mimeType.getText());
92 }
93 else if(eventSource == text_suffix){
94 getEntity().setSuffix(text_suffix.getText());
95 }
96 // FIXME HACK automatically set the mime type to the first mediaRepresentationPart's mimetype
97 else if(eventSource == section_mediaRepresentationPart){
98 firePropertyChangeEvent(this);
99
100 Collection<MediaRepresentationPart> imageFileElements = section_mediaRepresentationPart.getCollection(section_mediaRepresentationPart.getEntity());
101
102 if(! imageFileElements.iterator().hasNext()){
103 return;
104 }
105
106 MediaRepresentationPart mediaRepresentationPart = imageFileElements.iterator().next();
107 if(mediaRepresentationPart == null || !(mediaRepresentationPart instanceof ImageFile)){
108 return;
109 }
110 ImageFile imageFile = (ImageFile) mediaRepresentationPart;
111
112 URI uri = imageFile.getUri();
113 if(uri == null){
114 return;
115 }
116 try {
117 ImageInfo imageInfo = ImageInfo.NewInstance(uri, 10000);
118 String mimeType = imageInfo.getMimeType();
119 text_mimeType.setText(mimeType);
120 getEntity().setMimeType(mimeType);
121 text_suffix.setText(imageInfo.getSuffix());
122 getEntity().setSuffix(imageInfo.getSuffix());
123 } catch (IOException e) {
124 StoreUtil.error(getClass(), e);
125 } catch (HttpException e) {
126 StoreUtil.error(getClass(), e);
127 }
128 }
129 }
130 }