Project

General

Profile

Download (8.75 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
					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)