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();
}
}