/* * ImportWizard.java * Copyright (C) 1999 Len Trigg (trigg@cs.waikato.ac.nz) * * 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., 675 Mass Ave, Cambridge, MA 02139, USA. */ // adapted to freemind by christianfoltin, 29.2.2004. // taken from /usr/share/xemacs/xemacs-packages/etc/jde/java/src/jde/wizards/ImportWizard.java // changed: package name, commented out the static method. // if (current.toLowerCase().endsWith(".properties")) { // // formerly ".class" // and related changes. // commented out: // For Java 2! ... package freemind.extensions; import java.io.File; import java.io.IOException; import java.util.Enumeration; import java.util.HashSet; import java.util.StringTokenizer; import java.util.Vector; import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import freemind.main.FreeMindMain; /** * Converts an unqualified class name to import statements by scanning through * the classpath. * * @author Len Trigg (trigg@cs.waikato.ac.nz) * @version 1.0 - 6 May 1999 */ public class ImportWizard { public final String lookFor = ".xml"; /** Stores the list of all classes in the classpath */ public Vector CLASS_LIST = new Vector(500); private final FreeMindMain mFrame; private static Logger logger = null; public ImportWizard(FreeMindMain frame) { this.mFrame = frame; if (logger == null) { logger = frame.getLogger(this.getClass().getName()); } } /** Build the list of classes */ // static { // // // System.err.println("Making class list"); // buildClassList(); // // // System.err.println("Done (" + CLASS_LIST.size() + " classes)"); // // } public void buildClassList() { String classPath = System.getProperty("java.class.path"); String classPathSeparator = File.pathSeparator; // add the current dir to find more plugins classPath = mFrame.getFreemindBaseDir() + classPathSeparator + classPath; logger.info("Classpath for plugins:" + classPath); // to remove duplicates HashSet foundPlugins = new HashSet(); StringTokenizer st = new StringTokenizer(classPath, classPathSeparator); while (st.hasMoreTokens()) { String classPathEntry = st.nextToken(); File classPathFile = new File(classPathEntry); try { String key = classPathFile.getCanonicalPath(); if (foundPlugins.contains(key)) continue; logger.fine("looking for plugins in " + key); foundPlugins.add(key); } catch (IOException e) { // TODO Auto-generated catch block freemind.main.Resources.getInstance().logException(e); } if (classPathFile.exists()) { String lowerCaseFileName = classPathEntry.toLowerCase(); if (lowerCaseFileName.endsWith(".jar")) { logger.fine("searching for plugins in: " + classPathEntry); addClassesFromZip(CLASS_LIST, classPathFile); } else if (lowerCaseFileName.endsWith(".zip")) { logger.fine("searching for plugins in: " + classPathEntry); addClassesFromZip(CLASS_LIST, classPathFile); } else if (classPathFile.isDirectory()) { logger.fine("searching for plugins in: " + classPathEntry); addClassesFromDir(CLASS_LIST, classPathFile, classPathFile, 0); } } } } /** * Adds the classes from the supplied Zip file to the class list. * * @param classList * the Vector to add the classes to * @param classPathFile * the File to scan as a zip file */ public void addClassesFromZip(Vector classList, File classPathFile) { // System.out.println("Processing jar/zip file: " + classPathFile); try { ZipFile zipFile = new ZipFile(classPathFile); Enumeration enumeration = zipFile.entries(); while (enumeration.hasMoreElements()) { ZipEntry zipEntry = (ZipEntry) enumeration.nextElement(); String current = zipEntry.getName(); if (isInteresting(current)) { current = current.substring(0, current.length() - lookFor.length()); classList.addElement(current); } } } catch (Exception ex) { freemind.main.Resources.getInstance().logException(ex, "Problem opening " + classPathFile + " with zip."); } } /** */ private boolean isInteresting(String current) { int length = current.length(); if (length < lookFor.length()) { return false; } String currentPostfix = current.substring(length - lookFor.length()); return lookFor.equalsIgnoreCase(currentPostfix); } /** * Adds the classes from the supplied directory to the class list. * * @param classList * the Vector to add the classes to * @param currentDir * the File to recursively scan as a directory * @param recursionLevel * To ensure that after a certain depth the recursive directory * search stops */ public void addClassesFromDir(Vector classList, File rootDir, File currentDir, int recursionLevel) { if (recursionLevel >= 6) { // search only the first levels return; } String[] files = currentDir.list(); if (files != null) { for (int i = 0; i < files.length; i++) { String current = files[i]; logger.fine("looking at: " + current); if (isInteresting(current)) { String rootPath = rootDir.getPath(); String currentPath = currentDir.getPath(); if (!currentPath.startsWith(rootPath)) { logger.severe("currentPath doesn't start with rootPath!\n" + "rootPath: " + rootPath + "\n" + "currentPath: " + currentPath + "\n"); } else { current = current.substring(0, current.length() - lookFor.length()); String packageName = currentPath.substring(rootPath .length()); String fileName; if (packageName.length() > 0) { // Not the current directory fileName = packageName.substring(1) + File.separator + current; } else { // The current directory fileName = current; } classList.addElement(fileName); logger.info("Found: " + fileName); } } else { // Check if it's a directory to recurse into File currentFile = new File(currentDir, current); if (currentFile.isDirectory()) { addClassesFromDir(classList, rootDir, currentFile, recursionLevel + 1); } } } } } } // ImportWizard /* * $Log: ImportWizard.java,v $ Revision 1.1.4.6.2.16 2008/07/28 03:06:01 * christianfoltin * Bug fix: B19 startup fails with * "Mode not available: Mindmap" * * https://sourceforge.net/tracker/?func=detail&atid * =107118&aid=2025279&group_id=7118 * FreeMind Starter: no more statics. * * Revision 1.1.4.6.2.15 2008/07/18 16:14:25 christianfoltin * Renamed zh into * zh_TW (patch from willyann * Reverted changes to Tools. * * Revision 1.1.4.6.2.14 2006/12/14 16:45:00 christianfoltin * Search & Replace * Dialog with menu and nicer. Bug fixes... * * Revision 1.1.4.6.2.13 2006/11/28 08:25:01 dpolivaev no message * * Revision 1.1.4.6.2.12 2006/11/26 10:20:40 dpolivaev LocalProperties, * TextResources for SHTML and Bug Fixes * * Revision 1.1.4.6.2.11 2006/11/12 21:07:06 christianfoltin * Mac bug fixes * (class path, error messages, directories) * * Revision 1.1.4.6.2.10 2006/09/05 21:17:58 dpolivaev SimplyHTML */ // End of ImportWizard.java