Project

General

Profile

Download (8.98 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.HashMap;
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.term.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.term.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, IEnableableFormElement {
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==null || 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 boolean isEnabled = true;
92
//	private Button removeRepresentation;
93

    
94
	private Map<Language, LanguageString> multilanguageText;
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

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

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

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

    
156
	private List<Language> getLanguages() {
157

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

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

    
163
		return languageList;
164
	}
165

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

    
182
    			element_languageString.setLanguageString(selectedLanguageString);
183
    		}
184
	    }
185
	}
186

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

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

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

    
219
	}
220

    
221
	@Override
222
	public void refresh(){
223
	    if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
224
	        Language lang = combo_language.getSelection();
225
	        if (multilanguageText.get(lang)!= null){
226
	            this.element_languageString.setText(multilanguageText.get(combo_language.getSelection()).getText());
227
	        }else{
228
	            this.element_languageString.setText(null);
229
	        }
230
	    }else{
231
	        if (multilanguageText != null && multilanguageText.get(CdmStore.getDefaultLanguage()) != null){
232
	            this.element_languageString.setText(multilanguageText.get(CdmStore.getDefaultLanguage()).getText());
233
	        }
234
	    }
235

    
236
	}
237

    
238
	/**
239
	 *
240
	 */
241
	private void updateControls() {
242
		LanguageString preferredLanguageString = MultilanguageTextHelper
243
				.getPreferredLanguageString(getMultilanguageText(),
244
						Arrays.asList(new Language[] { CdmStore
245
								.getDefaultLanguage() }));
246

    
247
		element_languageString.setLanguageString(preferredLanguageString);
248

    
249
		if (PreferencesUtil.isMultilanguageTextEditingCapability()) {
250
			combo_language.setSelection(preferredLanguageString == null?CdmStore.getDefaultLanguage():preferredLanguageString.getLanguage());
251
			button.setEnabled(true);
252
		}
253
	}
254

    
255
	/**
256
	 * <p>
257
	 * Getter for the field <code>multilanguageText</code>.
258
	 * </p>
259
	 *
260
	 * @return the multilanguageText
261
	 */
262
	public Map<Language, LanguageString> getMultilanguageText() {
263
		return multilanguageText;
264
	}
265

    
266
	/*
267
	 * (non-Javadoc)
268
	 *
269
	 * @see
270
	 * eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org
271
	 * .eclipse.jface.util.PropertyChangeEvent)
272
	 */
273
	/** {@inheritDoc} */
274
	@Override
275
	public void propertyChange(PropertyChangeEvent event) {
276
		if (event == null) {
277
			return;
278
		}
279
		Object eventSource = event.getSource();
280
		if (eventSource == element_languageString) {
281
			LanguageString languageString = ((LanguageStringWithLabelElement) eventSource)
282
					.getLanguageString();
283
			if (multilanguageText == null){
284
			    multilanguageText = new HashMap<>();
285
			}
286
			multilanguageText.put(languageString.getLanguage(), languageString);
287
			firePropertyChangeEvent(new CdmPropertyChangeEvent(this, event));
288
		}
289
	}
290

    
291
	@Override
292
    public void setEnabled(boolean enabled){
293
	    isEnabled = enabled;
294
	    if(button!=null){
295
	        button.setEnabled(enabled);
296
	    }
297
	    if(combo_language!=null){
298
	        combo_language.setEnabled(enabled);
299
	    }
300
	    element_languageString.setEnabled(enabled);
301

    
302
	}
303

    
304
	public void setIndent(int indent){
305
        this.element_languageString.setIndent(indent);
306
    }
307

    
308
    @Override
309
    public boolean isEnabled() {
310
        return isEnabled;
311
    }
312

    
313
}
(39-39/57)