package org.limewire.ui.swing.options;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSeparator;
import net.miginfocom.swing.MigLayout;
import org.limewire.core.api.Application;
import org.limewire.core.api.Category;
import org.limewire.core.api.library.LibraryManager;
import org.limewire.core.api.library.LocalFileItem;
import org.limewire.core.api.library.SharedFileListManager;
import org.limewire.core.settings.LibrarySettings;
import org.limewire.setting.Setting;
import org.limewire.ui.swing.components.HyperlinkButton;
import org.limewire.ui.swing.options.OptionPanelStateManager.SettingChangedListener;
import org.limewire.ui.swing.options.actions.OKDialogAction;
import org.limewire.ui.swing.util.I18n;
import com.google.common.base.Predicate;
import com.google.inject.Inject;
import com.google.inject.Provider;
public class UnsafeTypeOptionPanel extends OptionPanel {
private JCheckBox programCheckBox;
private JCheckBox documentCheckBox;
private JButton okButton;
private final LibraryManager libraryManager;
private final SharedFileListManager shareListManager;
private final OptionPanelStateManager manager;
private final Map<Setting, JCheckBox> settingMap;
@Inject
public UnsafeTypeOptionPanel(LibraryManager libraryManager,
SharedFileListManager shareListManager,
UnsafeTypeOptionPanelStateManager manager,
final Provider<ExtensionClassificationPanel> extensionClassificationPanelProvider,
Application application) {
this.libraryManager = libraryManager;
this.shareListManager = shareListManager;
this.manager = manager;
setLayout(new BorderLayout());
JPanel contentPanel = new JPanel(new MigLayout("nogrid"));
contentPanel.setOpaque(false);
programCheckBox = new JCheckBox(I18n.tr("Allow me to search for and share Programs with anyone"));
programCheckBox.setContentAreaFilled(false);
documentCheckBox = new JCheckBox(I18n.tr("Allow me to share Documents with the world"));
documentCheckBox.setContentAreaFilled(false);
okButton = new JButton(new OKDialogAction());
settingMap = new HashMap<Setting, JCheckBox>();
settingMap.put(LibrarySettings.ALLOW_PROGRAMS, programCheckBox);
settingMap.put(LibrarySettings.ALLOW_DOCUMENT_GNUTELLA_SHARING, documentCheckBox);
contentPanel.add(new JLabel("<html>" + I18n.tr("Enabling this setting makes you more prone " +
"to accidently sharing personal information")
+ "</html>"), "wrap");
contentPanel.add(documentCheckBox, "gapleft 25");
contentPanel.add(new HyperlinkButton(new AbstractAction(I18n.tr("What are Documents?")) {
@Override
public void actionPerformed(ActionEvent e) {
ExtensionClassificationPanel panel = extensionClassificationPanelProvider.get();
panel.switchCategory(Category.DOCUMENT);
panel.showDialogue();
}
}), "wrap");
contentPanel.add(new JSeparator(), "growx, gaptop 5, gapbottom 5, wrap");
contentPanel.add(new JLabel("<html>" + I18n.tr("Enabling this setting makes you more prone to viruses")
+ "</html>"), "wrap");
contentPanel.add(programCheckBox, "gapleft 25");
contentPanel.add(new HyperlinkButton(new AbstractAction(I18n.tr("What are Programs?")) {
@Override
public void actionPerformed(ActionEvent e) {
ExtensionClassificationPanel panel = extensionClassificationPanelProvider.get();
panel.switchCategory(Category.PROGRAM);
panel.showDialogue();
}
}), "wrap");
add(contentPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new MigLayout("fill"));
buttonPanel.setOpaque(false);
buttonPanel.add(okButton, "tag ok");
add(buttonPanel, BorderLayout.SOUTH);
okButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
savePendingSettings();
}
});
}
@Inject
public void register() {
manager.addSettingChangedListener(new SettingChangedListener() {
@Override
public void settingChanged(Setting setting) {
settingMap.get(setting).setSelected((Boolean)UnsafeTypeOptionPanel.this.manager.getValue(setting));
}
});
}
@Override
ApplyOptionResult applyOptions() {
manager.saveSettings();
if(!programCheckBox.isSelected()) {
libraryManager.getLibraryManagedList().removeFiles(new Predicate<LocalFileItem>() {
@Override
public boolean apply(LocalFileItem localFileItem) {
return localFileItem.getCategory() == Category.PROGRAM;
}
});
}
if (!documentCheckBox.isSelected()) {
shareListManager.removeDocumentsFromPublicLists();
}
return new ApplyOptionResult(false, true);
}
@Override
boolean hasChanged() {
return manager.hasPendingChanges();
}
@Override
public void initOptions() {
for ( Setting setting : settingMap.keySet() ) {
settingMap.get(setting).setSelected((Boolean)manager.getValue(setting));
}
}
private void savePendingSettings() {
for ( Setting setting : settingMap.keySet() ) {
manager.setValue(setting, settingMap.get(setting).isSelected());
}
}
}