package org.docear.plugin.core.workspace.node; import java.awt.Component; import java.io.File; import java.net.URI; import java.util.ArrayList; import java.util.Collection; import java.util.Enumeration; import java.util.Locale; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.tree.DefaultTreeCellRenderer; import org.docear.plugin.core.workspace.AVirtualDirectory; import org.docear.plugin.core.workspace.creator.FolderTypeLiteratureRepositoryPathCreator; import org.freeplane.core.util.TextUtils; import org.freeplane.plugin.workspace.URIUtils; import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenu; import org.freeplane.plugin.workspace.components.menu.WorkspacePopupMenuBuilder; import org.freeplane.plugin.workspace.event.IWorkspaceNodeActionListener; import org.freeplane.plugin.workspace.event.WorkspaceActionEvent; import org.freeplane.plugin.workspace.io.IFileSystemRepresentation; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; import org.freeplane.plugin.workspace.model.project.IWorkspaceProjectExtension; import org.freeplane.plugin.workspace.nodes.AFolderNode; /** * */ public class FolderTypeLiteratureRepositoryNode extends AFolderNode implements IWorkspaceNodeActionListener ,IWorkspaceProjectExtension ,IFileSystemRepresentation { //WORKSPACE - todo: implement dnd handling private static final long serialVersionUID = 1L; private WorkspacePopupMenu popupMenu = null; private static final Icon DEFAULT_ICON = new ImageIcon(FolderTypeLiteratureRepositoryNode.class.getResource("/images/books.png")); public static final String TYPE = "literature_repository"; /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ public FolderTypeLiteratureRepositoryNode() { this(TYPE); } public FolderTypeLiteratureRepositoryNode(String type) { super(type); setName(null); //WORKSPACE - todo: implement observer structure // CoreConfiguration.repositoryPathObserver.addChangeListener(this); } /*********************************************************************************** * METHODS **********************************************************************************/ public AWorkspaceTreeNode clone() { FolderTypeLiteratureRepositoryNode node = new FolderTypeLiteratureRepositoryNode(getType()); return clone(node); } public void disassociateReferences() { // CoreConfiguration.repositoryPathObserver.removeChangeListener(this); } public void setName(String name) { super.setName(TextUtils.getText(this.getClass().getName().toLowerCase(Locale.ENGLISH)+".label" )); } public void addPath(URI uri) { if(uri == null) { return; } AWorkspaceTreeNode newPathItem = FolderTypeLiteratureRepositoryPathCreator.newPathItem(null, uri, false); this.getModel().addNodeTo(newPathItem, this); this.refresh(); newPathItem.refresh(); } public boolean setIcons(DefaultTreeCellRenderer renderer) { renderer.setOpenIcon(DEFAULT_ICON); renderer.setClosedIcon(DEFAULT_ICON); renderer.setLeafIcon(DEFAULT_ICON); return true; } public void initializePopup() { if (popupMenu == null) { popupMenu = new WorkspacePopupMenu(); WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] { "workspace.action.node.add.repository", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.paste", "workspace.action.node.physical.sort", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.refresh" }); } } public WorkspacePopupMenu getContextMenu() { if (popupMenu == null) { initializePopup(); } return popupMenu; } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public URI getPath() { // not used here return null; } public File getFile() { return new AVirtualDirectory("LiteratureRepository") { private static final long serialVersionUID = 1L; protected Collection<File> getChildren() { ArrayList<File> list = new ArrayList<File>(); Enumeration<AWorkspaceTreeNode> paths = children(); while(paths.hasMoreElements()) { LiteratureRepositoryPathNode node = (LiteratureRepositoryPathNode) paths.nextElement(); list.add(URIUtils.getAbsoluteFile(node.getPath())); } return list; } }; } public void orderDescending(boolean enable) { //not used } public boolean orderDescending() { return false; } @Override public void handleAction(WorkspaceActionEvent event) { if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) { showPopup( (Component) event.getBaggage(), event.getX(), event.getY()); event.consume(); } } }