Merge branch 'develop' into LibrAlign
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / preference / LanguageEditorPreferencePage.java
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.preference;
11
12 import java.io.IOException;
13 import java.util.Locale;
14
15 import org.apache.commons.lang.StringUtils;
16 import org.eclipse.jface.dialogs.MessageDialog;
17 import org.eclipse.jface.preference.PreferencePage;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.custom.CCombo;
20 import org.eclipse.swt.events.SelectionEvent;
21 import org.eclipse.swt.events.SelectionListener;
22 import org.eclipse.swt.layout.GridData;
23 import org.eclipse.swt.layout.GridLayout;
24 import org.eclipse.swt.widgets.Composite;
25 import org.eclipse.swt.widgets.Control;
26 import org.eclipse.swt.widgets.Label;
27 import org.eclipse.ui.IWorkbench;
28 import org.eclipse.ui.IWorkbenchPreferencePage;
29 import org.eclipse.ui.PlatformUI;
30
31 import eu.etaxonomy.taxeditor.Messages;
32 import eu.etaxonomy.taxeditor.model.MessagingUtils;
33
34 /**
35 * @author n.hoffmann
36 * @created Dec 3, 2010
37 * @version 1.0
38 */
39 public class LanguageEditorPreferencePage extends PreferencePage implements IWorkbenchPreferencePage{
40
41 private CCombo combo;
42 PreferencesUtil preferencesUtil = new PreferencesUtil();
43 private boolean isSelectionChanged = false;
44 private int initalSelectionIndex;
45
46 /* (non-Javadoc)
47 * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
48 */
49 @Override
50 protected Control createContents(Composite parent) {
51 Composite container = new Composite(parent, SWT.NULL);
52 final GridLayout gridLayout = new GridLayout();
53 container.setLayout(gridLayout);
54 createEditorDefaultLanguage(container);
55 return container;
56 }
57
58 /**
59 * @param container
60 */
61 private void createEditorDefaultLanguage(Composite container) {
62 // TODO Auto-generated method stub
63 final Label description = new Label(container, SWT.NONE);
64 description.setText(Messages.LanguageEditorPreferencePage_RestartRequired);
65
66 final Label label = new Label(container, SWT.NONE);
67 label.setText(Messages.LanguageEditorPreferencePage_ChooseDefaultLanguage);
68
69 GridData oneLine = new GridData();
70 oneLine.grabExcessHorizontalSpace = true;
71 oneLine.horizontalAlignment = GridData.FILL;
72
73 combo = new CCombo(container, SWT.NONE);
74 combo.setLayoutData(oneLine);
75
76 combo.add(Language.GERMAN.getLabel(), 0);
77 combo.add(Language.ENGLISH.getLabel(), 1);
78 restoreSavedSelection();
79
80 combo.addSelectionListener(new SelectionListener() {
81
82 @Override
83 public void widgetSelected(SelectionEvent e) {
84 try {
85 preferencesUtil.writePropertyToConfigFile(combo.getSelectionIndex());
86 if(initalSelectionIndex != combo.getSelectionIndex()) {
87 isSelectionChanged = true;
88 }else{
89 isSelectionChanged = false;
90 }
91 } catch (IOException e1) {
92 MessagingUtils.messageDialog("Failed to write Config.ini", LanguageEditorPreferencePage.class,
93 "Language switch failed, because could not write to Folder. No writing permissions!", null);
94 }
95 }
96
97 @Override
98 public void widgetDefaultSelected(SelectionEvent e) {
99 // TODO Auto-generated method stub
100
101 }
102 });
103 }
104
105 /**
106 * TODO: This method is not taking advantages of the enum field yet
107 */
108 private void restoreSavedSelection() {
109 String rememberedValue = PreferencesUtil.getPreferenceStore().getString(IPreferenceKeys.DEFAULT_LANGUAGE_EDITOR);
110 if(StringUtils.isNotEmpty(rememberedValue)&& StringUtils.isNotBlank(rememberedValue)){
111 if(rememberedValue.equalsIgnoreCase("en")){ //$NON-NLS-1$
112 initalSelectionIndex = 1;
113 combo.select(1);
114 }else if(rememberedValue.equalsIgnoreCase("de")){ //$NON-NLS-1$
115 initalSelectionIndex = 0;
116 combo.select(0);
117 }
118 }else{
119 Locale locale = Locale.getDefault();
120 if(locale.getLanguage().equals(new Locale("de").getLanguage())){
121 initalSelectionIndex = 0;
122 combo.select(0);
123 }else if(locale.getLanguage().equals(new Locale("en").getLanguage())){
124 initalSelectionIndex = 1;
125 combo.select(1);
126 }
127 }
128 }
129
130 private enum Language{
131
132 GERMAN("Deutsch"), ENGLISH("English"); //$NON-NLS-1$ //$NON-NLS-2$
133 private final String label;
134 private Language(String label){
135 this.label = label;
136 }
137
138 /**
139 * @return the label
140 */
141 public String getLabel() {
142 return label;
143 }
144 }
145
146 /* (non-Javadoc)
147 * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
148 */
149 @Override
150 public void init(IWorkbench workbench) {
151 setPreferenceStore(PreferencesUtil.getPreferenceStore());
152 }
153
154 /* (non-Javadoc)
155 * @see org.eclipse.jface.preference.PreferencePage#performOk()
156 */
157 @Override
158 public boolean performOk() {
159 try {
160 if(isSelectionChanged){
161 preferencesUtil.writePropertyToConfigFile(combo.getSelectionIndex());
162 boolean result = MessageDialog.openConfirm(getShell(), Messages.LanguageEditorPreferencePage_PleaseRestart, Messages.LanguageEditorPreferencePage_EditorHasToRestart);
163 if(result){
164 //Press Ok
165 PlatformUI.getWorkbench().restart();
166 }
167 }
168 } catch (IOException e) {
169 e.printStackTrace();
170 }
171 return super.performOk();
172 }
173
174 }