Project

General

Profile

Download (7.84 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.jface.util.PropertyChangeEvent;
20
import org.eclipse.jface.window.Window;
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.cdm.model.common.TermType;
32
import eu.etaxonomy.taxeditor.model.DefaultTermComparator;
33
import eu.etaxonomy.taxeditor.model.MessagingUtils;
34
import eu.etaxonomy.taxeditor.preference.PreferencesUtil;
35
import eu.etaxonomy.taxeditor.store.CdmStore;
36
import eu.etaxonomy.taxeditor.ui.combo.TermComboElement;
37
import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
38

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

    
51
	private class OpenTranslationWizard extends SelectionAdapter {
52

    
53
		public OpenTranslationWizard() {
54
			super();
55
		}
56

    
57
		/*
58
		 * (non-Javadoc)
59
		 *
60
		 * @see
61
		 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
62
		 * .swt.events.SelectionEvent)
63
		 */
64
		@Override
65
		public void widgetSelected(SelectionEvent e) {
66
			Map<Language, LanguageString> multilanguageText = getMultilanguageText();
67

    
68
			if (multilanguageText.isEmpty()){
69
				MessagingUtils.warningDialog("No text to translate", getClass(), "The text is empty and therefore can not be translated");
70
				return;
71
			}
72

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

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

    
82
		}
83
	}
84

    
85
	private TermComboElement<Language> combo_language;
86

    
87
	protected LanguageStringWithLabelElement element_languageString;
88

    
89
	private Button button;
90

    
91
//	private Button removeRepresentation;
92

    
93
	private Map<Language, LanguageString> multilanguageText;
94

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

    
121
		formFactory.addPropertyChangeListener(this);
122

    
123
		element_languageString = this.formFactory
124
				.createLanguageStringWithLabelElement(formElement, labelString,
125
						null, textHeight, true, style);
126

    
127
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
128
			createMultilanguageTextEditingElements(formElement,
129
					multilanguageText, style);
130
		}
131
		setMultilanguageText(multilanguageText);
132
	}
133

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

    
155
	private List<Language> getLanguages() {
156

    
157
		ArrayList<Language> languageList = new ArrayList<Language>(
158
				getMultilanguageText().keySet());
159

    
160
		Collections.sort(languageList, new DefaultTermComparator<Language>());
161

    
162
		return languageList;
163
	}
164

    
165
	/*
166
	 * (non-Javadoc)
167
	 *
168
	 * @see
169
	 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
170
	 * .events.SelectionEvent)
171
	 */
172
	/** {@inheritDoc} */
173
	@Override
174
	public void widgetSelected(SelectionEvent e) {
175
		Language selectedLanguage = combo_language.getSelection();
176
		if (selectedLanguage != null) {
177
			LanguageString selectedLanguageString = getMultilanguageText().get(
178
					selectedLanguage);
179

    
180
			element_languageString.setLanguageString(selectedLanguageString);
181
		}
182
	}
183

    
184
	/*
185
	 * (non-Javadoc)
186
	 *
187
	 * @see
188
	 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
189
	 * .swt.events.SelectionEvent)
190
	 */
191
	/** {@inheritDoc} */
192
	@Override
193
	public void widgetDefaultSelected(SelectionEvent e) {
194
	}
195

    
196
	/**
197
	 * <p>
198
	 * Setter for the field <code>multilanguageText</code>.
199
	 * </p>
200
	 *
201
	 * @param multilanguageText
202
	 *            the multilanguageText to set
203
	 */
204
	public void setMultilanguageText(
205
			Map<Language, LanguageString> multilanguageText) {
206
		this.multilanguageText = multilanguageText;
207

    
208
		if (multilanguageText != null) {
209
			if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
210
				combo_language.setTerms(getLanguages());
211
				button.setEnabled(false);
212
			}
213
			updateControls();
214
		}
215
	}
216

    
217
	/**
218
	 *
219
	 */
220
	private void updateControls() {
221
		LanguageString preferredLanguageString = MultilanguageTextHelper
222
				.getPreferredLanguageString(getMultilanguageText(),
223
						Arrays.asList(new Language[] { CdmStore
224
								.getDefaultLanguage() }));
225

    
226
		element_languageString.setLanguageString(preferredLanguageString);
227

    
228
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
229
			combo_language.setSelection(preferredLanguageString == null?CdmStore.getDefaultLanguage():preferredLanguageString.getLanguage());
230
			button.setEnabled(true);
231
		}
232
	}
233

    
234
	/**
235
	 * <p>
236
	 * Getter for the field <code>multilanguageText</code>.
237
	 * </p>
238
	 *
239
	 * @return the multilanguageText
240
	 */
241
	public Map<Language, LanguageString> getMultilanguageText() {
242
		return multilanguageText;
243
	}
244

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

    
267
	public void setEnabled(boolean enabled){
268
	    if(button!=null){
269
	        button.setEnabled(enabled);
270
	    }
271
	    if(combo_language!=null){
272
	        combo_language.setEnabled(enabled);
273
	    }
274
	    element_languageString.setEnabled(enabled);
275
	}
276

    
277
}
(31-31/44)