/** * author: Marcel Genzmehr * 23.08.2011 */ package org.freeplane.plugin.workspace.nodes; import java.awt.Component; import java.net.URI; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.tree.DefaultTreeCellRenderer; import org.freeplane.core.ui.components.UITools; import org.freeplane.core.util.TextUtils; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.actions.WorkspaceRemoveProjectAction; 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.model.project.AWorkspaceProject; public class ProjectRootNode extends AFolderNode implements IMutableLinkNode, IWorkspaceNodeActionListener { private static final long serialVersionUID = 1L; private static final Icon DEFAULT_ICON = new ImageIcon(AFolderNode.class.getResource("/images/project-open-2.png")); private static WorkspacePopupMenu popupMenu = null; private String projectID; private URI projectRoot = null; private String versionID; /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ public ProjectRootNode() { this(null); } public ProjectRootNode(String type) { super(null); setParent(WorkspaceController.getCurrentModel().getRoot()); } /*********************************************************************************** * METHODS **********************************************************************************/ public URI getPath() { return this.projectRoot; } @ExportAsAttribute(name="ID") public String getProjectID() { return this.projectID; } public void setProjectID(String id) { this.projectID = id; } public String getId() { return getProjectID() == null ? Integer.toHexString("".hashCode()).toUpperCase() : getProjectID(); } public boolean setIcons(DefaultTreeCellRenderer renderer) { renderer.setOpenIcon(DEFAULT_ICON); renderer.setClosedIcon(DEFAULT_ICON); renderer.setLeafIcon(DEFAULT_ICON); return true; } protected AWorkspaceTreeNode clone(ProjectRootNode node) { return super.clone(node); } /*********************************************************************************** * REQUIRED METHODS FOR INTERFACES **********************************************************************************/ public void handleAction(WorkspaceActionEvent event) { if (event.getType() == WorkspaceActionEvent.MOUSE_RIGHT_CLICK) { showPopup((Component) event.getBaggage(), event.getX(), event.getY()); } } public void refresh() { try { getModel().reload(this); } catch (Exception e) { e.printStackTrace(); } } public AWorkspaceTreeNode clone() { ProjectRootNode node = new ProjectRootNode(getType()); return clone(node); } public void initializePopup() { if (popupMenu == null) { popupMenu = new WorkspacePopupMenu(); WorkspacePopupMenuBuilder.addActions(popupMenu, new String[] { WorkspacePopupMenuBuilder.createSubMenu(TextUtils.getRawText("workspace.action.new.label")), "workspace.action.node.new.folder", "workspace.action.node.new.link", WorkspacePopupMenuBuilder.endSubMenu(), WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.open.location", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.cut", "workspace.action.node.copy", "workspace.action.node.paste", WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.rename", WorkspaceRemoveProjectAction.KEY, WorkspacePopupMenuBuilder.SEPARATOR, "workspace.action.node.refresh" }); } } public WorkspacePopupMenu getContextMenu() { if (popupMenu == null) { initializePopup(); } return popupMenu; } public String getTagName() { return "project"; } public boolean getAllowsChildren() { return true; } public void initiateMyFile(AWorkspaceProject project) { FolderTypeMyFilesNode myFilesNode = new FolderTypeMyFilesNode(project); getModel().addNodeTo(myFilesNode, this); myFilesNode.refresh(); } public boolean changeName(String newName, boolean renameLink) { try { if(renameLink) { this.getModel().changeNodeName(this, newName); } else { this.setName(newName); } } catch(Exception ex) { JOptionPane.showMessageDialog(UITools.getFrame(), TextUtils.getText("error_rename_file") + " ("+ex.getMessage()+")", TextUtils.getText("error_rename_file_title"), JOptionPane.ERROR_MESSAGE); return false; } return true; } public void setVersion(String version) { this.versionID = version; } @ExportAsAttribute(name="version") public String getVersion() { return this.versionID; } }