X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.core%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fant%2FSlcExecutionBuildListener.java;h=a8dd15c7d76f89ea5c8de3f8f672fee08458ef78;hb=4226558ccaf4d40b55d5d8492d0ef3476dfdf0c9;hp=433d6b4b1cf331ea9192ce139422427d7050270b;hpb=0b505bbb6ed9b6491dbd1f86f4ad53b4cc87a6f9;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java index 433d6b4b1..a8dd15c7d 100644 --- a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/SlcExecutionBuildListener.java @@ -12,6 +12,7 @@ import org.apache.tools.ant.Project; import org.argeo.slc.core.process.SlcExecution; import org.argeo.slc.core.process.SlcExecutionNotifier; import org.argeo.slc.core.process.SlcExecutionStep; +import org.argeo.slc.core.process.WebServiceSlcExecutionNotifier; public class SlcExecutionBuildListener extends AppenderSkeleton implements ProjectRelatedBuildListener { @@ -27,14 +28,17 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements private List notifiers = new Vector(); - // private Map currentStep = new - // HashMap(); + private boolean currentStepNotified = true; - private SlcExecutionStep currentStep = null; + // CUSTOMIZATIONS + private boolean logBeforeFirstTarget = false; + private boolean firstTargetStarted = false; + + private boolean logTaskStartFinish = true; public void init(Project project) { if (this.project != null) { - throw new SlcAntException("BuildListener already initialized"); + throw new SlcAntException("Build listener already initialized"); } this.project = project; @@ -55,27 +59,32 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements } public void buildStarted(BuildEvent event) { - // SlcExecution slcExecution = getSlcExecution(event); - } public void buildFinished(BuildEvent event) { SlcExecution slcExecution = getSlcExecution(event); + String oldStatus = slcExecution.getStatus(); slcExecution.setStatus(SlcExecution.STATUS_FINISHED); for (SlcExecutionNotifier notifier : notifiers) { - notifier.updateExecution(slcExecution); + notifier.updateStatus(slcExecution, oldStatus, slcExecution + .getStatus()); } } public void messageLogged(BuildEvent event) { + if (!shouldLog()) + return; + SlcExecution slcExecution = getSlcExecution(event); if (slcExecution != null) { - if (currentStep == null) { - currentStep = new SlcExecutionStep("LOG", event.getMessage()); - notifyStep(slcExecution, currentStep); + if (currentStepNotified) { + slcExecution.getSteps().add( + new SlcExecutionStep("LOG", event.getMessage())); + notifyStep(slcExecution, slcExecution.currentStep()); + currentStepNotified = true; } else { - currentStep.addLog(event.getMessage()); + slcExecution.currentStep().addLog(event.getMessage()); } } else { // TODO: log before initialization? @@ -83,6 +92,9 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements } public void targetStarted(BuildEvent event) { + if (!firstTargetStarted) + firstTargetStarted = true; + addLogStep(event, "Target " + event.getTarget().getName() + " started"); } @@ -91,24 +103,37 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements } public void taskStarted(BuildEvent event) { + if (!shouldLog()) + return; + SlcExecution slcExecution = getSlcExecution(event); - if (currentStep != null) { - notifyStep(slcExecution, currentStep); - currentStep = null; + if (!currentStepNotified) { + notifyStep(slcExecution, slcExecution.currentStep()); + currentStepNotified = true; } - currentStep = new SlcExecutionStep("LOG", "Task " - + event.getTask().getTaskName() + " started"); + String msg = null; + if (logTaskStartFinish) + msg = "Task " + event.getTask().getTaskName() + " started"; + + slcExecution.getSteps().add(new SlcExecutionStep("LOG", msg)); + + currentStepNotified = false; } public void taskFinished(BuildEvent event) { + if (!shouldLog()) + return; + SlcExecution slcExecution = getSlcExecution(event); - if (currentStep != null) { - currentStep.addLog("Task " + event.getTask().getTaskName() - + " finished"); - slcExecution.getSteps().add(currentStep); - notifyStep(slcExecution, currentStep); - currentStep = null; + if (!currentStepNotified) { + + if (logTaskStartFinish) + slcExecution.currentStep().addLog( + "Task " + event.getTask().getTaskName() + " finished"); + + notifyStep(slcExecution, slcExecution.currentStep()); + currentStepNotified = true; } } @@ -127,49 +152,15 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements if (slcExecution == null) throw new SlcAntException("No SLC Execution registered."); - - // if (slcExecution == null) { - // // for log4j - // this.project = project; - // if (!LogManager.getRootLogger().isAttached(this)) { - // LogManager.getRootLogger().addAppender(this); - // } - // - // slcExecution = new SlcExecution(); - // slcExecution.setUuid(UUID.randomUUID().toString()); - // try { - // slcExecution.setHost(InetAddress.getLocalHost().getHostName()); - // } catch (UnknownHostException e) { - // slcExecution.setHost(SlcExecution.UNKOWN_HOST); - // } - // - // if (project.getReference(SlcProjectHelper.REF_ROOT_CONTEXT) != null) - // { - // slcExecution.setType(SLC_ANT_TYPE); - // } else { - // slcExecution.setType(ANT_TYPE); - // } - // - // slcExecution.setPath(project.getProperty("ant.file")); - // slcExecution.setStatus(SlcExecution.STATUS_RUNNING); - // - // project.addReference(REF_SLC_EXECUTION, slcExecution); - // - // for (SlcExecutionNotifier notifier : notifiers) { - // notifier.newExecution(slcExecution); - // } - // - // } - return slcExecution; } protected void addLogStep(BuildEvent event, String msg) { - SlcExecutionStep step = new SlcExecutionStep("LOG", msg); SlcExecution slcExecution = getSlcExecution(event); - slcExecution.getSteps().add(step); + slcExecution.getSteps().add(new SlcExecutionStep("LOG", msg)); - notifyStep(slcExecution, step); + notifyStep(slcExecution, slcExecution.currentStep()); + currentStepNotified = true; } protected void notifyStep(SlcExecution slcExecution, SlcExecutionStep step) { @@ -193,19 +184,26 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements // avoid StackOverflow if notification calls Log4j itself. return; } + + if (event.getLoggerName().equals( + WebServiceSlcExecutionNotifier.class.getName())) { + return; + } + isLogging = true; try { SlcExecution slcExecution = (SlcExecution) project .getReference(REF_SLC_EXECUTION); if (slcExecution != null) { - if (currentStep == null) { - currentStep = new SlcExecutionStep("LOG", event - .getMessage().toString()); - notifyStep(slcExecution, currentStep); - } else { - currentStep.addLog(event.getMessage().toString()); + if (currentStepNotified) { + slcExecution.getSteps().add( + new SlcExecutionStep("LOG", event.getMessage() + .toString())); + currentStepNotified = false; } + slcExecution.currentStep() + .addLog(event.getMessage().toString()); } else { // TODO: log before initialization? } @@ -215,15 +213,16 @@ public class SlcExecutionBuildListener extends AppenderSkeleton implements } + protected boolean shouldLog() { + return logBeforeFirstTarget || firstTargetStarted; + } + @Override public void close() { - // TODO Auto-generated method stub - } @Override public boolean requiresLayout() { - // TODO Auto-generated method stub return false; }