automated build configuration is on its way
[taxeditor.git] / taxeditor-store / src / main / java / eu / etaxonomy / taxeditor / ui / forms / 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.forms;
12
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.List;
16 import java.util.Map;
17
18 import org.eclipse.core.runtime.IStatus;
19 import org.eclipse.jface.util.PropertyChangeEvent;
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.taxeditor.preference.PreferencesUtil;
31 import eu.etaxonomy.taxeditor.store.CdmStore;
32 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.TermComboType;
33 import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
34 import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
35
36 /**
37 * <p>MultilanguageTextElement class.</p>
38 *
39 * @author n.hoffmann
40 * @created Sep 29, 2010
41 * @version 1.0
42 */
43 public class MultilanguageTextElement extends AbstractCdmFormElement implements SelectionListener{
44
45 private class OpenTranslationWizard extends SelectionAdapter {
46 private Map<Language, LanguageString> multilanguageText;
47
48 public OpenTranslationWizard(Map<Language, LanguageString> multilanguageText){
49 super();
50 this.multilanguageText = multilanguageText;
51 }
52
53 /* (non-Javadoc)
54 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
55 */
56 @Override
57 public void widgetSelected(SelectionEvent e) {
58 TranslationWizard wizard = new TranslationWizard(multilanguageText);
59 WizardDialog dialog = new WizardDialog(getLayoutComposite().getShell(), wizard);
60
61 if (dialog.open() == IStatus.OK){
62 combo_language.setTerms(getLanguages());
63 updateControls();
64 }
65
66 }
67 }
68
69
70 private EmptyComboElement<Language> combo_language;
71
72 private LanguageStringWithLabelElement element_languageString;
73
74 private Button button;
75
76
77
78 private Map<Language, LanguageString> multilanguageText;
79
80 /**
81 * <p>Constructor for MultilanguageTextElement.</p>
82 *
83 * @param formFactory a {@link eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory} object.
84 * @param formElement a {@link eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement} object.
85 * @param labelString a {@link java.lang.String} object.
86 * @param multilanguageText a {@link java.util.Map} object.
87 * @param textHeight a {@link java.lang.Integer} object.
88 * @param style a int.
89 */
90 public MultilanguageTextElement(CdmFormFactory formFactory,
91 ICdmFormElement formElement, String labelString, Map<Language, LanguageString> multilanguageText, Integer textHeight, int style) {
92 super(formFactory, formElement);
93
94 formFactory.addPropertyChangeListener(this);
95
96 element_languageString = formFactory.createLanguageStringWithLabelElement(formElement, labelString, null, textHeight, style);
97
98 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
99 combo_language = (EmptyComboElement<Language>) formFactory
100 .createTermComboElement(TermComboType.EMPTY, formElement,
101 "", null, style);
102 combo_language.addSelectionListener(this);
103 addControl(formFactory.createLabel(getLayoutComposite(), ""));
104 button = formFactory.createButton(getLayoutComposite(),
105 "Open In Translation Editor", SWT.PUSH);
106 addControl(button);
107 button.setLayoutData(CdmFormFactory.RIGHT());
108 button.addSelectionListener(new OpenTranslationWizard(
109 multilanguageText));
110 }
111 setMultilanguageText(multilanguageText);
112 }
113
114 /* (non-Javadoc)
115 * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
116 */
117 /** {@inheritDoc} */
118 @Override
119 public void setSelected(boolean selected) {
120 //
121 }
122
123 private List<Language> getLanguages(){
124
125 ArrayList<Language> languageList = new ArrayList<Language>(getMultilanguageText().keySet());
126
127 // TODO sort
128
129 return languageList;
130 }
131
132 /* (non-Javadoc)
133 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
134 */
135 /** {@inheritDoc} */
136 @Override
137 public void widgetSelected(SelectionEvent e) {
138 Language selectedLanguage = combo_language.getSelection();
139 if(selectedLanguage != null){
140 LanguageString selectedLanguageString = getMultilanguageText().get(selectedLanguage);
141
142 element_languageString.setLanguageString(selectedLanguageString);
143 }
144 }
145
146 /* (non-Javadoc)
147 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
148 */
149 /** {@inheritDoc} */
150 @Override
151 public void widgetDefaultSelected(SelectionEvent e) {}
152
153 /**
154 * <p>Setter for the field <code>multilanguageText</code>.</p>
155 *
156 * @param multilanguageText the multilanguageText to set
157 */
158 public void setMultilanguageText(Map<Language, LanguageString> multilanguageText) {
159 this.multilanguageText = multilanguageText;
160
161 if(multilanguageText != null){
162 if(multilanguageText.isEmpty()){
163 multilanguageText.put(CdmStore.getDefaultLanguage(), LanguageString.NewInstance("", CdmStore.getDefaultLanguage()));
164 }
165 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
166 combo_language.setTerms(getLanguages());
167 }
168 updateControls();
169 }
170 }
171
172 /**
173 *
174 */
175 private void updateControls() {
176 LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(getMultilanguageText(), Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()}));
177
178 element_languageString.setLanguageString(preferredLanguageString);
179 if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
180 combo_language.setSelection(preferredLanguageString.getLanguage());
181 }
182 }
183
184 /**
185 * <p>Getter for the field <code>multilanguageText</code>.</p>
186 *
187 * @return the multilanguageText
188 */
189 public Map<Language, LanguageString> getMultilanguageText() {
190 return multilanguageText;
191 }
192
193 /* (non-Javadoc)
194 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
195 */
196 /** {@inheritDoc} */
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).getLanguageString();
205 multilanguageText.put(languageString.getLanguage(), languageString);
206 }
207 }
208 }