package de.jos.labelgenerator.dialog.preferences;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import org.jdesktop.application.Action;
import com.google.common.collect.ImmutableSortedSet;
import de.jos.labelgenerator.LabelGeneratorApp;
import de.jos.labelgenerator.combobox.AbstractComboBoxItem;
import de.jos.labelgenerator.combobox.GMailGroupComboBoxItem;
import de.jos.labelgenerator.configuration.ApplicationConfiguration;
import de.jos.labelgenerator.configuration.GMailGroup;
import de.jos.labelgenerator.configuration.Preferences;
import de.jos.labelgenerator.configuration.addressProvider.GMailAddressProvider;
public class PreferencesDialogLogic implements PreferencesDialogConstants {
private PreferencesDialogPanel preferencesDialogPanel = null;
private JDialog dialog = null;
public PreferencesDialogLogic(JDialog dialog) {
this.dialog = dialog;
}
@Action(name = ACTION_CANCEL_BUTTON_PRESSED)
public void cancelButtonPressed(final ActionEvent actionEvent) {
System.out.println("cancelAddressDialog");
dialog.setVisible(false);
dialog.dispose();
}
@Action(name = ACTION_OK_BUTTON_PRESSED)
public void okButtonPressed(final ActionEvent actionEvent) {
if (preferencesDialogPanel != null) {
final Preferences preferences = LabelGeneratorApp.getApplicationConfiguration().getPreferences();
preferences.setCheckboxFilesystemProvider(preferencesDialogPanel.getCheckboxFilesystemProvider()
.isSelected());
preferences.setCheckboxGMailProvider(preferencesDialogPanel.getCheckboxGMailProvider().isSelected());
preferences.setGmailEmail(preferencesDialogPanel.getTextFieldGMailEmail().getText());
preferences.setGmailPassword(new String(preferencesDialogPanel.getPasswordFieldGMailPassword()
.getPassword()));
if (preferencesDialogPanel.getComboBoxGMailGroup().getSelectedItem() != null) {
preferences.setGmailGroup(preferencesDialogPanel.getComboBoxGMailGroup().getSelectedItem().getValue());
}
}
dialog.setVisible(false);
dialog.dispose();
}
@Action(name = ACTION_TEST_BUTTON_PRESSED)
public void testButtonPressed(final ActionEvent actionEvent) throws Exception {
System.out.println("test button");
final String email = preferencesDialogPanel.getTextFieldGMailEmail().getText();
final String password = new String(preferencesDialogPanel.getPasswordFieldGMailPassword().getPassword());
final GMailAddressProvider gmailProvider = new GMailAddressProvider(email, password);
final boolean credentialsOk = gmailProvider.isLoginSuccessful();
if (credentialsOk == false) {
JOptionPane.showMessageDialog(dialog, "Credentials invalid.", "Error", JOptionPane.ERROR_MESSAGE);
}
// get the groups
if (credentialsOk) {
// remove all old groups
preferencesDialogPanel.getComboBoxGMailGroup().removeAllItems();
final List<GMailGroupComboBoxItem> comboBoxItems = new ArrayList<GMailGroupComboBoxItem>();
final Map<String, String> contactGroups = gmailProvider.getContactGroups();
for (final Map.Entry<String, String> tmpEntry : contactGroups.entrySet()) {
final GMailGroup gmailGroup = new GMailGroup(tmpEntry.getKey(), tmpEntry.getValue());
// add group
comboBoxItems.add(new GMailGroupComboBoxItem(gmailGroup));
}
// add the sorted items to the comboBox
// TODO improve generics here !
preferencesDialogPanel.getComboBoxGMailGroup().addItems(
ImmutableSortedSet.orderedBy(AbstractComboBoxItem.nameOrdering).addAll(comboBoxItems).build());
// preselect the group from the configuration
final ApplicationConfiguration configuration = LabelGeneratorApp.getApplicationConfiguration();
final GMailGroup selectedGMailGroup = configuration.getPreferences().getGmailGroup();
if (selectedGMailGroup != null) {
preferencesDialogPanel.getComboBoxGMailGroup().selectItemWithText(
new GMailGroupComboBoxItem(selectedGMailGroup));
}
}
}
@Action(name = ACTION_GMAIL_PROVIDER_CHECKBOX_CLICKED)
public void GMailProviderClicked(final ActionEvent actionEvent) {
if (preferencesDialogPanel != null) {
boolean gmailProviderSelected = preferencesDialogPanel.getCheckboxGMailProvider().isSelected();
preferencesDialogPanel.getTextFieldGMailEmail().setEnabled(gmailProviderSelected);
preferencesDialogPanel.getPasswordFieldGMailPassword().setEnabled(gmailProviderSelected);
preferencesDialogPanel.getComboBoxGMailGroup().setEnabled(gmailProviderSelected);
}
}
public void setPreferencesDialogPanel(PreferencesDialogPanel preferencesDialogPanel) {
this.preferencesDialogPanel = preferencesDialogPanel;
}
}