123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- package edu.nju.controller;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.*;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.web.bind.annotation.CrossOrigin;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.ResponseBody;
- import edu.nju.entities.Bug;
- import edu.nju.entities.BugMirror;
- import edu.nju.service.DivRecService;
- import edu.nju.service.HistoryService;
- import edu.nju.service.RecommendService;
- import edu.nju.service.UserBasedService;
- import java.util.Map.Entry;
- @Controller
- @RequestMapping(value = "/rec")
- @CrossOrigin(origins = "*", maxAge = 3600, allowCredentials = "true")
- public class RecommendController {
-
- @Autowired
- RecommendService recservice;
-
- @Autowired
- HistoryService historyservice;
-
- @Autowired
- UserBasedService ubservice;
-
- @Autowired
- DivRecService divservice;
-
-
- @RequestMapping(value = "/getList")
- @ResponseBody
- public void getList(String case_take_id, String report_id, HttpSession session, HttpServletResponse response) {
- try {
- if(session.getAttribute("rec") != null) {
- session.removeAttribute("rec");
- }
- if(session.getAttribute("page") != null) {
- session.removeAttribute("page");
- }
- if(session.getAttribute("path") != null) {
- session.removeAttribute("path");
- }
- if(session.getAttribute("title") != null) {
- session.removeAttribute("title");
- }
- if(session.getAttribute("des") != null) {
- session.removeAttribute("des");
- }
- session.setAttribute("case", case_take_id);
- session.setAttribute("report", report_id);
- PrintWriter out = response.getWriter();
- List<BugMirror> mirrors = recservice.getList(case_take_id, report_id);
- filter(historyservice.getNew(case_take_id, report_id), mirrors);
- out.print(new JSONArray(mirrors));
- out.flush();
- out.close();
- } catch (IOException e) {
-
- e.printStackTrace();
- }
- }
-
-
- @RequestMapping(value = "/getDetail")
- @ResponseBody
- public void getDetail(String id, HttpServletResponse response) {
- JSONObject result = new JSONObject();
- try {
- Bug bug = recservice.getDetail(id);
- if(bug != null) {
- result.put("detail", new JSONObject(bug));
- result.put("history", new JSONObject(historyservice.getHistory(id)));
- result.put("mirror", new JSONObject(recservice.getMirror(id)));
- }
- PrintWriter out = response.getWriter();
- out.print(result);
- out.flush();
- out.close();
- } catch (IOException e) {
-
- e.printStackTrace();
- }
- }
-
-
- @RequestMapping(value = "/recommend")
- @ResponseBody
- public void recommend(String case_take_id, String type, String content, HttpSession session, HttpServletResponse response) {
- try {
- JSONObject result = new JSONObject();
- PrintWriter out = response.getWriter();
- List<BugMirror> mirror1 = new ArrayList<BugMirror>();
- List<Float> scores = new ArrayList<Float>();
- Set<BugMirror> mirror2 = new HashSet<BugMirror>();
- Map<BugMirror, Float> map;
- System.out.println(type);
- System.out.println(content);
- if(type.equals("title") || type.equals("description")) {
- if(type.equals("title")) {map = recservice.recommandByTitle(content, session);}
- else {map = recservice.recommandByDes(content, session);}
- if(mirror1 != null) {
- mirror1.addAll(map.keySet());
- scores.addAll(map.values());
- }
- } else {
- if(type.contains("page")) {map = recservice.recommndByPage(case_take_id, type, content, true, session);}
- else {map = recservice.recommend(case_take_id, type, content, true, session);}
- List<String> reports = new ArrayList<String>();
- reports.add((String)session.getAttribute("report"));
- if(mirror1 != null) {
- mirror1.addAll(map.keySet());
- scores.addAll(map.values());
- }
- }
- List<BugMirror> resultMirror = new ArrayList<BugMirror>();
- List<Float> resultScore = new ArrayList<Float>();
- Map<BugMirror,Float> hashMap=new HashMap<>();
- for(int i=0;i<mirror1.size();i++){
- hashMap.put(mirror1.get(i),scores.get(i));
- }
-
- List<Entry<BugMirror, Float>> tList = new ArrayList<>(hashMap.entrySet());
- tList.sort((a, b) -> (Float.compare(b.getValue(), a.getValue())));
-
- for (int i = 0; i < 6 && i < tList.size(); i++) {
- Entry<BugMirror, Float> entry = tList.get(i);
- resultMirror.add(entry.getKey());
- resultScore.add(entry.getValue());
- }
- result.put("same", new JSONArray(resultMirror));
- result.put("scores", new JSONArray(resultScore));
- result.put("new", new JSONArray(mirror2));
- recservice.createSimilarBugLog(session,resultMirror,resultScore);
- out.print(result);
- out.flush();
- out.close();
- } catch (IOException e) {
-
- e.printStackTrace();
- }
- }
-
- @RequestMapping(value = "/diversity")
- @ResponseBody
- public void diversityRec(String case_take_id, String report_id, HttpServletResponse response) {
- try {
- PrintWriter out = response.getWriter();
- out.println(new JSONArray(divservice.diverseRec(report_id, case_take_id)));
- out.flush();
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-
- @RequestMapping(value = "/title")
- @ResponseBody
- public void getTitle(String id, HttpServletResponse response) {
- try {
- PrintWriter out = response.getWriter();
- out.print(recservice.getTitle(id));
- out.flush();
- out.close();
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
-
-
- @RequestMapping(value = "/fork")
- @ResponseBody
- public void fork(String page1, String page2, String page3, String bug_category, String severity, String recurrent, HttpSession session, HttpServletResponse response) {
- try {
- PrintWriter out = response.getWriter();
- JSONObject result = new JSONObject();
- Map<String, String> map = new LinkedHashMap<String, String>();
- if(!page1.equals("null")) {map.put("page1", page1);}
- if(!page2.equals("null")) {map.put("page2", page2);}
- if(!page3.equals("null")) {map.put("page3", page3);}
- map.put("bug_category", bug_category);
- map.put("severity", severity);
- map.put("recurrent", recurrent);
- session.setAttribute("path", map);
- result.put("status", 200);
- out.print(result);
- out.flush();
- out.close();
- } catch (Exception e) {
-
- e.printStackTrace();
- }
- }
-
- public static void filter(List<BugMirror> a, List<BugMirror> b) {
- if(a == null) {return;}
- for(BugMirror a1: a) {
- boolean flag = true;
- for(BugMirror b1 : b) {
- if(a1.getId().equals(b1.getId())) {flag = false;}
- }
- if(flag) {b.add(a1);}
- }
- }
-
- public static void filter(Set<BugMirror> a, List<BugMirror> b) {
- if(a == null || b == null) {return;}
- for(BugMirror mirror : b) {
- if(a.contains(mirror)) {a.remove(mirror);}
- }
- }
- }
|