From d553716cda6e06a40716a58a847aa288e3bcfe23 Mon Sep 17 00:00:00 2001 From: Jonathan Knoblauch Date: Fri, 27 Jan 2017 16:42:25 +0100 Subject: [PATCH] Feature extend system management resource with custom data (#423) * Added map to system management and mgmt resource to extend the the rest resource with custom data Signed-off-by: Jonathan Philip Knoblauch * Lazy initialization of hash map and typo fix Signed-off-by: Jonathan Philip Knoblauch * Renamed the map to usageData Signed-off-by: Jonathan Philip Knoblauch * Adapted hashcode and equals and now returning empty map Signed-off-by: Jonathan Philip Knoblauch * Reduced duplicated code Signed-off-by: Jonathan Philip Knoblauch * Removed the if statement Signed-off-by: Jonathan Philip Knoblauch * Added separated method for lazy initialization Signed-off-by: Jonathan Philip Knoblauch --- .../MgmtSystemTenantServiceUsage.java | 11 +++ .../MgmtSystemManagementResource.java | 4 +- .../repository/report/model/TenantUsage.java | 74 +++++++++---------- 3 files changed, 51 insertions(+), 38 deletions(-) diff --git a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java index c3e37421d..f03f3ca75 100644 --- a/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java +++ b/hawkbit-mgmt-api/src/main/java/org/eclipse/hawkbit/mgmt/json/model/systemmanagement/MgmtSystemTenantServiceUsage.java @@ -8,6 +8,8 @@ */ package org.eclipse.hawkbit.mgmt.json.model.systemmanagement; +import java.util.Map; + import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; @@ -25,6 +27,7 @@ public class MgmtSystemTenantServiceUsage { private long artifacts; private long actions; private long overallArtifactVolumeInBytes; + private Map usageData; /** * Constructor. @@ -71,4 +74,12 @@ public class MgmtSystemTenantServiceUsage { return tenantName; } + public Map getUsageData() { + return usageData; + } + + public void setUsageData(final Map usageData) { + this.usageData = usageData; + } + } diff --git a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java index 3392d2659..9d5f7fda3 100644 --- a/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java +++ b/hawkbit-mgmt-resource/src/main/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtSystemManagementResource.java @@ -87,7 +87,9 @@ public class MgmtSystemManagementResource implements MgmtSystemManagementRestApi result.setArtifacts(tenant.getArtifacts()); result.setOverallArtifactVolumeInBytes(tenant.getOverallArtifactVolumeInBytes()); result.setTargets(tenant.getTargets()); - + if (!tenant.getUsageData().isEmpty()) { + result.setUsageData(tenant.getUsageData()); + } return result; } diff --git a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java index 933ca564b..b813fa75e 100644 --- a/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java +++ b/hawkbit-repository/hawkbit-repository-api/src/main/java/org/eclipse/hawkbit/repository/report/model/TenantUsage.java @@ -8,6 +8,11 @@ */ package org.eclipse.hawkbit.repository.report.model; +import java.util.Collections; +import java.util.Map; + +import com.google.common.collect.Maps; + /** * System usage stats element for a tenant. * @@ -19,6 +24,7 @@ public class TenantUsage { private long artifacts; private long actions; private long overallArtifactVolumeInBytes; + private Map usageData; /** * Constructor. @@ -26,85 +32,74 @@ public class TenantUsage { * @param tenantName */ public TenantUsage(final String tenantName) { - super(); this.tenantName = tenantName; } - /** - * @return name of the tenant - */ public String getTenantName() { return tenantName; } - /** - * @return number of targets of the tenant - */ public long getTargets() { return targets; } - /** - * @param targets - * of the tenant - * @return updated tenant stats element - */ public TenantUsage setTargets(final long targets) { this.targets = targets; return this; } - /** - * @return number of undeleted artifacts of the tenant - */ public long getArtifacts() { return artifacts; } - /** - * @param artifacts - * of tenant - * @return updated tenant stats element - */ + public Map getUsageData() { + return Collections.unmodifiableMap(getLazyUsageData()); + } + + private Map getLazyUsageData() { + if (usageData == null) { + usageData = Maps.newHashMap(); + } + return usageData; + } + public TenantUsage setArtifacts(final long artifacts) { this.artifacts = artifacts; return this; } - /** - * @return current overallArtifactVolumeInBytes - */ public long getOverallArtifactVolumeInBytes() { return overallArtifactVolumeInBytes; } - /** - * @param overallArtifactVolumeInBytes - * of the tenant in bytes - * @return updated tenant stats element - */ public TenantUsage setOverallArtifactVolumeInBytes(final long overallArtifactVolumeInBytes) { this.overallArtifactVolumeInBytes = overallArtifactVolumeInBytes; return this; } - /** - * @return number of actions of tenant - */ public long getActions() { return actions; } - /** - * @param actions - * of the tenant - * @return updated tenant stats element - */ public TenantUsage setActions(final long actions) { this.actions = actions; return this; } + /** + * Add a key and value as usage data to the system usage stats. + * + * @param key + * the key to set + * @param value + * the value to set + * @return tenant stats element with new usage added + */ + public TenantUsage addUsageData(final String key, final String value) { + getLazyUsageData().put(key, value); + return this; + } + @Override public int hashCode() { final int prime = 31; @@ -114,6 +109,7 @@ public class TenantUsage { result = prime * result + (int) (overallArtifactVolumeInBytes ^ (overallArtifactVolumeInBytes >>> 32)); result = prime * result + (int) (targets ^ (targets >>> 32)); result = prime * result + ((tenantName == null) ? 0 : tenantName.hashCode()); + result = prime * result + ((usageData == null) ? 0 : usageData.hashCode()); return result; } @@ -141,6 +137,9 @@ public class TenantUsage { if (targets != other.targets) { return false; } + if (!this.getUsageData().equals(other.getUsageData())) { + return false; + } if (tenantName == null) { if (other.tenantName != null) { return false; @@ -154,7 +153,8 @@ public class TenantUsage { @Override public String toString() { return "TenantUsage [tenantName=" + tenantName + ", targets=" + targets + ", artifacts=" + artifacts - + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes + "]"; + + ", actions=" + actions + ", overallArtifactVolumeInBytes=" + overallArtifactVolumeInBytes + + ", usageData=" + usageData + "]"; } }