Project

General

Profile

Download (8.77 KB) Statistics
| Branch: | Tag: | Revision:
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
}
(7-7/7)