Project

General

Profile

Download (7 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.forms.CdmFormFactory.TermComboType;
33
import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
34
import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
35

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

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

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

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

    
75
		}
76
	}
77

    
78
	private EmptyComboElement<Language> combo_language;
79

    
80
	protected LanguageStringWithLabelElement element_languageString;
81

    
82
	private Button button;
83

    
84
	private Map<Language, LanguageString> multilanguageText;
85

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

    
112
		formFactory.addPropertyChangeListener(this);
113

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

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

    
134
	/*
135
	 * (non-Javadoc)
136
	 * 
137
	 * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
138
	 */
139
	/** {@inheritDoc} */
140
	@Override
141
	public void setSelected(boolean selected) {
142
		//
143
	}
144

    
145
	private List<Language> getLanguages() {
146

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

    
150
		// TODO sort
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
			}
208
			updateControls();
209
		}
210
	}
211

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

    
221
		element_languageString.setLanguageString(preferredLanguageString);
222
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
223
			combo_language.setSelection(preferredLanguageString.getLanguage());
224
		}
225
	}
226

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

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