Changeset 17902

Show
Ignore:
Timestamp:
21.11.2008 15:04:11 (11 years ago)
Author:
oranfry
Message:

made rsr support filesets

Location:
other-projects/trunk/anttasks
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • other-projects/trunk/anttasks/build.xml

    r17836 r17902  
    7575        </rsr> 
    7676 
     77        <!-- test 5 --> 
     78        <copy file="src/test/rsr.txt" tofile="test/rsr5-1.txt"/> 
     79        <copy file="src/test/rsr.txt" tofile="test/rsr5-2.txt"/> 
     80        <rsr> 
     81            <fileset dir="test" includes="rsr5-*"/> 
     82            <job pattern="@path@" replacement="C:\Program Files\Greenstone 2.80"/> 
     83            <job pattern="@path-with-winpath@" replacement="C:\Program Files\Greenstone 2.80" winPath="true"/> 
     84        </rsr> 
     85 
     86 
    7787    </target> 
    7888 
  • other-projects/trunk/anttasks/src/org/greenstone/anttasks/RegexSearchReplace.java

    r17553 r17902  
    2727import java.io.*; 
    2828import java.util.regex.*; 
     29import org.apache.tools.ant.types.FileSet; 
     30import org.apache.tools.ant.DirectoryScanner; 
    2931 
    3032public class RegexSearchReplace extends Task { 
     
    3234    private File file = null; 
    3335    private ArrayList jobs = null; 
     36    private FileSet fileset = null; 
    3437    private String pattern = null; 
    3538    private String replacement = null; 
     
    4952    public void execute() { 
    5053 
    51         if ( file == null ) { 
    52             throw new BuildException( "Error - No file specified !!" ); 
    53         } 
    54  
    55         if ( !file.exists() ) { 
     54        if ( file == null && fileset == null ) { 
     55            throw new BuildException( "Error - No file or fileset specified !!" ); 
     56        } 
     57 
     58        if ( file != null && !file.exists() ) { 
    5659            throw new BuildException( "Error - File not found !!" ); 
     60        } 
     61 
     62        DirectoryScanner dirScanner = null; 
     63        if ( fileset != null ) { 
     64            dirScanner = fileset.getDirectoryScanner(); 
     65            dirScanner.scan(); 
    5766        } 
    5867 
     
    8089        } 
    8190 
    82         System.out.println( "Replace in file: " + file ); 
     91 
     92        //sus out filename(s) 
     93        File[] files = null; 
     94        if ( file != null ) { 
     95            files = new File[1]; 
     96            files[0] = file; 
     97        } else { 
     98            String[] fileStrings = dirScanner.getIncludedFiles(); 
     99            files = new File[fileStrings.length]; 
     100            for ( int i=0; i<fileStrings.length; i++ ) { 
     101                files[i] = new File( dirScanner.getBasedir() + File.separator + fileStrings[i] ); 
     102            } 
     103        } 
     104 
     105        //output greeting 
     106        System.out.println(); 
     107        System.out.println( "--------------------" ); 
     108        System.out.println( " RegexSearchReplace " ); 
     109        System.out.println( "--------------------" ); 
     110 
     111        //output replacement(s) 
     112        System.out.println( "Replacements:" ); 
    83113        if ( pattern != null ) { 
    84114            System.out.println( " " + pattern + " -> " + replacement ); 
     
    89119        } 
    90120 
    91         int noReplaces = 0; 
    92  
    93         //create the output stream 
    94         BufferedWriter out = null; 
    95         File temp = null; 
    96         try { 
    97             //create temp file. 
    98             temp = File.createTempFile("rsr", ".tmp"); 
    99  
    100             //delete temp file when program exits. 
    101             temp.deleteOnExit(); 
    102  
    103             //writer to temp file 
    104             out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(temp), "UTF8") ); 
    105  
    106         } catch (IOException e) { 
    107             throw new BuildException( "Error - Couldn't create or open the temp file" ); 
    108         } 
    109  
    110  
    111         //create the input stream 
    112         BufferedReader in = null; 
    113         try { 
    114             in = new BufferedReader( new InputStreamReader(new FileInputStream(file), "UTF8") ); 
    115         } catch ( Exception e ) { 
    116             throw new BuildException( "Error - Couldn't open the specified file" ); 
    117         } 
    118  
    119         //pass the file through, searching and replacing 
    120         String line = null; 
    121         boolean hasMoreLines = true; 
    122         while ( hasMoreLines ) { 
    123  
    124             try { 
    125                 line = in.readLine(); 
     121        //output filename(s) 
     122        /* 
     123        if ( file != null ) { 
     124            System.out.println( "Replace in file: " + file ); 
     125        } else { 
     126            System.out.println( "Replace in files:" ); 
     127            for ( int i = 0; i < files.length; i++ ) { 
     128                System.out.println(files[i]); 
     129            } 
     130        } 
     131        */ 
     132 
     133 
     134        System.out.println( "Files: " ); 
     135        for ( int fileIndex=0; fileIndex<files.length; fileIndex++ ) { 
     136 
     137            int noReplaces = 0; 
     138 
     139            File inputFile = files[fileIndex]; 
     140 
     141            //create the output stream 
     142            BufferedWriter out = null; 
     143            File temp = null; 
     144            try { 
     145                //create temp file. 
     146                temp = File.createTempFile("rsr", ".tmp"); 
     147 
     148                //delete temp file when program exits. 
     149                temp.deleteOnExit(); 
     150 
     151                //writer to temp file 
     152                out = new BufferedWriter( new OutputStreamWriter(new FileOutputStream(temp), "UTF8") ); 
     153 
     154            } catch (IOException e) { 
     155                throw new BuildException( "Error - Couldn't create or open the temp file" ); 
     156            } 
     157 
     158 
     159            //create the input stream 
     160            BufferedReader in = null; 
     161            try { 
     162                in = new BufferedReader( new InputStreamReader(new FileInputStream(inputFile), "UTF8") ); 
    126163            } catch ( Exception e ) { 
    127                 System.err.println( e.getMessage() ); 
    128                 throw new BuildException( "Error - Couldn't read from the specified file" ); 
    129             } 
    130  
    131             if ( line == null ) { 
    132                 hasMoreLines = false; 
    133             } else { 
    134  
    135                 String oldLine = line; 
    136                 if ( pattern != null ) { 
    137                     String rp = replacement; 
    138                     if ( winPath ) { 
    139                         rp = rp.replaceAll("\\\\","\\\\\\\\"); 
    140                     } 
    141                     line = line.replaceAll((String)pattern, (String)rp); 
     164                throw new BuildException( "Error - Couldn't open the specified file" ); 
     165            } 
     166 
     167            //pass the file through, searching and replacing 
     168            String line = null; 
     169            boolean hasMoreLines = true; 
     170            while ( hasMoreLines ) { 
     171 
     172                try { 
     173                    line = in.readLine(); 
     174                } catch ( Exception e ) { 
     175                    System.err.println( e.getMessage() ); 
     176                    throw new BuildException( "Error - Couldn't read from the specified file" ); 
     177                } 
     178 
     179                if ( line == null ) { 
     180                    hasMoreLines = false; 
    142181                } else { 
    143                     for ( int i=0; i<jobs.size(); i++ ) { 
    144                         String rp = ((RegexSearchReplaceJob)(jobs.get(i))).getReplacement(); 
    145                         if ( ((RegexSearchReplaceJob)(jobs.get(i))).getWinPath() ) { 
     182 
     183                    String oldLine = line; 
     184                    if ( pattern != null ) { 
     185                        String rp = replacement; 
     186                        if ( winPath ) { 
    146187                            rp = rp.replaceAll("\\\\","\\\\\\\\"); 
    147188                        } 
    148                         line = line.replaceAll( ((RegexSearchReplaceJob)(jobs.get(i))).getPattern(), rp ); 
     189                        line = line.replaceAll((String)pattern, (String)rp); 
     190                    } else { 
     191                        for ( int i=0; i<jobs.size(); i++ ) { 
     192                            String rp = ((RegexSearchReplaceJob)(jobs.get(i))).getReplacement(); 
     193                            if ( ((RegexSearchReplaceJob)(jobs.get(i))).getWinPath() ) { 
     194                                rp = rp.replaceAll("\\\\","\\\\\\\\"); 
     195                            } 
     196                            line = line.replaceAll( ((RegexSearchReplaceJob)(jobs.get(i))).getPattern(), rp ); 
     197                        } 
    149198                    } 
    150                 } 
    151  
    152                 if ( !oldLine.equals( line ) ) { 
    153                     noReplaces++; 
    154                 } 
    155  
    156                 try { 
    157                     out.write( line ); 
    158                     out.newLine(); 
    159                 } catch ( Exception e ) { 
    160                     throw new BuildException( "Error - Couldn't write to the temp file" ); 
    161                 } 
    162             } 
    163         } 
     199 
     200                    if ( !oldLine.equals( line ) ) { 
     201                        noReplaces++; 
     202                    } 
     203 
     204                    try { 
     205                        out.write( line ); 
     206                        out.newLine(); 
     207                    } catch ( Exception e ) { 
     208                        throw new BuildException( "Error - Couldn't write to the temp file" ); 
     209                    } 
     210                } 
     211            } 
     212             
     213            try { 
     214                //close them both up 
     215                in.close(); 
     216                out.close(); 
     217            } catch ( Exception e ) { 
     218                throw new BuildException( "Error - Couldn't close a file" ); 
     219            } 
     220 
     221 
     222            //copy the new file (temp) over the original 
     223            InputStream i; 
     224            OutputStream o; 
     225            try { 
     226                i = new FileInputStream(temp); 
     227                o = new FileOutputStream(inputFile); 
     228 
     229            } catch ( Exception e ) { 
     230                throw new BuildException( "Error - Couldn't open the temp file" ); 
     231            } 
     232 
     233            try { 
    164234         
    165         try { 
    166             //close them both up 
    167             in.close(); 
    168             out.close(); 
    169         } catch ( Exception e ) { 
    170             throw new BuildException( "Error - Couldn't close a file" ); 
    171         } 
    172  
    173  
    174         //copy the new file (temp) over the original 
    175         InputStream i; 
    176         OutputStream o; 
    177         try { 
    178             i = new FileInputStream(temp); 
    179             o = new FileOutputStream(file); 
    180  
    181         } catch ( Exception e ) { 
    182             throw new BuildException( "Error - Couldn't open the temp file" ); 
    183         } 
    184  
    185         try { 
    186      
    187             // Transfer bytes from in to out 
    188             byte[] buf = new byte[1024]; 
    189             int len; 
    190             while ((len = i.read(buf)) > 0) { 
    191                o.write(buf, 0, len); 
    192             } 
    193  
    194             //close them up 
    195             i.close(); 
    196             o.close(); 
    197         } catch ( Exception e ) { 
    198             throw new BuildException( "Error - Couldn't write to the specified file" ); 
    199         } 
    200  
    201         if ( noReplaces == 0 ) { 
    202             System.out.println( "No Changes Made" ); 
    203         } else if ( noReplaces == 1 ) { 
    204             System.out.println( "Successfully changed 1 line" ); 
    205         } else { 
    206             System.out.println( "Successfully changed " + noReplaces + " lines" ); 
    207         } 
     235                // Transfer bytes from in to out 
     236                byte[] buf = new byte[1024]; 
     237                int len; 
     238                while ((len = i.read(buf)) > 0) { 
     239                   o.write(buf, 0, len); 
     240                } 
     241 
     242                //close them up 
     243                i.close(); 
     244                o.close(); 
     245            } catch ( Exception e ) { 
     246                throw new BuildException( "Error - Couldn't write to the specified file" ); 
     247            } 
     248 
     249         
     250            if ( noReplaces == 0 ) { 
     251                System.out.println( "  " + inputFile + " : No Changes Made" ); 
     252            } else if ( noReplaces == 1 ) { 
     253                System.out.println( "  " + inputFile + " : Successfully changed 1 line" ); 
     254            } else { 
     255                System.out.println( "  " + inputFile + " : Successfully changed " + noReplaces + " lines" ); 
     256            } 
     257 
     258        } 
     259        System.out.println(); 
    208260 
    209261    } 
    210262 
    211263    public void setFile(File file) { 
     264        if ( this.fileset != null || this.file != null ) { 
     265            throw new BuildException( "Error - Only one file or one fileset may be given!!" ); 
     266        } 
    212267        this.file = file; 
    213268    } 
     
    236291    } 
    237292 
     293    public FileSet createFileset() { 
     294        if ( this.fileset != null || this.file != null ) { 
     295            throw new BuildException( "Error - Only one file or one fileset may be given!!" ); 
     296        } 
     297        fileset = new FileSet(); 
     298        return fileset; 
     299    } 
     300 
    238301}