Project

General

Profile

Download (7.1 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.singlesource.ui.forms.LanguageStringWithLabelElementFacade;
32
import eu.etaxonomy.taxeditor.store.CdmStore;
33
import eu.etaxonomy.taxeditor.ui.forms.CdmFormFactory.TermComboType;
34
import eu.etaxonomy.taxeditor.ui.term.EmptyComboElement;
35
import eu.etaxonomy.taxeditor.ui.translation.TranslationWizard;
36

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

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

    
52
		public OpenTranslationWizard(
53
				Map<Language, LanguageString> multilanguageText) {
54
			super();
55
			this.multilanguageText = multilanguageText;
56
		}
57

    
58
		/*
59
		 * (non-Javadoc)
60
		 * 
61
		 * @see
62
		 * org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse
63
		 * .swt.events.SelectionEvent)
64
		 */
65
		@Override
66
		public void widgetSelected(SelectionEvent e) {
67
			TranslationWizard wizard = new TranslationWizard(multilanguageText);
68
			WizardDialog dialog = new WizardDialog(getLayoutComposite()
69
					.getShell(), wizard);
70

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

    
76
		}
77
	}
78

    
79
	private EmptyComboElement<Language> combo_language;
80

    
81
	protected LanguageStringWithLabelElementFacade element_languageString;
82

    
83
	private Button button;
84

    
85
	private Map<Language, LanguageString> multilanguageText;
86

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

    
113
		formFactory.addPropertyChangeListener(this);
114

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

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

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

    
146
	private List<Language> getLanguages() {
147

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

    
151
		// TODO sort
152

    
153
		return languageList;
154
	}
155

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

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

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

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

    
199
		if (multilanguageText != null) {
200
			if (multilanguageText.isEmpty()) {
201
				multilanguageText.put(
202
						CdmStore.getDefaultLanguage(),
203
						LanguageString.NewInstance("",
204
								CdmStore.getDefaultLanguage()));
205
			}
206
			if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
207
				combo_language.setTerms(getLanguages());
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
		}
226
	}
227

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

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