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