Changeset 6109


Ignore:
Timestamp:
04/09/10 09:40:43 (10 years ago)
Author:
bselinsky
Message:

add jar file support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/components/autogen/src/SourceList.java

    r5568 r6109  
    44 
    55/* 
    6 LOCI autogen package for programmatically generating source code. 
    7 Copyright (C) 2005-@year@ UW-Madison LOCI and Glencoe Software, Inc. 
     6        LOCI autogen package for programmatically generating source code. 
     7        Copyright (C) 2005-2010 UW-Madison LOCI and Glencoe Software, Inc. 
    88 
    9 This program is free software; you can redistribute it and/or modify 
    10 it under the terms of the GNU General Public License as published by 
    11 the Free Software Foundation; either version 2 of the License, or 
    12 (at your option) any later version. 
     9        This program is free software; you can redistribute it and/or modify 
     10        it under the terms of the GNU General Public License as published by 
     11        the Free Software Foundation; either version 2 of the License, or 
     12        (at your option) any later version. 
    1313 
    14 This program is distributed in the hope that it will be useful, 
    15 but WITHOUT ANY WARRANTY; without even the implied warranty of 
    16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
    17 GNU General Public License for more details. 
     14        This program is distributed in the hope that it will be useful, 
     15        but WITHOUT ANY WARRANTY; without even the implied warranty of 
     16        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
     17        GNU General Public License for more details. 
    1818 
    19 You should have received a copy of the GNU General Public License 
    20 along with this program; if not, write to the Free Software 
    21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
     19        You should have received a copy of the GNU General Public License 
     20        along with this program; if not, write to the Free Software 
     21        Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
    2222*/ 
    2323 
     
    2626import java.util.Collections; 
    2727import java.util.Vector; 
     28import java.util.jar.JarFile; 
     29import java.util.jar.JarEntry; 
     30import java.util.Enumeration; 
     31import org.apache.velocity.VelocityContext; 
     32import org.apache.velocity.app.VelocityEngine; 
    2833 
    2934/** 
    30  * A SourceList is a list of source files rooted at a particular directory. 
    31  * 
    32  * <dl><dt><b>Source code:</b></dt> 
    33  * <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/auto/SourceList.java">Trac</a>, 
    34  * <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/auto/SourceList.java">SVN</a></dd></dl> 
    35  * 
    36  * @author Curtis Rueden ctrueden at wisc.edu 
    37  */ 
     35* A SourceList is a list of source files rooted at a particular directory. 
     36* 
     37* <dl><dt><b>Source code:</b></dt> 
     38* <dd><a href="https://skyking.microscopy.wisc.edu/trac/java/browser/trunk/components/bio-formats/auto/SourceList.java">Trac</a>, 
     39* <a href="https://skyking.microscopy.wisc.edu/svn/java/trunk/components/bio-formats/auto/SourceList.java">SVN</a></dd></dl> 
     40* 
     41* @author Curtis Rueden ctrueden at wisc.edu 
     42*/ 
    3843public class SourceList { 
    3944 
    40   // -- Fields -- 
     45        // -- Fields -- 
    4146 
    42   /** Root directory prefix. */ 
    43   private String rootDir; 
     47        /** Root directory prefix. */ 
     48        private String rootDir; 
    4449 
    45   /** The list of source files, relative to the root directory. */ 
    46   private Vector<String> files; 
     50        /** The list of source files, relative to the root directory. */ 
     51        private Vector<String> files; 
    4752 
    48   // -- Constructor -- 
     53        // -- Constructor -- 
    4954 
    50   /** Constructs list of source files rooted at the given directory. */ 
    51   public SourceList(String rootDir) throws IOException { 
    52     // list Java source files 
    53     files = new Vector<String>(); 
    54     setRoot(rootDir); 
    55   } 
     55        /** Constructs list of source files rooted at the given directory. */ 
     56        public SourceList(JarFile jarFile) throws IOException { 
     57                // list Java source files 
     58                files = new Vector<String>(); 
     59                buildList(jarFile); 
     60        } 
    5661 
    57   // -- SourceList API methods -- 
     62        /** Constructs list of source files rooted at the given directory. */ 
     63        public SourceList(String rootDir) throws IOException { 
     64                // list Java source files 
     65                files = new Vector<String>(); 
     66                setRoot(rootDir); 
     67        } 
    5868 
    59   /** Changes the list to correspond to the given root directory. */ 
    60   public void setRoot(String rootDir) { 
    61     rootDir = rootDir.replace(File.separatorChar, '/'); // Windows stupidity 
    62     this.rootDir = rootDir; 
    63     files.removeAllElements(); 
    64     listFiles(new File(rootDir)); 
    65     Collections.sort(files); 
    66   } 
     69        // -- SourceList API methods -- 
    6770 
    68   /** Gets the list of source files, relative to the root directory. */ 
    69   public Vector<String> files() { 
    70     return files; 
    71   } 
     71        /** Changes the list to correspond to the given root directory. */ 
     72        public void setRoot(String rootDir) { 
     73                rootDir = rootDir.replace(File.separatorChar, '/'); // Windows stupidity 
     74                this.rootDir = rootDir; 
     75                files.removeAllElements(); 
     76                listFiles(new File(rootDir)); 
     77                Collections.sort(files); 
     78        } 
    7279 
    73   // -- Helper methods -- 
     80        /** Changes the list to correspond to the given root directory. */ 
     81        public void buildList(JarFile jarFile) { 
     82                this.rootDir = rootDir; 
     83                files.removeAllElements(); 
     84                listFiles(jarFile); 
     85                Collections.sort(files); 
     86        } 
    7487 
    75   /** Recursively finds all Java source files. */ 
    76   private void listFiles(File dir) { 
    77     File[] list = dir.listFiles(); 
    78     if (list == null) return; 
    79     for (File f : list) { 
    80       if (f.isDirectory()) listFiles(f); 
    81       String path = f.getPath(); 
    82       path = path.replace(File.separatorChar, '/'); // Windows stupidity 
    83       if (!path.startsWith(rootDir)) continue; 
    84       if (!path.toLowerCase().endsWith(".java")) continue; 
    85       path = path.substring(rootDir.length() + 1); // relative to root path 
    86       files.add(path); 
    87     } 
    88   } 
     88        /** Gets the list of source files, relative to the root directory. */ 
     89                public Vector<String> files() { 
     90                return files; 
     91        } 
    8992 
    90   // -- Utility methods -- 
     93        // -- Helper methods -- 
    9194 
    92   public static String packageName(String path) { 
    93     int slash = path.lastIndexOf("/"); 
    94     return slash < 0 ? "" : path.substring(0, slash); 
    95   } 
     95        /** Recursively finds all Java source files. */ 
     96        private void listFiles(JarFile jarFile) { 
     97                Enumeration<JarEntry> jarEntries = jarFile.entries(); 
     98                if (jarEntries == null) 
     99                        return; 
    96100 
    97   /** Returns true iff the two files are from different directories. */ 
    98   public static boolean isNewPackage(String path1, String path2) { 
    99     return !packageName(path1).equals(packageName(path2)); 
    100   } 
     101                while (jarEntries.hasMoreElements()) { 
     102                        JarEntry entry = jarEntries.nextElement(); 
     103                        String name = entry.getName(); 
     104                        if (name.toLowerCase().endsWith(".class")) { 
     105                                int index = name.lastIndexOf(".class"); 
     106                                String javaName = name.substring(0, index) + ".java"; 
     107                                files.add(javaName); 
     108                        } 
     109                } 
     110        } 
    101111 
    102   public static String header(String path) { 
    103     return path.replace(".java", ".h"); 
    104   } 
     112        /** Recursively finds all Java source files. */ 
     113        private void listFiles(File dir) { 
     114                File[] list = dir.listFiles(); 
     115                if (list == null) { 
     116                        return; 
     117                } 
     118                for (File f : list) { 
     119                        if (f.isDirectory()) { 
     120                                listFiles(f); 
     121                        } 
     122                        String path = f.getPath(); 
     123                        path = path.replace(File.separatorChar, '/'); // Windows stupidity 
     124                        if (!path.startsWith(rootDir)) { 
     125                                continue; 
     126                        } 
     127                        if (!path.toLowerCase().endsWith(".java")) { 
     128                                continue; 
     129                        } 
     130                        path = path.substring(rootDir.length() + 1); // relative to root path 
     131                        files.add(path); 
     132                } 
     133        } 
    105134 
    106   public static String namespace(String path) { 
    107     return packageName(path).replaceAll("/", "::"); 
    108   } 
     135        // -- Utility methods -- 
    109136 
     137        public static String packageName(String path) { 
     138        int slash = path.lastIndexOf("/"); 
     139                return slash < 0 ? "" : path.substring(0, slash); 
     140        } 
     141 
     142        /** Returns true iff the two files are from different directories. */ 
     143        public static boolean isNewPackage(String path1, String path2) { 
     144                return !packageName(path1).equals(packageName(path2)); 
     145        } 
     146 
     147        public static String header(String path) { 
     148                return path.replace(".java", ".h"); 
     149        } 
     150 
     151        public static String namespace(String path) { 
     152                return packageName(path).replaceAll("/", "::"); 
     153        } 
     154 
     155        public static void main(String[] args) throws Exception { 
     156                try { 
     157                        if (args.length < 2) { 
     158                                System.out.println( 
     159                                        "Usage: java JaceHeaderAutogen component-name source-dir"); 
     160                                System.out.println("    E.g.: java JaceHeaderAutogen " + 
     161                                        "bio-formats ~/svn/java/components/bio-formats/src"); 
     162                                System.exit(1); 
     163                        } 
     164                        String component = args[0]; 
     165                        String sourceDir = args[1]; 
     166                 
     167                        String headerFile = component + ".h"; 
     168                        String headerLabel = headerFile.toUpperCase().replaceAll("\\W", "_"); 
     169                 
     170                        // initialize Velocity 
     171                        VelocityEngine ve = VelocityTools.createEngine(); 
     172                        VelocityContext context = VelocityTools.createContext(); 
     173                 
     174                        // parse header file template 
     175                        JarFile jf = new JarFile(sourceDir); 
     176                        SourceList javaList = new SourceList(jf); 
     177                 
     178                        context.put("headerFile", headerFile); 
     179                        context.put("headerLabel", headerLabel); 
     180                        context.put("q", javaList); 
     181                 
     182                        // generate C++ header file 
     183                        VelocityTools.processTemplate(ve, context, "jace/header.vm", headerFile); 
     184                } catch (Exception e) { 
     185                        System.out.println(e.toString()); 
     186                        e.printStackTrace(); 
     187                } 
     188        } 
    110189} 
Note: See TracChangeset for help on using the changeset viewer.