current development state
[taxeditor.git] / taxeditor-editor / src / main / java / eu / etaxonomy / taxeditor / forms / MultilanguageTextElement.java
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.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.editor.EditorUtil;
31 import eu.etaxonomy.taxeditor.editor.translation.TranslationWizard;
32 import eu.etaxonomy.taxeditor.forms.CdmFormFactory.TermComboType;
33 import eu.etaxonomy.taxeditor.forms.term.EmptyComboElement;
34 import eu.etaxonomy.taxeditor.store.CdmStore;
35
36 /**
37 * @author n.hoffmann
38 * @created Sep 29, 2010
39 * @version 1.0
40 */
41 public class MultilanguageTextElement extends AbstractCdmFormElement implements SelectionListener{
42
43 private class OpenTranslationWizard extends SelectionAdapter {
44 private Map<Language, LanguageString> multilanguageText;
45
46 public OpenTranslationWizard(Map<Language, LanguageString> multilanguageText){
47 super();
48 this.multilanguageText = multilanguageText;
49 }
50
51 /* (non-Javadoc)
52 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
53 */
54 @Override
55 public void widgetSelected(SelectionEvent e) {
56 TranslationWizard wizard = new TranslationWizard(multilanguageText);
57 WizardDialog dialog = new WizardDialog(EditorUtil.getShell(), wizard);
58
59 if (dialog.open() == IStatus.OK){
60 combo_language.setTerms(getLanguages());
61 updateControls();
62 }
63
64 }
65 }
66
67
68 private EmptyComboElement<Language> combo_language;
69
70 private LanguageStringWithLabelElement element_languageString;
71
72 private Button button;
73
74
75
76 private Map<Language, LanguageString> multilanguageText;
77
78 /**
79 * @param formFactory
80 * @param formElement
81 */
82 public MultilanguageTextElement(CdmFormFactory formFactory,
83 ICdmFormElement formElement, String labelString, Map<Language, LanguageString> multilanguageText, Integer textHeight, int style) {
84 super(formFactory, formElement);
85
86 formFactory.addPropertyChangeListener(this);
87
88 element_languageString = formFactory.createLanguageStringWithLabelElement(formElement, "", null, textHeight, style);
89
90 combo_language = (EmptyComboElement<Language>) formFactory.createTermComboElement(TermComboType.EMPTY, formElement, "", null, style);
91 combo_language.addSelectionListener(this);
92 combo_language.setEnabled(true);
93
94 addControl(formFactory.createLabel(getLayoutComposite(), ""));
95
96 button = formFactory.createButton(getLayoutComposite(), "Open In Translation Editor", SWT.PUSH);
97 addControl(button);
98 button.setLayoutData(CdmFormFactory.RIGHT());
99 button.addSelectionListener(new OpenTranslationWizard(multilanguageText));
100 button.setEnabled(true);
101
102 setMultilanguageText(multilanguageText);
103 }
104
105 /* (non-Javadoc)
106 * @see eu.etaxonomy.taxeditor.forms.ISelectable#setSelected(boolean)
107 */
108 @Override
109 public void setSelected(boolean selected) {
110 //
111 }
112
113 private List<Language> getLanguages(){
114
115 ArrayList<Language> languageList = new ArrayList<Language>(getMultilanguageText().keySet());
116
117 // TODO sort
118
119 return languageList;
120 }
121
122 /* (non-Javadoc)
123 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
124 */
125 @Override
126 public void widgetSelected(SelectionEvent e) {
127 Language selectedLanguage = combo_language.getSelection();
128 if(selectedLanguage != null){
129 LanguageString selectedLanguageString = getMultilanguageText().get(selectedLanguage);
130
131 element_languageString.setLanguageString(selectedLanguageString);
132 }
133 }
134
135 /* (non-Javadoc)
136 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
137 */
138 @Override
139 public void widgetDefaultSelected(SelectionEvent e) {}
140
141 /**
142 * @param multilanguageText the multilanguageText to set
143 */
144 public void setMultilanguageText(Map<Language, LanguageString> multilanguageText) {
145 this.multilanguageText = multilanguageText;
146
147 if(multilanguageText.isEmpty()){
148 multilanguageText.put(CdmStore.getDefaultLanguage(), LanguageString.NewInstance("", CdmStore.getDefaultLanguage()));
149 }
150 combo_language.setTerms(getLanguages());
151
152 updateControls();
153 }
154
155 /**
156 *
157 */
158 private void updateControls() {
159 LanguageString preferredLanguageString = MultilanguageTextHelper.getPreferredLanguageString(getMultilanguageText(), Arrays.asList(new Language[]{CdmStore.getDefaultLanguage()}));
160
161 element_languageString.setLanguageString(preferredLanguageString);
162 combo_language.setSelection(preferredLanguageString.getLanguage());
163 }
164
165 /**
166 * @return the multilanguageText
167 */
168 public Map<Language, LanguageString> getMultilanguageText() {
169 return multilanguageText;
170 }
171
172 /* (non-Javadoc)
173 * @see eu.etaxonomy.taxeditor.forms.AbstractCdmFormElement#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
174 */
175 @Override
176 public void propertyChange(PropertyChangeEvent event) {
177 if(event == null){
178 return;
179 }
180 Object eventSource = event.getSource();
181 if(eventSource == element_languageString){
182 LanguageString languageString = ((LanguageStringWithLabelElement) eventSource).getLanguageString();
183 multilanguageText.put(languageString.getLanguage(), languageString);
184 }
185 }
186 }