/**
* Copyright (C) 2010 EdgyTech LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.edgytech.umongo;
import com.edgytech.swingfast.CheckBox;
import com.edgytech.swingfast.FormDialog;
import com.edgytech.swingfast.FormDialogListener;
import com.edgytech.swingfast.IntFieldInterface;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.SimpleFormatter;
import java.util.logging.XMLFormatter;
/**
*
* @author antoine
*/
public class PreferencesDialog extends FormDialog implements FormDialogListener {
enum Item {
getMoreSize,
inlineDocumentLength,
useSystemLook,
treeUpdateRate,
activityLog,
activityLogFlag,
activityLogFile,
activityLogFirstResult,
applicationLog,
applicationLogFlag,
applicationLogFile,
applicationLogSize,
applicationLogCount,
applicationLogFormat,
applicationLogLevel,
pluginFolder,
allowPlugins,
trustStoreFile,
keyStoreFile
}
String trustStorePassword;
String keyStorePassword;
public PreferencesDialog() {
setEnumBinding(Item.values(), null);
setFormDialogListener(this);
}
public void start() {
// apply settings at start up
formOkCbk();
}
public void formOkCbk() {
UMongo.instance.updateLogging();
UMongo.instance.updatePlugins();
updateSSL();
}
public void formCancelCbk() {
}
public void formResetCbk() {
}
public boolean getUseSystemLook() {
return ((CheckBox) getBoundUnit(Item.useSystemLook)).getBooleanValue();
}
public int getGetMoreSize() {
return ((IntFieldInterface) getBoundUnit(Item.getMoreSize)).getIntValue();
}
public int getInlineDocumentLength() {
return ((IntFieldInterface) getBoundUnit(Item.inlineDocumentLength)).getIntValue();
}
public int getTreeUpdateRate() {
return ((IntFieldInterface) getBoundUnit(Item.treeUpdateRate)).getIntValue();
}
public String getActivityLogFile() {
if (getBooleanFieldValue(Item.activityLogFlag)) {
String path = getStringFieldValue(Item.activityLogFile);
if (path != null && !path.trim().isEmpty()) {
return path;
}
}
return null;
}
public boolean getActivityLogFirstResult() {
return getBooleanFieldValue(Item.activityLogFirstResult);
}
public Handler getApplicationLogHandler() {
if (!getBooleanFieldValue(Item.applicationLogFlag)) {
return null;
}
String path = getStringFieldValue(Item.applicationLogFile);
if (path == null || path.trim().isEmpty()) {
return null;
}
Handler handler;
try {
handler = new FileHandler(path, getIntFieldValue(Item.applicationLogSize) * 1024 * 1024, getIntFieldValue(Item.applicationLogCount), true);
Level lvl = Level.WARNING;
String lvlStr = getStringFieldValue(Item.applicationLogLevel);
if (lvlStr.equals("OFF"))
lvl = Level.OFF;
else if (lvlStr.equals("ALL"))
lvl = Level.ALL;
else if (lvlStr.equals("INFO"))
lvl = Level.INFO;
else if (lvlStr.equals("WARNING"))
lvl = Level.WARNING;
else if (lvlStr.equals("SEVERE"))
lvl = Level.SEVERE;
handler.setLevel(lvl);
Formatter fmt = new SimpleFormatter();
if (getStringFieldValue(Item.applicationLogFormat).equals("XML"))
fmt = new XMLFormatter();
handler.setFormatter(fmt);
return handler;
} catch (Exception ex) {
getLogger().log(Level.WARNING, null, ex);
}
return null;
}
public String getPluginFolder() {
if (getBooleanFieldValue(Item.allowPlugins)) {
return getStringFieldValue(Item.pluginFolder);
}
return null;
}
private void updateSSL() {
trustStorePassword = updateSSLStore(getStringFieldValue(Item.trustStoreFile), "javax.net.ssl.trustStore", "javax.net.ssl.trustStorePassword", trustStorePassword);
keyStorePassword = updateSSLStore(getStringFieldValue(Item.keyStoreFile), "javax.net.ssl.keyStore", "javax.net.ssl.keyStorePassword", keyStorePassword);
}
private String updateSSLStore(String resource, String prop, String propPwd, String oldPwd) {
if (resource != null && !resource.isEmpty()) {
resource = resource.trim();
System.setProperty(prop, resource);
if (oldPwd == null) {
String pwd = UMongo.instance.getGlobalStore().promptPassword(resource);
if (pwd != null)
System.setProperty(propPwd, pwd);
return pwd;
}
} else {
System.clearProperty(prop);
System.clearProperty(propPwd);
return null;
}
return oldPwd;
}
}