killbill-memoizeit

Details

diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PluginInfoJson.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PluginInfoJson.java
index 0e2f116..0aa0ad5 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PluginInfoJson.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/json/PluginInfoJson.java
@@ -17,23 +17,93 @@
 
 package org.killbill.billing.jaxrs.json;
 
-import java.util.HashMap;
-import java.util.Map;
 import java.util.Set;
 
+import org.killbill.billing.osgi.api.PluginInfo;
+import org.killbill.billing.osgi.api.PluginInfo.PluginServiceInfo;
+
+import com.fasterxml.jackson.annotation.JsonCreator;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+
 public class PluginInfoJson {
 
-    private final Map<String, Iterable<String>> registeredPlugins;
+    private final String bundleSymbolicName;
+
+    private final String pluginName;
+
+    private final String version;
+
+    private final boolean running;
+
+    private final Set<PluginServiceInfoJson> services;
+
+    @JsonCreator
+    public PluginInfoJson(@JsonProperty("bundleSymbolicName") final String bundleSymbolicName,
+                          @JsonProperty("pluginName") final String pluginName,
+                          @JsonProperty("version") final String version,
+                          @JsonProperty("running") final boolean running,
+                          @JsonProperty("services") final Set<PluginServiceInfoJson> services) {
+        this.bundleSymbolicName = bundleSymbolicName;
+        this.pluginName = pluginName;
+        this.version = version;
+        this.running = running;
+        this.services = services;
+    }
+
+    public PluginInfoJson(final PluginInfo input) {
+        this(input.getBundleSymbolicName(),
+             input.getPluginName(),
+             input.getVersion(),
+             input.isRunning(),
+             ImmutableSet.copyOf(Iterables.transform(input.getServices(), new Function<PluginServiceInfo, PluginServiceInfoJson>() {
+                 @Override
+                 public PluginServiceInfoJson apply(final PluginServiceInfo input) {
+                     return new PluginServiceInfoJson(input.getServiceTypeName(), input.getRegistrationName());
+                 }
+             })));
+    }
+
+    public String getBundleSymbolicName() {
+        return bundleSymbolicName;
+    }
+
+    public String getPluginName() {
+        return pluginName;
+    }
+
+    public String getVersion() {
+        return version;
+    }
 
-    public PluginInfoJson() {
-        this.registeredPlugins = new HashMap<String, Iterable<String>>();
+    public boolean isRunning() {
+        return running;
     }
 
-    public void addEntriesForType(final String type, final Set<String> entries) {
-        registeredPlugins.put(type, entries);
+    public Set<PluginServiceInfoJson> getServices() {
+        return services;
     }
 
-    public Map<String, Iterable<String>> getRegisteredPlugins() {
-        return registeredPlugins;
+    public static class PluginServiceInfoJson {
+
+        private final String serviceTypeName;
+        private final String registrationName;
+
+        @JsonCreator
+        public PluginServiceInfoJson(@JsonProperty("serviceTypeName") final String serviceTypeName,
+                                     @JsonProperty("registrationName") final String registrationName) {
+            this.serviceTypeName = serviceTypeName;
+            this.registrationName = registrationName;
+        }
+
+        public String getServiceTypeName() {
+            return serviceTypeName;
+        }
+
+        public String getRegistrationName() {
+            return registrationName;
+        }
     }
 }
diff --git a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginInfoResource.java b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginInfoResource.java
index 71293c5..38f19b4 100644
--- a/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginInfoResource.java
+++ b/jaxrs/src/main/java/org/killbill/billing/jaxrs/resources/PluginInfoResource.java
@@ -17,6 +17,7 @@
 
 package org.killbill.billing.jaxrs.resources;
 
+import javax.annotation.Nullable;
 import javax.inject.Inject;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.GET;
@@ -29,8 +30,10 @@ import javax.ws.rs.core.Response.Status;
 import org.killbill.billing.account.api.AccountUserApi;
 import org.killbill.billing.entitlement.api.SubscriptionApiException;
 import org.killbill.billing.jaxrs.json.BundleJson;
+import org.killbill.billing.jaxrs.json.PluginInfoJson;
 import org.killbill.billing.jaxrs.util.Context;
 import org.killbill.billing.jaxrs.util.JaxrsUriBuilder;
+import org.killbill.billing.osgi.api.PluginInfo;
 import org.killbill.billing.osgi.api.PluginsInfoApi;
 import org.killbill.billing.payment.api.PaymentApi;
 import org.killbill.billing.util.api.AuditUserApi;
@@ -39,7 +42,9 @@ import org.killbill.billing.util.api.TagUserApi;
 import org.killbill.clock.Clock;
 
 import com.codahale.metrics.annotation.Timed;
+import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
 import com.wordnik.swagger.annotations.Api;
 import com.wordnik.swagger.annotations.ApiOperation;
 
@@ -71,7 +76,12 @@ public class PluginInfoResource extends JaxRsResourceBase {
     @ApiOperation(value = "Retrieve the list of registered plugins", response = BundleJson.class)
     public Response getBundle(@PathParam("bundleId") final String bundleId,
                               @javax.ws.rs.core.Context final HttpServletRequest request) throws SubscriptionApiException {
-        return Response.status(Status.OK).entity(ImmutableList.copyOf(pluginsInfoApi.getPluginsInfo())).build();
+        return Response.status(Status.OK).entity(ImmutableList.copyOf(Iterables.transform(pluginsInfoApi.getPluginsInfo(), new Function<PluginInfo, PluginInfoJson>() {
+            @Override
+            public PluginInfoJson apply(final PluginInfo input) {
+                return new PluginInfoJson(input);
+            }
+        }))).build();
     }
 
 }