01: /*
02: This library is free software; you can redistribute it and/or
03: modify it under the terms of the GNU General Public
04: License as published by the Free Software Foundation; either
05: version 2 of the license, or (at your option) any later version.
06: */
07:
08: package org.gjt.jclasslib.browser.config.classpath;
09:
10: import javax.swing.tree.DefaultTreeModel;
11: import java.io.File;
12:
13: /**
14: Classpath entry for a directory.
15:
16: @author <a href="mailto:jclasslib@ej-technologies.com">Ingo Kegel</a>
17: @version $Revision: 1.1 $ $Date: 2003/08/18 08:10:15 $
18: */
19: public class ClasspathDirectoryEntry extends ClasspathEntry {
20:
21: public FindResult findClass(String className) {
22:
23: File file = getFile();
24: if (file == null) {
25: return null;
26: }
27: File classFile = new File(file, className.replace('.', '/')
28: + ".class");
29: if (classFile.exists() && classFile.canRead()) {
30: FindResult findResult = new FindResult(this , classFile
31: .getPath());
32: return findResult;
33: }
34:
35: return null;
36: }
37:
38: public void mergeClassesIntoTree(DefaultTreeModel model,
39: boolean reset) {
40:
41: File directory = getFile();
42: if (directory == null) {
43: return;
44: }
45:
46: ClassTreeNode rootNode = (ClassTreeNode) model.getRoot();
47: mergeDirectory(directory, rootNode, model, reset);
48:
49: }
50:
51: private void mergeDirectory(File directory,
52: ClassTreeNode parentNode, DefaultTreeModel model,
53: boolean reset) {
54:
55: File[] files = directory.listFiles();
56: if (files == null) {
57: return;
58: }
59: for (int i = 0; i < files.length; i++) {
60: File file = files[i];
61: if (file.isDirectory()) {
62: ClassTreeNode directoryNode = addOrFindNode(file
63: .getName(), parentNode, true, model, reset);
64: mergeDirectory(file, directoryNode, model, reset);
65: if ((directoryNode.getChildCount() == 0)) {
66: int deletionIndex = parentNode
67: .getIndex(directoryNode);
68: parentNode.remove(directoryNode);
69: if (!reset) {
70: model.nodesWereRemoved(parentNode,
71: new int[] { deletionIndex },
72: new Object[] { directoryNode });
73: }
74: }
75: } else if (file.getName().toLowerCase().endsWith(
76: CLASSFILE_SUFFIX)) {
77: addOrFindNode(stripClassSuffix(file.getName()),
78: parentNode, false, model, reset);
79: }
80: }
81:
82: }
83:
84: }
|