/*
* FindBugs - Find Bugs in Java programs
* Copyright (C) 2003-2008 University of Maryland
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package edu.umd.cs.findbugs.workflow;
import java.io.IOException;
import java.util.Date;
import org.dom4j.DocumentException;
import edu.umd.cs.findbugs.BugCollection;
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.DetectorFactoryCollection;
import edu.umd.cs.findbugs.FindBugs;
import edu.umd.cs.findbugs.SortedBugCollection;
import edu.umd.cs.findbugs.SourceLineAnnotation;
import edu.umd.cs.findbugs.ba.SourceFile;
import edu.umd.cs.findbugs.ba.SourceFinder;
import edu.umd.cs.findbugs.cloud.Cloud;
/**
* @author pugh
*/
public class BackdateHistoryUsingSource {
private static final String USAGE = "Usage: <cmd> " + " <bugs.xml> [<out.xml>]";
public static void main(String[] args) throws IOException, DocumentException {
FindBugs.setNoAnalysis();
DetectorFactoryCollection.instance();
if (args.length < 1 || args.length > 2) {
System.out.println(USAGE);
return;
}
BugCollection origCollection;
origCollection = new SortedBugCollection();
origCollection.readXML(args[0]);
SourceFinder sourceFinder = new SourceFinder(origCollection.getProject());
for (BugInstance b : origCollection) {
SourceLineAnnotation s = b.getPrimarySourceLineAnnotation();
if (!s.isSourceFileKnown())
continue;
if (!sourceFinder.hasSourceFile(s))
continue;
SourceFile sourceFile = sourceFinder.findSourceFile(s);
long when = sourceFile.getLastModified();
if (when > 0) {
Date firstSeen = new Date(when);
b.getXmlProps().setFirstSeen(firstSeen);
System.out.println("Set first seen to " + firstSeen);
}
}
Cloud cloud = origCollection.getCloud();
cloud.bugsPopulated();
if (cloud.getSigninState() != Cloud.SigninState.SIGNED_IN
&& cloud.getSigninState() != Cloud.SigninState.NO_SIGNIN_REQUIRED) {
cloud.signIn();
if (cloud.getSigninState() != Cloud.SigninState.SIGNED_IN
&& cloud.getSigninState() != Cloud.SigninState.NO_SIGNIN_REQUIRED) {
throw new IllegalStateException("Unable to sign in; state : " + cloud.getSigninState());
}
}
cloud.waitUntilIssueDataDownloaded();
if (args.length > 1)
origCollection.writeXML(args[1]);
cloud.waitUntilNewIssuesUploaded();
cloud.shutdown();
}
}