Renaming MediaMetaData to MediaInfo
[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.Button;
25 import org.eclipse.swt.widgets.Composite;
26 import org.eclipse.swt.widgets.Display;
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.taxeditor.store.CdmStore;
32 import eu.etaxonomy.taxeditor.store.StoreUtil;
33 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
34 import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.TermComboType;
35 import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
36 import eu.etaxonomy.taxeditor.ui.forms.LanguageStringWithLabelElement;
37 import eu.etaxonomy.taxeditor.ui.forms.MultilanguageTextElement;
38 import eu.etaxonomy.taxeditor.ui.forms.RootElement;
39 import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
40 import eu.etaxonomy.taxeditor.ui.term.LanguageComboElement;
41
42 /**
43 * <p>TranslationWizardPage class.</p>
44 *
45 * @author n.hoffmann
46 * @created Sep 29, 2010
47 * @version 1.0
48 */
49 public class TranslationWizardPage extends WizardPage{
50
51 private static int TEXT_HEIGHT = 400;
52
53 private Map<Language, LanguageString> multilanguageText;
54
55 MultilanguageTextElement source;
56
57 private CdmFormFactory formFactory;
58
59 private EmptyComboElement<Language> combo_sourceLanguage;
60
61 private LanguageStringWithLabelElement text_source;
62
63 private LanguageComboElement combo_targetLanguage;
64
65 private LanguageStringWithLabelElement text_target;
66
67 /**
68 * <p>Constructor for TranslationWizardPage.</p>
69 *
70 * @param multilanguageText a {@link java.util.Map} object.
71 */
72 protected TranslationWizardPage(Map<Language, LanguageString> multilanguageText) {
73 super("TranslationWizardPage");
74 Assert.isNotNull(multilanguageText, "Multilanguage text may not be null");
75 setTitle("Add or edit translations.");
76 this.multilanguageText = multilanguageText;
77 formFactory = new CdmFormFactory(Display.getCurrent());
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(CdmFormFactory.LAYOUT(2, true));
89
90 Composite leftContainer = formFactory.createComposite(control);
91 leftContainer.setLayoutData(CdmFormFactory.FILL());
92 leftContainer.setLayout(CdmFormFactory.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(CdmFormFactory.FILL());
98 rightContainer.setLayout(CdmFormFactory.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 = (EmptyComboElement<Language>) formFactory.createTermComboElement(TermComboType.EMPTY, element, null, null, SWT.NULL);
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 = (LanguageComboElement) formFactory.createTermComboElement(TermComboType.LANGUAGE, 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 LanguageString languageString;
171
172 if(multilanguageText.containsKey(language)){
173 languageString = multilanguageText.get(language);
174 }else{
175 languageString = LanguageString.NewInstance("", language);
176 multilanguageText.put(language, languageString);
177 }
178
179 text_target.setLanguageString(languageString);
180 }
181 });
182
183 text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, SWT.NULL);
184
185 Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
186 button_translationService.addSelectionListener(new SelectionAdapter() {
187 /* (non-Javadoc)
188 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
189 */
190 @Override
191 public void widgetSelected(SelectionEvent event) {
192 ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
193 String translatedText;
194 try {
195 String text = text_source.getText();
196 Language sourceLanguage = text_source.getLanguageString().getLanguage();
197 Language targetLanguage = combo_targetLanguage.getSelection();
198
199 translatedText = service.translate(text, sourceLanguage, targetLanguage);
200 text_target.setText(translatedText);
201 } catch (LanguageNotSupportedException e) {
202 StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, e.getMessage());
203 } catch (Exception e){
204 StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
205 }
206
207 }
208 });
209 }
210
211
212 /**
213 *
214 * @return
215 */
216 private List<Language> getLanguages(){
217 Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
218
219 List<Language> languageList = new ArrayList<Language>(languageSet);
220
221 return languageList;
222 }
223
224 /* (non-Javadoc)
225 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
226 */
227 /** {@inheritDoc} */
228 @Override
229 public void dispose() {
230 super.dispose();
231 }
232 }