\r
private List<SlcExecutionNotifier> notifiers = new Vector<SlcExecutionNotifier>();\r
\r
- // private Map<SlcExecution, SlcExecutionStep> currentStep = new\r
- // HashMap<SlcExecution, SlcExecutionStep>();\r
-\r
- // private SlcExecutionStep currentStep = null;\r
private boolean currentStepNotified = true;\r
\r
+ // CUSTOMIZATIONS\r
+ private boolean logBeforeFirstTarget = false;\r
+ private boolean firstTargetStarted = false;\r
+\r
+ private boolean logTaskStartFinish = true;\r
+\r
public void init(Project project) {\r
if (this.project != null) {\r
throw new SlcAntException("Build listener already initialized");\r
}\r
\r
public void buildStarted(BuildEvent event) {\r
- // SlcExecution slcExecution = getSlcExecution(event);\r
-\r
}\r
\r
public void buildFinished(BuildEvent event) {\r
SlcExecution slcExecution = getSlcExecution(event);\r
+ String oldStatus = slcExecution.getStatus();\r
slcExecution.setStatus(SlcExecution.STATUS_FINISHED);\r
\r
for (SlcExecutionNotifier notifier : notifiers) {\r
- notifier.updateExecution(slcExecution);\r
+ notifier.updateStatus(slcExecution, oldStatus, slcExecution\r
+ .getStatus());\r
}\r
}\r
\r
public void messageLogged(BuildEvent event) {\r
+ if (!shouldLog())\r
+ return;\r
+\r
SlcExecution slcExecution = getSlcExecution(event);\r
if (slcExecution != null) {\r
if (currentStepNotified) {\r
}\r
\r
public void targetStarted(BuildEvent event) {\r
+ if (!firstTargetStarted)\r
+ firstTargetStarted = true;\r
+\r
addLogStep(event, "Target " + event.getTarget().getName() + " started");\r
}\r
\r
}\r
\r
public void taskStarted(BuildEvent event) {\r
+ if (!shouldLog())\r
+ return;\r
+\r
SlcExecution slcExecution = getSlcExecution(event);\r
if (!currentStepNotified) {\r
notifyStep(slcExecution, slcExecution.currentStep());\r
currentStepNotified = true;\r
}\r
\r
- slcExecution.getSteps().add(\r
- new SlcExecutionStep("LOG", "Task "\r
- + event.getTask().getTaskName() + " started"));\r
+ String msg = null;\r
+ if (logTaskStartFinish)\r
+ msg = "Task " + event.getTask().getTaskName() + " started";\r
+\r
+ slcExecution.getSteps().add(new SlcExecutionStep("LOG", msg));\r
+\r
currentStepNotified = false;\r
}\r
\r
public void taskFinished(BuildEvent event) {\r
+ if (!shouldLog())\r
+ return;\r
+\r
SlcExecution slcExecution = getSlcExecution(event);\r
if (!currentStepNotified) {\r
- slcExecution.currentStep().addLog(\r
- "Task " + event.getTask().getTaskName() + " finished");\r
+\r
+ if (logTaskStartFinish)\r
+ slcExecution.currentStep().addLog(\r
+ "Task " + event.getTask().getTaskName() + " finished");\r
+\r
notifyStep(slcExecution, slcExecution.currentStep());\r
currentStepNotified = true;\r
}\r
\r
}\r
\r
+ protected boolean shouldLog() {\r
+ return logBeforeFirstTarget || firstTargetStarted;\r
+ }\r
+\r
@Override\r
public void close() {\r
- // TODO Auto-generated method stub\r
-\r
}\r
\r
@Override\r
public boolean requiresLayout() {\r
- // TODO Auto-generated method stub\r
return false;\r
}\r
\r
writeSlcExecution(slcExecution);\r
}\r
\r
+ public void updateStatus(SlcExecution slcExecution, String oldStatus,\r
+ String newStatus) {\r
+ writeSlcExecution(slcExecution);\r
+ }\r
+\r
protected void writeSlcExecution(SlcExecution slcExecution) {\r
FileWriter out = null;\r
try {\r
public void setMarshaller(Marshaller marshaller) {\r
this.marshaller = marshaller;\r
}\r
- \r
- \r
+\r
}\r
List<SlcExecutionStep> additionalSteps);\r
\r
public void updateExecution(SlcExecution slcExecution);\r
+\r
+ public void updateStatus(SlcExecution slcExecution, String oldStatus,\r
+ String newStatus);\r
}\r
}\r
\r
public void addLog(String log) {\r
+ if (log == null)\r
+ return;\r
+\r
try {\r
List<String> lines = IOUtils.readLines(new StringReader(log));\r
logLines.addAll(lines);\r
import org.apache.commons.logging.LogFactory;\r
\r
import org.argeo.slc.msg.process.SlcExecutionRequest;\r
+import org.argeo.slc.msg.process.SlcExecutionStatusRequest;\r
import org.argeo.slc.msg.process.SlcExecutionStepsRequest;\r
import org.argeo.slc.ws.client.WebServiceUtils;\r
\r
}\r
}\r
\r
+ public void updateStatus(SlcExecution slcExecution, String oldStatus,\r
+ String newStatus) {\r
+ SlcExecutionStatusRequest req = new SlcExecutionStatusRequest(\r
+ slcExecution.getUuid(), newStatus);\r
+ try {\r
+ WebServiceUtils.marshalSendAndReceive(template, req);\r
+ if (log.isTraceEnabled())\r
+ log.trace("Notified status update of slc execution "\r
+ + slcExecution.getUuid());\r
+ } catch (SoapFaultClientException e) {\r
+ WebServiceUtils.manageSoapException(e);\r
+ }\r
+ }\r
+\r
public void addSteps(SlcExecution slcExecution,\r
List<SlcExecutionStep> additionalSteps) {\r
SlcExecutionStepsRequest req = new SlcExecutionStepsRequest();\r
import java.util.Map;\r
import java.util.TreeMap;\r
\r
+import javax.swing.tree.TreeSelectionModel;\r
+\r
/**\r
* Basic implementation of <code>StructureElement</code>.\r
* \r
this(label != null ? label : defaultLabel);\r
}\r
\r
+ /** Constructor */\r
+ public SimpleSElement(SimpleSElement sElement) {\r
+ setLabel(sElement.getLabel());\r
+ setTags(new TreeMap<String, String>(sElement.getTags()));\r
+ }\r
+\r
public String getLabel() {\r
return label;\r
}\r
\r
@Override\r
public SimpleSElement clone(){\r
- SimpleSElement clone = new SimpleSElement();\r
- clone.setLabel(getLabel());\r
- clone.setTags(getTags());\r
- return clone;\r
+ return new SimpleSElement(this);\r
}\r
\r
}\r
TestResultPart testResultPart) {\r
if (onlyOnClose)\r
return;\r
- \r
+\r
try {\r
- if (testResult.getResultParts().size() == 1) {\r
+ if (testResult.getResultParts().size() == 1\r
+ && testResult.getResultParts().values().iterator().next()\r
+ .getParts().size() == 1) {\r
CreateTreeTestResultRequest req = new CreateTreeTestResultRequest(\r
testResult);\r
\r
--- /dev/null
+package org.argeo.slc.msg.process;\r
+\r
+public class SlcExecutionStatusRequest {\r
+ private String slcExecutionUuid;\r
+ private String newStatus;\r
+\r
+ public SlcExecutionStatusRequest() {\r
+ }\r
+\r
+ public SlcExecutionStatusRequest(String slcExecutionUuid, String newStatus) {\r
+ this.slcExecutionUuid = slcExecutionUuid;\r
+ this.newStatus = newStatus;\r
+ }\r
+\r
+ public String getSlcExecutionUuid() {\r
+ return slcExecutionUuid;\r
+ }\r
+\r
+ public void setSlcExecutionUuid(String slcExecutionUuid) {\r
+ this.slcExecutionUuid = slcExecutionUuid;\r
+ }\r
+\r
+ public String getNewStatus() {\r
+ return newStatus;\r
+ }\r
+\r
+ public void setNewStatus(String newStatus) {\r
+ this.newStatus = newStatus;\r
+ }\r
+}\r
</field>\r
</class>\r
\r
+ <class name="org.argeo.slc.msg.process.SlcExecutionStatusRequest">\r
+ <map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
+ ns-prefix="slc" />\r
+ <field name="slcExecutionUuid" />\r
+ <field name="newStatus"/>\r
+ </class>\r
+\r
<class name="org.argeo.slc.msg.process.SlcExecutionRequest">\r
<map-to ns-uri="http://argeo.org/projects/slc/schemas"\r
ns-prefix="slc" />\r
</xs:all>\r
</xs:complexType>\r
</xs:element>\r
+ <xs:element name="slc-execution-status-request">\r
+ <xs:complexType>\r
+ <xs:all>\r
+ <xs:element name="slc-execution-uuid" type="xs:string" />\r
+ <xs:element name="new-status" type="xs:string" />\r
+ </xs:all>\r
+ </xs:complexType>\r
+ </xs:element>\r
\r
</xs:schema>
\ No newline at end of file