xref: /AOO41X/main/scripting/java/org/openoffice/idesupport/ExtensionFinder.java (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 package org.openoffice.idesupport;
2 
3 import java.io.File;
4 import java.util.ArrayList;
5 import org.openoffice.idesupport.zip.ParcelZipper;
6 
7 import com.sun.star.script.framework.container.ScriptEntry;
8 
9 public class ExtensionFinder implements MethodFinder {
10 
11     private String[] extensions;
12     private String language;
13 
14     public ExtensionFinder(String language, String[] extensions) {
15         this.language = language;
16         this.extensions = extensions;
17     }
18 
19     public ScriptEntry[] findMethods(File basedir) {
20         String parcelName;
21         ArrayList files = new ArrayList(10);
22         ScriptEntry[] empty = new ScriptEntry[0];
23 
24         if (basedir == null || basedir.exists() == false ||
25             basedir.isDirectory() == false)
26             return empty;
27 
28         parcelName = basedir.getName();
29         if (parcelName.equals(ParcelZipper.CONTENTS_DIRNAME))
30             parcelName = basedir.getParentFile().getName();
31 
32         findFiles(files, basedir, parcelName);
33 
34         if (files.size() != 0)
35             return (ScriptEntry[])files.toArray(empty);
36         return empty;
37     }
38 
39     private void findFiles(ArrayList list, File basedir, String parcelName) {
40         File[] children = basedir.listFiles();
41         File f;
42 
43         for (int i = 0; i < children.length; i++) {
44             f = children[i];
45 
46             if (f.isDirectory())
47                 findFiles(list, f, parcelName);
48             else {
49                 for (int j = 0; j < extensions.length; j++) {
50                     if (f.getName().endsWith(extensions[j])) {
51                         ScriptEntry entry = new ScriptEntry(language,
52                             f.getName(), f.getName(), parcelName);
53                         list.add(entry);
54                         break;
55                     }
56                 }
57             }
58         }
59     }
60 }
61