Project

General

Profile

Download (6.75 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.forms;
12

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

    
18
import org.eclipse.core.runtime.IStatus;
19
import org.eclipse.jface.util.PropertyChangeEvent;
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.taxeditor.preference.PreferencesUtil;
31
import eu.etaxonomy.taxeditor.store.CdmStore;
32
import eu.etaxonomy.taxeditor.ui.combo.EmptyComboElement;
33
import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
34

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

    
47
	private class OpenTranslationWizard extends SelectionAdapter {
48
		private final Map<Language, LanguageString> multilanguageText;
49

    
50
		public OpenTranslationWizard(
51
				Map<Language, LanguageString> multilanguageText) {
52
			super();
53
			this.multilanguageText = multilanguageText;
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
			TranslationWizard wizard = new TranslationWizard(multilanguageText);
66
			WizardDialog dialog = new WizardDialog(getLayoutComposite()
67
					.getShell(), wizard);
68

    
69
			if (dialog.open() == IStatus.OK) {
70
				combo_language.setTerms(getLanguages());
71
				updateControls();
72
			}
73

    
74
		}
75
	}
76

    
77
	private EmptyComboElement<Language> combo_language;
78

    
79
	protected LanguageStringWithLabelElement element_languageString;
80

    
81
	private Button button;
82

    
83
	private Map<Language, LanguageString> multilanguageText;
84

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

    
111
		formFactory.addPropertyChangeListener(this);
112

    
113
		element_languageString = formFactory
114
				.createLanguageStringWithLabelElement(formElement, labelString,
115
						null, textHeight, style);
116

    
117
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
118
			combo_language = (EmptyComboElement<Language>) formFactory
119
					.createTermComboElement(Language.class, formElement,
120
							"", null, style);
121
			combo_language.addSelectionListener(this);
122
			addControl(formFactory.createLabel(getLayoutComposite(), ""));
123
			button = formFactory.createButton(getLayoutComposite(),
124
					"Open In Translation Editor", SWT.PUSH);
125
			addControl(button);
126
			button.setLayoutData(CdmFormFactory.RIGHT());
127
			button.addSelectionListener(new OpenTranslationWizard(
128
					multilanguageText));
129
		}
130
		setMultilanguageText(multilanguageText);
131
	}
132

    
133
	private List<Language> getLanguages() {
134

    
135
		ArrayList<Language> languageList = new ArrayList<Language>(
136
				getMultilanguageText().keySet());
137

    
138
		// TODO sort
139

    
140
		return languageList;
141
	}
142

    
143
	/*
144
	 * (non-Javadoc)
145
	 * 
146
	 * @see
147
	 * org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt
148
	 * .events.SelectionEvent)
149
	 */
150
	/** {@inheritDoc} */
151
	@Override
152
	public void widgetSelected(SelectionEvent e) {
153
		Language selectedLanguage = combo_language.getSelection();
154
		if (selectedLanguage != null) {
155
			LanguageString selectedLanguageString = getMultilanguageText().get(
156
					selectedLanguage);
157

    
158
			element_languageString.setLanguageString(selectedLanguageString);
159
		}
160
	}
161

    
162
	/*
163
	 * (non-Javadoc)
164
	 * 
165
	 * @see
166
	 * org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse
167
	 * .swt.events.SelectionEvent)
168
	 */
169
	/** {@inheritDoc} */
170
	@Override
171
	public void widgetDefaultSelected(SelectionEvent e) {
172
	}
173

    
174
	/**
175
	 * <p>
176
	 * Setter for the field <code>multilanguageText</code>.
177
	 * </p>
178
	 * 
179
	 * @param multilanguageText
180
	 *            the multilanguageText to set
181
	 */
182
	public void setMultilanguageText(
183
			Map<Language, LanguageString> multilanguageText) {
184
		this.multilanguageText = multilanguageText;
185

    
186
		if (multilanguageText != null) {
187
			if (multilanguageText.isEmpty()) {
188
				multilanguageText.put(
189
						CdmStore.getDefaultLanguage(),
190
						LanguageString.NewInstance("",
191
								CdmStore.getDefaultLanguage()));
192
			}
193
			if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
194
				combo_language.setTerms(getLanguages());
195
			}
196
			updateControls();
197
		}
198
	}
199

    
200
	/**
201
	 * 
202
	 */
203
	private void updateControls() {
204
		LanguageString preferredLanguageString = MultilanguageTextHelper
205
				.getPreferredLanguageString(getMultilanguageText(),
206
						Arrays.asList(new Language[] { CdmStore
207
								.getDefaultLanguage() }));
208

    
209
		element_languageString.setLanguageString(preferredLanguageString);
210
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
211
			combo_language.setSelection(preferredLanguageString.getLanguage());
212
		}
213
	}
214

    
215
	/**
216
	 * <p>
217
	 * Getter for the field <code>multilanguageText</code>.
218
	 * </p>
219
	 * 
220
	 * @return the multilanguageText
221
	 */
222
	public Map<Language, LanguageString> getMultilanguageText() {
223
		return multilanguageText;
224
	}
225

    
226
	/*
227
	 * (non-Javadoc)
228
	 * 
229
	 * @see
230
	 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
231
	 * .eclipse.jface.util.PropertyChangeEvent)
232
	 */
233
	/** {@inheritDoc} */
234
	@Override
235
	public void propertyChange(PropertyChangeEvent event) {
236
		if (event == null) {
237
			return;
238
		}
239
		Object eventSource = event.getSource();
240
		if (eventSource == element_languageString) {
241
			LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
242
					.getLanguageString();
243
			multilanguageText.put(languageString.getLanguage(), languageString);
244
			firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
245
		}
246
	}
247
}
(25-25/35)