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