1 /*
2  * Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 /*
27  * This source code is provided to illustrate the usage of a given feature
28  * or technique and has been deliberately simplified. Additional steps
29  * required for a production-quality application, such as security checks,
30  * input validation and proper error handling, might not be present in
31  * this sample code.
32  */
33 
34 
35 package com.sun.tools.example.debug.gui;
36 
37 import java.io.*;
38 import java.util.*;
39 
40 public class SearchPath {
41 
42     private String pathString;
43 
44     private String[] pathArray;
45 
SearchPath(String searchPath)46     public SearchPath(String searchPath) {
47         //### Should check searchpath for well-formedness.
48         StringTokenizer st = new StringTokenizer(searchPath, File.pathSeparator);
49         List<String> dlist = new ArrayList<String>();
50         while (st.hasMoreTokens()) {
51             dlist.add(st.nextToken());
52         }
53         pathString = searchPath;
54         pathArray = dlist.toArray(new String[dlist.size()]);
55     }
56 
isEmpty()57     public boolean isEmpty() {
58         return (pathArray.length == 0);
59     }
60 
asString()61     public String asString() {
62         return pathString;
63     }
64 
asArray()65     public String[] asArray() {
66         return pathArray.clone();
67     }
68 
resolve(String relativeFileName)69     public File resolve(String relativeFileName) {
70         for (String element : pathArray) {
71             File path = new File(element, relativeFileName);
72             if (path.exists()) {
73                 return path;
74             }
75         }
76         return null;
77     }
78 
79     //### return List?
80 
children(String relativeDirName, FilenameFilter filter)81     public String[] children(String relativeDirName, FilenameFilter filter) {
82         // If a file appears at the same relative path
83         // with respect to multiple entries on the classpath,
84         // the one corresponding to the earliest entry on the
85         // classpath is retained.  This is the one that will be
86         // found if we later do a 'resolve'.
87         SortedSet<String> s = new TreeSet<String>();  // sorted, no duplicates
88         for (String element : pathArray) {
89             File path = new File(element, relativeDirName);
90             if (path.exists()) {
91                 String[] childArray = path.list(filter);
92                 if (childArray != null) {
93                     for (int j = 0; j < childArray.length; j++) {
94                         if (!s.contains(childArray[j])) {
95                             s.add(childArray[j]);
96                         }
97                     }
98                 }
99             }
100         }
101         return s.toArray(new String[s.size()]);
102     }
103 
104 }
105