/*FreeMind - A Program for creating and viewing Mindmaps *Copyright (C) 2000-2001 Joerg Mueller <joergmueller@bigfoot.com> *See COPYING for Details * *This program is free software; you can redistribute it and/or *modify it under the terms of the GNU General Public License *as published by the Free Software Foundation; either version 2 *of the License, or (at your option) any later version. * *This program is distributed in the hope that it will be useful, *but WITHOUT ANY WARRANTY; without even the implied warranty of *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *GNU General Public License for more details. * *You should have received a copy of the GNU General Public License *along with this program; if not, write to the Free Software *Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*$Id: FileNodeModel.java,v 1.11.18.1.4.5 2008/11/01 21:11:43 christianfoltin Exp $*/ package freemind.modes.filemode; import java.awt.Color; import java.io.File; import java.net.MalformedURLException; import java.util.Collections; import java.util.LinkedList; import java.util.ListIterator; import freemind.main.FreeMindMain; import freemind.main.Tools; import freemind.modes.MindMap; import freemind.modes.MindMapNode; import freemind.modes.NodeAdapter; /** * This class represents a single Node of a Tree. It contains direct handles to * its parent and children and to its view. */ public class FileNodeModel extends NodeAdapter { private File file; private Color color; // // Constructors // public FileNodeModel(File file, FreeMindMain frame, MindMap map) { super(frame, map); setEdge(new FileEdgeModel(this, getFrame())); this.file = file; setFolded(!file.isFile()); } // Overwritten get Methods public String getStyle() { return MindMapNode.STYLE_FORK; // // This condition shows the code is not quite logical: // // ordinary file should not be considered folded and // // therefore the clause !isLeaf() should not be necessary. // if (isFolded()) { // && !isLeaf()) { // return MindMapNode.STYLE_BUBBLE; // } else { // return MindMapNode.STYLE_FORK; // } } /* * if (file.isFile()) { return MindMapNode.STYLE_FORK; } else { return * MindMapNode.STYLE_BUBBLE; } } */ File getFile() { return file; } /** * This could be a nice feature. Improve it! */ public Color getColor() { if (color == null) { // float hue = (float)getFile().length() / 100000; // float hue = 6.3F; // if (hue > 1) { // hue = 1; // } // color = Color.getHSBColor(hue,0.5F, 0.5F); // int red = (int)(1 / (getFile().length()+1) * 255); // color = new Color(red,0,0); color = isLeaf() ? Color.BLACK : Color.GRAY; } return color; } // void setFile(File file) { // this.file = file; // } public String toString() { String name = file.getName(); if (name.equals("")) { name = "Root"; } return name; } public String getText() { return toString(); } public boolean hasChildren() { return !file.isFile() || (children != null && !children.isEmpty()); } /** * */ public ListIterator childrenFolded() { if (!isRoot()) { if (isFolded() || isLeaf()) { return Collections.EMPTY_LIST.listIterator(); // return null;//Empty Enumeration } } return childrenUnfolded(); } public ListIterator childrenUnfolded() { if (children != null) { return children.listIterator(); } // Create new nodes by reading children from file system try { String[] files = file.list(); if (files != null) { children = new LinkedList(); String path = file.getPath(); for (int i = 0; i < files.length; i++) { File childFile = new File(path, files[i]); if (!childFile.isHidden()) { final FileNodeModel fileNodeModel = new FileNodeModel( childFile, getFrame(), getMap()); fileNodeModel.setLeft(isNewChildLeft()); insert(fileNodeModel, getChildCount()); } } } } catch (SecurityException se) { } // return children.listIterator(); return children != null ? children.listIterator() : Collections.EMPTY_LIST.listIterator(); } public boolean isLeaf() { return file.isFile(); } public String getLink() { try { return Tools.fileToUrl(file).toString(); } catch (MalformedURLException e) { freemind.main.Resources.getInstance().logException(e); } return file.toString(); } public boolean isWriteable() { return false; } }