Improve SlcExecution notifications
authorMathieu Baudier <mbaudier@argeo.org>
Mon, 5 May 2008 08:48:48 +0000 (08:48 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Mon, 5 May 2008 08:48:48 +0000 (08:48 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1120 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/FileSlcExecutionNotifier.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/SlcExecutionNotifier.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/SlcExecutionStep.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/process/WebServiceSlcExecutionNotifier.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/structure/SimpleSElement.java
org.argeo.slc.core/src/main/java/org/argeo/slc/core/test/tree/WebServiceTreeTestResultNotifier.java
org.argeo.slc.core/src/main/java/org/argeo/slc/msg/process/SlcExecutionStatusRequest.java [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/castor/msg/mapping.xml
org.argeo.slc.core/src/main/resources/org/argeo/slc/xml/slc.xsd

index f2bedce400527b3f8ed0e484d75edf0e346355fe..a8dd15c7d76f89ea5c8de3f8f672fee08458ef78 100644 (file)
@@ -28,12 +28,14 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
 \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
@@ -57,20 +59,23 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
        }\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
@@ -87,6 +92,9 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
        }\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
@@ -95,23 +103,35 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
        }\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
@@ -193,15 +213,16 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements
 \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
index 1bf4156727032de969c9b3b2cc28db7af380636d..1559635bdc362e7c768ed1056a4dbb74f1ac9da0 100644 (file)
@@ -45,6 +45,11 @@ public class FileSlcExecutionNotifier implements SlcExecutionNotifier {
                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
@@ -75,6 +80,5 @@ public class FileSlcExecutionNotifier implements SlcExecutionNotifier {
        public void setMarshaller(Marshaller marshaller) {\r
                this.marshaller = marshaller;\r
        }\r
-       \r
-       \r
+\r
 }\r
index 183d99add483327875e9b7fb81cdd5cb181c933c..bf3b67ba54811a47a87ca458a98b73b7d1a80b59 100644 (file)
@@ -9,4 +9,7 @@ public interface SlcExecutionNotifier {
                        List<SlcExecutionStep> additionalSteps);\r
 \r
        public void updateExecution(SlcExecution slcExecution);\r
+\r
+       public void updateStatus(SlcExecution slcExecution, String oldStatus,\r
+                       String newStatus);\r
 }\r
index b18411136fc3f29080f2f9a45894aaef65c805f0..56b6ba020bb2bf410fde4355e0a1eacb3fbb7b1c 100644 (file)
@@ -67,6 +67,9 @@ public class SlcExecutionStep {
        }\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
index 09e37122d684e0443e5e3a00b22335320f463d00..4befbe6a20d52db7c48831c692ec453780ef9927 100644 (file)
@@ -9,6 +9,7 @@ import org.apache.commons.logging.Log;
 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
@@ -43,6 +44,20 @@ public class WebServiceSlcExecutionNotifier implements SlcExecutionNotifier {
                }\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
index 369f951b6052259104a1e337c4f024d7b90d14d1..9faea935fb28ac7af3927e672985e719abaff436 100644 (file)
@@ -3,6 +3,8 @@ package org.argeo.slc.core.structure;
 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
@@ -28,6 +30,12 @@ public class SimpleSElement implements StructureElement {
                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
@@ -55,10 +63,7 @@ public class SimpleSElement implements StructureElement {
 \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
index 698c24cb72ccd1bab62c79304c84c564b2f34e5c..7ca2f7da041de94fdc0b2b0c295b3b986e21355f 100644 (file)
@@ -24,9 +24,11 @@ public class WebServiceTreeTestResultNotifier implements
                        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
diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/process/SlcExecutionStatusRequest.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/msg/process/SlcExecutionStatusRequest.java
new file mode 100644 (file)
index 0000000..78afc83
--- /dev/null
@@ -0,0 +1,30 @@
+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
index 9972cac7d7b0d10a74b2a308a84317c1b60ca43b..f695f9573d2fe98cbe0ade40a407878e3e5b8e04 100644 (file)
                </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
index bb44d77bfd77d9c2a7709298f3617c5f55baf650..b457f18f0ec0f3672ccf3fc593b41a48192eea8e 100644 (file)
                        </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