91829bbe3eb12e68d8e9b0fc14a262d84fb4679b
[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.combo.EmptyComboElement;
33 import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
34
35 /**
36 * <p>
37 * MultilanguageTextElement class.
38 * </p>
39 *
40 * @author n.hoffmann
41 * @created Sep 29, 2010
42 * @version 1.0
43 */
44 public class MultilanguageTextElement extends AbstractCdmFormElement implements
45 SelectionListener {
46
47 private class OpenTranslationWizard extends SelectionAdapter {
48 private final Map<Language, LanguageString> multilanguageText;
49
50 public OpenTranslationWizard(
51 Map<Language, LanguageString> multilanguageText) {
52 super();
53 this.multilanguageText = multilanguageText;
54 }
55
56 /*
57 * (non-Javadoc)
58 *
59 * @see
60 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
61 * .swt.events.SelectionEvent)
62 */
63 @Override
64 public void widgetSelected(SelectionEvent e) {
65 TranslationWizard wizard = new TranslationWizard(multilanguageText);
66 WizardDialog dialog = new WizardDialog(getLayoutComposite()
67 .getShell(), wizard);
68
69 if (dialog.open() == IStatus.OK) {
70 combo_language.setTerms(getLanguages());
71 updateControls();
72 }
73
74 }
75 }
76
77 private EmptyComboElement<Language> combo_language;
78
79 protected LanguageStringWithLabelElement element_languageString;
80
81 private Button button;
82
83 private Map<Language, LanguageString> multilanguageText;
84
85 /**
86 * <p>
87 * Constructor for MultilanguageTextElement.
88 * </p>
89 *
90 * @param formFactory
91 * a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory}
92 * object.
93 * @param formElement
94 * a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement}
95 * object.
96 * @param labelString
97 * a {@link java.lang.String} object.
98 * @param multilanguageText
99 * a {@link java.util.Map} object.
100 * @param textHeight
101 * a {@link java.lang.Integer} object.
102 * @param style
103 * a int.
104 */
105 public MultilanguageTextElement(CdmFormFactory formFactory,
106 ICdmFormElement formElement, String labelString,
107 Map<Language, LanguageString> multilanguageText,
108 Integer textHeight, int style) {
109 super(formFactory, formElement);
110
111 formFactory.addPropertyChangeListener(this);
112
113 element_languageString = formFactory
114 .createLanguageStringWithLabelElement(formElement, labelString,
115 null, textHeight, style);
116
117 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
118 combo_language = (EmptyComboElement<Language>) formFactory
119 .createTermComboElement(Language.class, formElement,
120 "", null, style);
121 combo_language.addSelectionListener(this);
122 addControl(formFactory.createLabel(getLayoutComposite(), ""));
123 button = formFactory.createButton(getLayoutComposite(),
124 "Open In Translation Editor", SWT.PUSH);
125 addControl(button);
126 button.setLayoutData(CdmFormFactory.RIGHT());
127 button.addSelectionListener(new OpenTranslationWizard(
128 multilanguageText));
129 }
130 setMultilanguageText(multilanguageText);
131 }
132
133 private List<Language> getLanguages() {
134
135 ArrayList<Language> languageList = new ArrayList<Language>(
136 getMultilanguageText().keySet());
137
138 // TODO sort
139
140 return languageList;
141 }
142
143 /*
144 * (non-Javadoc)
145 *
146 * @see
147 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
148 * .events.SelectionEvent)
149 */
150 /** {@inheritDoc} */
151 @Override
152 public void widgetSelected(SelectionEvent e) {
153 Language selectedLanguage = combo_language.getSelection();
154 if (selectedLanguage != null) {
155 LanguageString selectedLanguageString = getMultilanguageText().get(
156 selectedLanguage);
157
158 element_languageString.setLanguageString(selectedLanguageString);
159 }
160 }
161
162 /*
163 * (non-Javadoc)
164 *
165 * @see
166 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
167 * .swt.events.SelectionEvent)
168 */
169 /** {@inheritDoc} */
170 @Override
171 public void widgetDefaultSelected(SelectionEvent e) {
172 }
173
174 /**
175 * <p>
176 * Setter for the field <code>multilanguageText</code>.
177 * </p>
178 *
179 * @param multilanguageText
180 * the multilanguageText to set
181 */
182 public void setMultilanguageText(
183 Map<Language, LanguageString> multilanguageText) {
184 this.multilanguageText = multilanguageText;
185
186 if (multilanguageText != null) {
187 if (multilanguageText.isEmpty()) {
188 multilanguageText.put(
189 CdmStore.getDefaultLanguage(),
190 LanguageString.NewInstance("",
191 CdmStore.getDefaultLanguage()));
192 }
193 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
194 combo_language.setTerms(getLanguages());
195 }
196 updateControls();
197 }
198 }
199
200 /**
201 *
202 */
203 private void updateControls() {
204 LanguageString preferredLanguageString = MultilanguageTextHelper
205 .getPreferredLanguageString(getMultilanguageText(),
206 Arrays.asList(new Language[] { CdmStore
207 .getDefaultLanguage() }));
208
209 element_languageString.setLanguageString(preferredLanguageString);
210 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
211 combo_language.setSelection(preferredLanguageString.getLanguage());
212 }
213 }
214
215 /**
216 * <p>
217 * Getter for the field <code>multilanguageText</code>.
218 * </p>
219 *
220 * @return the multilanguageText
221 */
222 public Map<Language, LanguageString> getMultilanguageText() {
223 return multilanguageText;
224 }
225
226 /*
227 * (non-Javadoc)
228 *
229 * @see
230 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
231 * .eclipse.jface.util.PropertyChangeEvent)
232 */
233 /** {@inheritDoc} */
234 @Override
235 public void propertyChange(PropertyChangeEvent event) {
236 if (event == null) {
237 return;
238 }
239 Object eventSource = event.getSource();
240 if (eventSource == element_languageString) {
241 LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
242 .getLanguageString();
243 multilanguageText.put(languageString.getLanguage(), languageString);
244 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
245 }
246 }
247 }