Project

General

Profile

Download (10.1 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.util.IPropertyChangeListener;
20
import org.eclipse.jface.util.PropertyChangeEvent;
21
import org.eclipse.jface.wizard.WizardPage;
22
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.events.SelectionAdapter;
24
import org.eclipse.swt.events.SelectionEvent;
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.cdm.model.term.TermType;
32
import eu.etaxonomy.taxeditor.model.MessagingUtils;
33
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
34
import eu.etaxonomy.taxeditor.store.CdmStore;
35
import eu.etaxonomy.taxeditor.ui.combo.term.TermComboElement;
36
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
37
import eu.etaxonomy.taxeditor.ui.element.CdmPropertyChangeEvent;
38
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
39
import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
40
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
41
import eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement;
42
import eu.etaxonomy.taxeditor.ui.element.RootElement;
43

    
44
/**
45
 * <p>TranslationWizardPage class.</p>
46
 *
47
 * @author n.hoffmann
48
 * @created Sep 29, 2010
49
 */
50
public class TranslationWizardPage extends WizardPage implements IPropertyChangeListener{
51

    
52
	private static int TEXT_HEIGHT = 400;
53

    
54
	private final Map<Language, LanguageString> multilanguageText;
55

    
56
	MultilanguageTextElement source;
57

    
58
	private final CdmFormFactory formFactory;
59

    
60
	private TermComboElement<Language> combo_sourceLanguage;
61

    
62
	private LanguageStringWithLabelElement text_source;
63

    
64
	private TermComboElement<Language> combo_targetLanguage;
65

    
66
	private LanguageStringWithLabelElement text_target;
67
	
68
	private Language selectedLanguage;
69

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

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

    
95
		Composite leftContainer = formFactory.createComposite(control);
96
		leftContainer.setLayoutData(LayoutConstants.FILL());
97
		leftContainer.setLayout(LayoutConstants.LAYOUT(1, false));
98
//		leftContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_BLUE));
99
		RootElement leftRoot = new RootElement(formFactory, leftContainer);
100

    
101
		Composite rightContainer = formFactory.createComposite(control);
102
		rightContainer.setLayoutData(LayoutConstants.FILL());
103
		rightContainer.setLayout(LayoutConstants.LAYOUT(1, false));
104
//		rightContainer.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_RED));
105
		RootElement rightRoot = new RootElement(formFactory, rightContainer);
106
		
107
		createLeftControls(leftRoot);
108
		createRightControls(rightRoot);
109

    
110
		
111
		// initialize with default language
112
		setSource(CdmStore.getDefaultLanguage());
113

    
114

    
115
		setControl(control);
116
	}
117

    
118
	/**
119
	 * @param defaultLanguage
120
	 */
121
	private void setSource(Language language) {
122

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

    
125
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, languages);
126

    
127
		if(preferredLanguageString != null){
128
			combo_sourceLanguage.setSelection(preferredLanguageString.getLanguage());
129
			text_source.setLanguageString(preferredLanguageString);
130
		}
131
	}
132

    
133

    
134
	/**
135
	 *
136
	 * @param element
137
	 */
138
	private void createLeftControls(ICdmFormElement element){
139

    
140
		combo_sourceLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null, false,SWT.NULL);
141
		
142
		combo_sourceLanguage.setTerms(getLanguages());
143

    
144
		combo_sourceLanguage.addSelectionListener(new SelectionAdapter() {
145
			/* (non-Javadoc)
146
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
147
			 */
148
			@Override
149
			public void widgetSelected(SelectionEvent e) {
150
				text_source.setLanguageString(multilanguageText.get(combo_sourceLanguage.getSelection()));
151
			}
152
		});
153

    
154
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, getLanguages());
155
		if (preferredLanguageString == null){
156
			preferredLanguageString = LanguageString.NewInstance("", PreferencesUtil.getGlobalLanguage());
157
		}
158
		text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, false, SWT.NULL);
159

    
160
//		text_source.setEnabled(false);
161
		
162
		text_source.setText(preferredLanguageString.getText());
163
	}
164

    
165
	/**
166
	 *
167
	 * @param element
168
	 */
169
	private void createRightControls(ICdmFormElement element){
170
		combo_targetLanguage = formFactory.createDefinedTermComboElement(TermType.Language, element, null, null,false, SWT.NULL);
171
						
172
		combo_targetLanguage.addSelectionListener(new SelectionAdapter() {
173
			/* (non-Javadoc)
174
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
175
			 */
176
			@Override
177
			public void widgetSelected(SelectionEvent e) {
178
				Language language = combo_targetLanguage.getSelection();
179

    
180
				if (language == null){
181
					setPageComplete(false);
182
					return;
183
				}
184

    
185
				setPageComplete(true);
186
				LanguageString languageString;
187

    
188
				if(multilanguageText.containsKey(language)){
189
					languageString = multilanguageText.get(language);
190
				}else{
191
					languageString = LanguageString.NewInstance("", language);
192
				}
193

    
194
				text_target.setLanguageString(languageString);
195
			}
196
		});
197

    
198
		text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, false, SWT.NULL);
199

    
200
		
201
		Language lang = combo_targetLanguage.getTerms().get(0);
202
		LanguageString langString;
203
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, null);
204
		if (preferredLanguageString.getLanguage().equals(selectedLanguage)) {
205
			langString = multilanguageText.get(lang);
206
			if (langString == null) {
207
				Set<Language> alreadyExisting = multilanguageText.keySet();
208
				for (Language langExist: alreadyExisting) {
209
					if (!langExist.equals(preferredLanguageString.getLanguage())) {
210
						langString = multilanguageText.get(langExist);
211
						lang = langExist;
212
						break;
213
					}
214
				}
215
			}
216
		} else {
217
			langString = multilanguageText.get(selectedLanguage);
218
			lang = selectedLanguage;
219
		}
220
		if (langString != null) {
221
			text_target.setLanguageString(langString);
222
			combo_targetLanguage.setSelection(lang);
223
			setPageComplete(true);
224
		}
225
		
226

    
227
		//
228
		// The automated translation did rely on the Google Translate API. Unfortunately this service is not free anymore.
229
		// See http://code.google.com/apis/language/translate/overview.html
230
		//
231
//		Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
232
//		button_translationService.addSelectionListener(new SelectionAdapter() {
233
//			/* (non-Javadoc)
234
//			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
235
//			 */
236
//			@Override
237
//			public void widgetSelected(SelectionEvent event) {
238
//				ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
239
//				String translatedText;
240
//				try {
241
//					String text = text_source.getText();
242
//					Language sourceLanguage = text_source.getLanguageString().getLanguage();
243
//					Language targetLanguage = combo_targetLanguage.getSelection();
244
//
245
//					if(targetLanguage == null){
246
//						StoreUtil.warningDialog("Please select a target language", TranslationWizardPage.class, "Please select a language from the combo box at the right.");
247
//						return;
248
//					}
249
//
250
//					translatedText = service.translate(text, sourceLanguage, targetLanguage);
251
//					text_target.setText(translatedText);
252
//				} catch (LanguageNotSupportedException e) {
253
//					StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, "The chosen language is not supported by the translation service.");
254
//				} catch (Exception e){
255
//					StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
256
//				}
257
//
258
//			}
259
//		});
260
	}
261

    
262

    
263
	/**
264
	 *
265
	 * @return
266
	 */
267
	private List<Language> getLanguages(){
268
		Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
269

    
270
		List<Language> languageList = new ArrayList<Language>();
271
		// protect against corrupt language sets
272
		for (Language language : languageSet){
273
			if (language != null){
274
				languageList.add(language);
275
			}else{
276
				MessagingUtils.warningDialog("Empty languages", getClass(), "The multilanguage string contains invalid data. Please contact the administrator of you datasource.");
277
			}
278
		}
279

    
280
		return languageList;
281
	}
282

    
283
	/* (non-Javadoc)
284
	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
285
	 */
286
	/** {@inheritDoc} */
287
	@Override
288
	public void dispose() {
289
		super.dispose();
290
	}
291

    
292
	/**
293
	 * @return
294
	 *
295
	 */
296
	public LanguageString getTargetLanguageString() {
297
		return text_target.getLanguageString();
298
	}
299

    
300
	
301

    
302
	@Override
303
	public void propertyChange(PropertyChangeEvent event) {
304
		if (event.getSource().equals(text_target)) {
305
			setPageComplete(true);
306
		}
307
		
308
	}
309
}
(7-7/7)