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