Added note to default language preference page to inform the user about restarting...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaElement.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.ui.section.media;
5
6 import java.net.URISyntaxException;
7 import java.util.List;
8 import java.util.Set;
9
10 import org.eclipse.swt.events.SelectionListener;
11
12 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
13 import eu.etaxonomy.cdm.model.agent.AgentBase;
14 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
15 import eu.etaxonomy.cdm.model.common.LanguageString;
16 import eu.etaxonomy.cdm.model.media.Media;
17 import eu.etaxonomy.cdm.model.media.MediaRepresentation;
18 import eu.etaxonomy.cdm.model.media.MediaRepresentationPart;
19 import eu.etaxonomy.cdm.model.media.MediaUtils;
20 import eu.etaxonomy.taxeditor.preference.IPreferenceKeys;
21 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
22 import eu.etaxonomy.taxeditor.preference.Resources;
23 import eu.etaxonomy.taxeditor.store.CdmStore;
24 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
25 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
26 import eu.etaxonomy.taxeditor.ui.element.CheckboxElement;
27 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
28 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
29 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
30 import eu.etaxonomy.taxeditor.ui.element.UriWithLabelElement;
31 import eu.etaxonomy.taxeditor.ui.section.AbstractCdmDetailSection;
32 import eu.etaxonomy.taxeditor.ui.section.AbstractEntityCollectionElement;
33 import eu.etaxonomy.taxeditor.ui.selection.EntitySelectionElement;
34
35 /**
36 * <p>
37 * MediaElement class.
38 * </p>
39 *
40 * @author n.hoffmann
41 * @created Nov 17, 2009
42 * @version 1.0
43 */
44 public class MediaElement extends AbstractEntityCollectionElement<Media> {
45
46 private EntitySelectionElement<AgentBase> selection_artist;
47 private LanguageStringWithLabelElement text_description;
48 private LanguageStringWithLabelElement text_title;
49 private UriWithLabelElement textUri;
50 private MediaRepresentationSection section_mediaRepresentation;
51
52 private CheckboxElement checkBoxShowAdvancedView;
53 private MediaRepresentationPart singleMediaRepresentationPart;
54 private ICdmFormElement parentFormElement;
55 private int style;
56
57 /**
58 * <p>
59 * Constructor for MediaElement.
60 * </p>
61 *
62 * @param formElement
63 * a {@link eu.etaxonomy.taxeditor.ui.element.AbstractFormSection}
64 * object.
65 * @param element
66 * a {@link eu.etaxonomy.cdm.model.media.Media} object.
67 * @param removeListener
68 * a {@link org.eclipse.swt.events.SelectionListener} object.
69 * @param style
70 * a int.
71 * @param cdmFormFactory
72 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
73 * object.
74 */
75 public MediaElement(CdmFormFactory cdmFormFactory,
76 AbstractFormSection<?> formElement, Media element,
77 SelectionListener removeListener, int style) {
78 super(cdmFormFactory, formElement, element, removeListener, null, style);
79 }
80
81 /*
82 * (non-Javadoc)
83 *
84 * @see
85 * eu.etaxonomy.taxeditor.forms.entitysections.AbstractEntitySetElementComposite
86 * #createControls(org.eclipse.swt.widgets.Composite, int)
87 */
88 /** {@inheritDoc} */
89 @Override
90 public void createControls(ICdmFormElement element, int style) {
91 this.parentFormElement = element;
92 this.style = style;
93 text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style);
94 selection_artist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), element, "Artist", null, EntitySelectionElement.ALL, style);
95 text_description = formFactory.createLanguageStringWithLabelElement(element, "Description", null, 100, style);
96 checkBoxShowAdvancedView = formFactory.createCheckbox(element, "Advanced Media View", false, style);
97 }
98
99 /** {@inheritDoc} */
100 @Override
101 public void setEntity(Media element) {
102 this.entity = element;
103 if(singleMediaRepresentationPart==null){
104 singleMediaRepresentationPart = MediaUtils.initFirstMediaRepresentationPart(element);
105 }
106 showAdvancedView(isAdvancedMediaView());
107
108 selection_artist.setEntity((TeamOrPersonBase<?>) HibernateProxyHelper
109 .deproxy(element.getArtist()));
110
111 text_description.setLanguageString(element.getDescription(CdmStore
112 .getDefaultLanguage()));
113
114 LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
115
116 if (title == null) {
117 title = LanguageString.NewInstance("", CdmStore.getDefaultLanguage());
118 }
119
120 text_title.setLanguageString(title);
121 }
122
123 /*
124 * (non-Javadoc)
125 *
126 * @see
127 * eu.etaxonomy.taxeditor.section.AbstractEntityCollectionElement#handleEvent
128 * (java.lang.Object)
129 */
130 /** {@inheritDoc} */
131 @Override
132 public void handleEvent(Object eventSource) {
133 if (eventSource == selection_artist) {
134 getEntity().setArtist(selection_artist.getSelection());
135 } else if (eventSource == text_description) {
136 getEntity().addDescription(text_description.getLanguageString());
137 } else if (eventSource == text_title) {
138 getEntity().putTitle(text_title.getLanguageString());
139 if (getParentElement() instanceof AbstractCdmDetailSection) {
140 ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
141 }
142 }
143 else if(eventSource==textUri){
144 textUri.setBackground(getPersistentBackground());
145 try {
146 singleMediaRepresentationPart.setUri(textUri.getUri());
147 } catch (URISyntaxException e) {
148 textUri.setBackground(getColor(Resources.COLOR_PARSE_ERROR));
149 }
150 }
151 else if(eventSource==checkBoxShowAdvancedView){
152 showAdvancedView(checkBoxShowAdvancedView.getSelection());
153 }
154 }
155
156 /**
157 * @param showAdvancedView
158 */
159 private void showAdvancedView(boolean showAdvancedView) {
160 if(showAdvancedView){
161 if(textUri!=null){
162 removeElementsAndControls(textUri);
163 }
164 section_mediaRepresentation = formFactory.createMediaRepresentationSection(getConversationHolder(), parentFormElement, style);
165 section_mediaRepresentation.setLayoutData(LayoutConstants.FILL_HORIZONTALLY(2, 1));
166 section_mediaRepresentation.setEntity(getEntity());
167 }
168 else{
169 if(section_mediaRepresentation!=null){
170 removeElementsAndControls(section_mediaRepresentation);
171 }
172 textUri = formFactory.createUriWithLabelElement(parentFormElement, "Media URI", null, style);
173 textUri.setUri(singleMediaRepresentationPart.getUri());
174 textUri.getLayoutComposite().layout();
175 }
176 }
177
178 private boolean isAdvancedMediaView(){
179 if(PreferencesUtil.getPreferenceStore().getBoolean(IPreferenceKeys.SHOW_ADVANCED_MEDIA_SECTION)){
180 return true;
181 }
182 Set<MediaRepresentation> representations = entity.getRepresentations();
183 if(representations.size()>1){
184 return true;
185 }
186 if(representations.size()==1){
187 List<MediaRepresentationPart> parts = representations.iterator().next().getParts();
188 if(parts.size()>1){
189 return true;
190 }
191 }
192 return false;
193 }
194
195 }