/*
* © 2010 3kraft IT GmbH & Co KG
* $Id: PreferencesController.java,v 1.13 2010-11-29 15:42:24 illetsch Exp $
*/
package com.dreikraft.axbo.controller;
import com.dreikraft.events.ApplicationEventDispatcher;
import com.dreikraft.events.ApplicationEventEnabled;
import com.dreikraft.events.ApplicationInitialize;
import com.dreikraft.axbo.Axbo;
import com.dreikraft.axbo.OS;
import com.dreikraft.axbo.data.DeviceContext;
import com.dreikraft.axbo.data.SensorID;
import com.dreikraft.axbo.events.PrefsClose;
import com.dreikraft.axbo.events.PrefsOpen;
import com.dreikraft.axbo.util.GuiUtils;
import com.dreikraft.axbo.gui.PreferencesDialog;
import com.dreikraft.axbo.model.ChartType;
import com.dreikraft.axbo.model.SupportedLanguage;
import com.dreikraft.axbo.util.BundleUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import org.apache.commons.logging.*;
/*
* $Id: PreferencesController.java,v 1.13 2010-11-29 15:42:24 illetsch Exp $
*
* @author 3Kraft - $Author: illetsch $
*/
public class PreferencesController implements ApplicationEventEnabled {
public static final Log log = LogFactory.getLog(PreferencesController.class);
private PreferencesDialog view;
@SuppressWarnings("LeakingThisInConstructor")
public PreferencesController() {
ApplicationEventDispatcher.getInstance().registerApplicationEventHandler(
ApplicationInitialize.class, this);
}
public void handle(final ApplicationInitialize evt) {
ApplicationEventDispatcher.getInstance().registerApplicationEventHandler(
PrefsOpen.class, this);
ApplicationEventDispatcher.getInstance().registerApplicationEventHandler(
PrefsClose.class, this);
}
public void handle(final PrefsOpen evt) {
view = new PreferencesDialog(evt.getParentFrame(), true, this);
// list available com ports
final List<String> portNames = DeviceContext.getDeviceType().
getDataInterface().getCommPortNames();
Collections.sort(portNames);
// set selected com port
final String deviceTypeName = Axbo.getApplicationPreferences().
get(Axbo.DEVICE_TYPE_PREF, Axbo.DEVICE_TYPE_DEFAULT);
view.initComPortCB(portNames.toArray(new String[portNames.size()]), Axbo
.getApplicationPreferences().get(deviceTypeName + "."
+ Axbo.SERIAL_PORT_NAME_PREF, OS.get().getDefaultPort()));
// list languages
final String[] supportedLanguages
= new String[SupportedLanguage.values().length];
for (int i = 0; i < supportedLanguages.length; i++) {
supportedLanguages[i] = BundleUtil.getMessage(
SupportedLanguage.values()[i].name());
}
view.initLanguageCB(supportedLanguages, SupportedLanguage.valueOf(
Locale.getDefault().getLanguage()).ordinal());
// initialize chart types
final String[] chartTypes = new String[ChartType.values().length];
for (int i = 0; i < chartTypes.length; i++) {
final String key = new StringBuilder(ChartType.class.getSimpleName())
.append(".").append(ChartType.values()[i]).toString();
chartTypes[i] = BundleUtil.getMessage(key);
}
final int selectedChartTypeIdx = ChartType.valueOf(Axbo
.getApplicationPreferences().get(Axbo.CHART_TYPE_PREF, ChartType.BAR
.name())).ordinal();
view.initChartTypeCB(chartTypes, selectedChartTypeIdx);
// set sensor user names
view.setSensor1Name(Axbo.getApplicationPreferences().get(
SensorID.P1.toString(), SensorID.P1.getDefaultName()));
view.setSensor2Name(Axbo.getApplicationPreferences().get(
SensorID.P2.toString(), SensorID.P2.getDefaultName()));
// Zentriere den Dialog
GuiUtils.center(evt.getParentFrame(), view);
view.setVisible(true);
}
public void handle(final PrefsClose evt) {
if (evt.isSave()) {
// set language
Axbo.getApplicationPreferences().put(Axbo.LANGUAGE_PREF,
SupportedLanguage.values()[view.getLanguageIndex()].name());
// set com port
Axbo.getApplicationPreferences().put(Axbo.SERIAL_PORT_NAME_PREF,
view.getComPortValue());
// save chart type preference
Axbo.getApplicationPreferences().put(Axbo.CHART_TYPE_PREF, ChartType
.values()[view.getChartTypeIndex()].name());
// set persons
Axbo.getApplicationPreferences().put(SensorID.P1.toString(),
view.getSensor1Name());
Axbo.getApplicationPreferences().put(SensorID.P2.toString(),
view.getSensor2Name());
}
view.dispose();
}
}