package org.docear.plugin.core.workspace.node; import java.io.File; import java.io.FileFilter; import javax.swing.event.TreeExpansionEvent; import javax.swing.event.TreeExpansionListener; import org.docear.plugin.core.workspace.actions.DocearRemoveRepositoryPathAction; import org.freeplane.core.util.LogUtils; import org.freeplane.plugin.workspace.URIUtils; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu; import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; import org.freeplane.plugin.workspace.nodes.FolderLinkNode; public class LiteratureRepositoryPathNode extends FolderLinkNode implements TreeExpansionListener { private static final long serialVersionUID = 1L; public static final String TYPE = "repository_path"; private WorkspacePopupMenu popupMenu = null; private boolean inRefresh = false; public LiteratureRepositoryPathNode() { super(TYPE); } public AWorkspaceTreeNode clone() { LiteratureRepositoryPathNode node = new LiteratureRepositoryPathNode(); return super.clone(node); } public boolean isSystem() { return true; } public String getName() { if(super.getName() == null) { setName(getFile().getName()); } return super.getName(); } public void initializePopup() { if (popupMenu == null) { popupMenu = new WorkspacePopupMenu(); WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] { "workspace.action.node.open.location", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.copy", "workspace.action.node.paste", "workspace.action.node.physical.sort", WorkspacePopupMenuBuilder.SEPARATOR, DocearRemoveRepositoryPathAction.KEY, // "workspace.action.node.remove", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.refresh" }); } } public WorkspacePopupMenu getContextMenu() { if (popupMenu == null) { initializePopup(); } return popupMenu; } public void refresh() { File folder; try { inRefresh = true; getModel().removeAllElements(this); folder = URIUtils.getAbsoluteFile(getPath()); loadDirectoryFiles(folder); getModel().reload(this); } catch (Exception e) { LogUtils.severe(e); } finally { inRefresh = false; } } private void loadDirectoryFiles(File folder) { if (folder != null && folder.isDirectory()) { WorkspaceController.getFileSystemMgr().scanFileSystem(this, folder, false, new FileFilter() { public boolean accept(File pathname) { // if(pathname.isDirectory() || pathname.getName().toLowerCase().endsWith(".pdf")) { return true; // } // return false; } }); } } @Override public void treeExpanded(TreeExpansionEvent event) { if(!inRefresh && getChildCount() <= 0) { loadDirectoryFiles(URIUtils.getAbsoluteFile(getPath())); } } @Override public void treeCollapsed(TreeExpansionEvent event) { } }