cleanup
[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 package eu.etaxonomy.taxeditor.ui.element;
10
11 import java.util.ArrayList;
12 import java.util.Arrays;
13 import java.util.Collections;
14 import java.util.HashMap;
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.term.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.term.TermComboElement;
36 import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
37
38 /**
39 *
40 * @author n.hoffmann
41 * @created Sep 29, 2010
42 */
43 public class MultilanguageTextElement extends AbstractCdmFormElement implements
44 SelectionListener, IEnableableFormElement {
45
46 private class OpenTranslationWizard extends SelectionAdapter {
47
48 public OpenTranslationWizard() {
49 super();
50 }
51
52 @Override
53 public void widgetSelected(SelectionEvent e) {
54 Map<Language, LanguageString> multilanguageText = getMultilanguageText();
55
56 if (multilanguageText==null || multilanguageText.isEmpty()){
57 MessagingUtils.warningDialog("No text to translate", getClass(), "The text is empty and therefore can not be translated");
58 return;
59 }
60
61 TranslationWizard wizard = new TranslationWizard(multilanguageText);
62 WizardDialog dialog = new WizardDialog(getLayoutComposite()
63 .getShell(), wizard);
64
65 if (dialog.open() == Window.OK) {
66 combo_language.setTerms(getLanguages());
67 updateControls();
68 }
69 }
70 }
71
72 private TermComboElement<Language> combo_language;
73
74 protected LanguageStringWithLabelElement element_languageString;
75
76 private Button button;
77
78 private boolean isEnabled = true;
79 // private Button removeRepresentation;
80
81 private Map<Language, LanguageString> multilanguageText;
82
83 public MultilanguageTextElement(CdmFormFactory formFactory,
84 ICdmFormElement formElement, String labelString,
85 Map<Language, LanguageString> multilanguageText,
86 Integer textHeight, int style) {
87 super(formFactory, formElement);
88
89 formFactory.addPropertyChangeListener(this);
90
91 element_languageString = this.formFactory
92 .createLanguageStringWithLabelElement(formElement, labelString,
93 null, textHeight, true, style);
94
95 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
96 createMultilanguageTextEditingElements(formElement,
97 multilanguageText, style);
98 }
99 setMultilanguageText(multilanguageText);
100 }
101
102 private void createMultilanguageTextEditingElements(
103 ICdmFormElement formElement,
104 Map<Language, LanguageString> multilanguageText, int style) {
105 combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
106 "", null, style);
107 combo_language.addSelectionListener(this);
108 // removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
109 // SWT.PUSH);
110 // removeRepresentation.setImage(ImageResources
111 // .getImage(ImageResources.TRASH_ICON));
112 // removeRepresentation.setToolTipText("Remove representation");
113 // addControl(removeRepresentation);
114 // removeRepresentation.addSelectionListener(new DeleteListener(this));
115 addControl(formFactory.createLabel(getLayoutComposite(), ""));
116 button = formFactory.createButton(getLayoutComposite(),
117 "Open In Translation Editor", SWT.PUSH);
118 addControl(button);
119 button.setLayoutData(LayoutConstants.RIGHT());
120 button.addSelectionListener(new OpenTranslationWizard());
121 }
122
123 private List<Language> getLanguages() {
124
125 ArrayList<Language> languageList = new ArrayList<Language>(
126 getMultilanguageText().keySet());
127
128 Collections.sort(languageList, new DefaultTermComparator<Language>());
129
130 return languageList;
131 }
132
133 @Override
134 public void widgetSelected(SelectionEvent e) {
135 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
136 Language selectedLanguage = combo_language.getSelection();
137 if (selectedLanguage != null) {
138 LanguageString selectedLanguageString = getMultilanguageText().get(
139 selectedLanguage);
140
141 element_languageString.setLanguageString(selectedLanguageString);
142 }
143 }
144 }
145
146 @Override
147 public void widgetDefaultSelected(SelectionEvent e) {
148 }
149
150 public void setMultilanguageText(
151 Map<Language, LanguageString> multilanguageText) {
152 this.multilanguageText = multilanguageText;
153
154 if (multilanguageText != null) {
155 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
156 combo_language.setTerms(getLanguages());
157 button.setEnabled(false);
158 }
159 updateControls();
160 }
161 }
162
163 @Override
164 public void refresh(){
165 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
166 Language lang = combo_language.getSelection();
167 if (multilanguageText.get(lang)!= null){
168 this.element_languageString.setText(multilanguageText.get(combo_language.getSelection()).getText());
169 }else{
170 this.element_languageString.setText(null);
171 }
172 }else{
173 if (multilanguageText != null && multilanguageText.get(CdmStore.getDefaultLanguage()) != null){
174 this.element_languageString.setText(multilanguageText.get(CdmStore.getDefaultLanguage()).getText());
175 }
176 }
177 }
178
179 private void updateControls() {
180 LanguageString preferredLanguageString = MultilanguageTextHelper
181 .getPreferredLanguageString(getMultilanguageText(),
182 Arrays.asList(new Language[] { CdmStore
183 .getDefaultLanguage() }));
184
185 element_languageString.setLanguageString(preferredLanguageString);
186
187 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
188 combo_language.setSelection(preferredLanguageString == null?CdmStore.getDefaultLanguage():preferredLanguageString.getLanguage());
189 button.setEnabled(true);
190 }
191 }
192
193 public Map<Language, LanguageString> getMultilanguageText() {
194 return multilanguageText;
195 }
196
197 @Override
198 public void propertyChange(PropertyChangeEvent event) {
199 if (event == null) {
200 return;
201 }
202 Object eventSource = event.getSource();
203 if (eventSource == element_languageString) {
204 LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
205 .getLanguageString();
206 if (multilanguageText == null){
207 multilanguageText = new HashMap<>();
208 }
209 multilanguageText.put(languageString.getLanguage(), languageString);
210 firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
211 }
212 }
213
214 @Override
215 public void setEnabled(boolean enabled){
216 isEnabled = enabled;
217 if(button!=null){
218 button.setEnabled(enabled);
219 }
220 if(combo_language!=null){
221 combo_language.setEnabled(enabled);
222 }
223 element_languageString.setEnabled(enabled);
224 }
225
226 public void setIndent(int indent){
227 this.element_languageString.setIndent(indent);
228 }
229
230 @Override
231 public boolean isEnabled() {
232 return isEnabled;
233 }
234 }