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