1 17 package org.apache.ws.jaxme.generator.util; 18 19 import java.io.BufferedReader ; 20 import java.io.BufferedWriter ; 21 import java.io.File ; 22 import java.io.FileOutputStream ; 23 import java.io.FileReader ; 24 import java.io.IOException ; 25 import java.io.OutputStreamWriter ; 26 import java.io.PrintStream ; 27 import java.io.Writer ; 28 import java.text.DateFormat ; 29 import java.text.ParseException ; 30 import java.text.SimpleDateFormat ; 31 import java.util.ArrayList ; 32 import java.util.Arrays ; 33 import java.util.Calendar ; 34 import java.util.Iterator ; 35 import java.util.List ; 36 import java.util.ListIterator ; 37 38 39 45 public class DateFilter { 46 private File fromFile, toFile; 47 private boolean force; 48 49 public void setFromFile(File pFile) { fromFile = pFile; } 50 public File getFromFile() { return fromFile; } 51 public void setToFile(File pFile) { toFile = pFile; } 52 public File getToFile() { return toFile; } 53 public void setForce(boolean pForce) { force = pForce; } 54 public boolean getForce() { return force; } 55 56 public String validate() { 57 StringBuffer result = new StringBuffer (); 58 if (fromFile == null) { 59 result.append("Input file (option fromFile) is not set.\n"); 60 } else if (!fromFile.exists()) { 61 result.append("Input file " + fromFile + " doesn't exist."); 62 } 63 if (toFile == null) { 64 result.append("toFile is not set.\n"); 65 } 66 67 if (result.length() > 0) { 68 return result.toString(); 69 } else { 70 return null; 71 } 72 } 73 74 public boolean isRunning() { 75 if (getForce()) { 76 return true; 77 } 78 79 long l1 = fromFile.lastModified(); 80 if (l1 == -1) { 81 return true; 82 } 83 long l2 = toFile.lastModified(); 84 if (l2 == -1) { 85 return true; 86 } 87 return l2 <= l1; 88 } 89 90 public List getLines() throws IOException { 91 List result = new ArrayList (); 92 BufferedReader br = new BufferedReader (new FileReader (getFromFile())); 93 for (;;) { 94 String s = br.readLine(); 95 if (s == null) { 96 break; 97 } 98 result.add(s); 99 } 100 return result; 101 } 102 103 public Calendar getCalendar(String pDateTime, String pPattern) 104 throws ParseException { 105 DateFormat simpleFormat = new SimpleDateFormat (pPattern); 106 Calendar cal = Calendar.getInstance(); 107 cal.setTime(simpleFormat.parse(pDateTime)); 108 return cal; 109 } 110 111 public String replacePattern(String pPattern, String pSourceFormat, 112 DateFormat pTargetFormat) throws ParseException { 113 return pTargetFormat.format(getCalendar(pPattern, pSourceFormat).getTime()); 114 } 115 116 public String getDateTime(String pDateTime) throws ParseException { 117 return replacePattern(pDateTime, "yyyy-MM-dd HH:mm:ss", 118 DateFormat.getDateTimeInstance()); 119 } 120 121 public String getDate(String pDateTime) throws ParseException { 122 return replacePattern(pDateTime, "yyyy-MM-dd", 123 DateFormat.getDateInstance()); 124 } 125 126 public String getTime(String pDateTime) throws ParseException { 127 return replacePattern(pDateTime, "HH:mm:ss", 128 DateFormat.getTimeInstance()); 129 } 130 131 public void replace(List pLines, List fromStrings, List toStrings) { 132 for (ListIterator iter = pLines.listIterator(); iter.hasNext(); ) { 133 String s = (String ) iter.next(); 134 StringBuffer result = new StringBuffer (); 135 136 while (s.length() > 0) { 137 boolean done = false; 138 for (int i = 0; i < fromStrings.size(); i++) { 139 String from = (String ) fromStrings.get(i); 140 if (s.startsWith(from)) { 141 result.append((String ) toStrings.get(i)); 142 s = s.substring(from.length()); 143 done = true; 144 break; 145 } 146 } 147 if (!done) { 148 result.append(s.charAt(0)); 149 s = s.substring(1); 150 } 151 } 152 153 iter.set(result.toString()); 154 } 155 } 156 157 public void putLines(List pLines) throws IOException { 158 Writer fw = new BufferedWriter (new OutputStreamWriter (new FileOutputStream (getToFile()), "UTF-8")); 159 for (Iterator iter = pLines.iterator(); iter.hasNext(); ) { 160 String s = (String ) iter.next(); 161 fw.write(s + "\n"); 162 } 163 fw.close(); 164 } 165 166 public void execute() throws IOException , ParseException { 167 if (!isRunning()) { 168 return; 169 } 170 List lines = getLines(); 171 172 List fromStrings = new ArrayList (); 173 List toStrings = new ArrayList (); 174 175 fromStrings.add("2002-12-17 12:23:11"); 176 toStrings.add(getDateTime("2002-12-17 12:23:11")); 177 178 fromStrings.add("2002-12-16 12:00:11"); 179 toStrings.add(getDateTime("2002-12-16 12:00:11")); 180 181 fromStrings.add("2002-12-17"); 182 toStrings.add(getDate("2002-12-17")); 183 184 fromStrings.add("2002-12-16"); 185 toStrings.add(getDate("2002-12-16")); 186 187 fromStrings.add("12:23:11"); 188 toStrings.add(getTime("12:23:11")); 189 190 fromStrings.add("12:00:11"); 191 toStrings.add(getTime("12:00:11")); 192 193 replace(lines, fromStrings, toStrings); 194 putLines(lines); 195 } 196 197 public static void Usage(String pMsg) { 198 PrintStream ps = System.err; 199 if (pMsg != null) { 200 ps.println(pMsg); 201 ps.println(); 202 } 203 ps.println("Usage: java " + DateFilter.class + " <options>"); 204 ps.println(); 205 ps.println("Possible options are:"); 206 ps.println(" --fromFile <file> Sets the input file"); 207 ps.println(" --toFile <file> Sets the output file"); 208 ps.println(" --force Forces overwriting of the output file"); 209 System.exit(1); 210 } 211 212 public static void main(String [] args) throws Exception { 213 DateFilter filter = new DateFilter(); 214 List argList = new ArrayList (Arrays.asList(args)); 215 while (!argList.isEmpty()) { 216 String arg = (String ) argList.remove(0); 217 String opt = null; 218 if (arg.startsWith("--")) { 219 opt = arg.substring(2); 220 } else if (arg.startsWith("-")) { 221 opt = arg.substring(1); 222 } else { 223 Usage("Unknown argument: " + arg); 224 } 225 226 if ("fromFile".equals(opt)) { 227 if (argList.isEmpty()) { 228 Usage("Option " + arg + " requires an argument: Input file"); 229 } 230 filter.setFromFile(new File ((String ) argList.remove(0))); 231 } else if ("toFile".equals(opt)) { 232 if (argList.isEmpty()) { 233 Usage("Option " + arg + " requires an argument: Output file"); 234 } 235 filter.setToFile(new File ((String ) argList.remove(0))); 236 } else if ("force".equals(opt)) { 237 filter.setForce(true); 238 } else { 239 Usage("Unknown option: " + opt); 240 } 241 } 242 243 String msg = filter.validate(); 244 if (msg != null) { 245 Usage(msg); 246 } else { 247 filter.execute(); 248 } 249 } 250 } 251 | Popular Tags |