Merge branch 'develop' into featureTreeEditor
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaMetaElement.java
1 /**
2 *
3 */
4 package eu.etaxonomy.taxeditor.ui.section.media;
5
6 import java.util.Map;
7
8 import org.eclipse.jface.action.IAction;
9 import org.eclipse.swt.events.SelectionAdapter;
10 import org.eclipse.swt.events.SelectionEvent;
11 import org.eclipse.swt.events.SelectionListener;
12
13 import org.eclipse.swt.widgets.Button;
14 import eu.etaxonomy.cdm.common.CdmUtils;
15 import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
16 import eu.etaxonomy.cdm.model.agent.AgentBase;
17 import eu.etaxonomy.cdm.model.common.Language;
18 import eu.etaxonomy.cdm.model.common.LanguageString;
19 import eu.etaxonomy.cdm.model.media.Media;
20 import eu.etaxonomy.taxeditor.model.AbstractUtility;
21 import eu.etaxonomy.taxeditor.model.ImageResources;
22 import eu.etaxonomy.taxeditor.store.CdmStore;
23 import eu.etaxonomy.taxeditor.ui.dialog.selection.MediaSelectionDialog;
24 import eu.etaxonomy.taxeditor.ui.element.AbstractFormSection;
25 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
26 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
27 import eu.etaxonomy.taxeditor.ui.element.ISelectableElement;
28 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
29 import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
30 import eu.etaxonomy.taxeditor.ui.mvc.element.DateElement;
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 * @author n.hoffmann
37 * @created Nov 17, 2009
38 * @version 1.0
39 */
40 public class MediaMetaElement extends AbstractEntityCollectionElement<Media> implements ISelectableElement, ITogglableMediaElement{
41
42 private EntitySelectionElement<AgentBase> selection_artist;
43 private LanguageStringWithLabelElement text_description;
44 private LanguageStringWithLabelElement text_title;
45 private MediaDetailElement mediaDetailElement;
46 private DateElement mediaCreated;
47 private SelectionArbitrator selectionArbitrator;
48
49 public MediaMetaElement(CdmFormFactory cdmFormFactory,
50 AbstractFormSection<?> formElement, Media element,
51 SelectionListener removeListener, int style) {
52 super(cdmFormFactory, formElement, element, removeListener, null, style);
53 //make element selectable
54 if(cdmFormFactory.getSelectionProvider() != null){
55 selectionArbitrator = cdmFormFactory.createSelectionArbitrator(this);
56 }
57
58
59 }
60
61 /** {@inheritDoc} */
62 @Override
63 public void createControls(ICdmFormElement element, int style) {
64 final IAction switchAction = MediaViewSwitch.createSwitch(MediaMetaElement.this);
65 Button btnToggleAdvancedMediaView = new Button(getBox(), style);
66 btnToggleAdvancedMediaView.setToolTipText(switchAction.getText());
67 btnToggleAdvancedMediaView.setImage(ImageResources.getImage(ImageResources.SWITCH_VIEW_TYPE));
68 btnToggleAdvancedMediaView.addSelectionListener(new SelectionAdapter() {
69 @Override
70 public void widgetSelected(SelectionEvent e) {
71 switchAction.run();
72 }
73 });
74 text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style);
75 selection_artist = formFactory.createSelectionElement(AgentBase.class, getConversationHolder(), element, "Artist", null, EntitySelectionElement.ALL, style);
76 addElement(selection_artist);
77 mediaCreated = formFactory.createDateElement(element, "Media Created", getEntity().getMediaCreated(), style, false);
78 addElement(mediaCreated.getController());
79 text_description = formFactory.createLanguageStringWithLabelElement(element, "Description", null, 100, true, style);
80
81
82
83
84 mediaDetailElement = formFactory.createMediaDetailElement(element);
85 addElement(mediaDetailElement);
86 }
87
88 /** {@inheritDoc} */
89 @Override
90 public void setEntity(Media element) {
91 this.entity = element;
92 mediaDetailElement.setEntity(element);
93
94 selection_artist.setEntity(HibernateProxyHelper
95 .deproxy(element.getArtist()));
96
97 text_description.setLanguageString(element.getDescription(CdmStore
98 .getDefaultLanguage()));
99 if (CdmUtils.isBlank(text_description.getText())){
100 Map<Language, LanguageString> allDescriptions = element.getAllDescriptions();
101 if (!allDescriptions.isEmpty()){
102 text_description.setLanguageString(allDescriptions.get(Language.ENGLISH()));
103 }
104 }
105
106 LanguageString title = element.getTitle(CdmStore.getDefaultLanguage());
107
108 if (title == null) {
109 title = LanguageString.NewInstance(element.getTitleCache(), CdmStore.getDefaultLanguage());
110 }
111
112 text_title.setLanguageString(title);
113
114
115 }
116
117 @Override
118 protected Media selectFromDialog() {
119
120 setEntity(MediaSelectionDialog.select(AbstractUtility.getShell(), null, null));
121 return entity;
122 }
123
124 @Override
125 public void toggleAdvancedMediaView(){
126 mediaDetailElement.toggleAdvancedMediaView();
127 }
128
129 /** {@inheritDoc} */
130 @Override
131 public void handleEvent(Object eventSource) {
132 if (eventSource == selection_artist) {
133 getEntity().setArtist(selection_artist.getSelection());
134 } else if (eventSource == text_description) {
135 getEntity().addDescription(text_description.getLanguageString());
136 } else if (eventSource == text_title) {
137 getEntity().putTitle(text_title.getLanguageString());
138 if (getParentElement() instanceof AbstractCdmDetailSection) {
139 ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
140 }
141 } else if (eventSource == mediaCreated.getController()){
142 org.joda.time.DateTime date = mediaCreated.getController().getDateTime();
143 getEntity().setMediaCreated(date);
144 }
145 }
146
147 @Override
148 public SelectionArbitrator getSelectionArbitrator() {
149 return selectionArbitrator;
150 }
151
152 }