package edu.nju.service; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.Stack; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import edu.nju.dao.BugHistoryDao; import edu.nju.dao.BugMirrorDao; import edu.nju.dao.BugPageDao; import edu.nju.entities.BugHistory; import edu.nju.entities.BugMirror; import edu.nju.entities.BugPage; @Service public class HistoryService { @Autowired BugHistoryDao historydao; @Autowired BugMirrorDao mirrordao; @Autowired BugPageDao pagedao; @Autowired RecommendService recservice; @Autowired AnalyzeService aservice; public BugHistory getHistory(String id) { return historydao.findByid(id); } public List parents(String id) { Stack stack = new Stack(); List result = new ArrayList(); String parent = getHistory(id).getParent(); while(!parent.equals("null")) { stack.push(parent); parent = getHistory(parent).getParent(); } while(!stack.isEmpty()) { result.add(stack.pop()); } result.add(id); return result; } public List getNew(String case_take_id, String report_id) { List ids = historydao.findRoots(recservice.getListIds(case_take_id)); List filter = new ArrayList(); if(ids.size() > 2) { int n = ids.size(); filter.add(ids.get(n - 1)); filter.add(ids.get(n - 2)); } else { for(String id : ids) { filter.add(id); } } return mirrordao.findByIds(filter, report_id); } public List getRoots(String case_take_id) { return historydao.findRoots(aservice.getValid(case_take_id)); } public List getTreeRoots(String case_take_id) { List all = new ArrayList(); for(String id : getRoots(case_take_id)) { if(getHistory(id).getChildren().size() > 0) { all.add(id); } } return all; } public List getInvalid(Set ids) { List result = new ArrayList(); for(String id: ids) { if(!mirrordao.findById(id).isFlag()) {result.add(id);} } return result; } public List getInvalid(List ids) { List result = new ArrayList(); for(String id: ids) { if(!mirrordao.findById(id).isFlag()) {result.add(id);} } return result; } public Set filter(List> lists) { Set set = new HashSet(); for(List list : lists) { for(String id: list) { set.add(id); } } return set; } //获取评分时树的信息 public List getDetail(String id) { List result = new ArrayList(); List> paths = getDepth(id); List> widths = new ArrayList>(); Set ids = new HashSet(); int max_height = 0; int max_width = 0; int count = 0; String flag = "true"; for(List path: paths) { max_height = Math.max(max_height, path.size()); for(int i = 0; i < path.size(); i ++) { String temp = path.get(i); ids.add(temp); if(widths.size() <= i) { Set set = new HashSet(); set.add(temp); widths.add(set); } else {widths.get(i).add(temp);} } } for(Set width: widths) { max_width = Math.max(max_width, width.size()); } for(String str: ids) { if(aservice.getGrade(str) == -1) { flag = "false"; break; } } count = ids.size(); result.add(id); result.add(Integer.toString(max_width)); result.add(Integer.toString(max_height)); result.add(Integer.toString(count)); result.add(flag); result.add(recservice.getTitle(id)); return result; } public void pageFilter(List all, String page) { if(page.equals("null")) { return; } List mirrors = pagedao.findByIds(all); String[] pages = page.split("-"); for(BugPage mirror : mirrors) { if(pages.length > 0 && !mirror.getPage1().equals(pages[0])) { all.remove(mirror.getId()); continue; } if(pages.length > 1 && !mirror.getPage2().equals(pages[1])) { all.remove(mirror.getId()); continue; } if(pages.length > 2 && !mirror.getPage3().equals(pages[2])) { all.remove(mirror.getId()); continue; } } } public List> getDepth(String id) { BugHistory root = historydao.findByid(id); List> result = new ArrayList>(); if(root == null) { return result;} List list = new ArrayList(); list.add(root.getId()); dfs(root, result, list); return result; } private void dfs(BugHistory root, List> result, List list) { List children = root.getChildren(); if(children.size() != 0) { for(String child : children) { list.add(child); dfs(historydao.findByid(child), result, list); list.remove(child); } } else { result.add(new ArrayList(list)); } } }