]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2279 API : new extension points to handle lifecycle events
authorEvgeny Mandrikov <mandrikov@gmail.com>
Sun, 27 Mar 2011 03:21:33 +0000 (07:21 +0400)
committerEvgeny Mandrikov <mandrikov@gmail.com>
Thu, 31 Mar 2011 11:14:42 +0000 (15:14 +0400)
30 files changed:
sonar-batch/src/main/java/org/sonar/batch/events/BatchEvent.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/events/DecoratorExecutionEvent.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/DecoratorExecutionHandler.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/DecoratorsPhaseEvent.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/DecoratorsPhaseHandler.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/EventBus.java
sonar-batch/src/main/java/org/sonar/batch/events/EventHandler.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/SensorExecutionEvent.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/SensorExecutionHandler.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/SensorsPhaseEvent.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/SensorsPhaseHandler.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/events/SonarEvent.java [deleted file]
sonar-batch/src/main/java/org/sonar/batch/index/MemoryOptimizer.java
sonar-batch/src/main/java/org/sonar/batch/phases/AbstractPhaseEvent.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorExecutionEvent.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsExecutor.java
sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsPhaseEvent.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/phases/Phases.java
sonar-batch/src/main/java/org/sonar/batch/phases/PhasesTimeProfiler.java
sonar-batch/src/main/java/org/sonar/batch/phases/ProjectAnalysisEvent.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/phases/SensorExecutionEvent.java [new file with mode: 0644]
sonar-batch/src/main/java/org/sonar/batch/phases/SensorsExecutor.java
sonar-batch/src/main/java/org/sonar/batch/phases/SensorsPhaseEvent.java [new file with mode: 0644]
sonar-batch/src/test/java/org/sonar/batch/events/EventBusTest.java
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/DecoratorExecutionHandler.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/DecoratorsPhaseHandler.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/EventHandler.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/ProjectAnalysisHandler.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/SensorExecutionHandler.java [new file with mode: 0644]
sonar-plugin-api/src/main/java/org/sonar/api/batch/events/SensorsPhaseHandler.java [new file with mode: 0644]

diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/BatchEvent.java b/sonar-batch/src/main/java/org/sonar/batch/events/BatchEvent.java
new file mode 100644 (file)
index 0000000..a9a98c1
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.events;
+
+import org.sonar.api.batch.events.EventHandler;
+
+/**
+ * Root of all Sonar Batch events.
+ * 
+ * @param <H> handler type
+ */
+public abstract class BatchEvent<H extends EventHandler> {
+
+  protected BatchEvent() {
+  }
+
+  /**
+   * Do not call directly - should be called only by {@link EventBus}.
+   * Typically should be implemented as following: <code>handler.onEvent(this)</code>
+   */
+  protected abstract void dispatch(H handler);
+
+  /**
+   * Returns class of associated handler. Used by {@link EventBus} to dispatch events to the correct handlers.
+   */
+  protected abstract Class getType();
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorExecutionEvent.java b/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorExecutionEvent.java
deleted file mode 100644 (file)
index d55e3eb..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-import org.sonar.api.batch.Decorator;
-
-/**
- * Fired on each execution of {@link Decorator} on start and on finish.
- */
-public class DecoratorExecutionEvent extends SonarEvent<DecoratorExecutionHandler> {
-
-  private Decorator decorator;
-  private boolean start;
-
-  public DecoratorExecutionEvent(Decorator decorator, boolean start) {
-    this.decorator = decorator;
-    this.start = start;
-  }
-
-  public Decorator getDecorator() {
-    return decorator;
-  }
-
-  public boolean isStartExecution() {
-    return start;
-  }
-
-  public boolean isDoneExecution() {
-    return !start;
-  }
-
-  @Override
-  public void dispatch(DecoratorExecutionHandler handler) {
-    handler.onDecoratorExecution(this);
-  }
-
-  @Override
-  public Class getType() {
-    return DecoratorExecutionHandler.class;
-  }
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorExecutionHandler.java b/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorExecutionHandler.java
deleted file mode 100644 (file)
index 3cf7af0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-public interface DecoratorExecutionHandler extends EventHandler {
-
-  void onDecoratorExecution(DecoratorExecutionEvent event);
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorsPhaseEvent.java b/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorsPhaseEvent.java
deleted file mode 100644 (file)
index d88468c..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-import org.sonar.api.batch.Decorator;
-
-import java.util.Collection;
-
-/**
- * Fired before execution of {@link Decorator}s and after.
- */
-public class DecoratorsPhaseEvent extends SonarEvent<DecoratorsPhaseHandler> {
-
-  private Collection<Decorator> decorators;
-  private boolean start;
-
-  public DecoratorsPhaseEvent(Collection<Decorator> decorators, boolean start) {
-    this.decorators = decorators;
-    this.start = start;
-  }
-
-  public Collection<Decorator> getDecorators() {
-    return decorators;
-  }
-
-  public boolean isPhaseStart() {
-    return start;
-  }
-
-  public boolean isPhaseDone() {
-    return !start;
-  }
-
-  @Override
-  protected void dispatch(DecoratorsPhaseHandler handler) {
-    handler.onDecoratorsPhase(this);
-  }
-
-  @Override
-  protected Class getType() {
-    return DecoratorsPhaseHandler.class;
-  }
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorsPhaseHandler.java b/sonar-batch/src/main/java/org/sonar/batch/events/DecoratorsPhaseHandler.java
deleted file mode 100644 (file)
index 73b2a68..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-public interface DecoratorsPhaseHandler extends EventHandler {
-
-  void onDecoratorsPhase(DecoratorsPhaseEvent event);
-
-}
index c02d6d0d7e5c942fc44588c94d80d8724defb206..765c7a72f139bd26d67778c9928c053fa29a8248 100644 (file)
 package org.sonar.batch.events;
 
 import com.google.common.collect.Lists;
+import org.sonar.api.batch.events.EventHandler;
 import org.sonar.api.utils.Logs;
 
 import java.util.List;
 
 /**
- * Dispatches {@link SonarEvent}s. Eases decoupling by allowing objects to interact without having direct dependencies upon one another, and
+ * Dispatches {@link BatchEvent}s. Eases decoupling by allowing objects to interact without having direct dependencies upon one another, and
  * without requiring event sources to deal with maintaining handler lists.
- * 
- * @since 2.7
  */
 public class EventBus {
 
@@ -41,11 +40,11 @@ public class EventBus {
   /**
    * Fires the given event.
    */
-  public void fireEvent(SonarEvent event) {
+  public void fireEvent(BatchEvent event) {
     doFireEvent(event);
   }
 
-  private void doFireEvent(SonarEvent event) {
+  private void doFireEvent(BatchEvent event) {
     List<EventHandler> handlers = getDispatchList(event.getType());
     Logs.INFO.trace("Dispatch event {} for {}", event, handlers);
     for (EventHandler handler : handlers) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/EventHandler.java b/sonar-batch/src/main/java/org/sonar/batch/events/EventHandler.java
deleted file mode 100644 (file)
index 55ed106..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-/**
- * Marker interface for event handlers.
- * 
- * @since 2.7
- */
-public interface EventHandler {
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/SensorExecutionEvent.java b/sonar-batch/src/main/java/org/sonar/batch/events/SensorExecutionEvent.java
deleted file mode 100644 (file)
index 50ec165..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-import org.sonar.api.batch.Sensor;
-
-/**
- * Fired on each execution of {@link Sensor} on start and on finish.
- */
-public class SensorExecutionEvent extends SonarEvent<SensorExecutionHandler> {
-
-  private Sensor sensor;
-  private boolean start;
-
-  public SensorExecutionEvent(Sensor sensor, boolean start) {
-    this.sensor = sensor;
-    this.start = start;
-  }
-
-  public Sensor getSensor() {
-    return sensor;
-  }
-
-  public boolean isStartExecution() {
-    return start;
-  }
-
-  public boolean isDoneExecution() {
-    return !start;
-  }
-
-  @Override
-  public void dispatch(SensorExecutionHandler handler) {
-    handler.onSensorExecution(this);
-  }
-
-  @Override
-  public Class getType() {
-    return SensorExecutionHandler.class;
-  }
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/SensorExecutionHandler.java b/sonar-batch/src/main/java/org/sonar/batch/events/SensorExecutionHandler.java
deleted file mode 100644 (file)
index 8d33e28..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-public interface SensorExecutionHandler extends EventHandler {
-
-  void onSensorExecution(SensorExecutionEvent event);
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/SensorsPhaseEvent.java b/sonar-batch/src/main/java/org/sonar/batch/events/SensorsPhaseEvent.java
deleted file mode 100644 (file)
index 04fbcb3..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-import org.sonar.api.batch.Sensor;
-
-import java.util.Collection;
-
-/**
- * Fired before execution of {@link Sensor}s and after.
- */
-public class SensorsPhaseEvent extends SonarEvent<SensorsPhaseHandler> {
-
-  private Collection<Sensor> sensors;
-  private boolean start;
-
-  public SensorsPhaseEvent(Collection<Sensor> sensors, boolean start) {
-    this.sensors = sensors;
-    this.start = start;
-  }
-
-  public Collection<Sensor> getSensors() {
-    return sensors;
-  }
-
-  public boolean isPhaseStart() {
-    return start;
-  }
-
-  @Override
-  protected void dispatch(SensorsPhaseHandler handler) {
-    handler.onSensorsPhase(this);
-  }
-
-  @Override
-  protected Class getType() {
-    return SensorsPhaseHandler.class;
-  }
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/SensorsPhaseHandler.java b/sonar-batch/src/main/java/org/sonar/batch/events/SensorsPhaseHandler.java
deleted file mode 100644 (file)
index 74be799..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-public interface SensorsPhaseHandler extends EventHandler {
-
-  void onSensorsPhase(SensorsPhaseEvent event);
-
-}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/events/SonarEvent.java b/sonar-batch/src/main/java/org/sonar/batch/events/SonarEvent.java
deleted file mode 100644 (file)
index 9a544bd..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Sonar, open source software quality management tool.
- * Copyright (C) 2008-2011 SonarSource
- * mailto:contact AT sonarsource DOT com
- *
- * Sonar is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * Sonar is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with Sonar; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
- */
-package org.sonar.batch.events;
-
-/**
- * Root of all Sonar events.
- * 
- * @param <H> handler type
- * @since 2.7
- */
-public abstract class SonarEvent<H extends EventHandler> {
-
-  protected SonarEvent() {
-  }
-
-  /**
-   * Do not call directly - should be called only by {@link EventBus}.
-   * Typically should be implemented as following: <code>handler.onEvent(this)</code>
-   */
-  protected abstract void dispatch(H handler);
-
-  /**
-   * Returns class of associated handler. Used by {@link EventBus} to dispatch events to the correct handlers.
-   */
-  protected abstract Class getType();
-
-}
index 9c6bd0438340e5d69ac3648f163d8306d9b3c290..798fdd2d4417efcd90bfabf39b676cae69f4541b 100644 (file)
  */
 package org.sonar.batch.index;
 
-import java.util.List;
-import java.util.Map;
-
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.sonar.api.batch.events.DecoratorExecutionHandler;
+import org.sonar.api.batch.events.DecoratorsPhaseHandler;
+import org.sonar.api.batch.events.SensorExecutionHandler;
 import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.MeasureData;
 import org.sonar.api.database.model.MeasureModel;
 import org.sonar.api.measures.Measure;
 import org.sonar.api.measures.PersistenceMode;
-import org.sonar.batch.events.DecoratorExecutionEvent;
-import org.sonar.batch.events.DecoratorExecutionHandler;
-import org.sonar.batch.events.DecoratorsPhaseEvent;
-import org.sonar.batch.events.DecoratorsPhaseHandler;
-import org.sonar.batch.events.SensorExecutionEvent;
-import org.sonar.batch.events.SensorExecutionHandler;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * @since 2.7
@@ -102,20 +99,20 @@ public class MemoryOptimizer implements SensorExecutionHandler, DecoratorExecuti
   }
 
   public void onSensorExecution(SensorExecutionEvent event) {
-    if (event.isDoneExecution()) {
+    if (event.isEnd()) {
       flushMemory();
       session.commit();
     }
   }
 
   public void onDecoratorExecution(DecoratorExecutionEvent event) {
-    if (event.isDoneExecution()) {
+    if (event.isEnd()) {
       flushMemory();
     }
   }
 
   public void onDecoratorsPhase(DecoratorsPhaseEvent event) {
-    if (event.isPhaseDone()) {
+    if (event.isEnd()) {
       session.commit();
     }
   }
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/AbstractPhaseEvent.java b/sonar-batch/src/main/java/org/sonar/batch/phases/AbstractPhaseEvent.java
new file mode 100644 (file)
index 0000000..09d8d0d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.phases;
+
+import org.sonar.api.batch.events.EventHandler;
+import org.sonar.batch.events.BatchEvent;
+
+abstract class AbstractPhaseEvent<H extends EventHandler> extends BatchEvent<H> {
+
+  private final boolean start;
+
+  AbstractPhaseEvent(boolean start) {
+    this.start = start;
+  }
+
+  public final boolean isStart() {
+    return start;
+  }
+
+  public final boolean isEnd() {
+    return !start;
+  }
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorExecutionEvent.java b/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorExecutionEvent.java
new file mode 100644 (file)
index 0000000..bbfa744
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.phases;
+
+import org.sonar.api.batch.Decorator;
+import org.sonar.api.batch.events.DecoratorExecutionHandler;
+
+class DecoratorExecutionEvent extends AbstractPhaseEvent<DecoratorExecutionHandler>
+    implements org.sonar.api.batch.events.DecoratorExecutionHandler.DecoratorExecutionEvent {
+
+  private final Decorator decorator;
+
+  DecoratorExecutionEvent(Decorator decorator, boolean start) {
+    super(start);
+    this.decorator = decorator;
+  }
+
+  public Decorator getDecorator() {
+    return decorator;
+  }
+
+  @Override
+  public void dispatch(DecoratorExecutionHandler handler) {
+    handler.onDecoratorExecution(this);
+  }
+
+  @Override
+  public Class getType() {
+    return DecoratorExecutionHandler.class;
+  }
+
+}
index 70cc2a1d16babecbaee004b600adc0d812d9e7ed..4d4607accd695f22247c2f96f70537694a6255e6 100644 (file)
@@ -29,8 +29,6 @@ import org.sonar.api.resources.Project;
 import org.sonar.api.resources.Resource;
 import org.sonar.batch.DecoratorsSelector;
 import org.sonar.batch.DefaultDecoratorContext;
-import org.sonar.batch.events.DecoratorExecutionEvent;
-import org.sonar.batch.events.DecoratorsPhaseEvent;
 import org.sonar.batch.events.EventBus;
 
 import java.util.Collection;
@@ -50,9 +48,9 @@ public class DecoratorsExecutor implements BatchComponent {
 
   public void execute(Project project) {
     Collection<Decorator> decorators = decoratorsSelector.select(project);
-    eventBus.fireEvent(new DecoratorsPhaseEvent(decorators, true));
+    eventBus.fireEvent(new DecoratorsPhaseEvent(Lists.newArrayList(decorators), true));
     decorateResource(project, decorators, true);
-    eventBus.fireEvent(new DecoratorsPhaseEvent(decorators, false));
+    eventBus.fireEvent(new DecoratorsPhaseEvent(Lists.newArrayList(decorators), false));
   }
 
   private DecoratorContext decorateResource(Resource resource, Collection<Decorator> decorators, boolean executeDecorators) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsPhaseEvent.java b/sonar-batch/src/main/java/org/sonar/batch/phases/DecoratorsPhaseEvent.java
new file mode 100644 (file)
index 0000000..dedbb82
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.phases;
+
+import org.sonar.api.batch.Decorator;
+import org.sonar.api.batch.events.DecoratorsPhaseHandler;
+
+import java.util.List;
+
+class DecoratorsPhaseEvent extends AbstractPhaseEvent<DecoratorsPhaseHandler>
+    implements org.sonar.api.batch.events.DecoratorsPhaseHandler.DecoratorsPhaseEvent {
+
+  private List<Decorator> decorators;
+
+  DecoratorsPhaseEvent(List<Decorator> decorators, boolean start) {
+    super(start);
+    this.decorators = decorators;
+  }
+
+  public List<Decorator> getDecorators() {
+    return decorators;
+  }
+
+  @Override
+  protected void dispatch(DecoratorsPhaseHandler handler) {
+    handler.onDecoratorsPhase(this);
+  }
+
+  @Override
+  protected Class getType() {
+    return DecoratorsPhaseHandler.class;
+  }
+
+}
index 4146e92ab75cfd9f7ebbed2f6265755c198b91f7..b93ce783751c8f67a802b75d8e5f7d063afbafce 100644 (file)
  */
 package org.sonar.batch.phases;
 
-import java.util.Arrays;
-import java.util.Collection;
-
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.resources.Project;
+import org.sonar.batch.events.EventBus;
 import org.sonar.batch.index.DefaultIndex;
 import org.sonar.batch.index.PersistenceManager;
 
+import java.util.Arrays;
+import java.util.Collection;
+
 public final class Phases {
 
   public static Collection<Class> getPhaseClasses() {
@@ -36,6 +37,7 @@ public final class Phases {
         InitializersExecutor.class);
   }
 
+  private EventBus eventBus;
   private DecoratorsExecutor decoratorsExecutor;
   private MavenPhaseExecutor mavenPhaseExecutor;
   private MavenPluginsConfigurator mavenPluginsConfigurator;
@@ -50,7 +52,8 @@ public final class Phases {
   public Phases(DecoratorsExecutor decoratorsExecutor, MavenPhaseExecutor mavenPhaseExecutor,
                 MavenPluginsConfigurator mavenPluginsConfigurator, InitializersExecutor initializersExecutor,
                 PostJobsExecutor postJobsExecutor, SensorsExecutor sensorsExecutor, UpdateStatusJob updateStatusJob,
-                PersistenceManager persistenceManager, SensorContext sensorContext, DefaultIndex index) {
+                PersistenceManager persistenceManager, SensorContext sensorContext, DefaultIndex index,
+                EventBus eventBus) {
     this.decoratorsExecutor = decoratorsExecutor;
     this.mavenPhaseExecutor = mavenPhaseExecutor;
     this.mavenPluginsConfigurator = mavenPluginsConfigurator;
@@ -67,6 +70,7 @@ public final class Phases {
    * Executed on each module
    */
   public void execute(Project project) {
+    eventBus.fireEvent(new ProjectAnalysisEvent(project, true));
     mavenPluginsConfigurator.execute(project);
     mavenPhaseExecutor.execute(project);
     initializersExecutor.execute(project);
@@ -82,6 +86,7 @@ public final class Phases {
       postJobsExecutor.execute(project, sensorContext);
     }
     cleanMemory();
+    eventBus.fireEvent(new ProjectAnalysisEvent(project, false));
   }
 
   private void cleanMemory() {
index 07ceaba617dc014b08f6ab04fc3b2320df7c7b31..e090966d42f9f1aee222a8a35f56a322208ff804 100644 (file)
  */
 package org.sonar.batch.phases;
 
-import java.util.IdentityHashMap;
-import java.util.List;
-import java.util.Map;
-
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.SystemUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.batch.Decorator;
+import org.sonar.api.batch.events.DecoratorExecutionHandler;
+import org.sonar.api.batch.events.DecoratorsPhaseHandler;
+import org.sonar.api.batch.events.SensorExecutionHandler;
+import org.sonar.api.batch.events.SensorsPhaseHandler;
 import org.sonar.api.utils.TimeProfiler;
-import org.sonar.batch.events.DecoratorExecutionEvent;
-import org.sonar.batch.events.DecoratorExecutionHandler;
-import org.sonar.batch.events.DecoratorsPhaseEvent;
-import org.sonar.batch.events.DecoratorsPhaseHandler;
-import org.sonar.batch.events.SensorExecutionEvent;
-import org.sonar.batch.events.SensorExecutionHandler;
-import org.sonar.batch.events.SensorsPhaseEvent;
-import org.sonar.batch.events.SensorsPhaseHandler;
+
+import java.util.IdentityHashMap;
+import java.util.List;
+import java.util.Map;
 
 public class PhasesTimeProfiler implements SensorExecutionHandler, DecoratorExecutionHandler, DecoratorsPhaseHandler, SensorsPhaseHandler {
 
@@ -47,13 +43,13 @@ public class PhasesTimeProfiler implements SensorExecutionHandler, DecoratorExec
   private DecoratorsProfiler decoratorsProfiler = new DecoratorsProfiler();
 
   public void onSensorsPhase(SensorsPhaseEvent event) {
-    if (event.isPhaseStart()) {
+    if (event.isStart()) {
       LOG.debug("Sensors : {}", StringUtils.join(event.getSensors(), " -> "));
     }
   }
 
   public void onSensorExecution(SensorExecutionEvent event) {
-    if (event.isStartExecution()) {
+    if (event.isStart()) {
       profiler.start("Sensor " + event.getSensor());
     } else {
       profiler.stop();
@@ -61,7 +57,7 @@ public class PhasesTimeProfiler implements SensorExecutionHandler, DecoratorExec
   }
 
   public void onDecoratorExecution(DecoratorExecutionEvent event) {
-    if (event.isStartExecution()) {
+    if (event.isStart()) {
       decoratorsProfiler.start(event.getDecorator());
     } else {
       decoratorsProfiler.stop();
@@ -69,7 +65,7 @@ public class PhasesTimeProfiler implements SensorExecutionHandler, DecoratorExec
   }
 
   public void onDecoratorsPhase(DecoratorsPhaseEvent event) {
-    if (event.isPhaseStart()) {
+    if (event.isStart()) {
       LOG.info("Execute decorators...");
       if (LOG.isDebugEnabled()) {
         LOG.debug("Decorators: {}", StringUtils.join(event.getDecorators(), " -> "));
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/ProjectAnalysisEvent.java b/sonar-batch/src/main/java/org/sonar/batch/phases/ProjectAnalysisEvent.java
new file mode 100644 (file)
index 0000000..50384d6
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.phases;
+
+import org.sonar.api.batch.events.ProjectAnalysisHandler;
+import org.sonar.api.resources.Project;
+
+class ProjectAnalysisEvent extends AbstractPhaseEvent<ProjectAnalysisHandler>
+    implements org.sonar.api.batch.events.ProjectAnalysisHandler.ProjectAnalysisEvent {
+
+  private final Project project;
+
+  ProjectAnalysisEvent(Project project, boolean start) {
+    super(start);
+    this.project = project;
+  }
+
+  public Project getProject() {
+    return project;
+  }
+
+  @Override
+  protected void dispatch(ProjectAnalysisHandler handler) {
+    handler.onProjectAnalysis(this);
+  }
+
+  @Override
+  protected Class getType() {
+    return ProjectAnalysisHandler.class;
+  }
+
+}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/SensorExecutionEvent.java b/sonar-batch/src/main/java/org/sonar/batch/phases/SensorExecutionEvent.java
new file mode 100644 (file)
index 0000000..13445da
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.phases;
+
+import org.sonar.api.batch.Sensor;
+import org.sonar.api.batch.events.SensorExecutionHandler;
+
+class SensorExecutionEvent extends AbstractPhaseEvent<SensorExecutionHandler>
+    implements org.sonar.api.batch.events.SensorExecutionHandler.SensorExecutionEvent {
+
+  private final Sensor sensor;
+
+  SensorExecutionEvent(Sensor sensor, boolean start) {
+    super(start);
+    this.sensor = sensor;
+  }
+
+  public Sensor getSensor() {
+    return sensor;
+  }
+
+  @Override
+  public void dispatch(SensorExecutionHandler handler) {
+    handler.onSensorExecution(this);
+  }
+
+  @Override
+  public Class getType() {
+    return SensorExecutionHandler.class;
+  }
+
+}
index ba767cd0d401cae02aa29f014a606834d74b28c3..474f53be1736ddd5c9aba69526340780c396aa8e 100644 (file)
@@ -19,8 +19,7 @@
  */
 package org.sonar.batch.phases;
 
-import java.util.Collection;
-
+import com.google.common.collect.Lists;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonar.api.BatchComponent;
@@ -33,8 +32,8 @@ import org.sonar.api.resources.Project;
 import org.sonar.api.utils.TimeProfiler;
 import org.sonar.batch.MavenPluginExecutor;
 import org.sonar.batch.events.EventBus;
-import org.sonar.batch.events.SensorExecutionEvent;
-import org.sonar.batch.events.SensorsPhaseEvent;
+
+import java.util.Collection;
 
 public class SensorsExecutor implements BatchComponent {
   private static final Logger LOG = LoggerFactory.getLogger(SensorsExecutor.class);
@@ -50,7 +49,7 @@ public class SensorsExecutor implements BatchComponent {
   }
 
   public void execute(Project project, SensorContext context) {
-    eventBus.fireEvent(new SensorsPhaseEvent(sensors, true));
+    eventBus.fireEvent(new SensorsPhaseEvent(Lists.newArrayList(sensors), true));
 
     for (Sensor sensor : sensors) {
       executeMavenPlugin(project, sensor);
@@ -60,7 +59,7 @@ public class SensorsExecutor implements BatchComponent {
       eventBus.fireEvent(new SensorExecutionEvent(sensor, false));
     }
 
-    eventBus.fireEvent(new SensorsPhaseEvent(sensors, false));
+    eventBus.fireEvent(new SensorsPhaseEvent(Lists.newArrayList(sensors), false));
   }
 
   private void executeMavenPlugin(Project project, Sensor sensor) {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/phases/SensorsPhaseEvent.java b/sonar-batch/src/main/java/org/sonar/batch/phases/SensorsPhaseEvent.java
new file mode 100644 (file)
index 0000000..a411e14
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.batch.phases;
+
+import org.sonar.api.batch.Sensor;
+import org.sonar.api.batch.events.SensorsPhaseHandler;
+
+import java.util.List;
+
+class SensorsPhaseEvent extends AbstractPhaseEvent<SensorsPhaseHandler>
+    implements org.sonar.api.batch.events.SensorsPhaseHandler.SensorsPhaseEvent {
+
+  private final List<Sensor> sensors;
+
+  SensorsPhaseEvent(List<Sensor> sensors, boolean start) {
+    super(start);
+    this.sensors = sensors;
+  }
+
+  public List<Sensor> getSensors() {
+    return sensors;
+  }
+
+  @Override
+  protected void dispatch(SensorsPhaseHandler handler) {
+    handler.onSensorsPhase(this);
+  }
+
+  @Override
+  protected Class getType() {
+    return SensorsPhaseHandler.class;
+  }
+
+}
index 5817a80a33693b7ed52c3650b7ea93ca19ec8ad3..ba91d5ba61cb83781905eea772653c681e29400f 100644 (file)
@@ -19,6 +19,8 @@
  */
 package org.sonar.batch.events;
 
+import org.sonar.api.batch.events.EventHandler;
+
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
@@ -45,7 +47,7 @@ public class EventBusTest {
     void onEvent(FirstEvent event);
   }
 
-  static class FirstEvent extends SonarEvent<FirstHandler> {
+  static class FirstEvent extends BatchEvent<FirstHandler> {
     @Override
     protected void dispatch(FirstHandler handler) {
       handler.onEvent(this);
@@ -61,7 +63,7 @@ public class EventBusTest {
     void onEvent(SecondEvent event);
   }
 
-  static class SecondEvent extends SonarEvent<SecondHandler> {
+  static class SecondEvent extends BatchEvent<SecondHandler> {
     @Override
     protected void dispatch(SecondHandler handler) {
       handler.onEvent(this);
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/DecoratorExecutionHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/DecoratorExecutionHandler.java
new file mode 100644 (file)
index 0000000..0db117a
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.api.batch.events;
+
+import org.sonar.api.batch.Decorator;
+
+/**
+ * @since 2.8
+ */
+public interface DecoratorExecutionHandler extends EventHandler {
+
+  /**
+   * This interface is not intended to be implemented by clients.
+   */
+  public interface DecoratorExecutionEvent {
+
+    Decorator getDecorator();
+
+    boolean isStart();
+
+    boolean isEnd();
+
+  }
+
+  /**
+   * Called before and after execution of {@link Decorator}.
+   */
+  void onDecoratorExecution(DecoratorExecutionEvent event);
+
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/DecoratorsPhaseHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/DecoratorsPhaseHandler.java
new file mode 100644 (file)
index 0000000..c6a2180
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.api.batch.events;
+
+import org.sonar.api.batch.Decorator;
+
+import java.util.List;
+
+/**
+ * @since 2.8
+ */
+public interface DecoratorsPhaseHandler extends EventHandler {
+
+  /**
+   * This interface is not intended to be implemented by clients.
+   */
+  public interface DecoratorsPhaseEvent {
+
+    /**
+     * @return list of Decorators in the order of execution
+     */
+    List<Decorator> getDecorators();
+
+    boolean isStart();
+
+    boolean isEnd();
+
+  }
+
+  /**
+   * Called before and after execution of all {@link Decorator}s.
+   */
+  void onDecoratorsPhase(DecoratorsPhaseEvent event);
+
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/EventHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/EventHandler.java
new file mode 100644 (file)
index 0000000..c05d945
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.api.batch.events;
+
+import org.sonar.api.BatchExtension;
+
+/**
+ * Marker interface for event handlers.
+ * This interface is not intended to be implemented by clients.
+ * 
+ * @since 2.8
+ */
+public interface EventHandler extends BatchExtension {
+
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/ProjectAnalysisHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/ProjectAnalysisHandler.java
new file mode 100644 (file)
index 0000000..110a4b5
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.api.batch.events;
+
+import org.sonar.api.resources.Project;
+
+/**
+ * @since 2.8
+ */
+public interface ProjectAnalysisHandler extends EventHandler {
+
+  /**
+   * This interface is not intended to be implemented by clients.
+   */
+  public interface ProjectAnalysisEvent {
+
+    Project getProject();
+
+    boolean isStart();
+
+    boolean isEnd();
+
+  }
+
+  /**
+   * Called before and after analysis of project.
+   */
+  void onProjectAnalysis(ProjectAnalysisEvent event);
+
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/SensorExecutionHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/SensorExecutionHandler.java
new file mode 100644 (file)
index 0000000..26d7859
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.api.batch.events;
+
+import org.sonar.api.batch.Sensor;
+
+/**
+ * @since 2.8
+ */
+public interface SensorExecutionHandler extends EventHandler {
+
+  /**
+   * This interface is not intended to be implemented by clients.
+   */
+  public interface SensorExecutionEvent {
+
+    Sensor getSensor();
+
+    boolean isStart();
+
+    boolean isEnd();
+
+  }
+
+  /**
+   * Called before and after execution of {@link Sensor}.
+   */
+  void onSensorExecution(SensorExecutionEvent event);
+
+}
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/SensorsPhaseHandler.java b/sonar-plugin-api/src/main/java/org/sonar/api/batch/events/SensorsPhaseHandler.java
new file mode 100644 (file)
index 0000000..8a54de8
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Sonar, open source software quality management tool.
+ * Copyright (C) 2008-2011 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * Sonar is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * Sonar is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with Sonar; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
+ */
+package org.sonar.api.batch.events;
+
+import org.sonar.api.batch.Sensor;
+
+import java.util.List;
+
+/**
+ * @since 2.8
+ */
+public interface SensorsPhaseHandler extends EventHandler {
+
+  /**
+   * This interface is not intended to be implemented by clients.
+   */
+  public interface SensorsPhaseEvent {
+
+    /**
+     * @return list of Sensors in the order of execution
+     */
+    List<Sensor> getSensors();
+
+    boolean isStart();
+
+    boolean isEnd();
+
+  }
+
+  /**
+   * Called before and after execution of all {@link Sensor}s.
+   */
+  void onSensorsPhase(SensorsPhaseEvent event);
+
+}