001 /** 002 * Cobertura - http://cobertura.sourceforge.net/ 003 * 004 * Copyright (C) 2003 jcoverage ltd. 005 * Copyright (C) 2005 Mark Doliner <thekingant@users.sourceforge.net> 006 * Copyright (C) 2005 Joakim Erdfelt <joakim@erdfelt.net> 007 * 008 * Cobertura is free software; you can redistribute it and/or modify 009 * it under the terms of the GNU General Public License as published 010 * by the Free Software Foundation; either version 2 of the License, 011 * or (at your option) any later version. 012 * 013 * Cobertura is distributed in the hope that it will be useful, but 014 * WITHOUT ANY WARRANTY; without even the implied warranty of 015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 016 * General Public License for more details. 017 * 018 * You should have received a copy of the GNU General Public License 019 * along with Cobertura; if not, write to the Free Software 020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 021 * USA 022 */ 023 024 package net.sourceforge.cobertura.merge; 025 026 import gnu.getopt.Getopt; 027 import gnu.getopt.LongOpt; 028 029 import java.io.BufferedReader; 030 import java.io.File; 031 import java.io.FileInputStream; 032 import java.io.FileNotFoundException; 033 import java.io.FileReader; 034 import java.io.IOException; 035 import java.util.ArrayList; 036 import java.util.List; 037 038 import net.sourceforge.cobertura.coverage.InstrumentationPersistence; 039 import net.sourceforge.cobertura.util.Copyright; 040 041 import org.apache.log4j.Logger; 042 043 public class Main extends InstrumentationPersistence 044 { 045 046 private static final Logger logger = Logger.getLogger(Main.class); 047 048 public Main(String[] args) 049 { 050 LongOpt[] longOpts = new LongOpt[2]; 051 longOpts[0] = new LongOpt("instrumentation", 052 LongOpt.REQUIRED_ARGUMENT, null, 'i'); 053 longOpts[1] = new LongOpt("output", LongOpt.REQUIRED_ARGUMENT, null, 054 'o'); 055 056 Getopt g = new Getopt(getClass().getName(), args, ":i:o:", longOpts); 057 int c; 058 059 File destDir = new File(System.getProperty("user.dir")); 060 061 while ((c = g.getopt()) != -1) 062 { 063 switch (c) 064 { 065 case 'i': 066 System.out.println("cobertura loading: " + g.getOptarg()); 067 try 068 { 069 merge(loadInstrumentation(new FileInputStream(g 070 .getOptarg()))); 071 } 072 catch (FileNotFoundException ex) 073 { 074 logger.warn(ex); 075 } 076 break; 077 078 case 'o': 079 destDir = new File(g.getOptarg()); 080 destDir.mkdirs(); 081 break; 082 } 083 } 084 085 saveInstrumentation(destDir); 086 } 087 088 public static void main(String[] args) 089 { 090 Copyright.print(System.out); 091 System.out.println("Cobertura instrumentation merge tool"); 092 093 boolean hasCommandsFile = false; 094 String commandsFileName = null; 095 for (int i = 0; i < args.length; i++) 096 { 097 if (args[i].equals("-commandsfile")) 098 { 099 hasCommandsFile = true; 100 commandsFileName = args[++i]; 101 } 102 } 103 104 if (hasCommandsFile) 105 { 106 List arglist = new ArrayList(); 107 BufferedReader bufreader = null; 108 109 try 110 { 111 bufreader = new BufferedReader(new FileReader( 112 commandsFileName)); 113 String line; 114 115 while ((line = bufreader.readLine()) != null) 116 { 117 arglist.add(line); 118 } 119 120 } 121 catch (IOException e) 122 { 123 logger.fatal("Unable to read temporary commands file " 124 + commandsFileName + "."); 125 logger.info(e); 126 } 127 finally 128 { 129 if (bufreader != null) 130 { 131 try 132 { 133 bufreader.close(); 134 } 135 catch (IOException e) 136 { 137 } 138 } 139 } 140 args = (String[])arglist.toArray(new String[arglist.size()]); 141 } 142 143 new Main(args); 144 } 145 }