SLING-6297 - Switch to standard OSGi annotation in Metrics

git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@1770126 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/pom.xml b/pom.xml
index 3a45b75..31cfea9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,11 +64,21 @@
               org.apache.felix.inventory;version="[1.0.0,2)"
             </DynamicImport-Package>
           </instructions>
+          <!-- Export SCR metadata to classpath to have them available in unit tests -->
+          <exportScr>true</exportScr>
         </configuration>
-      </plugin>
-      <plugin>
-        <groupId>org.apache.felix</groupId>
-        <artifactId>maven-scr-plugin</artifactId>
+        <executions>
+          <!-- Configure extra execution of 'manifest' in process-classes phase to make sure SCR metadata is generated before unit test runs -->
+          <execution>
+            <id>scr-metadata</id>
+            <goals>
+              <goal>manifest</goal>
+            </goals>
+            <configuration>
+              <supportIncrementalBuild>true</supportIncrementalBuild>
+            </configuration>
+          </execution>
+        </executions>
       </plugin>
     </plugins>
   </build>
@@ -91,14 +101,10 @@
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>osgi.core</artifactId>
-      <version>6.0.0</version>
-      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>osgi.cmpn</artifactId>
-      <version>6.0.0</version>
-      <scope>provided</scope>
     </dependency>
 
     <dependency>
@@ -141,6 +147,7 @@
       <groupId>org.mockito</groupId>
       <artifactId>mockito-core</artifactId>
       <version>1.10.19</version>
+      <scope>test</scope>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
diff --git a/src/main/java/org/apache/sling/commons/metrics/Counter.java b/src/main/java/org/apache/sling/commons/metrics/Counter.java
index 8269d5b..64730dd 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Counter.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Counter.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ProviderType;
+
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * An incrementing and decrementing counter metric.
diff --git a/src/main/java/org/apache/sling/commons/metrics/Counting.java b/src/main/java/org/apache/sling/commons/metrics/Counting.java
index 890d650..f974ea6 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Counting.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Counting.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ProviderType;
+
+import org.osgi.annotation.versioning.ProviderType;
 
 @ProviderType
 public interface Counting {
diff --git a/src/main/java/org/apache/sling/commons/metrics/Gauge.java b/src/main/java/org/apache/sling/commons/metrics/Gauge.java
index ac723a6..9813120 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Gauge.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Gauge.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ConsumerType;
+
+import org.osgi.annotation.versioning.ConsumerType;
 
 /**
  * A gauge metric is an instantaneous reading of a particular value. To instrument a queue's depth,
diff --git a/src/main/java/org/apache/sling/commons/metrics/Histogram.java b/src/main/java/org/apache/sling/commons/metrics/Histogram.java
index 7f87cdc..d78f3a8 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Histogram.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Histogram.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ProviderType;
+
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * A metric which calculates the distribution of a value.
diff --git a/src/main/java/org/apache/sling/commons/metrics/Meter.java b/src/main/java/org/apache/sling/commons/metrics/Meter.java
index 3fef3f8..6674fbf 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Meter.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Meter.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ProviderType;
+
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * A meter metric which measures mean throughput
diff --git a/src/main/java/org/apache/sling/commons/metrics/Metric.java b/src/main/java/org/apache/sling/commons/metrics/Metric.java
index b8a12bb..bf07b69 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Metric.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Metric.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ProviderType;
+
+import org.osgi.annotation.versioning.ProviderType;
 
 @ProviderType
 public interface Metric {
diff --git a/src/main/java/org/apache/sling/commons/metrics/MetricsService.java b/src/main/java/org/apache/sling/commons/metrics/MetricsService.java
index 56e87e6..5bf4eae 100644
--- a/src/main/java/org/apache/sling/commons/metrics/MetricsService.java
+++ b/src/main/java/org/apache/sling/commons/metrics/MetricsService.java
@@ -19,7 +19,8 @@
 
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.ProviderType;
+
+import org.osgi.annotation.versioning.ProviderType;
 
 /**
  * The {@code MetricsService} enables creation of various types of {@code Metric}.
diff --git a/src/main/java/org/apache/sling/commons/metrics/Timer.java b/src/main/java/org/apache/sling/commons/metrics/Timer.java
index 8de1707..f5d79cb 100644
--- a/src/main/java/org/apache/sling/commons/metrics/Timer.java
+++ b/src/main/java/org/apache/sling/commons/metrics/Timer.java
@@ -22,7 +22,8 @@
 import java.io.Closeable;
 import java.util.concurrent.TimeUnit;
 
-import aQute.bnd.annotation.ProviderType;
+import org.osgi.annotation.versioning.ProviderType;
+
 
 /**
  * A timer metric which aggregates timing durations and provides duration statistics.
diff --git a/src/main/java/org/apache/sling/commons/metrics/internal/MetricWebConsolePlugin.java b/src/main/java/org/apache/sling/commons/metrics/internal/MetricWebConsolePlugin.java
index d0321ef..0ebc173 100644
--- a/src/main/java/org/apache/sling/commons/metrics/internal/MetricWebConsolePlugin.java
+++ b/src/main/java/org/apache/sling/commons/metrics/internal/MetricWebConsolePlugin.java
@@ -47,30 +47,27 @@
 import org.apache.commons.io.output.WriterOutputStream;
 import org.apache.felix.inventory.Format;
 import org.apache.felix.inventory.InventoryPrinter;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
 import org.osgi.util.tracker.ServiceTracker;
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Component
-@Service(value = {InventoryPrinter.class, Servlet.class})
-@Properties({
-        @Property(name = "felix.webconsole.label", value = "slingmetrics"),
-        @Property(name = "felix.webconsole.title", value = "Metrics"),
-        @Property(name = "felix.webconsole.category", value = "Sling"),
-        @Property(name = InventoryPrinter.FORMAT, value = {"TEXT" , "JSON"}),
-        @Property(name = InventoryPrinter.NAME, value = "slingmetrics"),
-        @Property(name = InventoryPrinter.TITLE, value = "Sling Metrics"),
-        @Property(name = InventoryPrinter.WEBCONSOLE, boolValue = true)
-})
+@Component(service = {InventoryPrinter.class, Servlet.class},
+        property = {
+                "felix.webconsole.label=slingmetrics",
+                "felix.webconsole.title=Metrics",
+                "felix.webconsole.category=Sling",
+                InventoryPrinter.FORMAT + "=TEXT",
+                InventoryPrinter.FORMAT + "=JSON",
+                InventoryPrinter.TITLE + "=Sling Metrics",
+                InventoryPrinter.NAME + "=slingmetrics"
+        }
+)
 public class MetricWebConsolePlugin extends HttpServlet implements
         InventoryPrinter, ServiceTrackerCustomizer<MetricRegistry, MetricRegistry>{
     /**
@@ -82,7 +79,7 @@
     private BundleContext context;
     private ServiceTracker<MetricRegistry, MetricRegistry> tracker;
     private ConcurrentMap<ServiceReference, MetricRegistry> registries
-            = new ConcurrentHashMap<ServiceReference, MetricRegistry>();
+            = new ConcurrentHashMap<>();
 
     private TimeUnit rateUnit = TimeUnit.SECONDS;
     private TimeUnit durationUnit = TimeUnit.MILLISECONDS;
@@ -94,7 +91,7 @@
     private void activate(BundleContext context){
         this.context = context;
         this.timeUnit = new MetricTimeUnits(rateUnit, durationUnit, specificRateUnits, specificDurationUnits);
-        tracker = new ServiceTracker<MetricRegistry, MetricRegistry>(context, MetricRegistry.class, this);
+        tracker = new ServiceTracker<>(context, MetricRegistry.class, this);
         tracker.open();
     }
 
diff --git a/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java b/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
index 1bc6514..cec64bb 100644
--- a/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
+++ b/src/main/java/org/apache/sling/commons/metrics/internal/MetricsServiceImpl.java
@@ -33,11 +33,6 @@
 
 import com.codahale.metrics.JmxReporter;
 import com.codahale.metrics.MetricRegistry;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Deactivate;
-import org.apache.felix.scr.annotations.Reference;
-import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.sling.commons.metrics.Meter;
 import org.apache.sling.commons.metrics.MetricsService;
 import org.apache.sling.commons.metrics.Timer;
@@ -47,8 +42,13 @@
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Deactivate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
 
-@Component
+@Component(service = {}, immediate = true)
 public class MetricsServiceImpl implements MetricsService {
     private final List<ServiceRegistration> regs = new ArrayList<>();
     private final ConcurrentMap<String, Metric> metrics = new ConcurrentHashMap<>();
@@ -56,7 +56,7 @@
     private final BundleMetricsMapper metricsMapper = new BundleMetricsMapper(registry);
     private GaugeManager gaugeManager;
 
-    @Reference(cardinality = ReferenceCardinality.OPTIONAL_UNARY)
+    @Reference(cardinality = ReferenceCardinality.OPTIONAL)
     private MBeanServer server;
 
     private JmxReporter reporter;
diff --git a/src/main/java/org/apache/sling/commons/metrics/package-info.java b/src/main/java/org/apache/sling/commons/metrics/package-info.java
index 5b24541..3d6a101 100644
--- a/src/main/java/org/apache/sling/commons/metrics/package-info.java
+++ b/src/main/java/org/apache/sling/commons/metrics/package-info.java
@@ -23,9 +23,7 @@
  * @version 1.0
  */
 @Version("1.1.0")
-@Export(optional = "provide:=true")
 package org.apache.sling.commons.metrics;
 
-import aQute.bnd.annotation.Export;
-import aQute.bnd.annotation.Version;
 
+import org.osgi.annotation.versioning.Version;
\ No newline at end of file