Project

General

Profile

Download (8.77 KB) Statistics
| Branch: | Tag: | Revision:
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.cdm.model.common.TermType;
31
import eu.etaxonomy.taxeditor.model.MessagingUtils;
32
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
33
import eu.etaxonomy.taxeditor.store.CdmStore;
34
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
35
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
36
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
37
import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
38
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
39
import eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement;
40
import eu.etaxonomy.taxeditor.ui.element.RootElement;
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 final Map<Language, LanguageString> multilanguageText;
54

    
55
	MultilanguageTextElement source;
56

    
57
	private final CdmFormFactory formFactory;
58

    
59
	private TermComboElement<Language> combo_sourceLanguage;
60

    
61
	private LanguageStringWithLabelElement text_source;
62

    
63
	private TermComboElement<Language> 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
		setPageComplete(false);
79
	}
80

    
81
	/* (non-Javadoc)
82
	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
83
	 */
84
	/** {@inheritDoc} */
85
	@Override
86
	public void createControl(Composite parent) {
87
		Composite control = formFactory.createComposite(parent);
88
//		control.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_GREEN));
89
		control.setLayout(LayoutConstants.LAYOUT(2, true));
90

    
91
		Composite leftContainer = formFactory.createComposite(control);
92
		leftContainer.setLayoutData(LayoutConstants.FILL());
93
		leftContainer.setLayout(LayoutConstants.LAYOUT(1, false));
94
//		leftContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
95
		RootElement leftRoot = new RootElement(formFactory, leftContainer);
96

    
97
		Composite rightContainer = formFactory.createComposite(control);
98
		rightContainer.setLayoutData(LayoutConstants.FILL());
99
		rightContainer.setLayout(LayoutConstants.LAYOUT(1, false));
100
//		rightContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
101
		RootElement rightRoot = new RootElement(formFactory, rightContainer);
102
		
103
		createLeftControls(leftRoot);
104
		createRightControls(rightRoot);
105
		
106
		// initialize with default language
107
		setSource(CdmStore.getDefaultLanguage());
108

    
109

    
110
		setControl(control);
111
	}
112

    
113
	/**
114
	 * @param defaultLanguage
115
	 */
116
	private void setSource(Language language) {
117

    
118
		List<Language> languages = Arrays.asList(new Language[]{language});
119

    
120
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, languages);
121

    
122
		if(preferredLanguageString != null){
123
			combo_sourceLanguage.setSelection(preferredLanguageString.getLanguage());
124
			text_source.setLanguageString(preferredLanguageString);
125
		}
126
	}
127

    
128

    
129
	/**
130
	 *
131
	 * @param element
132
	 */
133
	private void createLeftControls(ICdmFormElement element){
134

    
135
		combo_sourceLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null, SWT.NULL);
136
		
137
		combo_sourceLanguage.setTerms(getLanguages());
138

    
139
		combo_sourceLanguage.addSelectionListener(new SelectionAdapter() {
140
			/* (non-Javadoc)
141
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
142
			 */
143
			@Override
144
			public void widgetSelected(SelectionEvent e) {
145
				text_source.setLanguageString(multilanguageText.get(combo_sourceLanguage.getSelection()));
146
			}
147
		});
148

    
149
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, getLanguages());
150
		if (preferredLanguageString == null){
151
			preferredLanguageString = LanguageString.NewInstance("", PreferencesUtil.getGlobalLanguage());
152
		}
153
		text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, false, SWT.NULL);
154

    
155
//		text_source.setEnabled(false);
156
		
157
		text_source.setText(preferredLanguageString.getText());
158
	}
159

    
160
	/**
161
	 *
162
	 * @param element
163
	 */
164
	private void createRightControls(ICdmFormElement element){
165
		combo_targetLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null, SWT.NULL);
166

    
167
		combo_targetLanguage.addSelectionListener(new SelectionAdapter() {
168
			/* (non-Javadoc)
169
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
170
			 */
171
			@Override
172
			public void widgetSelected(SelectionEvent e) {
173
				Language language = combo_targetLanguage.getSelection();
174

    
175
				if (language == null){
176
					setPageComplete(false);
177
					return;
178
				}
179

    
180
				setPageComplete(true);
181
				LanguageString languageString;
182

    
183
				if(multilanguageText.containsKey(language)){
184
					languageString = multilanguageText.get(language);
185
				}else{
186
					languageString = LanguageString.NewInstance("", language);
187
				}
188

    
189
				text_target.setLanguageString(languageString);
190
			}
191
		});
192

    
193
		text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, false, SWT.NULL);
194

    
195
		//
196
		// The automated translation did rely on the Google Translate API. Unfortunately this service is not free anymore.
197
		// See http://code.google.com/apis/language/translate/overview.html
198
		//
199
//		Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
200
//		button_translationService.addSelectionListener(new SelectionAdapter() {
201
//			/* (non-Javadoc)
202
//			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
203
//			 */
204
//			@Override
205
//			public void widgetSelected(SelectionEvent event) {
206
//				ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
207
//				String translatedText;
208
//				try {
209
//					String text = text_source.getText();
210
//					Language sourceLanguage = text_source.getLanguageString().getLanguage();
211
//					Language targetLanguage = combo_targetLanguage.getSelection();
212
//
213
//					if(targetLanguage == null){
214
//						StoreUtil.warningDialog("Please select a target language", TranslationWizardPage.class, "Please select a language from the combo box at the right.");
215
//						return;
216
//					}
217
//
218
//					translatedText = service.translate(text, sourceLanguage, targetLanguage);
219
//					text_target.setText(translatedText);
220
//				} catch (LanguageNotSupportedException e) {
221
//					StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, "The chosen language is not supported by the translation service.");
222
//				} catch (Exception e){
223
//					StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
224
//				}
225
//
226
//			}
227
//		});
228
	}
229

    
230

    
231
	/**
232
	 *
233
	 * @return
234
	 */
235
	private List<Language> getLanguages(){
236
		Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
237

    
238
		List<Language> languageList = new ArrayList<Language>();
239
		// protect against corrupt language sets
240
		for (Language language : languageSet){
241
			if (language != null){
242
				languageList.add(language);
243
			}else{
244
				MessagingUtils.warningDialog("Empty languages", getClass(), "The multilanguage string contains invalid data. Please contact the administrator of you datasource.");
245
			}
246
		}
247

    
248
		return languageList;
249
	}
250

    
251
	/* (non-Javadoc)
252
	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
253
	 */
254
	/** {@inheritDoc} */
255
	@Override
256
	public void dispose() {
257
		super.dispose();
258
	}
259

    
260
	/**
261
	 * @return
262
	 *
263
	 */
264
	public LanguageString getTargetLanguageString() {
265
		return text_target.getLanguageString();
266
	}
267
}
(7-7/7)