ref #6229: fix problems with multilanguage support and title generation for media
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / section / media / MediaMetaElement.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9 package eu.etaxonomy.taxeditor.ui.section.media;
10
11 import java.util.Map;
12
13 import org.eclipse.swt.SWT;
14 import org.eclipse.swt.events.SelectionListener;
15
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.common.TimePeriod;
21 import eu.etaxonomy.cdm.model.media.Media;
22 import eu.etaxonomy.taxeditor.model.AbstractUtility;
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.MultilanguageTextElement;
30 import eu.etaxonomy.taxeditor.ui.element.SelectionArbitrator;
31 import eu.etaxonomy.taxeditor.ui.element.TimePeriodElement;
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 */
40 public class MediaMetaElement extends AbstractEntityCollectionElement<Media> implements ISelectableElement, ITogglableMediaElement{
41
42 private EntitySelectionElement<AgentBase> selection_artist;
43 private MultilanguageTextElement text_description;
44 private MultilanguageTextElement text_title;
45 private MediaDetailElement mediaDetailElement;
46 private TimePeriodElement 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 @Override
60 public void createControls(ICdmFormElement element, int style) {
61 // final IAction switchAction = MediaViewSwitch.createSwitch(MediaMetaElement.this);
62 // Button btnToggleAdvancedMediaView = new Button(getBox(), style);
63 // btnToggleAdvancedMediaView.setToolTipText(switchAction.getText());
64 // btnToggleAdvancedMediaView.setImage(ImageResources.getImage(ImageResources.SWITCH_VIEW_TYPE));
65 // btnToggleAdvancedMediaView.addSelectionListener(new SelectionAdapter() {
66 // @Override
67 // public void widgetSelected(SelectionEvent e) {
68 // switchAction.run();
69 // }
70 // });
71 setWarnForReferencingObjects(element, 2);
72 text_title = formFactory.createMultiLanguageTextElement(element, "Title", null, 50, style);
73 // text_title = formFactory.createLanguageStringWithLabelElement(element, "Title", null, style);
74 selection_artist = formFactory.createSelectionElement(AgentBase.class, //getConversationHolder(),
75 element, "Artist", null, EntitySelectionElement.ALL, style);
76 addElement(selection_artist);
77
78 mediaCreated = formFactory.createTimePeriodElement(element, "Media Created", getEntity().getMediaCreated(), style);
79 addElement(mediaCreated);
80 text_description = formFactory.createMultiLanguageTextElement(this, "Description", null, 200, SWT.WRAP);
81
82
83 mediaDetailElement = formFactory.createMediaDetailElement(element);
84
85 ICdmFormElement grandGrandParent = getParentElement().getParentElement().getParentElement();
86 Class<?> clazz = null;
87 if (grandGrandParent != null){
88 clazz = grandGrandParent.getClass();
89 }
90 //TODO: find a nicer solution
91 if (grandGrandParent != null && clazz != null && clazz.getName().equals("eu.etaxonomy.taxeditor.ui.element.AbstractCdmEntityWizardPage$WizardPageRootElement")){
92 mediaDetailElement.setShowImage(false);
93 }
94 addElement(mediaDetailElement);
95 }
96
97 @Override
98 public void setEntity(Media element) {
99 this.entity = element;
100 mediaDetailElement.setEntity(element);
101
102 selection_artist.setEntity(HibernateProxyHelper
103 .deproxy(element.getArtist()));
104
105 text_description.setMultilanguageText(element.getAllDescriptions());
106
107 // if (CdmUtils.isBlank(text_description.getText())){
108 // Map<Language, LanguageString> allDescriptions = element.getAllDescriptions();
109 // if (!allDescriptions.isEmpty()){
110 // text_description.setLanguageString(allDescriptions.get(Language.ENGLISH()));
111 // }
112 // }
113
114 createTitle();
115 }
116
117 public void createTitle() {
118 LanguageString title = this.entity.getTitle(CdmStore.getDefaultLanguage());
119 Map<Language, LanguageString> languageStrings = entity.getAllTitles();
120 if (title == null || title.getText().contains("empty media")) {
121 entity.getAllTitles().remove(title);
122 title = LanguageString.NewInstance(entity.getTitleCache(), CdmStore.getDefaultLanguage());
123 if (!title.getText().contains("empty media")){
124 languageStrings.put(CdmStore.getDefaultLanguage(), title);
125 }
126 }
127 text_title.setMultilanguageText(languageStrings);
128 }
129
130 @Override
131 protected Media selectFromDialog() {
132
133 setEntity(MediaSelectionDialog.select(AbstractUtility.getShell(), //null,
134 null));
135 return entity;
136 }
137
138 @Override
139 public void toggleAdvancedMediaView(){
140 mediaDetailElement.toggleAdvancedMediaView();
141 }
142
143 @Override
144 public void handleEvent(Object eventSource) {
145 if (eventSource == selection_artist) {
146 getEntity().setArtist(selection_artist.getSelection());
147 } else if (eventSource == text_description) {
148 text_description.getMultilanguageText().values()
149 .forEach(languageString -> getEntity().addDescription(languageString));
150 } else if (eventSource == text_title) {
151 text_title.getMultilanguageText().values()
152 .forEach(languageString -> getEntity().putTitle(languageString));
153 if (getParentElement() instanceof AbstractCdmDetailSection) {
154 ((AbstractCdmDetailSection<?>) getParentElement()).updateTitle();
155 }
156 } else if (eventSource == mediaCreated){
157 TimePeriod date = mediaCreated.getTimePeriod();
158 getEntity().setMediaCreated(date);
159 }
160 }
161
162 @Override
163 public SelectionArbitrator getSelectionArbitrator() {
164 return selectionArbitrator;
165 }
166
167 public MediaDetailElement getMediaDetailElement(){
168 return mediaDetailElement;
169 }
170 }