Project

General

Profile

Download (8.75 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.term.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.term.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
 */
47
public class TranslationWizardPage extends WizardPage{
48

    
49
	private static int TEXT_HEIGHT = 400;
50

    
51
	private final Map<Language, LanguageString> multilanguageText;
52

    
53
	MultilanguageTextElement source;
54

    
55
	private final CdmFormFactory formFactory;
56

    
57
	private TermComboElement<Language> combo_sourceLanguage;
58

    
59
	private LanguageStringWithLabelElement text_source;
60

    
61
	private TermComboElement<Language> combo_targetLanguage;
62

    
63
	private LanguageStringWithLabelElement text_target;
64

    
65
	/**
66
	 * <p>Constructor for TranslationWizardPage.</p>
67
	 *
68
	 * @param multilanguageText a {@link java.util.Map} object.
69
	 */
70
	protected TranslationWizardPage(Map<Language, LanguageString> multilanguageText) {
71
		super("TranslationWizardPage");
72
		Assert.isNotNull(multilanguageText, "Multilanguage text may not be null");
73
		setTitle("Add or edit translations.");
74
		this.multilanguageText = multilanguageText;
75
		formFactory = new CdmFormFactory(Display.getCurrent());
76
		setPageComplete(false);
77
	}
78

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

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

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

    
107

    
108
		setControl(control);
109
	}
110

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

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

    
118
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, languages);
119

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

    
126

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

    
133
		combo_sourceLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null, SWT.NULL);
134
		
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
		if (preferredLanguageString == null){
149
			preferredLanguageString = LanguageString.NewInstance("", PreferencesUtil.getGlobalLanguage());
150
		}
151
		text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, false, SWT.NULL);
152

    
153
//		text_source.setEnabled(false);
154
		
155
		text_source.setText(preferredLanguageString.getText());
156
	}
157

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

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

    
173
				if (language == null){
174
					setPageComplete(false);
175
					return;
176
				}
177

    
178
				setPageComplete(true);
179
				LanguageString languageString;
180

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

    
187
				text_target.setLanguageString(languageString);
188
			}
189
		});
190

    
191
		text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, false, SWT.NULL);
192

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

    
228

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

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

    
246
		return languageList;
247
	}
248

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

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