KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > hudson > tasks > test > TestResultProjectAction


1 package hudson.tasks.test;
2
3 import hudson.model.AbstractBuild;
4 import hudson.model.AbstractProject;
5 import hudson.model.Action;
6 import hudson.tasks.junit.JUnitResultArchiver;
7 import org.kohsuke.stapler.Ancestor;
8 import org.kohsuke.stapler.StaplerRequest;
9 import org.kohsuke.stapler.StaplerResponse;
10
11 import javax.servlet.ServletException JavaDoc;
12 import javax.servlet.http.Cookie JavaDoc;
13 import javax.servlet.http.HttpServletResponse JavaDoc;
14 import java.io.IOException JavaDoc;
15 import java.util.List JavaDoc;
16
17 /**
18  * Project action object from test reporter, such as {@link JUnitResultArchiver},
19  * which displays the trend report on the project top page.
20  *
21  * <p>
22  * This works with any {@link AbstractTestResultAction} implementation.
23  *
24  * @author Kohsuke Kawaguchi
25  */

26 public class TestResultProjectAction implements Action {
27     /**
28      * Project that owns this action.
29      */

30     public final AbstractProject<?,?> project;
31
32     public TestResultProjectAction(AbstractProject<?,?> project) {
33         this.project = project;
34     }
35
36     /**
37      * No task list item.
38      */

39     public String JavaDoc getIconFileName() {
40         return null;
41     }
42
43     public String JavaDoc getDisplayName() {
44         return "Test Report";
45     }
46
47     public String JavaDoc getUrlName() {
48         return "test";
49     }
50
51     protected AbstractTestResultAction getLastTestResultAction() {
52         AbstractBuild<?,?> b = project.getLastSuccessfulBuild();
53         if(b!=null) {
54             AbstractTestResultAction a = b.getTestResultAction();
55             if(a!=null) return a;
56         }
57         return null;
58     }
59
60     /**
61      * Display the test result trend.
62      */

63     public void doTrend( StaplerRequest req, StaplerResponse rsp ) throws IOException JavaDoc, ServletException JavaDoc {
64         AbstractTestResultAction a = getLastTestResultAction();
65         if(a!=null)
66             a.doGraph(req,rsp);
67         else
68             rsp.setStatus(HttpServletResponse.SC_NOT_FOUND);
69     }
70
71     /**
72      * Generates the clickable map HTML fragment for {@link #doTrend(StaplerRequest, StaplerResponse)}.
73      */

74     public void doTrendMap( StaplerRequest req, StaplerResponse rsp ) throws IOException JavaDoc, ServletException JavaDoc {
75         AbstractTestResultAction a = getLastTestResultAction();
76         if(a!=null)
77             a.doGraphMap(req,rsp);
78         else
79             rsp.setStatus(HttpServletResponse.SC_NOT_FOUND);
80     }
81
82     /**
83      * Changes the test result report display mode.
84      */

85     public void doFlipTrend( StaplerRequest req, StaplerResponse rsp ) throws IOException JavaDoc, ServletException JavaDoc {
86         boolean failureOnly = false;
87
88         // check the current preference value
89
Cookie JavaDoc[] cookies = req.getCookies();
90         if(cookies!=null) {
91             for (Cookie JavaDoc cookie : cookies) {
92                 if(cookie.getName().equals(FAILURE_ONLY_COOKIE))
93                     failureOnly = Boolean.parseBoolean(cookie.getValue());
94             }
95         }
96
97         // flip!
98
failureOnly = !failureOnly;
99
100         // set the updated value
101
Cookie JavaDoc cookie = new Cookie JavaDoc(FAILURE_ONLY_COOKIE,String.valueOf(failureOnly));
102         List JavaDoc anc = req.getAncestors();
103         Ancestor a = (Ancestor) anc.get(anc.size()-1); // last
104
cookie.setPath(a.getUrl()); // just for this chart
105
cookie.setMaxAge(Integer.MAX_VALUE);
106         rsp.addCookie(cookie);
107
108         // back to the project page
109
rsp.sendRedirect("..");
110     }
111
112     private static final String JavaDoc FAILURE_ONLY_COOKIE = "TestResultAction_failureOnly";
113 }
114
Popular Tags