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