Martin Mucha has uploaded a new change for review.

Change subject: restapi: added reference DataCenter-->MacPool
......................................................................

restapi: added reference DataCenter-->MacPool

* added link to used MacPool
* altered "*StoragePoolCommand" classes to work with MacPools.

Change-Id: If75e2d632ca47c274ad303ce9833d1e536521071
Bug-Url: https://bugzilla.redhat.com/1078844
Signed-off-by: Martin Mucha <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolsByDataCenterIdQuery.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DcRelatedMacPoolsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDcRelatedMacPoolsResource.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DataCenterMapper.java
10 files changed, 318 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/28707/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolsByDataCenterIdQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolsByDataCenterIdQuery.java
new file mode 100644
index 0000000..f78c3eb
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetMacPoolsByDataCenterIdQuery.java
@@ -0,0 +1,20 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.businessentities.MacPool;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.dao.MacPoolDAO;
+
+public class GetMacPoolsByDataCenterIdQuery extends 
QueriesCommandBase<IdQueryParameters> {
+
+    public GetMacPoolsByDataCenterIdQuery(IdQueryParameters parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        final MacPoolDAO macPoolDao = getDbFacade().getMacPoolDao();
+        MacPool macPool = 
macPoolDao.getByDataCenterId(getParameters().getId());
+
+        getQueryReturnValue().setReturnValue(macPool);
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java
index 203f02d..76caf4a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/AddEmptyStoragePoolCommand.java
@@ -6,11 +6,13 @@
 import org.ovirt.engine.core.bll.AddVdsGroupCommand;
 import org.ovirt.engine.core.bll.MultiLevelAdministrationHandler;
 import org.ovirt.engine.core.bll.network.cluster.NetworkHelper;
+import org.ovirt.engine.core.bll.network.macpoolmanager.MacPoolPerDC;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.StoragePoolManagementParameter;
+import org.ovirt.engine.core.common.businessentities.MacPool;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.network.Network;
@@ -27,18 +29,36 @@
     }
 
     protected void addStoragePoolToDb() {
-        getStoragePool().setId(Guid.newGuid());
-        getStoragePool().setStatus(StoragePoolStatus.Uninitialized);
-        getStoragePoolDAO().save(getStoragePool());
+        final StoragePool storagePool = getStoragePool();
+        storagePool.setId(Guid.newGuid());
+        storagePool.setStatus(StoragePoolStatus.Uninitialized);
+
+        final CreateMacPoolOrUseShared createOrGetMacPool = new 
CreateMacPoolOrUseShared(storagePool.getMacPoolId());
+        if (!createOrGetMacPool.calculateMacPoolId()) {
+            //handles situation when db content changed since canDoAction().
+            //getReturnValue().setFault() is probably ignored and does not 
pass message to rest client.
+            throw new IllegalArgumentException("Wrong MacPool definition");
+        }
+
+        storagePool.setMacPoolId(createOrGetMacPool.getMacPoolIdToUse());
+        getStoragePoolDAO().save(storagePool);
     }
 
     @Override
     protected void executeCommand() {
         setDataCenterDetails();
         addStoragePoolToDb();
+
         getReturnValue().setActionReturnValue(getStoragePool().getId());
         addDefaultNetworks();
         setSucceeded(true);
+    }
+
+    @Override
+    public void rollback() {
+        super.rollback();
+        //try to remove pool if it was by any chance created before 
error/rollback occurred.
+        MacPoolPerDC.getInstance().removePool(getStoragePool().getId());
     }
 
     private void setDataCenterDetails() {
@@ -76,18 +96,28 @@
     protected boolean canDoAction() {
         boolean result = true;
         // set version to latest supported version if not given
-        if (getStoragePool().getcompatibility_version().isNotValid()) {
-            getStoragePool().setcompatibility_version(Version.getLast());
+        final StoragePool storagePool = getStoragePool();
+
+        if (storagePool.getcompatibility_version().isNotValid()) {
+            storagePool.setcompatibility_version(Version.getLast());
         }
-        if (result && !(isStoragePoolUnique(getStoragePool().getName()))) {
+        if (!(isStoragePoolUnique(storagePool.getName()))) {
             result = false;
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_STORAGE_POOL_NAME_ALREADY_EXIST);
         } else if (!checkStoragePoolNameLengthValid()) {
             result = false;
-        } else if 
(!VersionSupport.checkVersionSupported(getStoragePool().getcompatibility_version()))
 {
+        } else if 
(!VersionSupport.checkVersionSupported(storagePool.getcompatibility_version())) 
{
             
addCanDoActionMessage(VersionSupport.getUnsupportedVersionMessage());
             result = false;
         }
+
+        final CreateMacPoolOrUseShared createOrGetMacPool = new 
CreateMacPoolOrUseShared(storagePool.getMacPoolId());
+        final boolean validRequest = createOrGetMacPool.calculateMacPoolId();
+        if (!validRequest) {
+            result = false;
+            addCanDoActionMessage(createOrGetMacPool.getFaultMessage());
+        }
+
         return result;
     }
 
@@ -98,4 +128,48 @@
                 getActionType().getActionGroup()));
     }
 
+    private class CreateMacPoolOrUseShared {
+        private final Guid requestedMacPoolId;
+        private Guid macPoolIdToUse;
+        private VdcBllMessages faultMessage;
+
+        public CreateMacPoolOrUseShared(Guid requestedMacPoolId) {
+            this.requestedMacPoolId = requestedMacPoolId;
+        }
+
+        public boolean calculateMacPoolId() {
+            if (requestedMacPoolId == null) {
+                macPoolIdToUse = getMacPoolDAO().getDefaultPool().getId();
+            } else {
+                checkAndGetSharedMacPoolId();
+            }
+
+            return faultMessage == null;
+        }
+
+        protected void illegalArgumentFault(VdcBllMessages faultMessage) {
+            this.faultMessage = faultMessage;
+        }
+
+        private void checkAndGetSharedMacPoolId() {
+            //check whether requested pool is shared one.
+            final MacPool requestedMacPool = 
getMacPoolDAO().get(requestedMacPoolId);
+            if (!requestedMacPool.isShared()) {
+                final int dcUsageCount = 
getMacPoolDAO().getDCUsageCount(requestedMacPoolId);
+                if (dcUsageCount != 0) {
+                    
illegalArgumentFault(VdcBllMessages.MAC_POOL_TRYING_TO_REUSE_NON_SHARED_POOL);
+                }
+            } else {
+                macPoolIdToUse = requestedMacPoolId;
+            }
+        }
+
+        public Guid getMacPoolIdToUse() {
+            return macPoolIdToUse;
+        }
+
+        public VdcBllMessages getFaultMessage() {
+            return faultMessage;
+        }
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
index 9c24021..88d99d4 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/RemoveStoragePoolCommand.java
@@ -18,6 +18,7 @@
 import org.ovirt.engine.core.common.action.RemoveStorageDomainParameters;
 import org.ovirt.engine.core.common.action.StoragePoolParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.MacPool;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
@@ -49,6 +50,7 @@
 public class RemoveStoragePoolCommand<T extends StoragePoolParametersBase> 
extends StorageHandlingCommandBase<T> {
 
     private Map<String, Pair<String, String>> sharedLocks;
+    private MacPool oldMacPool;
 
     public RemoveStoragePoolCommand(T parameters) {
         super(parameters);
@@ -85,11 +87,28 @@
             }
         }
 
-        getStoragePoolDAO().remove(getStoragePool().getId());
-        
MacPoolPerDC.getInstance().poolForDataCenter(getStoragePoolId()).freeMacs(macsToRemove);
+        final Guid storagePoolId = getStoragePoolId();
+        final Guid oldMacPoolId = getStoragePool().getMacPoolId();
+        oldMacPool = getMacPoolDAO().get(oldMacPoolId);
+
+        if (!oldMacPool.isShared()) {
+            getMacPoolDAO().remove(oldMacPoolId);
+        }
+
+        getStoragePoolDAO().remove(storagePoolId);
+        
MacPoolPerDC.getInstance().poolForDataCenter(storagePoolId).freeMacs(macsToRemove);
+        MacPoolPerDC.getInstance().removePool(storagePoolId);
+
         setSucceeded(true);
     }
 
+    @Override
+    public void rollback() {
+        super.rollback();
+        //try to remove pool if it was by any chance created before 
error/rollback occurred.
+        MacPoolPerDC.getInstance().createPool(oldMacPool);
+    }
+
     private void removeNetworks() {
         final List<Network> networks = 
getNetworkDAO().getAllForDataCenter(getStoragePoolId());
         for (Network network : networks) {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
index ce5f971..109959c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/UpdateStoragePoolCommand.java
@@ -6,12 +6,14 @@
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute;
 import org.ovirt.engine.core.bll.RenamedEntityInfoProvider;
+import org.ovirt.engine.core.bll.network.macpoolmanager.MacPoolPerDC;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.bll.validator.NetworkValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.StoragePoolManagementParameter;
+import org.ovirt.engine.core.common.businessentities.MacPool;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageDomainStatic;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
@@ -32,6 +34,7 @@
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
+import org.ovirt.engine.core.dao.MacPoolDAO;
 import org.ovirt.engine.core.dao.StorageDomainStaticDAO;
 import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.utils.NetworkUtils;
@@ -41,6 +44,9 @@
 @NonTransactiveCommandAttribute
 public class UpdateStoragePoolCommand<T extends 
StoragePoolManagementParameter> extends
         StoragePoolManagementCommandBase<T>  implements 
RenamedEntityInfoProvider{
+
+    private MacPool macPoolForRollback;
+
     public UpdateStoragePoolCommand(T parameters) {
         super(parameters);
     }
@@ -61,21 +67,41 @@
     @Override
     protected void executeCommand() {
         updateQuotaCache();
+        final StoragePool storagePool = getStoragePool();
         if (_oldStoragePool.getStatus() == StoragePoolStatus.Up) {
-            if (!StringUtils.equals(_oldStoragePool.getName(), 
getStoragePool().getName())) {
+            if (!StringUtils.equals(_oldStoragePool.getName(), 
storagePool.getName())) {
                 runVdsCommand(VDSCommandType.SetStoragePoolDescription,
-                    new SetStoragePoolDescriptionVDSCommandParameters(
-                        getStoragePool().getId(), getStoragePool().getName())
+                        new SetStoragePoolDescriptionVDSCommandParameters(
+                                storagePool.getId(), storagePool.getName())
                 );
             }
         }
 
-        copyUnchangedStoragePoolProperties(getStoragePool(), _oldStoragePool);
+        copyUnchangedStoragePoolProperties(storagePool, _oldStoragePool);
 
-        getStoragePoolDAO().updatePartial(getStoragePool());
+        final UpdateMacPool updateMacPool =
+                new UpdateMacPool(storagePool.getMacPoolId(), 
_oldStoragePool.getMacPoolId(), false);
+        if (!updateMacPool.updateMacPool()) {
+            //handles situation when db content changed since canDoAction().
+            //getReturnValue().setFault() is probably ignored and does not 
pass message to rest client.
+            throw new IllegalArgumentException();
+        } else {
+            getStoragePool().setMacPoolId(updateMacPool.getMacPoolIdToUse());
+        }
+
+        getStoragePoolDAO().updatePartial(storagePool);
 
         updateStoragePoolFormatType();
+
+        macPoolForRollback = 
getMacPoolDAO().get(_oldStoragePool.getMacPoolId());
         setSucceeded(true);
+    }
+
+    @Override
+    public void rollback() {
+        super.rollback();
+        //try to remove pool if it was by any chance created before 
error/rollback occurred.
+        MacPoolPerDC.getInstance().modifyPool(macPoolForRollback);
     }
 
     private void updateQuotaCache() {
@@ -216,6 +242,17 @@
         if (returnValue) {
             returnValue = validate(validator.isNotLocalfsWithDefaultCluster());
         }
+
+        final UpdateMacPool updateMacPool = new UpdateMacPool(
+                getStoragePool().getMacPoolId(),
+                _oldStoragePool.getMacPoolId(),
+                true);
+
+        if (!updateMacPool.updateMacPool()) {
+            addCanDoActionMessage(updateMacPool.getFaultMessage());
+            returnValue = false;
+        }
+
         return returnValue;
     }
 
@@ -296,4 +333,69 @@
     public void setEntityId(AuditLogableBase logable) {
         logable.setStoragePoolId(_oldStoragePool.getId());
     }
+
+    private class UpdateMacPool {
+        private Guid requestedMacPoolId;
+        private final boolean druRun;
+        private VdcBllMessages faultMessage;
+        private Guid macPoolIdToUse;
+        private Guid oldMacPoolId;
+
+        public UpdateMacPool(Guid requestedMacPoolId, Guid oldMacPoolId, 
boolean druRun) {
+            this.oldMacPoolId = oldMacPoolId;
+            this.requestedMacPoolId = requestedMacPoolId;
+            this.druRun = druRun;
+        }
+
+        public boolean updateMacPool() {
+            if (requestedMacPoolId == null) {
+//                do nothing, do not change pool.
+            } else {
+                checkIfRequestedPoolIsUsable(requestedMacPoolId);
+            }
+
+            return faultMessage == null;
+        }
+
+        protected void illegalArgumentFault(VdcBllMessages faultMessage) {
+            this.faultMessage = faultMessage;
+        }
+
+        private void checkIfRequestedPoolIsUsable(Guid macPoolId) {
+            //check whether it's shared pool, use instead of current one.
+            MacPool newMacPoolQueriedFromDb = getMacPoolDAO().get(macPoolId);
+            boolean isShared = newMacPoolQueriedFromDb.isShared();
+            if (!isShared) {
+                final int dcUsageCount = 
getMacPoolDAO().getDCUsageCount(macPoolId);
+                if (dcUsageCount != 0) {
+                    
illegalArgumentFault(VdcBllMessages.MAC_POOL_TRYING_TO_REUSE_NON_SHARED_POOL);
+                    return;
+                }
+            }
+
+            macPoolIdToUse = macPoolId;
+
+            if (!druRun) {
+                removeFormerNonSharedMacPool();
+                MacPoolPerDC.getInstance().modifyPool(newMacPoolQueriedFromDb);
+            }
+        }
+
+        private void removeFormerNonSharedMacPool() {
+            MacPoolDAO macPoolDao = getMacPoolDAO();
+            //if former pool was not shared delete it from db.
+            MacPool oldMacPool = macPoolDao.get(oldMacPoolId);
+            if (!oldMacPool.isShared()) {
+                macPoolDao.remove(oldMacPool.getId());
+            }
+        }
+
+        public Guid getMacPoolIdToUse() {
+            return macPoolIdToUse;
+        }
+
+        public VdcBllMessages getFaultMessage() {
+            return faultMessage;
+        }
+    }
 }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java
index bb0970d..bff855c 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DataCenterResource.java
@@ -38,4 +38,7 @@
 
     @Path("quotas")
     public QuotasResource getQuotasResource();
+
+    @Path("macpools")
+    public DcRelatedMacPoolsResource getMacPoolsResource();
 }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DcRelatedMacPoolsResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DcRelatedMacPoolsResource.java
new file mode 100644
index 0000000..986e5b2
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DcRelatedMacPoolsResource.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.MacPools;
+import org.ovirt.engine.api.restapi.resource.MacPoolResource;
+
+public interface DcRelatedMacPoolsResource {
+
+    @GET
+    @Formatted
+    public MacPools list();
+
+    @Path("{id}")
+    public MacPoolResource getMacPoolSubResource(@PathParam("id") String id);
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java
index 8f31e97..93831cb 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCenterResource.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.api.resource.AttachedStorageDomainsResource;
 import org.ovirt.engine.api.resource.ClustersResource;
 import org.ovirt.engine.api.resource.DataCenterResource;
+import org.ovirt.engine.api.resource.DcRelatedMacPoolsResource;
 import org.ovirt.engine.api.resource.NetworksResource;
 import org.ovirt.engine.api.resource.QuotasResource;
 import org.ovirt.engine.api.restapi.utils.MalformedIdException;
@@ -77,6 +78,11 @@
          return inject(new BackendQuotasResource(id));
     }
 
+    @Override
+    public DcRelatedMacPoolsResource getMacPoolsResource() {
+        return inject(new BackendDcRelatedMacPoolsResource(id));
+    }
+
     public BackendDataCentersResource getParent() {
         return parent;
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java
index a13a56b..9aed326 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDataCentersResource.java
@@ -24,7 +24,7 @@
 public class BackendDataCentersResource extends
         AbstractBackendCollectionResource<DataCenter, StoragePool> implements 
DataCentersResource {
 
-    static final String[] SUB_COLLECTIONS = {"storagedomains", "clusters", 
"networks", "permissions", "quotas"};
+    static final String[] SUB_COLLECTIONS = {"storagedomains", "clusters", 
"networks", "permissions", "quotas", "macpools"};
 
     public BackendDataCentersResource() {
         super(DataCenter.class, StoragePool.class, SUB_COLLECTIONS);
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDcRelatedMacPoolsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDcRelatedMacPoolsResource.java
new file mode 100644
index 0000000..137a305
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDcRelatedMacPoolsResource.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.MacPool;
+import org.ovirt.engine.api.model.MacPools;
+import org.ovirt.engine.api.resource.DcRelatedMacPoolsResource;
+import org.ovirt.engine.core.common.action.IdParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+
+public class BackendDcRelatedMacPoolsResource extends 
AbstractBackendCollectionResource<MacPool, 
org.ovirt.engine.core.common.businessentities.MacPool> implements 
DcRelatedMacPoolsResource {
+    private final Guid dataCenterId;
+
+    public BackendDcRelatedMacPoolsResource(String dataCenterId) {
+        super(MacPool.class, 
org.ovirt.engine.core.common.businessentities.MacPool.class);
+        this.dataCenterId = asGuid(dataCenterId);
+    }
+
+    @Override
+    protected MacPool doPopulate(MacPool model, 
org.ovirt.engine.core.common.businessentities.MacPool entity) {
+        return model;
+    }
+
+    @Override
+    protected Response performRemove(String id) {
+        return performAction(VdcActionType.RemoveMacPool, new 
IdParameters(asGuid(id)));
+    }
+
+    @Override
+    public MacPools list() {
+        IdQueryParameters params = new IdQueryParameters(dataCenterId);
+        return 
mapCollection(getBackendCollection(VdcQueryType.GetMacPoolsByDataCenterId, 
params));
+    }
+
+    private MacPools 
mapCollection(List<org.ovirt.engine.core.common.businessentities.MacPool> 
entities) {
+        MacPools collection = new MacPools();
+
+        if (entities != null) {
+            for (org.ovirt.engine.core.common.businessentities.MacPool entity 
: entities) {
+                collection.getMacPools().add(addLinks(populate(map(entity), 
entity)));
+            }
+        }
+
+        return collection;
+    }
+
+    @Override
+    public MacPoolResource getMacPoolSubResource(String id) {
+        return inject(new BackendMacPoolResource(id));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DataCenterMapper.java
 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DataCenterMapper.java
index 3169a6c..31d806b 100644
--- 
a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DataCenterMapper.java
+++ 
b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DataCenterMapper.java
@@ -47,6 +47,8 @@
             entity.setcompatibility_version(new 
org.ovirt.engine.core.compat.Version(model.getVersion().getMajor(),
                                                                                
 model.getVersion().getMinor()));
         }
+
+        entity.setMacPoolId(GuidUtils.asGuidNullable(model.getMacPoolId()));
         return entity;
     }
 
@@ -77,6 +79,8 @@
                 model.setStorageFormat(storageFormat.value());
             }
         }
+
+        model.setMacPoolId(entity.getMacPoolId() == null ? null : 
entity.getMacPoolId().toString());
         return model;
     }
 


-- 
To view, visit http://gerrit.ovirt.org/28707
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If75e2d632ca47c274ad303ce9833d1e536521071
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Martin Mucha <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to