/**
* This file is part of Archiv-Editor.
*
* The software Archiv-Editor serves as a client user interface for working with
* the Person Data Repository. See: pdr.bbaw.de
*
* The software Archiv-Editor was developed at the Berlin-Brandenburg Academy
* of Sciences and Humanities, Jägerstr. 22/23, D-10117 Berlin.
* www.bbaw.de
*
* Copyright (C) 2010-2013 Berlin-Brandenburg Academy
* of Sciences and Humanities
*
* The software Archiv-Editor was developed by @author: Christoph Plutte.
*
* Archiv-Editor is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Archiv-Editor is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Archiv-Editor.
* If not, see <http://www.gnu.org/licenses/lgpl-3.0.html>.
*/
package org.bbaw.pdr.ae.view.main.preferences;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Properties;
import org.bbaw.pdr.ae.common.AEConstants;
import org.bbaw.pdr.ae.common.CommonActivator;
import org.bbaw.pdr.ae.common.NLMessages;
import org.bbaw.pdr.ae.view.main.internal.Activator;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.NotEnabledException;
import org.eclipse.core.commands.NotHandledException;
import org.eclipse.core.commands.common.NotDefinedException;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.progress.UIJob;
/**
* The Class GeneralPage.
* @author Christoph Plutte
*/
public class GeneralPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage
{
/** Logger. */
private static ILog iLogger = AEConstants.ILOGGER;
private boolean _restartRequiered = false;
private boolean _langSetting = Platform.getPreferencesService().getBoolean(CommonActivator.PLUGIN_ID,
"USER_SELECTED_LANG_OK", false, null);
private String _lang = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
"USER_SELECTED_LANG", "de", null);
private BooleanFieldEditor _customLangEd;
private ComboFieldEditor _langEd;
/**
* Instantiates a new general page.
*/
public GeneralPage()
{
super(GRID);
}
@Override
public final void createFieldEditors()
{
_customLangEd = new BooleanFieldEditor("USER_SELECTED_LANG_OK", //$NON-NLS-1$
NLMessages.getString("Preference_custom_language_setting"), getFieldEditorParent());
addField(_customLangEd);
_langEd = new ComboFieldEditor(
"USER_SELECTED_LANG", //$NON-NLS-1$
NLMessages.getString("Preference_language"), toStringArrayArray(AEConstants.LANGUAGES_AE),
getFieldEditorParent());
addField(_langEd);
_langEd.setEnabled(_langSetting, getFieldEditorParent());
Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
"USER_SELECTED_LANG", "", null);
addField(new BooleanFieldEditor("USER_SAVE_LOGIN", //$NON-NLS-1$
NLMessages.getString("Preference_login_user_automatically"), getFieldEditorParent()));
addField(new BooleanFieldEditor("AUTOMATED_UPDATE", //$NON-NLS-1$
NLMessages.getString("Preference_automatically_update"), getFieldEditorParent()));
}
@Override
public void propertyChange(PropertyChangeEvent event) {
super.propertyChange(event);
// if checkbox for custom language activation has changed, update language selector accordingly
if (event.getSource().equals(_customLangEd))
_langEd.setEnabled((Boolean)event.getNewValue(), getFieldEditorParent());
}
@Override
public final void init(final IWorkbench workbench)
{
setPreferenceStore(CommonActivator.getDefault().getPreferenceStore());
setDescription(NLMessages.getString("Preference_general_preference_title"));
}
@Override
public final boolean performOk()
{
String aeInstallation = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
"AE_INSTALLATION_DIR", AEConstants.AE_HOME, null);
if (_langSetting != _customLangEd.getBooleanValue())
{
_restartRequiered = true;
}
else if (_customLangEd.getBooleanValue())
{
_langEd.store();
String newLang = _langEd.getPreferenceStore().getString("USER_SELECTED_LANG");
if (!_lang.equals(newLang))
{
_restartRequiered = true;
}
}
else
{
_restartRequiered = false;
}
if (_customLangEd.getBooleanValue())
{
String fileName = aeInstallation + AEConstants.FS
+ "configuration" + AEConstants.FS + "config.ini";
IStatus status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom load config.ini: " //$NON-NLS-1$
+ fileName);
iLogger.log(status);
File file = new File(fileName);
Properties props = new Properties();
try
{
props.load(new FileInputStream(file));
}
catch (FileNotFoundException e)
{
status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom error loading properties from config.ini: " //$NON-NLS-1$
+ e.getMessage());
iLogger.log(status);
e.printStackTrace();
}
catch (IOException e)
{
status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom error loading properties from config.ini: " //$NON-NLS-1$
+ e.getMessage());
iLogger.log(status);
e.printStackTrace();
}
String lang = props.getProperty("osgi.nl");
// if (lang == null)
// {
// props.setProperty("osgi.nl", lang);
// }
status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom langeuage old: " //$NON-NLS-1$
+ lang);
iLogger.log(status);
String newLang = Platform.getPreferencesService().getString(CommonActivator.PLUGIN_ID,
"USER_SELECTED_LANG", "", null);
if (newLang.equals("Deutsch"))
{
lang = "de";
}
else if (newLang.equals("English"))
{
lang = "en";
}
else if (newLang.equals("Francais"))
{
lang = "fr";
}
else if (newLang.equals("Italiano"))
{
lang = "it";
}
else
{
lang = "en";
}
props.setProperty("osgi.nl", lang);
status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences Gener Custom langeuage new: " //$NON-NLS-1$
+ lang);
iLogger.log(status);
// Write properties file.
FileOutputStream out;
try
{
out = new FileOutputStream(fileName);
props.store(out, "Custom language settings");
out.flush();
out.close();
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
else
{
String fileName = aeInstallation + AEConstants.FS
+ "configuration" + AEConstants.FS + "config.ini";
IStatus status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom load config.ini: " //$NON-NLS-1$
+ fileName);
iLogger.log(status);
File file = new File(fileName);
if (file.exists())
{
Properties props = new Properties();
try
{
props.load(new FileInputStream(file));
}
catch (FileNotFoundException e)
{
status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom error loading properties from config.ini: " //$NON-NLS-1$
+ e.getMessage());
iLogger.log(status);
e.printStackTrace();
}
catch (IOException e)
{
status = new Status(IStatus.INFO, Activator.PLUGIN_ID, "Preferences General Custom error loading properties from config.ini: " //$NON-NLS-1$
+ e.getMessage());
iLogger.log(status);
e.printStackTrace();
}
String lang = "";
props.setProperty("osgi.nl", lang);
status = new Status(IStatus.INFO, Activator.PLUGIN_ID,
"Preferences User Custom language deactivated: " //$NON-NLS-1$
+ lang);
iLogger.log(status);
// Write properties file.
FileOutputStream out;
try
{
out = new FileOutputStream(fileName);
props.store(out, "Custom language settings");
out.flush();
out.close();
}
catch (FileNotFoundException e1)
{
e1.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
super.performOk();
if (_restartRequiered)
{
UIJob job = new UIJob("timer")
{
@Override
public IStatus runInUIThread(IProgressMonitor monitor)
{
checkRestart();
return Status.OK_STATUS;
}
};
job.schedule(500);
}
return true;
}
/**
* To string array array.
* @param strArray the str array
* @return the string[][]
*/
private String[][] toStringArrayArray(final String[] strArray)
{
ArrayList<String[]> l = new ArrayList<String[]>();
for (String str : strArray)
{
l.add(new String[]
{str, str});
}
return l.toArray(new String[l.size()][]);
}
private boolean checkRestart()
{
MessageDialog messageDialog = new MessageDialog(null, NLMessages.getString("Handler_restart_titel"), null, NLMessages.getString("Handler_restart_message"),
MessageDialog.WARNING, new String[]
{NLMessages.getString("Handler_restart"), NLMessages.getString("Handler_cancel")}, 0);
if (messageDialog.open() == 0)
{
IHandlerService handlerService = (IHandlerService) PlatformUI.getWorkbench().getService(
IHandlerService.class);
try
{
handlerService.executeCommand("org.eclipse.ui.file.restartWorkbench", null); //$NON-NLS-1$
}
catch (ExecutionException e)
{
e.printStackTrace();
}
catch (NotDefinedException e)
{
e.printStackTrace();
}
catch (NotEnabledException e)
{
e.printStackTrace();
}
catch (NotHandledException e)
{
e.printStackTrace();
}
}
return true;
}
@Override
public String getTitle() {
// TODO Auto-generated method stub
return super.getTitle();
}
}