From 29ba935779aa54017b35ebae7f742677e06ed403 Mon Sep 17 00:00:00 2001 From: Carlos Garcia Date: Tue, 30 Jul 2013 13:39:35 +0200 Subject: [PATCH] JCLOUDS-208: The datacenter link has been added to the Limits object construction. This link is used in the 2.4 version of the Abiquo API to establish a relation between an enterprise and the datacenter it is restricted to. --- .../abiquo/domain/enterprise/Enterprise.java | 2 +- .../jclouds/abiquo/domain/enterprise/Limits.java | 33 ++++++++++++++++++---- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java index ac2400a..c1fb3c5 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Enterprise.java @@ -360,7 +360,7 @@ public class Enterprise extends DomainWithLimitsWrapper { try { // Create new limits - Limits limits = Limits.builder(context).build(); + Limits limits = Limits.builder(context, datacenter).build(); // Save new limits dto = context.getApi().getEnterpriseApi().createLimits(target, datacenter.unwrap(), limits.unwrap()); diff --git a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Limits.java b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Limits.java index d8a3d26..0b738a4 100644 --- a/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Limits.java +++ b/abiquo/src/main/java/org/jclouds/abiquo/domain/enterprise/Limits.java @@ -16,12 +16,19 @@ */ package org.jclouds.abiquo.domain.enterprise; +import static com.google.common.base.Preconditions.checkNotNull; + import org.jclouds.abiquo.AbiquoApi; import org.jclouds.abiquo.domain.DomainWithLimitsWrapper; import org.jclouds.abiquo.domain.builder.LimitsBuilder; +import org.jclouds.abiquo.domain.infrastructure.Datacenter; +import org.jclouds.abiquo.reference.ValidationErrors; +import org.jclouds.abiquo.reference.rest.ParentLinkName; import org.jclouds.rest.ApiContext; +import com.abiquo.model.rest.RESTLink; import com.abiquo.server.core.enterprise.DatacenterLimitsDto; +import com.abiquo.server.core.infrastructure.DatacenterDto; /** * Adds high level functionality to {@link DatacenterLimitsDto}. @@ -57,8 +64,8 @@ public class Limits extends DomainWithLimitsWrapper { // Builder - public static Builder builder(final ApiContext context) { - return new Builder(context); + public static Builder builder(final ApiContext context, Datacenter datacenter) { + return new Builder(context, datacenter); } public static class Builder extends LimitsBuilder { @@ -67,10 +74,12 @@ public class Limits extends DomainWithLimitsWrapper { protected Long repositorySoft = Long.valueOf(DEFAULT_LIMITS); protected Long repositoryHard = Long.valueOf(DEFAULT_LIMITS); + + protected Datacenter datacenter; - public Builder(final ApiContext context) { - super(); - this.context = context; + public Builder(final ApiContext context, final Datacenter datacenter) { + this.context = checkNotNull(context, "missing context object"); + this.datacenter = checkNotNull(datacenter, "missing datacenter object"); } public Builder repositoryLimits(final long soft, final long hard) { @@ -89,6 +98,10 @@ public class Limits extends DomainWithLimitsWrapper { dto.setPublicIPLimits(publicIpsSoft, publicIpsHard); dto.setRepositoryHardLimitsInMb(repositoryHard); dto.setRepositorySoftLimitsInMb(repositorySoft); + + // Establish the relation with the physical datacenter + dto.addLink(new RESTLink(ParentLinkName.DATACENTER, checkNotNull(datacenter.unwrap().getEditLink(), + "missing edit link").getHref())); Limits limits = new Limits(context, dto); @@ -96,7 +109,8 @@ public class Limits extends DomainWithLimitsWrapper { } public static Builder fromEnterprise(final Limits in) { - return Limits.builder(in.context).ramLimits(in.getRamSoftLimitInMb(), in.getRamHardLimitInMb()) + return Limits.builder(in.context, in.getDatacenter()) + .ramLimits(in.getRamSoftLimitInMb(), in.getRamHardLimitInMb()) .cpuCountLimits(in.getCpuCountSoftLimit(), in.getCpuCountHardLimit()) .hdLimitsInMb(in.getHdSoftLimitInMb(), in.getHdHardLimitInMb()) .storageLimits(in.getStorageSoft(), in.getStorageHard()) @@ -132,6 +146,13 @@ public class Limits extends DomainWithLimitsWrapper { public void setRepositorySoft(final long repositorySoft) { target.setRepositorySoftLimitsInMb(repositorySoft); } + + public Datacenter getDatacenter() { + Integer datacenterId = target.getIdFromLink(ParentLinkName.DATACENTER); + checkNotNull(datacenterId, ValidationErrors.MISSING_REQUIRED_LINK); + DatacenterDto dto = context.getApi().getInfrastructureApi().getDatacenter(datacenterId); + return wrap(context, Datacenter.class, dto); + } @Override public String toString() { -- 1.7.12.4 (Apple Git-37)