Project

General

Profile

Download (8.23 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.element;
11

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

    
18
import org.eclipse.jface.util.PropertyChangeEvent;
19
import org.eclipse.jface.window.Window;
20
import org.eclipse.jface.wizard.WizardDialog;
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.events.SelectionListener;
25
import org.eclipse.swt.widgets.Button;
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.cdm.model.common.TermType;
31
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
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.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.isEmpty()){
68
				MessagingUtils.warningDialog("No text to translate", getClass(), "The text is empty and therefore can not be translated");
69
				return;
70
			}
71

    
72
			TranslationWizard wizard = new TranslationWizard(multilanguageText);
73
			WizardDialog dialog = new WizardDialog(getLayoutComposite()
74
					.getShell(), wizard);
75

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

    
81
		}
82
	}
83

    
84
	private TermComboElement<Language> combo_language;
85

    
86
	protected ILanguageStringProvider element_languageString;
87

    
88
	private Button button;
89

    
90
//	private Button removeRepresentation;
91

    
92
	private Map<Language, LanguageString> multilanguageText;
93

    
94
	private boolean useRichText = true;
95

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

    
122
		formFactory.addPropertyChangeListener(this);
123
		if (useRichText ){
124
		element_languageString = this.formFactory
125
				.createLanguageRichTextWithLabelElement(formElement, labelString,
126
						null, textHeight, true, style);
127
		} else{
128
			element_languageString = this.formFactory
129
					.createLanguageStringWithLabelElement(formElement, labelString,
130
							null, textHeight, true, style);
131
		}
132

    
133
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
134
			createMultilanguageTextEditingElements(formElement,
135
					multilanguageText, style);
136
		}
137
		setMultilanguageText(multilanguageText);
138
	}
139

    
140
	private void createMultilanguageTextEditingElements(
141
			ICdmFormElement formElement,
142
			Map<Language, LanguageString> multilanguageText, int style) {
143
		combo_language = formFactory.createDefinedTermComboElement(TermType.Language, formElement,
144
						"", null, style);
145
		combo_language.addSelectionListener(this);
146
//		removeRepresentation = formFactory.createButton(getLayoutComposite(), null,
147
//				SWT.PUSH);
148
//		removeRepresentation.setImage(ImageResources
149
//				.getImage(ImageResources.TRASH_ICON));
150
//		removeRepresentation.setToolTipText("Remove representation");
151
//		addControl(removeRepresentation);
152
//		removeRepresentation.addSelectionListener(new DeleteListener(this));
153
		addControl(formFactory.createLabel(getLayoutComposite(), ""));
154
		button = formFactory.createButton(getLayoutComposite(),
155
				"Open In Translation Editor", SWT.PUSH);
156
		addControl(button);
157
		button.setLayoutData(LayoutConstants.RIGHT());
158
		button.addSelectionListener(new OpenTranslationWizard());
159
	}
160

    
161
	private List<Language> getLanguages() {
162

    
163
		ArrayList<Language> languageList = new ArrayList<Language>(
164
				getMultilanguageText().keySet());
165

    
166
		Collections.sort(languageList, new DefaultTermComparator<Language>());
167

    
168
		return languageList;
169
	}
170

    
171
	/*
172
	 * (non-Javadoc)
173
	 *
174
	 * @see
175
	 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
176
	 * .events.SelectionEvent)
177
	 */
178
	/** {@inheritDoc} */
179
	@Override
180
	public void widgetSelected(SelectionEvent e) {
181
		Language selectedLanguage = combo_language.getSelection();
182
		if (selectedLanguage != null) {
183
			LanguageString selectedLanguageString = getMultilanguageText().get(
184
					selectedLanguage);
185

    
186
			element_languageString.setLanguageString(selectedLanguageString);
187
		}
188
	}
189

    
190
	/*
191
	 * (non-Javadoc)
192
	 *
193
	 * @see
194
	 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
195
	 * .swt.events.SelectionEvent)
196
	 */
197
	/** {@inheritDoc} */
198
	@Override
199
	public void widgetDefaultSelected(SelectionEvent e) {
200
	}
201

    
202
	/**
203
	 * <p>
204
	 * Setter for the field <code>multilanguageText</code>.
205
	 * </p>
206
	 *
207
	 * @param multilanguageText
208
	 *            the multilanguageText to set
209
	 */
210
	public void setMultilanguageText(
211
			Map<Language, LanguageString> multilanguageText) {
212
		this.multilanguageText = multilanguageText;
213

    
214
		if (multilanguageText != null) {
215
			if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
216
				combo_language.setTerms(getLanguages());
217
				button.setEnabled(false);
218
			}
219
			updateControls();
220
		}
221
	}
222

    
223
	/**
224
	 *
225
	 */
226
	private void updateControls() {
227
		LanguageString preferredLanguageString = MultilanguageTextHelper
228
				.getPreferredLanguageString(getMultilanguageText(),
229
						Arrays.asList(new Language[] { CdmStore
230
								.getDefaultLanguage() }));
231

    
232
		element_languageString.setLanguageString(preferredLanguageString);
233

    
234
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
235
			combo_language.setSelection(preferredLanguageString == null?CdmStore.getDefaultLanguage():preferredLanguageString.getLanguage());
236
			button.setEnabled(true);
237
		}
238
	}
239

    
240
	/**
241
	 * <p>
242
	 * Getter for the field <code>multilanguageText</code>.
243
	 * </p>
244
	 *
245
	 * @return the multilanguageText
246
	 */
247
	public Map<Language, LanguageString> getMultilanguageText() {
248
		return multilanguageText;
249
	}
250

    
251
	/*
252
	 * (non-Javadoc)
253
	 *
254
	 * @see
255
	 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
256
	 * .eclipse.jface.util.PropertyChangeEvent)
257
	 */
258
	/** {@inheritDoc} */
259
	@Override
260
	public void propertyChange(PropertyChangeEvent event) {
261
		if (event == null) {
262
			return;
263
		}
264
		Object eventSource = event.getSource();
265
		if (eventSource == element_languageString) {
266
			LanguageString languageString ;
267
			if (eventSource instanceof LanguageStringWithLabelElement){
268
				languageString = ((LanguageStringWithLabelElement) eventSource)
269
								.getLanguageString();
270
			}else{
271
				languageString = ((LanguageRichTextWithLabel) eventSource)
272
						.getLanguageString();
273
			}
274
			multilanguageText.put(languageString.getLanguage(), languageString);
275
			firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
276
		}
277
	}
278

    
279
	public void setEnabled(boolean enabled){
280
	    if(button!=null){
281
	        button.setEnabled(enabled);
282
	    }
283
	    if(combo_language!=null){
284
	        combo_language.setEnabled(enabled);
285
	    }
286
	    element_languageString.setEnabled(enabled);
287
	}
288

    
289
}
(33-33/47)