0eb7c6c6ea9283a3be39515e4f70ec4604a49d69
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / ui / translation / TranslationWizardPage.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.translation;
12
13 import java.util.ArrayList;
14 import java.util.Arrays;
15 import java.util.List;
16 import java.util.Map;
17 import java.util.Set;
18
19 import org.eclipse.core.runtime.Assert;
20 import org.eclipse.jface.wizard.WizardPage;
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.widgets.Composite;
25 import org.eclipse.swt.widgets.Display;
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.store.CdmStore;
31 import eu.etaxonomy.taxeditor.store.StoreUtil;
32 import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
33 import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
34 import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
35 import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
36 import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
37 import eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement;
38 import eu.etaxonomy.taxeditor.ui.element.RootElement;
39
40 /**
41 * <p>TranslationWizardPage class.</p>
42 *
43 * @author n.hoffmann
44 * @created Sep 29, 2010
45 * @version 1.0
46 */
47 public class TranslationWizardPage extends WizardPage{
48
49 private static int TEXT_HEIGHT = 400;
50
51 private Map<Language, LanguageString> multilanguageText;
52
53 MultilanguageTextElement source;
54
55 private CdmFormFactory formFactory;
56
57 private TermComboElement<Language> combo_sourceLanguage;
58
59 private LanguageStringWithLabelElement text_source;
60
61 private TermComboElement<Language> combo_targetLanguage;
62
63 private LanguageStringWithLabelElement text_target;
64
65 /**
66 * <p>Constructor for TranslationWizardPage.</p>
67 *
68 * @param multilanguageText a {@link java.util.Map} object.
69 */
70 protected TranslationWizardPage(Map<Language, LanguageString> multilanguageText) {
71 super("TranslationWizardPage");
72 Assert.isNotNull(multilanguageText, "Multilanguage text may not be null");
73 setTitle("Add or edit translations.");
74 this.multilanguageText = multilanguageText;
75 formFactory = new CdmFormFactory(Display.getCurrent());
76 setPageComplete(false);
77 }
78
79 /* (non-Javadoc)
80 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
81 */
82 /** {@inheritDoc} */
83 @Override
84 public void createControl(Composite parent) {
85 Composite control = formFactory.createComposite(parent);
86 // control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
87 control.setLayout(LayoutConstants.LAYOUT(2, true));
88
89 Composite leftContainer = formFactory.createComposite(control);
90 leftContainer.setLayoutData(LayoutConstants.FILL());
91 leftContainer.setLayout(LayoutConstants.LAYOUT(1, false));
92 // leftContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
93 RootElement leftRoot = new RootElement(formFactory, leftContainer);
94
95 Composite rightContainer = formFactory.createComposite(control);
96 rightContainer.setLayoutData(LayoutConstants.FILL());
97 rightContainer.setLayout(LayoutConstants.LAYOUT(1, false));
98 // rightContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
99 RootElement rightRoot = new RootElement(formFactory, rightContainer);
100
101 createLeftControls(leftRoot);
102 createRightControls(rightRoot);
103
104 // initialize with default language
105 setSource(CdmStore.getDefaultLanguage());
106
107
108 setControl(control);
109 }
110
111 /**
112 * @param defaultLanguage
113 */
114 private void setSource(Language language) {
115
116 List<Language> languages = Arrays.asList(new Language[]{language});
117
118 LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, languages);
119
120 if(preferredLanguageString != null){
121 combo_sourceLanguage.setSelection(preferredLanguageString.getLanguage());
122 text_source.setLanguageString(preferredLanguageString);
123 }
124 }
125
126
127 /**
128 *
129 * @param element
130 */
131 private void createLeftControls(ICdmFormElement element){
132
133 combo_sourceLanguage = formFactory.createTermComboElement(Language.class, element, null, null, SWT.NULL);
134
135 combo_sourceLanguage.setTerms(getLanguages());
136
137 combo_sourceLanguage.addSelectionListener(new SelectionAdapter() {
138 /* (non-Javadoc)
139 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
140 */
141 @Override
142 public void widgetSelected(SelectionEvent e) {
143 text_source.setLanguageString(multilanguageText.get(combo_sourceLanguage.getSelection()));
144 }
145 });
146
147 LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, getLanguages());
148
149 text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, SWT.NULL);
150
151 // text_source.setEnabled(false);
152
153 text_source.setText(preferredLanguageString.getText());
154 }
155
156 /**
157 *
158 * @param element
159 */
160 private void createRightControls(ICdmFormElement element){
161 combo_targetLanguage = formFactory.createTermComboElement(Language.class, element, null, null, SWT.NULL);
162
163 combo_targetLanguage.addSelectionListener(new SelectionAdapter() {
164 /* (non-Javadoc)
165 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
166 */
167 @Override
168 public void widgetSelected(SelectionEvent e) {
169 Language language = combo_targetLanguage.getSelection();
170
171 if (language == null){
172 return;
173 }
174
175 setPageComplete(true);
176 LanguageString languageString;
177
178 if(multilanguageText.containsKey(language)){
179 languageString = multilanguageText.get(language);
180 }else{
181 languageString = LanguageString.NewInstance("", language);
182 }
183
184 text_target.setLanguageString(languageString);
185 }
186 });
187
188 text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, SWT.NULL);
189
190 //
191 // The automated translation did rely on the Google Translate API. Unfortunately this service is not free anymore.
192 // See http://code.google.com/apis/language/translate/overview.html
193 //
194 // Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
195 // button_translationService.addSelectionListener(new SelectionAdapter() {
196 // /* (non-Javadoc)
197 // * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
198 // */
199 // @Override
200 // public void widgetSelected(SelectionEvent event) {
201 // ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
202 // String translatedText;
203 // try {
204 // String text = text_source.getText();
205 // Language sourceLanguage = text_source.getLanguageString().getLanguage();
206 // Language targetLanguage = combo_targetLanguage.getSelection();
207 //
208 // if(targetLanguage == null){
209 // StoreUtil.warningDialog("Please select a target language", TranslationWizardPage.class, "Please select a language from the combo box at the right.");
210 // return;
211 // }
212 //
213 // translatedText = service.translate(text, sourceLanguage, targetLanguage);
214 // text_target.setText(translatedText);
215 // } catch (LanguageNotSupportedException e) {
216 // StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, "The chosen language is not supported by the translation service.");
217 // } catch (Exception e){
218 // StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
219 // }
220 //
221 // }
222 // });
223 }
224
225
226 /**
227 *
228 * @return
229 */
230 private List<Language> getLanguages(){
231 Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
232
233 List<Language> languageList = new ArrayList<Language>();
234 // protect against corrupt language sets
235 for (Language language : languageSet){
236 if (language != null){
237 languageList.add(language);
238 }else{
239 StoreUtil.warningDialog("Empty languages", getClass(), "The multilanguage string contains invalid data. Please contact the administrator of you datasource.");
240 }
241 }
242
243 return languageList;
244 }
245
246 /* (non-Javadoc)
247 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
248 */
249 /** {@inheritDoc} */
250 @Override
251 public void dispose() {
252 super.dispose();
253 }
254
255 /**
256 * @return
257 *
258 */
259 public LanguageString getTargetLanguageString() {
260 return text_target.getLanguageString();
261 }
262 }