/** * author: Marcel Genzmehr * 18.08.2011 */ package org.docear.plugin.core.workspace.node; import java.awt.Component; import java.io.File; import java.net.URI; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.tree.DefaultTreeCellRenderer; import org.docear.plugin.core.DocearController; import org.docear.plugin.core.event.DocearEvent; import org.docear.plugin.core.event.DocearEventType; import org.freeplane.core.resources.ResourceController; import org.freeplane.core.util.LogUtils; import org.freeplane.features.mapio.MapIO; import org.freeplane.features.mode.Controller; import org.freeplane.features.mode.mindmapmode.MModeController; import org.freeplane.plugin.workspace.WorkspaceUtils; 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.annotation.ExportAsAttribute; import org.freeplane.plugin.workspace.model.AWorkspaceTreeNode; import org.freeplane.plugin.workspace.model.IMutableLinkNode; import org.freeplane.plugin.workspace.nodes.ALinkNode; /** * */ public class LinkTypeLiteratureAnnotationsNode extends ALinkNode implements IWorkspaceNodeActionListener, IMutableLinkNode { private static final Icon DEFAULT_ICON = new ImageIcon(ResourceController.class.getResource("/images/docear16.png")); private static final long serialVersionUID = 1L; private URI linkPath; private WorkspacePopupMenu popupMenu = null; /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ public LinkTypeLiteratureAnnotationsNode(String type) { super(type); } /*********************************************************************************** * METHODS **********************************************************************************/ @ExportAsAttribute(name="path") public URI getLinkPath() { return linkPath; } public void setLinkPath(URI linkPath) { this.linkPath = linkPath; if(this.linkPath != null) { DocearEvent event = new DocearEvent(this, DocearEventType.LIBRARY_NEW_MINDMAP_INDEXING_REQUEST, getLinkPath()); DocearController.getController().dispatchDocearEvent(event); } } 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.cut", "workspace.action.node.copy", "workspace.action.node.paste", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.rename", "workspace.action.node.remove", "workspace.action.file.delete", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.refresh" }); } } protected AWorkspaceTreeNode clone(LinkTypeLiteratureAnnotationsNode node) { node.setLinkPath(getLinkPath()); return super.clone(node); } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public void handleAction(WorkspaceActionEvent event) { if (event.getType() == WorkspaceActionEvent.MOUSE_LEFT_DBLCLICK) { try { File f = WorkspaceUtils.resolveURI(getLinkPath()); if(f == null) { return; } if (!f.exists()) { if(!WorkspaceUtils.createNewMindmap(f, getName())) { LogUtils.warn("could not create " + getLinkPath()); } } Controller.getCurrentController().selectMode(MModeController.MODENAME); final MapIO mapIO = (MapIO) MModeController.getMModeController().getExtension(MapIO.class); try { if(mapIO.newMap(f.toURI().toURL())) { DocearEvent evnt = new DocearEvent(this, DocearEventType.NEW_LITERATURE_ANNOTATIONS, Controller.getCurrentController().getMap()); DocearController.getController().dispatchDocearEvent(evnt); } } catch (Exception e) { LogUtils.severe(e); return; } } catch (Exception e) { LogUtils.warn("could not open document (" + getLinkPath() + ")", e); } } else if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) { showPopup((Component) event.getBaggage(), event.getX(), event.getY()); } else { // do nth for now } } public AWorkspaceTreeNode clone() { LinkTypeLiteratureAnnotationsNode node = new LinkTypeLiteratureAnnotationsNode(getType()); return clone(node); } public WorkspacePopupMenu getContextMenu() { if (popupMenu == null) { initializePopup(); } return popupMenu; } public boolean changeName(String newName, boolean renameLink) { // simple set the node name //this.setName(newName); try { WorkspaceUtils.getModel().changeNodeName(this, newName); return true; } catch(Exception ex) { // do nth. } return false; } }