001/* 002 * Cobertura - http://cobertura.sourceforge.net/ 003 * 004 * Copyright (C) 2003 jcoverage ltd. 005 * Copyright (C) 2005 Mark Doliner 006 * Copyright (C) 2005 Joakim Erdfelt 007 * Copyright (C) 2005 Mark Sinke 008 * Copyright (C) 2005 Grzegorz Lukasik 009 * 010 * Cobertura is free software; you can redistribute it and/or modify 011 * it under the terms of the GNU General Public License as published 012 * by the Free Software Foundation; either version 2 of the License, 013 * or (at your option) any later version. 014 * 015 * Cobertura is distributed in the hope that it will be useful, but 016 * WITHOUT ANY WARRANTY; without even the implied warranty of 017 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 018 * General Public License for more details. 019 * 020 * You should have received a copy of the GNU General Public License 021 * along with Cobertura; if not, write to the Free Software 022 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 023 * USA 024 */ 025 026package net.sourceforge.cobertura.merge; 027 028import java.io.File; 029import java.util.ArrayList; 030import java.util.Iterator; 031import java.util.List; 032 033import net.sourceforge.cobertura.coveragedata.CoverageDataFileHandler; 034import net.sourceforge.cobertura.coveragedata.ProjectData; 035import net.sourceforge.cobertura.util.CommandLineBuilder; 036import net.sourceforge.cobertura.util.Header; 037 038public class Main 039{ 040 041 public Main(String[] args) 042 { 043 File dataFile = CoverageDataFileHandler.getDefaultDataFile(); 044 File baseDir = null; 045 List filesToMerge = new ArrayList(); 046 047 // Go through all the parameters 048 for (int i = 0; i < args.length; i++) 049 { 050 if (args[i].equals("--datafile")) 051 dataFile = new File(args[++i]); 052 else if (args[i].equals("--basedir")) 053 baseDir = new File(args[++i]); 054 else 055 filesToMerge.add( new File(baseDir, args[i])); 056 } 057 058 // Load coverage data 059 ProjectData projectData = null; 060 if (dataFile.isFile()) 061 projectData = CoverageDataFileHandler.loadCoverageData(dataFile); 062 if (projectData == null) 063 projectData = new ProjectData(); 064 065 if (filesToMerge.isEmpty()) 066 { 067 System.err.println("Error: No files were specified for merging."); 068 System.exit(1); 069 } 070 071 // Merge everything 072 Iterator iter = filesToMerge.iterator(); 073 while (iter.hasNext()) 074 { 075 File newDataFile = (File)iter.next(); 076 ProjectData projectDataNew = CoverageDataFileHandler 077 .loadCoverageData(newDataFile); 078 if (projectDataNew != null) 079 projectData.merge(projectDataNew); 080 } 081 082 // Save the combined data file 083 CoverageDataFileHandler.saveCoverageData(projectData, dataFile); 084 } 085 086 public static void main(String[] args) 087 { 088 Header.print(System.out); 089 090 try { 091 args = CommandLineBuilder.preprocessCommandLineArguments( args); 092 } catch( Exception ex) { 093 System.err.println( "Error: Cannot process arguments: " + ex.getMessage()); 094 System.exit(1); 095 } 096 new Main(args); 097 } 098}