Lines 42-108
Link Here
|
42 |
package org.netbeans.modules.hudson.ui.actions; |
42 |
package org.netbeans.modules.hudson.ui.actions; |
43 |
|
43 |
|
44 |
import java.awt.event.ActionEvent; |
44 |
import java.awt.event.ActionEvent; |
45 |
import java.util.logging.Logger; |
45 |
import java.util.LinkedList; |
|
|
46 |
import java.util.List; |
46 |
import javax.swing.AbstractAction; |
47 |
import javax.swing.AbstractAction; |
|
|
48 |
import javax.swing.Action; |
47 |
import org.netbeans.modules.hudson.api.HudsonInstance; |
49 |
import org.netbeans.modules.hudson.api.HudsonInstance; |
48 |
import org.netbeans.modules.hudson.api.HudsonJobBuild; |
50 |
import org.netbeans.modules.hudson.api.HudsonJobBuild; |
49 |
import org.netbeans.modules.hudson.api.HudsonMavenModuleBuild; |
51 |
import org.netbeans.modules.hudson.api.HudsonMavenModuleBuild; |
50 |
import org.netbeans.modules.hudson.impl.HudsonInstanceImpl; |
52 |
import org.netbeans.modules.hudson.impl.HudsonInstanceImpl; |
51 |
import org.netbeans.modules.hudson.spi.BuilderConnector; |
53 |
import org.netbeans.modules.hudson.spi.BuilderConnector; |
52 |
import static org.netbeans.modules.hudson.ui.actions.Bundle.*; |
54 |
import org.openide.util.ContextAwareAction; |
|
|
55 |
import org.openide.util.Lookup; |
53 |
import org.openide.util.NbBundle.Messages; |
56 |
import org.openide.util.NbBundle.Messages; |
54 |
import org.openide.util.RequestProcessor; |
57 |
import org.openide.util.Utilities; |
55 |
|
58 |
|
56 |
/** |
59 |
/** |
57 |
* Action to display test failures. |
60 |
* Action to display test failures. |
58 |
*/ |
61 |
*/ |
59 |
public class ShowFailures extends AbstractAction { |
62 |
public class ShowFailures extends AbstractAction implements ContextAwareAction { |
60 |
|
63 |
|
61 |
private static final Logger LOG = Logger.getLogger(ShowFailures.class.getName()); |
64 |
private static ShowFailures INSTANCE = null; |
62 |
private static final RequestProcessor RP = new RequestProcessor(ShowFailures.class); |
65 |
private final Lookup context; |
63 |
private final HudsonJobBuild build; |
|
|
64 |
private final HudsonMavenModuleBuild moduleBuild; |
65 |
|
66 |
|
66 |
public ShowFailures(HudsonJobBuild build) { |
67 |
/** |
67 |
this(build, null); |
68 |
* Get the shared instance from system filesystem. |
|
|
69 |
*/ |
70 |
public static ShowFailures getInstance() { |
71 |
if (INSTANCE == null) { |
72 |
INSTANCE = new ShowFailures(); |
73 |
} |
74 |
return INSTANCE; |
68 |
} |
75 |
} |
69 |
|
76 |
|
70 |
public ShowFailures(HudsonMavenModuleBuild module) { |
77 |
public ShowFailures() { |
71 |
this(module.getBuild(), module); |
78 |
this(Utilities.actionsGlobalContext()); |
72 |
} |
79 |
} |
73 |
|
80 |
|
74 |
@Messages("ShowFailures.label=Show Test Failures") |
81 |
@Messages("ShowFailures.label=Show Test Failures") |
75 |
private ShowFailures(HudsonJobBuild build, |
82 |
private ShowFailures(Lookup context) { |
76 |
HudsonMavenModuleBuild moduleBuild) { |
83 |
putValue(NAME, Bundle.ShowFailures_label()); |
77 |
|
84 |
this.context = context; |
78 |
this.build = build; |
|
|
79 |
this.moduleBuild = moduleBuild; |
80 |
putValue(NAME, ShowFailures_label()); |
81 |
} |
85 |
} |
82 |
|
86 |
|
83 |
@Override |
87 |
/** |
84 |
public void actionPerformed(ActionEvent e) { |
88 |
* Check if failures for job build or maven module build can be shown. The |
85 |
HudsonInstance hudsonInstance = build.getJob().getInstance(); |
89 |
* build has to be unstable, and a failure displayer has to be available. |
86 |
if (hudsonInstance instanceof HudsonInstanceImpl) { |
90 |
*/ |
87 |
HudsonInstanceImpl hudsonInstanceImpl = |
91 |
private boolean canShowFailures(HudsonJobBuild build, |
88 |
(HudsonInstanceImpl) hudsonInstance; |
92 |
HudsonMavenModuleBuild module) { |
89 |
BuilderConnector builderClient = hudsonInstanceImpl.getBuilderConnector(); |
|
|
90 |
if (moduleBuild != null) { |
91 |
builderClient.getFailureDisplayer().showFailures(moduleBuild); |
92 |
} else { |
93 |
builderClient.getFailureDisplayer().showFailures(build); |
94 |
} |
95 |
} |
96 |
} |
97 |
|
98 |
@Override |
99 |
public boolean isEnabled() { |
100 |
HudsonInstance instance = build.getJob().getInstance(); |
93 |
HudsonInstance instance = build.getJob().getInstance(); |
101 |
if (instance instanceof HudsonInstanceImpl) { |
94 |
if (instance instanceof HudsonInstanceImpl) { |
|
|
95 |
if (module == null && !HudsonJobBuild.Result.UNSTABLE.equals( |
96 |
build.getResult())) { |
97 |
return false; |
98 |
} else if (module != null) { |
99 |
boolean failed = false; |
100 |
switch (module.getColor()) { |
101 |
case yellow: |
102 |
case yellow_anime: |
103 |
failed = true; |
104 |
} |
105 |
if (!failed) { |
106 |
return false; |
107 |
} |
108 |
} |
102 |
BuilderConnector builderClient = |
109 |
BuilderConnector builderClient = |
103 |
((HudsonInstanceImpl) instance).getBuilderConnector(); |
110 |
((HudsonInstanceImpl) instance).getBuilderConnector(); |
104 |
return builderClient.getFailureDisplayer() != null; |
111 |
return builderClient.getFailureDisplayer() != null; |
105 |
} |
112 |
} |
106 |
return false; |
113 |
return false; |
107 |
} |
114 |
} |
|
|
115 |
|
116 |
/** |
117 |
* Find maven module builds that are part of a job build but are not already |
118 |
* included in the context. |
119 |
*/ |
120 |
private List<HudsonMavenModuleBuild> getExtraModuleBuilds( |
121 |
HudsonJobBuild build) { |
122 |
List<HudsonMavenModuleBuild> result = new LinkedList<HudsonMavenModuleBuild>(); |
123 |
for (HudsonMavenModuleBuild m : build.getMavenModules()) { |
124 |
if (null == context.lookup(new Lookup.Template<HudsonMavenModuleBuild>( |
125 |
HudsonMavenModuleBuild.class, null, m))) { |
126 |
result.add(m); |
127 |
} |
128 |
} |
129 |
return result; |
130 |
} |
131 |
|
132 |
/** |
133 |
* If there is at least one unstable build in the context, this action will |
134 |
* be enabled. |
135 |
*/ |
136 |
@Override |
137 |
public boolean isEnabled() { |
138 |
for (HudsonJobBuild job : context.lookupAll(HudsonJobBuild.class)) { |
139 |
if (canShowFailures(job, null)) { |
140 |
return true; |
141 |
} |
142 |
} |
143 |
for (HudsonMavenModuleBuild module |
144 |
: context.lookupAll(HudsonMavenModuleBuild.class)) { |
145 |
if (canShowFailures(module.getBuild(), module)) { |
146 |
return true; |
147 |
} |
148 |
} |
149 |
return false; |
150 |
} |
151 |
|
152 |
@Override |
153 |
public void actionPerformed(ActionEvent e) { |
154 |
|
155 |
for (HudsonJobBuild job : context.lookupAll(HudsonJobBuild.class)) { |
156 |
showFailures(job, null); |
157 |
} |
158 |
for (HudsonMavenModuleBuild module |
159 |
: context.lookupAll(HudsonMavenModuleBuild.class)) { |
160 |
showFailures(module.getBuild(), module); |
161 |
} |
162 |
} |
163 |
|
164 |
/** |
165 |
* Show failures in a job build or maven module build. If a maven module |
166 |
* build is not specified, but the job build contains some module build, |
167 |
* failures from all its module builds will be shown. |
168 |
*/ |
169 |
private void showFailures(HudsonJobBuild build, |
170 |
HudsonMavenModuleBuild moduleBuild) { |
171 |
|
172 |
if (!canShowFailures(build, moduleBuild)) { |
173 |
return; |
174 |
} |
175 |
HudsonInstance hudsonInstance = build.getJob().getInstance(); |
176 |
if (hudsonInstance instanceof HudsonInstanceImpl) { |
177 |
HudsonInstanceImpl hudsonInstanceImpl = |
178 |
(HudsonInstanceImpl) hudsonInstance; |
179 |
BuilderConnector builderClient = |
180 |
hudsonInstanceImpl.getBuilderConnector(); |
181 |
BuilderConnector.FailureDisplayer failureDisplayer = |
182 |
builderClient.getFailureDisplayer(); |
183 |
if (failureDisplayer != null) { |
184 |
if (moduleBuild != null) { |
185 |
failureDisplayer.showFailures(moduleBuild); |
186 |
} else { |
187 |
if (build.getMavenModules().isEmpty()) { |
188 |
failureDisplayer.showFailures(build); |
189 |
} else { |
190 |
for (HudsonMavenModuleBuild extraModule |
191 |
: getExtraModuleBuilds(build)) { |
192 |
failureDisplayer.showFailures(extraModule); |
193 |
} |
194 |
} |
195 |
} |
196 |
} |
197 |
} |
198 |
} |
199 |
|
200 |
@Override |
201 |
public Action createContextAwareInstance(Lookup actionContext) { |
202 |
return new ShowFailures(actionContext); |
203 |
} |
108 |
} |
204 |
} |