package comeon.ui.actions;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import comeon.ui.UI;
import comeon.ui.preferences.main.PreferencesController;
import comeon.ui.preferences.main.PreferencesDialog;
import comeon.ui.preferences.main.PreferencesSavingException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.util.List;
@Singleton
public final class PreferencesAction extends BaseAction {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LoggerFactory.getLogger(PreferencesAction.class);
private final PreferencesDialog dialog;
private final PreferencesController controller;
@Inject
public PreferencesAction(final PreferencesDialog dialog, final PreferencesController controller) {
super("preferences");
this.dialog = dialog;
this.controller = controller;
}
@Override
public void actionPerformed(final ActionEvent evt) {
SwingUtilities.invokeLater(() -> {
final int value = dialog.showDialog();
if (value == JOptionPane.OK_OPTION) {
try {
controller.persist();
} catch (final PreferencesSavingException e) {
final List<Exception> causes = e.getCauses();
final StringBuilder causeMessage = new StringBuilder(UI.BUNDLE.getString("prefs.error.save"));
for (final Exception c : causes) {
LOGGER.warn("Could not save preferences", c);
causeMessage.append("\n* ");
causeMessage.append(c.getLocalizedMessage());
}
JOptionPane.showMessageDialog(JOptionPane.getRootFrame(), causeMessage.toString(), UI.BUNDLE.getString("error.generic.title"), JOptionPane.ERROR_MESSAGE);
}
} else {
controller.reload();
}
});
}
}