Project

General

Profile

Download (7.78 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.Button;
25
import org.eclipse.swt.widgets.Composite;
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.singlesource.org.eclipse.swt.widgets.DisplayProxy;
31
import eu.etaxonomy.taxeditor.singlesource.ui.forms.LanguageStringWithLabelElementFacade;
32
import eu.etaxonomy.taxeditor.store.CdmStore;
33
import eu.etaxonomy.taxeditor.store.StoreUtil;
34
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory;
35
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.TermComboType;
36
import eu.etaxonomy.taxeditor.ui.forms.ICdmFormElement;
37
import eu.etaxonomy.taxeditor.ui.forms.MultilanguageTextElement;
38
import eu.etaxonomy.taxeditor.ui.forms.RootElement;
39
import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
40
import eu.etaxonomy.taxeditor.ui.term.LanguageComboElement;
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 Map<Language, LanguageString> multilanguageText;
54

    
55
	MultilanguageTextElement source;
56
	
57
	private CdmFormFactory formFactory;
58

    
59
	private EmptyComboElement<Language> combo_sourceLanguage;
60

    
61
	private LanguageStringWithLabelElementFacade text_source;
62

    
63
	private LanguageComboElement combo_targetLanguage;
64

    
65
	private LanguageStringWithLabelElementFacade 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(DisplayProxy.getDefault());
78
	}
79

    
80
	/* (non-Javadoc)
81
	 * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
82
	 */
83
	/** {@inheritDoc} */
84
	@Override
85
	public void createControl(Composite parent) {
86
		Composite control = formFactory.createComposite(parent);
87
//		control.setBackground(DisplayProxy.getDefault().getSystemColor(SWT.COLOR_GREEN));
88
		control.setLayout(CdmFormFactory.LAYOUT(2, true));
89
		
90
		Composite leftContainer = formFactory.createComposite(control);
91
		leftContainer.setLayoutData(CdmFormFactory.FILL());
92
		leftContainer.setLayout(CdmFormFactory.LAYOUT(1, false));
93
//		leftContainer.setBackground(DisplayProxy.getDefault().getSystemColor(SWT.COLOR_BLUE));
94
		RootElement leftRoot = new RootElement(formFactory, leftContainer);
95
		
96
		Composite rightContainer = formFactory.createComposite(control);
97
		rightContainer.setLayoutData(CdmFormFactory.FILL());
98
		rightContainer.setLayout(CdmFormFactory.LAYOUT(1, false));
99
//		rightContainer.setBackground(DisplayProxy.getDefault().getSystemColor(SWT.COLOR_RED));
100
		RootElement rightRoot = new RootElement(formFactory, rightContainer);
101
		
102
		createLeftControls(leftRoot);
103
		createRightControls(rightRoot);
104
		
105
		// initialize with default language
106
		setSource(CdmStore.getDefaultLanguage());
107
		
108
		
109
		setControl(control);
110
	}
111
	
112
	/**
113
	 * @param defaultLanguage
114
	 */
115
	private void setSource(Language language) {
116
		
117
		List<Language> languages = Arrays.asList(new Language[]{language});
118
		
119
		LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(multilanguageText, languages);
120
		
121
		if(preferredLanguageString != null){
122
			combo_sourceLanguage.setSelection(preferredLanguageString.getLanguage());
123
			text_source.setLanguageString(preferredLanguageString);
124
		}
125
	}
126

    
127

    
128
	/**
129
	 * 
130
	 * @param element
131
	 */
132
	private void createLeftControls(ICdmFormElement element){
133
		
134
		combo_sourceLanguage = (EmptyComboElement<Language>) formFactory.createTermComboElement(TermComboType.EMPTY, element, null, null, SWT.NULL);
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 = (LanguageComboElement) formFactory.createTermComboElement(TermComboType.LANGUAGE, 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
				LanguageString languageString;
171
				
172
				if(multilanguageText.containsKey(language)){
173
					languageString = multilanguageText.get(language);
174
				}else{
175
					languageString = LanguageString.NewInstance("", language);
176
					multilanguageText.put(language, languageString);
177
				}
178
				
179
				text_target.setLanguageString(languageString);
180
			}
181
		});
182
		
183
		text_target = formFactory.createLanguageStringWithLabelElement(element, null, null, TEXT_HEIGHT, SWT.NULL);
184
		
185
		Button button_translationService = formFactory.createButton(element.getLayoutComposite(), "Translate", SWT.PUSH);
186
		button_translationService.addSelectionListener(new SelectionAdapter() {
187
			/* (non-Javadoc)
188
			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
189
			 */
190
			@Override
191
			public void widgetSelected(SelectionEvent event) {
192
				ITranslationServiceWrapper service = new GoogleLanguageApiWrapper();
193
				String translatedText;
194
				try {
195
					String text = text_source.getText();
196
					Language sourceLanguage = text_source.getLanguageString().getLanguage();
197
					Language targetLanguage = combo_targetLanguage.getSelection();
198
					
199
					translatedText = service.translate(text, sourceLanguage, targetLanguage);
200
					text_target.setText(translatedText);
201
				} catch (LanguageNotSupportedException e) {
202
					StoreUtil.warningDialog("Language not supported", TranslationWizardPage.class, e.getMessage());
203
				} catch (Exception e){
204
					StoreUtil.warningDialog("Error translating text", TranslationWizardPage.class, e.getMessage());
205
				}
206
				
207
			}
208
		});
209
	}
210

    
211
	
212
	/**
213
	 * 
214
	 * @return
215
	 */
216
	private List<Language> getLanguages(){
217
		Set<Language> languageSet = MultilanguageTextHelper.getLanguages(multilanguageText);
218
		
219
		List<Language> languageList = new ArrayList<Language>(languageSet);
220
				
221
		return languageList;
222
	}
223
	
224
	/* (non-Javadoc)
225
	 * @see org.eclipse.jface.dialogs.DialogPage#dispose()
226
	 */
227
	/** {@inheritDoc} */
228
	@Override
229
	public void dispose() {
230
		super.dispose();
231
	}
232
}
(6-6/6)