Changes in details view get propagated to editor. Fixed a bug in MultilanguageTextEle...
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / forms / MultilanguageTextElement.java
1 // $Id$
2 /**
3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
9 */
10
11 package eu.etaxonomy.taxeditor.ui.forms;
12
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.eclipse.core.runtime.IStatus;
19 import org.eclipse.jface.util.PropertyChangeEvent;
20 import org.eclipse.jface.wizard.WizardDialog;
21 import org.eclipse.swt.SWT;
22 import org.eclipse.swt.events.SelectionAdapter;
23 import org.eclipse.swt.events.SelectionEvent;
24 import org.eclipse.swt.events.SelectionListener;
25 import org.eclipse.swt.widgets.Button;
26
27 import eu.etaxonomy.cdm.model.common.Language;
28 import eu.etaxonomy.cdm.model.common.LanguageString;
29 import eu.etaxonomy.cdm.model.common.MultilanguageTextHelper;
30 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
31 import eu.etaxonomy.taxeditor.store.CdmStore;
32 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.TermComboType;
33 import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
34 import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
35
36 /**
37 * <p>
38 * MultilanguageTextElement class.
39 * </p>
40 *
41 * @author n.hoffmann
42 * @created Sep 29, 2010
43 * @version 1.0
44 */
45 public class MultilanguageTextElement extends AbstractCdmFormElement implements
46 SelectionListener {
47
48 private class OpenTranslationWizard extends SelectionAdapter {
49 private final Map<Language, LanguageString> multilanguageText;
50
51 public OpenTranslationWizard(
52 Map<Language, LanguageString> multilanguageText) {
53 super();
54 this.multilanguageText = multilanguageText;
55 }
56
57 /*
58 * (non-Javadoc)
59 *
60 * @see
61 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
62 * .swt.events.SelectionEvent)
63 */
64 @Override
65 public void widgetSelected(SelectionEvent e) {
66 TranslationWizard wizard = new TranslationWizard(multilanguageText);
67 WizardDialog dialog = new WizardDialog(getLayoutComposite()
68 .getShell(), wizard);
69
70 if (dialog.open() == IStatus.OK) {
71 combo_language.setTerms(getLanguages());
72 updateControls();
73 }
74
75 }
76 }
77
78 private EmptyComboElement<Language> combo_language;
79
80 protected LanguageStringWithLabelElement element_languageString;
81
82 private Button button;
83
84 private Map<Language, LanguageString> multilanguageText;
85
86 /**
87 * <p>
88 * Constructor for MultilanguageTextElement.
89 * </p>
90 *
91 * @param formFactory
92 * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
93 * object.
94 * @param formElement
95 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
96 * object.
97 * @param labelString
98 * a {@link java.lang.String} object.
99 * @param multilanguageText
100 * a {@link java.util.Map} object.
101 * @param textHeight
102 * a {@link java.lang.Integer} object.
103 * @param style
104 * a int.
105 */
106 public MultilanguageTextElement(CdmFormFactory formFactory,
107 ICdmFormElement formElement, String labelString,
108 Map<Language, LanguageString> multilanguageText,
109 Integer textHeight, int style) {
110 super(formFactory, formElement);
111
112 formFactory.addPropertyChangeListener(this);
113
114 element_languageString = formFactory
115 .createLanguageStringWithLabelElement(formElement, labelString,
116 null, textHeight, style);
117
118 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
119 combo_language = (EmptyComboElement<Language>) formFactory
120 .createTermComboElement(TermComboType.EMPTY, formElement,
121 "", null, style);
122 combo_language.addSelectionListener(this);
123 addControl(formFactory.createLabel(getLayoutComposite(), ""));
124 button = formFactory.createButton(getLayoutComposite(),
125 "Open In Translation Editor", SWT.PUSH);
126 addControl(button);
127 button.setLayoutData(CdmFormFactory.RIGHT());
128 button.addSelectionListener(new OpenTranslationWizard(
129 multilanguageText));
130 }
131 setMultilanguageText(multilanguageText);
132 }
133
134 /*
135 * (non-Javadoc)
136 *
137 * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
138 */
139 /** {@inheritDoc} */
140 @Override
141 public void setSelected(boolean selected) {
142 //
143 }
144
145 private List<Language> getLanguages() {
146
147 ArrayList<Language> languageList = new ArrayList<Language>(
148 getMultilanguageText().keySet());
149
150 // TODO sort
151
152 return languageList;
153 }
154
155 /*
156 * (non-Javadoc)
157 *
158 * @see
159 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
160 * .events.SelectionEvent)
161 */
162 /** {@inheritDoc} */
163 @Override
164 public void widgetSelected(SelectionEvent e) {
165 Language selectedLanguage = combo_language.getSelection();
166 if (selectedLanguage != null) {
167 LanguageString selectedLanguageString = getMultilanguageText().get(
168 selectedLanguage);
169
170 element_languageString.setLanguageString(selectedLanguageString);
171 }
172 }
173
174 /*
175 * (non-Javadoc)
176 *
177 * @see
178 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
179 * .swt.events.SelectionEvent)
180 */
181 /** {@inheritDoc} */
182 @Override
183 public void widgetDefaultSelected(SelectionEvent e) {
184 }
185
186 /**
187 * <p>
188 * Setter for the field <code>multilanguageText</code>.
189 * </p>
190 *
191 * @param multilanguageText
192 * the multilanguageText to set
193 */
194 public void setMultilanguageText(
195 Map<Language, LanguageString> multilanguageText) {
196 this.multilanguageText = multilanguageText;
197
198 if (multilanguageText != null) {
199 if (multilanguageText.isEmpty()) {
200 multilanguageText.put(
201 CdmStore.getDefaultLanguage(),
202 LanguageString.NewInstance("",
203 CdmStore.getDefaultLanguage()));
204 }
205 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
206 combo_language.setTerms(getLanguages());
207 }
208 updateControls();
209 }
210 }
211
212 /**
213 *
214 */
215 private void updateControls() {
216 LanguageString preferredLanguageString = MultilanguageTextHelper
217 .getPreferredLanguageString(getMultilanguageText(),
218 Arrays.asList(new Language[] { CdmStore
219 .getDefaultLanguage() }));
220
221 element_languageString.setLanguageString(preferredLanguageString);
222 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
223 combo_language.setSelection(preferredLanguageString.getLanguage());
224 }
225 }
226
227 /**
228 * <p>
229 * Getter for the field <code>multilanguageText</code>.
230 * </p>
231 *
232 * @return the multilanguageText
233 */
234 public Map<Language, LanguageString> getMultilanguageText() {
235 return multilanguageText;
236 }
237
238 /*
239 * (non-Javadoc)
240 *
241 * @see
242 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
243 * .eclipse.jface.util.PropertyChangeEvent)
244 */
245 /** {@inheritDoc} */
246 @Override
247 public void propertyChange(PropertyChangeEvent event) {
248 if (event == null) {
249 return;
250 }
251 Object eventSource = event.getSource();
252 if (eventSource == element_languageString) {
253 LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
254 .getLanguageString();
255 multilanguageText.put(languageString.getLanguage(), languageString);
256 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
257 }
258 }
259 }