Merge branch 'master' of ssh://svjatoslav.eu:10006/home/n0/git/meviz
[meviz.git] / src / main / java / eu / svjatoslav / meviz / replace / Main.java
1 /*
2  * Meviz - Various tools collection to work with multimedia.
3  * Copyright (C) 2012 -- 2017, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
4  * 
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of version 2 of the GNU General Public License
7  * as published by the Free Software Foundation.
8  */
9
10 package eu.svjatoslav.meviz.replace;
11
12 import eu.svjatoslav.meviz.Module;
13
14 import java.io.*;
15
16 public class Main implements Module {
17
18     private final CommandlineHandler commandlineHandler = new CommandlineHandler();
19
20     private CommandlineOptions options;
21
22     @Override
23     public String getDescription() {
24         return "Replace one string to another string in all occurrances and all files recursively.";
25     }
26
27     @Override
28     public String getModuleCommand() {
29         return "replace";
30     }
31
32     private void processDirectory(final File directory) {
33
34         for (final File file : directory.listFiles())
35             if (file.isDirectory()) {
36                 if (options.recursive)
37                     processDirectory(file);
38             } else
39                 try {
40                     processFile(file);
41                 } catch (final IOException exception) {
42                     System.out.println("Error processing file: "
43                             + file.getAbsolutePath());
44                     System.out.println("   exception: "
45                             + exception.getMessage());
46                 }
47
48     }
49
50     private void processFile(final File file) throws IOException {
51
52         final FileReader fileReader = new FileReader(file);
53         final BufferedReader bufferedReader = new BufferedReader(fileReader);
54
55         final StringBuilder result = new StringBuilder();
56
57         boolean contentChanged = false;
58
59         while (true) {
60             final String line = bufferedReader.readLine();
61             if (line == null)
62                 break;
63
64             final String newLine = line.replace(options.searchForPattern,
65                     options.replaceWithPattern);
66
67             if (!contentChanged)
68                 if (!newLine.equals(line))
69                     contentChanged = true;
70
71             result.append(newLine);
72             result.append("\n");
73         }
74
75         bufferedReader.close();
76         fileReader.close();
77
78         if (contentChanged) {
79             final FileWriter fileWriter = new FileWriter(file);
80             fileWriter.write(result.toString());
81             fileWriter.close();
82         }
83
84     }
85
86     @Override
87     public void run(final String[] args) throws IOException {
88
89         options = commandlineHandler.parseCommandlineArguments(args);
90
91         if (options == null) {
92             showCommandlineHelp();
93             return;
94         }
95
96         processDirectory(options.targetDirectory);
97
98     }
99
100     @Override
101     public void showCommandlineHelp() {
102         commandlineHandler.parser.showHelp();
103     }
104
105 }