Project

General

Profile

Download (8.53 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.taxeditor.store.CdmStore;
31
import eu.etaxonomy.taxeditor.store.StoreUtil;
32
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
33
import eu.etaxonomy.taxeditor.ui.element.CdmFormFactory;
34
import eu.etaxonomy.taxeditor.ui.element.ICdmFormElement;
35
import eu.etaxonomy.taxeditor.ui.element.LanguageStringWithLabelElement;
36
import eu.etaxonomy.taxeditor.ui.element.LayoutConstants;
37
import eu.etaxonomy.taxeditor.ui.element.MultilanguageTextElement;
38
import eu.etaxonomy.taxeditor.ui.element.RootElement;
39

    
40
/**
41
 * <p>TranslationWizardPage class.</p>
42
 *
43
 * @author n.hoffmann
44
 * @created Sep 29, 2010
45
 * @version 1.0
46
 */
47
public class TranslationWizardPage extends WizardPage{
48
		
49
	private static int TEXT_HEIGHT = 400;  
50
	
51
	private Map<Language, LanguageString> multilanguageText;
52

    
53
	MultilanguageTextElement source;
54
	
55
	private 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.createTermComboElement(Language.class, 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
		
149
		text_source = formFactory.createLanguageStringWithLabelElement(element, null, preferredLanguageString, TEXT_HEIGHT, SWT.NULL);
150

    
151
//		text_source.setEnabled(false);
152
		
153
		text_source.setText(preferredLanguageString.getText());
154
	}
155
		
156
	/**
157
	 * 
158
	 * @param element
159
	 */
160
	private void createRightControls(ICdmFormElement element){
161
		combo_targetLanguage = formFactory.createTermComboElement(Language.class, element, null, null, SWT.NULL);
162
		
163
		combo_targetLanguage.addSelectionListener(new SelectionAdapter() {
164
			/* (non-Javadoc)
165
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
166
			 */
167
			@Override
168
			public void widgetSelected(SelectionEvent e) {
169
				Language language = combo_targetLanguage.getSelection();
170
				
171
				if (language == null){
172
					return;
173
				}
174
				
175
				setPageComplete(true);
176
				LanguageString languageString;
177
				
178
				if(multilanguageText.containsKey(language)){
179
					languageString = multilanguageText.get(language);
180
				}else{
181
					languageString = LanguageString.NewInstance("", language);
182
				}
183
				
184
				text_target.setLanguageString(languageString);
185
			}
186
		});
187
		
188
		text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, SWT.NULL);
189
		
190
		//
191
		// The automated translation did rely on the Google Translate API. Unfortunately this service is not free anymore.
192
		// See http://code.google.com/apis/language/translate/overview.html
193
		//
194
//		Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
195
//		button_translationService.addSelectionListener(new SelectionAdapter() {
196
//			/* (non-Javadoc)
197
//			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
198
//			 */
199
//			@Override
200
//			public void widgetSelected(SelectionEvent event) {
201
//				ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
202
//				String translatedText;
203
//				try {
204
//					String text = text_source.getText();
205
//					Language sourceLanguage = text_source.getLanguageString().getLanguage();
206
//					Language targetLanguage = combo_targetLanguage.getSelection();
207
//					
208
//					if(targetLanguage == null){
209
//						StoreUtil.warningDialog("Please select a target language", TranslationWizardPage.class, "Please select a language from the combo box at the right.");
210
//						return;
211
//					}
212
//					
213
//					translatedText = service.translate(text, sourceLanguage, targetLanguage);
214
//					text_target.setText(translatedText);
215
//				} catch (LanguageNotSupportedException e) {
216
//					StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, "The chosen language is not supported by the translation service.");
217
//				} catch (Exception e){
218
//					StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
219
//				}
220
//				
221
//			}
222
//		});
223
	}
224

    
225
	
226
	/**
227
	 * 
228
	 * @return
229
	 */
230
	private List<Language> getLanguages(){
231
		Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
232
		
233
		List<Language> languageList = new ArrayList<Language>();
234
		// protect against corrupt language sets
235
		for (Language language : languageSet){
236
			if (language != null){
237
				languageList.add(language);
238
			}else{
239
				StoreUtil.warningDialog("Empty languages", getClass(), "The multilanguage string contains invalid data. Please contact the administrator of you datasource.");
240
			}
241
		}		
242
				
243
		return languageList;
244
	}
245
	
246
	/* (non-Javadoc)
247
	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
248
	 */
249
	/** {@inheritDoc} */
250
	@Override
251
	public void dispose() {
252
		super.dispose();
253
	}
254

    
255
	/**
256
	 * @return 
257
	 * 
258
	 */
259
	public LanguageString getTargetLanguageString() {
260
		return text_target.getLanguageString();
261
	}
262
}
(6-6/6)