package org.limewire.ui.swing.options;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import net.miginfocom.swing.MigLayout;
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.filter.Filter;
import org.limewire.setting.Setting;
import org.limewire.ui.swing.components.MultiLineLabel;
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.inject.Inject;
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) {
this.libraryManager = libraryManager;
this.shareListManager = shareListManager;
this.manager = manager;
setLayout(new MigLayout("gapy 10"));
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 add Documents to my Public Shared list and share them 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);
add(new MultiLineLabel(I18n.tr("Enabling these settings makes you more prone to viruses and accidently sharing private documents. We strongly recommend you don't enable them."), 600), "span 2, wrap");
add(programCheckBox, "split, gapleft 25, wrap");
add(documentCheckBox, "split, gapbottom 15, gapleft 25, wrap");
//add(new JLabel(I18n.tr("By default, LimeWire allows you to share documents with your friends")), "push");
add(okButton, "tag ok, gapbefore push");
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
boolean applyOptions() {
manager.saveSettings();
if(!programCheckBox.isSelected()) {
Collection<Category> managedCategories = libraryManager.getLibraryData().getManagedCategories();
managedCategories.remove(Category.PROGRAM);
libraryManager.getLibraryData().setCategoriesToIncludeWhenAddingFolders(managedCategories);
libraryManager.getLibraryManagedList().removeFiles(new Filter<LocalFileItem>() {
@Override
public boolean allow(LocalFileItem localFileItem) {
return localFileItem.getCategory() == Category.PROGRAM;
}
});
}
if (!documentCheckBox.isSelected()) {
shareListManager.removeDocumentsFromPublicLists();
}
return false;
}
@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());
}
}
}