greenstone.org greenstone wiki greenstone trac planet greenstone

Changeset 17902

Show
Ignore:
Timestamp:
2008-11-21 15:04:11 (2 months ago)
Author:
oranfry
Message:

made rsr support filesets

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • 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}