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