Project

General

Profile

Download (7.26 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.element;
12

    
13
import java.util.ArrayList;
14
import java.util.Arrays;
15
import java.util.Collections;
16
import java.util.List;
17
import java.util.Map;
18

    
19
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.jface.util.PropertyChangeEvent;
21
import org.eclipse.jface.wizard.WizardDialog;
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.events.SelectionListener;
26
import org.eclipse.swt.widgets.Button;
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.taxeditor.model.DefaultTermComparator;
32
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
33
import eu.etaxonomy.taxeditor.store.CdmStore;
34
import eu.etaxonomy.taxeditor.store.StoreUtil;
35
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
36
import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
37

    
38
/**
39
 * <p>
40
 * MultilanguageTextElement class.
41
 * </p>
42
 * 
43
 * @author n.hoffmann
44
 * @created Sep 29, 2010
45
 * @version 1.0
46
 */
47
public class MultilanguageTextElement extends AbstractCdmFormElement implements
48
		SelectionListener {
49

    
50
	private class OpenTranslationWizard extends SelectionAdapter {
51
		
52
		public OpenTranslationWizard() {
53
			super();
54
		}
55

    
56
		/*
57
		 * (non-Javadoc)
58
		 * 
59
		 * @see
60
		 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
61
		 * .swt.events.SelectionEvent)
62
		 */
63
		@Override
64
		public void widgetSelected(SelectionEvent e) {
65
			Map<Language, LanguageString> multilanguageText = getMultilanguageText();
66
			
67
			if (multilanguageText == null){
68
				StoreUtil.warningDialog("No text to transalte", getClass(), "The text is empty and therefore can not be translated");
69
			}
70
			
71
			TranslationWizard wizard = new TranslationWizard(multilanguageText);
72
			WizardDialog dialog = new WizardDialog(getLayoutComposite()
73
					.getShell(), wizard);
74

    
75
			if (dialog.open() == IStatus.OK) {
76
				combo_language.setTerms(getLanguages());
77
				updateControls();
78
			}
79

    
80
		}
81
	}
82

    
83
	private TermComboElement<Language> combo_language;
84

    
85
	protected LanguageStringWithLabelElement element_languageString;
86

    
87
	private Button button;
88

    
89
	private Map<Language, LanguageString> multilanguageText;
90

    
91
	/**
92
	 * <p>
93
	 * Constructor for MultilanguageTextElement.
94
	 * </p>
95
	 * 
96
	 * @param formFactory
97
	 *            a {@link eu.etaxonomy.taxeditor.ui.element.CdmFormFactory}
98
	 *            object.
99
	 * @param formElement
100
	 *            a {@link eu.etaxonomy.taxeditor.ui.element.ICdmFormElement}
101
	 *            object.
102
	 * @param labelString
103
	 *            a {@link java.lang.String} object.
104
	 * @param multilanguageText
105
	 *            a {@link java.util.Map} object.
106
	 * @param textHeight
107
	 *            a {@link java.lang.Integer} object.
108
	 * @param style
109
	 *            a int.
110
	 */
111
	public MultilanguageTextElement(CdmFormFactory formFactory,
112
			ICdmFormElement formElement, String labelString,
113
			Map<Language, LanguageString> multilanguageText,
114
			Integer textHeight, int style) {
115
		super(formFactory, formElement);
116

    
117
		formFactory.addPropertyChangeListener(this);
118

    
119
		element_languageString = this.formFactory
120
				.createLanguageStringWithLabelElement(formElement, labelString,
121
						null, textHeight, style);
122

    
123
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
124
			createMultilanguageTextEditingElements(formElement,
125
					multilanguageText, style);
126
		}
127
		setMultilanguageText(multilanguageText);
128
	}
129

    
130
	private void createMultilanguageTextEditingElements(
131
			ICdmFormElement formElement,
132
			Map<Language, LanguageString> multilanguageText, int style) {
133
		combo_language = formFactory
134
				.createTermComboElement(Language.class, formElement,
135
						"", null, style);
136
		combo_language.addSelectionListener(this);
137
		addControl(formFactory.createLabel(getLayoutComposite(), ""));
138
		button = formFactory.createButton(getLayoutComposite(),
139
				"Open In Translation Editor", SWT.PUSH);
140
		addControl(button);
141
		button.setLayoutData(LayoutConstants.RIGHT());
142
		button.addSelectionListener(new OpenTranslationWizard());
143
	}
144

    
145
	private List<Language> getLanguages() {
146

    
147
		ArrayList<Language> languageList = new ArrayList<Language>(
148
				getMultilanguageText().keySet());
149

    
150
		Collections.sort(languageList, new DefaultTermComparator<Language>());
151

    
152
		return languageList;
153
	}
154

    
155
	/*
156
	 * (non-Javadoc)
157
	 * 
158
	 * @see
159
	 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
160
	 * .events.SelectionEvent)
161
	 */
162
	/** {@inheritDoc} */
163
	@Override
164
	public void widgetSelected(SelectionEvent e) {
165
		Language selectedLanguage = combo_language.getSelection();
166
		if (selectedLanguage != null) {
167
			LanguageString selectedLanguageString = getMultilanguageText().get(
168
					selectedLanguage);
169

    
170
			element_languageString.setLanguageString(selectedLanguageString);
171
		}
172
	}
173

    
174
	/*
175
	 * (non-Javadoc)
176
	 * 
177
	 * @see
178
	 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
179
	 * .swt.events.SelectionEvent)
180
	 */
181
	/** {@inheritDoc} */
182
	@Override
183
	public void widgetDefaultSelected(SelectionEvent e) {
184
	}
185

    
186
	/**
187
	 * <p>
188
	 * Setter for the field <code>multilanguageText</code>.
189
	 * </p>
190
	 * 
191
	 * @param multilanguageText
192
	 *            the multilanguageText to set
193
	 */
194
	public void setMultilanguageText(
195
			Map<Language, LanguageString> multilanguageText) {
196
		this.multilanguageText = multilanguageText;
197

    
198
		if (multilanguageText != null) {
199
			if (multilanguageText.isEmpty()) {
200
				multilanguageText.put(
201
						CdmStore.getDefaultLanguage(),
202
						LanguageString.NewInstance("",
203
								CdmStore.getDefaultLanguage()));
204
			}
205
			if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
206
				combo_language.setTerms(getLanguages());
207
				button.setEnabled(false);
208
			}
209
			updateControls();
210
		}
211
	}
212

    
213
	/**
214
	 * 
215
	 */
216
	private void updateControls() {
217
		LanguageString preferredLanguageString = MultilanguageTextHelper
218
				.getPreferredLanguageString(getMultilanguageText(),
219
						Arrays.asList(new Language[] { CdmStore
220
								.getDefaultLanguage() }));
221

    
222
		element_languageString.setLanguageString(preferredLanguageString);
223
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
224
			combo_language.setSelection(preferredLanguageString.getLanguage());
225
			button.setEnabled(true);
226
		}		
227
	}
228

    
229
	/**
230
	 * <p>
231
	 * Getter for the field <code>multilanguageText</code>.
232
	 * </p>
233
	 * 
234
	 * @return the multilanguageText
235
	 */
236
	public Map<Language, LanguageString> getMultilanguageText() {
237
		return multilanguageText;
238
	}
239

    
240
	/*
241
	 * (non-Javadoc)
242
	 * 
243
	 * @see
244
	 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
245
	 * .eclipse.jface.util.PropertyChangeEvent)
246
	 */
247
	/** {@inheritDoc} */
248
	@Override
249
	public void propertyChange(PropertyChangeEvent event) {
250
		if (event == null) {
251
			return;
252
		}
253
		Object eventSource = event.getSource();
254
		if (eventSource == element_languageString) {
255
			LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
256
					.getLanguageString();
257
			multilanguageText.put(languageString.getLanguage(), languageString);
258
			firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
259
		}
260
	}
261
}
(28-28/38)