package thaw.plugins.webOfTrust;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import thaw.core.Config;
import thaw.core.I18n;
import thaw.core.Logger;
import thaw.plugins.Hsqldb;
import thaw.plugins.Signatures;
import thaw.plugins.signatures.Identity;
public class WebOfTrustConfigTab implements Observer, ActionListener, Signatures.SignaturesObserver {
private thaw.core.ConfigWindow configWindow;
private Config config;
private Hsqldb db;
private JPanel panel;
private JCheckBox activated;
private JComboBox identityUsed;
private JComboBox numberOfRefresh;
public WebOfTrustConfigTab(thaw.core.ConfigWindow configWindow,
Config config, Hsqldb db) {
this.configWindow = configWindow;
this.config = config;
this.db = db;
panel = new JPanel(new java.awt.GridLayout(15, 1));
activated = new JCheckBox(I18n.getMessage("thaw.plugin.wot.activated"));
panel.add(activated);
panel.add(new JLabel(""));
panel.add(new JLabel(I18n.getMessage("thaw.plugin.wot.usedIdentity")));
identityUsed = new JComboBox();
panel.add(identityUsed);
panel.add(new JLabel(""));
panel.add(new JLabel(I18n.getMessage("thaw.plugin.wot.numberOfRefresh")));
numberOfRefresh = new JComboBox();
for (int i = 0 ; i <= 100 ; i++)
numberOfRefresh.addItem(new Integer(i));
panel.add(numberOfRefresh);
resetContentOfIdentitySelector();
reloadSettings();
readActivated();
activated.addActionListener(this);
}
public void addAsObserver() {
configWindow.addObserver(this);
Signatures.addObserver(this);
}
public void deleteAsObserver() {
configWindow.deleteObserver(this);
Signatures.deleteObserver(this);
}
private void resetContentOfIdentitySelector() {
Vector identities = Identity.getYourIdentities(db);
/* can happen if the database has been shutdowned */
if (identities == null)
return;
identityUsed.removeAllItems();
identityUsed.addItem(I18n.getMessage("thaw.plugin.wot.usedIdentity.none"));
for (Iterator it = identities.iterator();
it.hasNext();) {
identityUsed.addItem(it.next());
}
}
protected void reloadSettings() {
/* default values */
activated.setSelected(true);
numberOfRefresh.setSelectedItem(new Integer(10));
identityUsed.setSelectedItem(I18n.getMessage("thaw.plugin.wot.usedIdentity.none"));
/* loading values */
try {
if (config.getValue("wotActivated") != null)
activated.setSelected(Boolean.valueOf(config.getValue("wotActivated")).booleanValue());
if (config.getValue("wotIdentityUsed") != null)
identityUsed.setSelectedItem(Identity.getIdentity(db, Integer.parseInt(config.getValue("wotIdentityUsed"))));
if (config.getValue("wotNumberOfRefresh") != null)
numberOfRefresh.setSelectedItem(new Integer(config.getValue("wotNumberOfRefresh")));
} catch(Exception e) {
Logger.warning(this, "Error while reading config: "+e.toString());
}
}
protected void saveSettings() {
config.setValue("wotActivated", Boolean.valueOf(activated.isSelected()).toString());
String prevIdentity = config.getValue("wotIdentityUsed");
String newIdentity = null;
if (identityUsed.getSelectedIndex() > 0)
newIdentity = Integer.toString(((Identity)identityUsed.getSelectedItem()).getId());
config.setValue("wotIdentityUsed", newIdentity);
if ( (prevIdentity != null && newIdentity == null)
|| (prevIdentity == null && newIdentity != null)
|| (prevIdentity != null && !prevIdentity.equals(newIdentity)) ) {
/* to force the regeneration of the keys */
config.setValue("wotPrivateKey", null);
config.setValue("wotPublicKey", null);
}
config.setValue("wotNumberOfRefresh", numberOfRefresh.getSelectedItem().toString());
}
private void readActivated() {
boolean s = activated.isSelected();
identityUsed.setEnabled(s);
numberOfRefresh.setEnabled(s);
}
public JPanel getPanel() {
return panel;
}
public void update(Observable o, Object param) {
if (param == configWindow.getOkButton())
saveSettings();
resetContentOfIdentitySelector();
reloadSettings();
readActivated();
}
public void actionPerformed(ActionEvent e) {
readActivated();
}
public void identityUpdated(Identity i) {
// TODO Raccord de méthode auto-généré
}
public void privateIdentityAdded(Identity i) {
reloadSettings();
}
public void publicIdentityAdded(Identity i) {
// TODO Raccord de méthode auto-généré
}
}