package org.rr.jeborker.gui.action;
import java.awt.event.ActionEvent;
import java.util.Arrays;
import java.util.List;
import javax.swing.AbstractAction;
import javax.swing.Action;
import org.rr.commons.mufs.IResourceHandler;
import org.rr.jeborker.db.item.EbookPropertyItem;
import org.rr.jeborker.event.ApplicationEvent;
import org.rr.jeborker.event.DefaultApplicationEventListener;
import org.rr.jeborker.event.EventManager;
import org.rr.jeborker.gui.MainController;
import org.rr.jeborker.gui.resources.ImageResourceBundle;
public class SyncFolderAction extends AbstractAction {
private static SyncFolderAction basePathFolderSyncAction;
SyncFolderAction() {
putValue(Action.SMALL_ICON, ImageResourceBundle.getResourceAsImageIcon("sync_16.png"));
putValue(ApplicationAction.SINGLETON_ACTION_KEY, Boolean.TRUE); //Singleton instance!!
putValue(ApplicationAction.NON_THREADED_ACTION_KEY, Boolean.TRUE); //No threading
putValue(SHORT_DESCRIPTION, Bundle.getString("SyncFolderAction.tooltip")); //tooltip
setEnabled(false);
initListener();
}
static SyncFolderAction getInstance() {
if(basePathFolderSyncAction == null) {
basePathFolderSyncAction = new SyncFolderAction();
}
return basePathFolderSyncAction;
}
private void initListener() {
EventManager.addListener(new SyncButtonApplicationEventListener());
}
@Override
public void actionPerformed(ActionEvent e) {
MainController controller = MainController.getController();
List<EbookPropertyItem> selectedEbookPropertyItems = controller.getSelectedEbookPropertyItems();
if(selectedEbookPropertyItems.size() == 1) {
IResourceHandler resource = selectedEbookPropertyItems.get(0).getResourceHandler();
controller.getMainTreeHandler().addExpandedTreeItems(Arrays.asList(resource));
}
}
private static class SyncButtonApplicationEventListener extends DefaultApplicationEventListener {
@Override
public void ebookItemSelectionChanged(ApplicationEvent evt) {
setupButtonEnablement();
}
protected void setupButtonEnablement() {
MainController controller = MainController.getController();
List<EbookPropertyItem> selectedEbookPropertyItems = controller.getSelectedEbookPropertyItems();
final ApplicationAction action = ActionFactory.getAction(ActionFactory.COMMON_ACTION_TYPES.SYNC_FOLDER_ACTION, null);
if(selectedEbookPropertyItems.size() == 1) {
if(locatedInHiddenFolder(selectedEbookPropertyItems.get(0)) && controller.getMainTreeHandler().isFileTreeSelected()) {
action.setEnabled(false);
} else {
action.setEnabled(true);
}
} else {
action.setEnabled(false);
}
}
@Override
public void mainTreeVisibilityChanged(ApplicationEvent evt) {
setupButtonEnablement();
}
private boolean locatedInHiddenFolder(EbookPropertyItem item) {
IResourceHandler resourceHandler = item.getResourceHandler();
while((resourceHandler = resourceHandler.getParentResource()) != null) {
if(resourceHandler.isHidden()) {
return true;
}
}
return false;
}
}
}