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