package org.docear.plugin.core.workspace.actions; import java.awt.event.ActionEvent; import javax.swing.JOptionPane; import javax.swing.tree.TreePath; import org.docear.plugin.core.workspace.model.DocearWorkspaceProject; import org.docear.plugin.core.workspace.node.FolderTypeLiteratureRepositoryNode; import org.docear.plugin.core.workspace.node.LiteratureRepositoryPathNode; import org.freeplane.core.ui.EnabledAction; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.actions.AWorkspaceAction; import org.freeplane.plugin.workspace.components.IWorkspaceView; import org.freeplane.plugin.workspace.components.menu.CheckEnableOnPopup; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; import org.freeplane.plugin.workspace.model.project.AWorkspaceProject; @CheckEnableOnPopup @EnabledAction(checkOnNodeChange=true) public class DocearRemoveRepositoryPathAction extends AWorkspaceAction { private static final long serialVersionUID = 1L; public static final String KEY = "workspace.action.node.remove.repository"; /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ public DocearRemoveRepositoryPathAction() { super(KEY); } /*********************************************************************************** * METHODS **********************************************************************************/ public void setEnabled() { TreePath path = WorkspaceController.getCurrentModeExtension().getView().getSelectionPath(); AWorkspaceTreeNode node = (AWorkspaceTreeNode) path.getLastPathComponent(); setEnabled(isEnabled(WorkspaceController.getSelectedProject(), node)); } private boolean isEnabled(AWorkspaceProject project, AWorkspaceTreeNode... targetNodes) { try { boolean ret = true; ret = ret && DocearWorkspaceProject.isCompatible(project); for (AWorkspaceTreeNode node : targetNodes) { ret = ret && node != null && node instanceof LiteratureRepositoryPathNode; } return ret; } catch(Exception e) { return false; } } @Override public void setEnabledFor(AWorkspaceTreeNode node, TreePath[] selectedPaths) { if(node instanceof LiteratureRepositoryPathNode) { setEnabled(true); } else { setEnabled(false); } } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public void actionPerformed(AWorkspaceProject project, AWorkspaceTreeNode... targetNodes) { if (isEnabled(project, targetNodes)) { FolderTypeLiteratureRepositoryNode litRepoNode = project.getExtensions(FolderTypeLiteratureRepositoryNode.class); if(litRepoNode == null) { return; } if(targetNodes == null || targetNodes.length == 0) { return; } String confirmText = ""; if(targetNodes.length > 1) { confirmText = ""; } else { confirmText = targetNodes[0].getName(); } int option = JOptionPane.showConfirmDialog( UITools.getFrame() ,TextUtils.format("workspace.action.repository.remove.confirm.text", confirmText) ,TextUtils.getRawText("workspace.action.node.remove.confirm.title") ,JOptionPane.YES_NO_OPTION ,JOptionPane.QUESTION_MESSAGE ); if(option == JOptionPane.YES_OPTION) { for (AWorkspaceTreeNode targetNode : targetNodes) { if(targetNode instanceof LiteratureRepositoryPathNode) { project.getModel().removeNodeFromParent(targetNode); } } litRepoNode.refresh(); IWorkspaceView view = WorkspaceController.getCurrentModeExtension().getView(); if(view != null) { view.refreshView(); } } } } @Override public void actionPerformed(ActionEvent e) { try { AWorkspaceProject project = WorkspaceController.getSelectedProject(); AWorkspaceTreeNode[] targetNodes = getSelectedNodes(e); actionPerformed(project, targetNodes); } catch(Exception ex) { LogUtils.warn("DocearRemoveRepositoryPathAction.actionPerformed(): " + ex.getMessage()); } } }