Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / element / MultilanguageTextElement.java
1 /**
2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
8 */
9
10 package eu.etaxonomy.taxeditor.ui.element;
11
12 import java.util.ArrayList;
13 import java.util.Arrays;
14 import java.util.Collections;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.eclipse.jface.util.PropertyChangeEvent;
19 import org.eclipse.jface.window.Window;
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.cdm.model.common.TermType;
31 import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
32 import eu.etaxonomy.taxeditor.model.MessagingUtils;
33 import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
34 import eu.etaxonomy.taxeditor.store.CdmStore;
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.isEmpty()){
68 MessagingUtils.warningDialog("No text to translate", getClass(), "The text is empty and therefore can not be translated");
69 return;
70 }
71
72 TranslationWizard wizard = new TranslationWizard(multilanguageText);
73 WizardDialog dialog = new WizardDialog(getLayoutComposite()
74 .getShell(), wizard);
75
76 if (dialog.open() == Window.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 Button removeRepresentation;
91
92 private Map<Language, LanguageString> multilanguageText;
93
94 /**
95 * <p>
96 * Constructor for MultilanguageTextElement.
97 * </p>
98 *
99 * @param formFactory
100 * a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
101 * object.
102 * @param formElement
103 * a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
104 * object.
105 * @param labelString
106 * a {@link java.lang.String} object.
107 * @param multilanguageText
108 * a {@link java.util.Map} object.
109 * @param textHeight
110 * a {@link java.lang.Integer} object.
111 * @param style
112 * a int.
113 */
114 public MultilanguageTextElement(CdmFormFactory formFactory,
115 ICdmFormElement formElement, String labelString,
116 Map<Language, LanguageString> multilanguageText,
117 Integer textHeight, int style) {
118 super(formFactory, formElement);
119
120 formFactory.addPropertyChangeListener(this);
121
122 element_languageString = this.formFactory
123 .createLanguageStringWithLabelElement(formElement, labelString,
124 null, textHeight, true, style);
125
126 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
127 createMultilanguageTextEditingElements(formElement,
128 multilanguageText, style);
129 }
130 setMultilanguageText(multilanguageText);
131 }
132
133 private void createMultilanguageTextEditingElements(
134 ICdmFormElement formElement,
135 Map<Language, LanguageString> multilanguageText, int style) {
136 combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
137 "", null, style);
138 combo_language.addSelectionListener(this);
139 // removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
140 // SWT.PUSH);
141 // removeRepresentation.setImage(ImageResources
142 // .getImage(ImageResources.TRASH_ICON));
143 // removeRepresentation.setToolTipText("Remove representation");
144 // addControl(removeRepresentation);
145 // removeRepresentation.addSelectionListener(new DeleteListener(this));
146 addControl(formFactory.createLabel(getLayoutComposite(), ""));
147 button = formFactory.createButton(getLayoutComposite(),
148 "Open In Translation Editor", SWT.PUSH);
149 addControl(button);
150 button.setLayoutData(LayoutConstants.RIGHT());
151 button.addSelectionListener(new OpenTranslationWizard());
152 }
153
154 private List<Language> getLanguages() {
155
156 ArrayList<Language> languageList = new ArrayList<Language>(
157 getMultilanguageText().keySet());
158
159 Collections.sort(languageList, new DefaultTermComparator<Language>());
160
161 return languageList;
162 }
163
164 /*
165 * (non-Javadoc)
166 *
167 * @see
168 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
169 * .events.SelectionEvent)
170 */
171 /** {@inheritDoc} */
172 @Override
173 public void widgetSelected(SelectionEvent e) {
174 Language selectedLanguage = combo_language.getSelection();
175 if (selectedLanguage != null) {
176 LanguageString selectedLanguageString = getMultilanguageText().get(
177 selectedLanguage);
178
179 element_languageString.setLanguageString(selectedLanguageString);
180 }
181 }
182
183 /*
184 * (non-Javadoc)
185 *
186 * @see
187 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
188 * .swt.events.SelectionEvent)
189 */
190 /** {@inheritDoc} */
191 @Override
192 public void widgetDefaultSelected(SelectionEvent e) {
193 }
194
195 /**
196 * <p>
197 * Setter for the field <code>multilanguageText</code>.
198 * </p>
199 *
200 * @param multilanguageText
201 * the multilanguageText to set
202 */
203 public void setMultilanguageText(
204 Map<Language, LanguageString> multilanguageText) {
205 this.multilanguageText = multilanguageText;
206
207 if (multilanguageText != null) {
208 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
209 combo_language.setTerms(getLanguages());
210 button.setEnabled(false);
211 }
212 updateControls();
213 }
214 }
215
216 /**
217 *
218 */
219 private void updateControls() {
220 LanguageString preferredLanguageString = MultilanguageTextHelper
221 .getPreferredLanguageString(getMultilanguageText(),
222 Arrays.asList(new Language[] { CdmStore
223 .getDefaultLanguage() }));
224
225 element_languageString.setLanguageString(preferredLanguageString);
226
227 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
228 combo_language.setSelection(preferredLanguageString == null?CdmStore.getDefaultLanguage():preferredLanguageString.getLanguage());
229 button.setEnabled(true);
230 }
231 }
232
233 /**
234 * <p>
235 * Getter for the field <code>multilanguageText</code>.
236 * </p>
237 *
238 * @return the multilanguageText
239 */
240 public Map<Language, LanguageString> getMultilanguageText() {
241 return multilanguageText;
242 }
243
244 /*
245 * (non-Javadoc)
246 *
247 * @see
248 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
249 * .eclipse.jface.util.PropertyChangeEvent)
250 */
251 /** {@inheritDoc} */
252 @Override
253 public void propertyChange(PropertyChangeEvent event) {
254 if (event == null) {
255 return;
256 }
257 Object eventSource = event.getSource();
258 if (eventSource == element_languageString) {
259 LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
260 .getLanguageString();
261 multilanguageText.put(languageString.getLanguage(), languageString);
262 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
263 }
264 }
265
266 public void setEnabled(boolean enabled){
267 if(button!=null){
268 button.setEnabled(enabled);
269 }
270 if(combo_language!=null){
271 combo_language.setEnabled(enabled);
272 }
273 element_languageString.setEnabled(enabled);
274 }
275
276 }