KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > tc > util > ClassListToFileList


1 /*
2  * All content copyright (c) 2003-2007 Terracotta, Inc., except as may otherwise be noted in a separate copyright
3  * notice. All rights reserved.
4  */

5 package com.tc.util;
6
7 import java.io.File JavaDoc;
8 import java.io.FileNotFoundException JavaDoc;
9 import java.net.URL JavaDoc;
10 import java.util.ArrayList JavaDoc;
11 import java.util.List JavaDoc;
12 import java.util.regex.Pattern JavaDoc;
13
14 /**
15  * Translates an array of Class objects to an array of File objects. NOTE: This class only supports a single level of
16  * nested inner classes, i.e. no innerclass of an innerclass
17  */

18 public final class ClassListToFileList {
19
20   /**
21    * @return [0][] is a list of absolute file paths, [1][] is a list of relative paths starting at the package name
22    * (com)
23    */

24   public static File JavaDoc[][] translate(Class JavaDoc[] classes) throws FileNotFoundException JavaDoc {
25     List JavaDoc files = new ArrayList JavaDoc();
26     List JavaDoc relativeFiles = new ArrayList JavaDoc();
27     File JavaDoc file;
28     File JavaDoc relativeFile;
29     File JavaDoc inner;
30     int offset;
31     for (int i = 0; i < classes.length; i++) {
32       relativeFile = new File JavaDoc(classes[i].getName().replaceAll("\\.", "/") + ".class");
33       relativeFiles.add(relativeFile);
34       String JavaDoc[] parts = classes[i].getName().split("\\.");
35       URL JavaDoc url = classes[i].getResource(parts[parts.length - 1] + ".class");
36       file = new File JavaDoc(url.getPath());
37       files.add(file);
38       offset = file.toString().length() - relativeFile.toString().length();
39       if (!file.exists()) throw new FileNotFoundException JavaDoc("Unable to resolve class file location for: " + classes[i]);
40       String JavaDoc[] packageFiles = file.getParentFile().list();
41       for (int j = 0; j < packageFiles.length; j++) {
42         if (Pattern.matches(file.getName().replaceFirst("\\.class", "") + "(\\$.*)\\.class", packageFiles[j])) {
43           inner = new File JavaDoc(file.getParent() + File.separator + packageFiles[j]);
44           files.add(inner);
45           relativeFiles.add(new File JavaDoc(inner.toString().substring(offset)));
46         }
47       }
48     }
49     File JavaDoc[][] retVal = new File JavaDoc[2][];
50     retVal[0] = (File JavaDoc[]) files.toArray(new File JavaDoc[0]);
51     retVal[1] = (File JavaDoc[]) relativeFiles.toArray(new File JavaDoc[0]);
52     return retVal;
53   }
54 }
55
Popular Tags