diff --git a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaMain.java b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/extract/BugzillaMain.java similarity index 95% rename from DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaMain.java rename to DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/extract/BugzillaMain.java index be374aa..22991f5 100644 --- a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaMain.java +++ b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/extract/BugzillaMain.java @@ -1,13 +1,12 @@ /** * */ -package cn.edu.fudan.se.defect.bugzilla.main; +package cn.edu.fudan.se.defect.bugzilla.extract; import java.util.ArrayList; import java.util.List; import cn.edu.fudan.se.defect.bugzilla.constants.BugzillaConstants; -import cn.edu.fudan.se.defect.bugzilla.extract.BugzillaExtractor; import cn.edu.fudan.se.defect.bugzilla.factory.BugzillaAttachmentFactory; import cn.edu.fudan.se.defect.bugzilla.factory.BugzillaBugFactory; import cn.edu.fudan.se.defect.bugzilla.factory.BugzillaCommentFactory; diff --git a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaExtractorMain.java b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaExtractorMain.java new file mode 100644 index 0000000..1b41879 --- /dev/null +++ b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaExtractorMain.java @@ -0,0 +1,123 @@ +/** + * + */ +package cn.edu.fudan.se.defect.bugzilla.main; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import cn.edu.fudan.se.defect.bugzilla.extract.BugzillaMain; +import cn.edu.fudan.se.defectAnalysis.bean.bugzilla.BugzillaBug; +import cn.edu.fudan.se.defectAnalysis.bean.link.FixedBugCommitFiltedLink; +import cn.edu.fudan.se.defectAnalysis.bean.link.FixedBugCommitLink; +import cn.edu.fudan.se.defectAnalysis.constants.dao.DaoConstants; +import cn.edu.fudan.se.defectAnalysis.dao.bugzilla.BugzillaBugDao; +import cn.edu.fudan.se.defectAnalysis.dao.link.LinkDao; +import cn.edu.fudan.se.utils.hibernate.HibernateUtils; + +/** + * @author Lotay + * + */ +public class BugzillaExtractorMain implements Runnable { + + private static final String ECLIPSE_DEBUG_HIBERNATE_CONF_PATH = DaoConstants.ECLIPSE_DEBUG_HIBERNATE_LOCATION_PATH; + private static final String ECLIPSE_DEBUG_BUGZILLA_PATH = "https://bugs.eclipse.org/bugs/"; + + static void init() { + + LinkDao dao = new LinkDao(); + bugs = dao.listUnFiltedLinks(ECLIPSE_DEBUG_HIBERNATE_CONF_PATH); + inBugs = loadDataBaseBugIDs(); + visitedBugs = new HashSet<>(); + visitedBugs.addAll(inBugs); + } + + static Collection bugs = null; + static Set inBugs = null; + static Set visitedBugs = null; + + /** + * @param args + * @throws Exception + */ + public static void main(String[] args) { + init(); + int totalNum = bugs.size(); + int start = 5919; + int num = 6500-start; + + new BugzillaExtractorMain(start, num).run(); +// for (start = 0; start < totalNum; start += num) { +// Thread th = new Thread(new BugzillaExtractorMain(start, num)); +// th.start(); +// } + } + + private int index = 0; + private int num = 0; + + /** + * @param index + */ + public BugzillaExtractorMain(int index, int num) { + super(); + this.index = index; + this.num = num; + } + + static Set loadDataBaseBugIDs() { + BugzillaBugDao dao = new BugzillaBugDao(); + Collection bugs = dao + .loadBugZillaBugs(ECLIPSE_DEBUG_HIBERNATE_CONF_PATH); + Set bugIds = new HashSet(); + for (BugzillaBug bug : bugs) { + bugIds.add(bug.getId()); + } + return bugIds; + } + + @Override + public void run() { + BugzillaMain bugzillaMain = new BugzillaMain(); + + List links = new ArrayList(bugs); + for (int i = index; i < index + num && i < links.size(); i++) { + FixedBugCommitLink bug = links.get(i); + int bugId = bug.getBugId(); + if (visitedBugs.contains(bugId)) { + if (inBugs.contains(bugId)) { + FixedBugCommitFiltedLink link = new FixedBugCommitFiltedLink(); + link.setBugId(bugId); + link.setRevisionId(bug.getRevisionId()); + HibernateUtils.save(link, ECLIPSE_DEBUG_HIBERNATE_CONF_PATH); + } + continue; + + } + visitedBugs.add(bugId); + System.out.println("index:" + (i) + "/" + bugs.size() + "-->" + + bugId); + List bugzillaObjs; + try { + bugzillaObjs = bugzillaMain.extractBugzilla( + ECLIPSE_DEBUG_BUGZILLA_PATH, bug.getBugId()); + if (!bugzillaObjs.isEmpty()) { + inBugs.add(bugId); + FixedBugCommitFiltedLink link = new FixedBugCommitFiltedLink(); + link.setBugId(bugId); + link.setRevisionId(bug.getRevisionId()); + bugzillaObjs.add(link); + HibernateUtils.saveAll(bugzillaObjs, + ECLIPSE_DEBUG_HIBERNATE_CONF_PATH); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + } +} diff --git a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaTest.java b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaTest.java index 9fff1c9..23ba8f5 100644 --- a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaTest.java +++ b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/BugzillaTest.java @@ -3,6 +3,8 @@ */ package cn.edu.fudan.se.defect.bugzilla.main; +import cn.edu.fudan.se.defect.bugzilla.extract.BugzillaMain; + /** * @author Lotay diff --git a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/EclipseUIBugzillaExtractor.java b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/EclipseUIBugzillaExtractor.java new file mode 100644 index 0000000..423300c --- /dev/null +++ b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/EclipseUIBugzillaExtractor.java @@ -0,0 +1,123 @@ +/** + * + */ +package cn.edu.fudan.se.defect.bugzilla.main; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import cn.edu.fudan.se.defect.bugzilla.extract.BugzillaMain; +import cn.edu.fudan.se.defectAnalysis.bean.bugzilla.BugzillaBug; +import cn.edu.fudan.se.defectAnalysis.bean.link.FixedBugCommitFiltedLink; +import cn.edu.fudan.se.defectAnalysis.bean.link.FixedBugCommitLink; +import cn.edu.fudan.se.defectAnalysis.constants.dao.DaoConstants; +import cn.edu.fudan.se.defectAnalysis.dao.bugzilla.BugzillaBugDao; +import cn.edu.fudan.se.defectAnalysis.dao.link.LinkDao; +import cn.edu.fudan.se.utils.hibernate.HibernateUtils; + +/** + * @author Lotay + * + */ +public class EclipseUIBugzillaExtractor implements Runnable { + + private static final String ECLIPSE_UI_HIBERNATE_CONF_PATH = DaoConstants.ECLIPSE_UI_HIBERNATE_LOCATION_PATH; + private static final String ECLIPSE_UI_BUGZILLA_PATH = "https://bugs.eclipse.org/bugs/"; + + static void init() { + + LinkDao dao = new LinkDao(); + bugs = dao.listUnFiltedLinks(ECLIPSE_UI_HIBERNATE_CONF_PATH); + inBugs = loadDataBaseBugIDs(); + visitedBugs = new HashSet<>(); + visitedBugs.addAll(inBugs); + } + + static Collection bugs = null; + static Set inBugs = null; + static Set visitedBugs = null; + + /** + * @param args + * @throws Exception + */ + public static void main(String[] args) { + init(); + int totalNum = bugs.size(); + int start = 3857+2600+2600+2600; + int num = 2600; + + new EclipseUIBugzillaExtractor(start, num).run(); +// for (start = 0; start < totalNum; start += num) { +// Thread th = new Thread(new EclipseUIBugzillaExtractor(start, num)); +// th.start(); +// } + } + + private int index = 0; + private int num = 0; + + /** + * @param index + */ + public EclipseUIBugzillaExtractor(int index, int num) { + super(); + this.index = index; + this.num = num; + } + + static Set loadDataBaseBugIDs() { + BugzillaBugDao dao = new BugzillaBugDao(); + Collection bugs = dao + .loadBugZillaBugs(ECLIPSE_UI_HIBERNATE_CONF_PATH); + Set bugIds = new HashSet(); + for (BugzillaBug bug : bugs) { + bugIds.add(bug.getId()); + } + return bugIds; + } + + @Override + public void run() { + BugzillaMain bugzillaMain = new BugzillaMain(); + + List links = new ArrayList(bugs); + for (int i = index; i < index + num && i < links.size(); i++) { + FixedBugCommitLink bug = links.get(i); + int bugId = bug.getBugId(); + if (visitedBugs.contains(bugId)) { + if (inBugs.contains(bugId)) { + FixedBugCommitFiltedLink link = new FixedBugCommitFiltedLink(); + link.setBugId(bugId); + link.setRevisionId(bug.getRevisionId()); + HibernateUtils.save(link, ECLIPSE_UI_HIBERNATE_CONF_PATH); + } + continue; + + } + visitedBugs.add(bugId); + System.out.println("index:" + (i) + "/" + bugs.size() + "-->" + + bugId); + List bugzillaObjs; + try { + bugzillaObjs = bugzillaMain.extractBugzilla( + ECLIPSE_UI_BUGZILLA_PATH, bug.getBugId()); + if (!bugzillaObjs.isEmpty()) { + inBugs.add(bugId); + FixedBugCommitFiltedLink link = new FixedBugCommitFiltedLink(); + link.setBugId(bugId); + link.setRevisionId(bug.getRevisionId()); + bugzillaObjs.add(link); + HibernateUtils.saveAll(bugzillaObjs, + ECLIPSE_UI_HIBERNATE_CONF_PATH); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + } +} diff --git a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/tomcat/TomcatBugzillaExtractor.java b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/TomcatBugzillaExtractor.java similarity index 95% rename from DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/tomcat/TomcatBugzillaExtractor.java rename to DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/TomcatBugzillaExtractor.java index e0207ac..7a56ac5 100644 --- a/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/tomcat/TomcatBugzillaExtractor.java +++ b/DefectAnalysis.Bugzilla/src/cn/edu/fudan/se/defect/bugzilla/main/TomcatBugzillaExtractor.java @@ -1,14 +1,14 @@ /** * */ -package cn.edu.fudan.se.defect.bugzilla.tomcat; +package cn.edu.fudan.se.defect.bugzilla.main; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; -import cn.edu.fudan.se.defect.bugzilla.main.BugzillaMain; +import cn.edu.fudan.se.defect.bugzilla.extract.BugzillaMain; import cn.edu.fudan.se.defectAnalysis.bean.bugzilla.BugzillaBug; import cn.edu.fudan.se.defectAnalysis.bean.link.FixedBugCommitFiltedLink; import cn.edu.fudan.se.defectAnalysis.bean.link.FixedBugCommitLink;