Daniel Erez has uploaded a new change for review.

Change subject: restapi: add connections subresource for domain
......................................................................

restapi: add connections subresource for domain

Change-Id: I94c3e7e18705788b07b3bfd1a97a54d474e243aa
Signed-off-by: Daniel Erez <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java
A 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
A 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
M packaging/dbscripts/storages_sp.sql
21 files changed, 355 insertions(+), 32 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/17891/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java
new file mode 100644
index 0000000..07150b0
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java
@@ -0,0 +1,16 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+
+public class GetStorageServerConnectionsForDomainQuery<P extends 
IdQueryParameters> extends QueriesCommandBase<P> {
+
+    public GetStorageServerConnectionsForDomainQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        
getQueryReturnValue().setReturnValue(getDbFacade().getStorageServerConnectionDao()
+                .getAllForDomain(getParameters().getId()));
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index 99efa1b..749fac4 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -188,6 +188,7 @@
     GetStorageDomainById(VdcQueryAuthType.User),
     GetStorageServerConnectionById,
     GetAllStorageServerConnections,
+    GetStorageServerConnectionsForDomain,
     GetStoragePoolById(VdcQueryAuthType.User),
     GetStorageDomainsByConnection,
     GetStorageDomainsByStoragePoolId(VdcQueryAuthType.User),
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
index e339a4e..d7421ec 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java
@@ -84,6 +84,13 @@
             StorageServerConnections connection);
 
     /**
+     * Retrieves all connections used by the specified storage domain
+     * @param domainId
+     * @return the list of connections
+     */
+    List<StorageServerConnections> getAllForDomain(Guid domainId);
+
+    /**
      * Saves the specified connection.
      *
      * @param connection
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
index 927776f..6bb1c95 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java
@@ -84,6 +84,12 @@
     }
 
     @Override
+    public List<StorageServerConnections> getAllForDomain(Guid domainId) {
+        return 
getCallsHandler().executeReadList("GetStorageServerConnectionsForDomain",mapper,
+                        
getCustomMapSqlParameterSource().addValue("storage_domain_id", domainId));
+    }
+
+    @Override
     public void save(StorageServerConnections connection) {
         
getCallsHandler().executeModification("Insertstorage_server_connections", 
getFullParameterSource(connection));
     }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
index 13eac8b..9a9f71d 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java
@@ -12,7 +12,7 @@
 import org.ovirt.engine.core.common.businessentities.LUNs;
 
 public class LunDAOTest extends BaseDAOTestCase {
-    private static final String STORAGE_SERVER_CONNECTION_ID = 
"0cc146e8-e5ed-482c-8814-270bc48c297f";
+    private static final String STORAGE_SERVER_CONNECTION_ID = 
"0cc146e8-e5ed-482c-8814-270bc48c297e";
     private LunDAO dao;
     private LUNs existingLUN;
     private LUNs newLUN;
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java
index 973c8ed..7657ea3 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java
@@ -22,8 +22,8 @@
     private static final int NUMBER_OF_STORAGE_DOMAINS_FOR_PRIVELEGED_USER = 1;
 
     private static final Guid EXISTING_DOMAIN_ID = 
FixturesTool.STORAGE_DOAMIN_SCALE_SD5;
-    private static final Guid EXISTING_STORAGE_POOL_ID = new 
Guid("6d849ebf-755f-4552-ad09-9a090cda105d");
-    private static final String EXISTING_CONNECTION = "10.35.64.25";
+    private static final Guid EXISTING_STORAGE_POOL_ID = new 
Guid("72b9e200-f48b-4687-83f2-62828f249a47");
+    private static final String EXISTING_CONNECTION = 
"10.35.64.25:/export/share";
     private static final Guid EXISTING_USER_ID = new 
Guid("9bf7c640-b620-456f-a550-0348f366544b");
 
     private StorageDomainDAO dao;
@@ -46,7 +46,7 @@
      */
     @Test
     public void testGetMasterStorageDomainIdForPool() {
-        Guid result = 
dao.getMasterStorageDomainIdForPool(EXISTING_STORAGE_POOL_ID);
+        Guid result = dao.getMasterStorageDomainIdForPool(new 
Guid("6d849ebf-755f-4552-ad09-9a090cda105d"));
 
         assertNotNull(result);
         assertEquals(EXISTING_DOMAIN_ID, result);
@@ -54,7 +54,7 @@
 
     @Test
     public void testGetstorage_domain_by_type_for_storagePoolId() {
-        StorageDomain result = 
dao.getStorageDomainByTypeAndPool(EXISTING_STORAGE_POOL_ID, 
StorageDomainType.Master);
+        StorageDomain result = dao.getStorageDomainByTypeAndPool(new 
Guid("6d849ebf-755f-4552-ad09-9a090cda105d"), StorageDomainType.Master);
 
         assertNotNull(result);
         assertGetResult(result);
@@ -167,7 +167,7 @@
      */
     @Test
     public void testGetForStoragePool() {
-        StorageDomain result = dao.getForStoragePool(existingDomain.getId(), 
EXISTING_STORAGE_POOL_ID);
+        StorageDomain result = 
dao.getForStoragePool(existingDomain.getId(),new 
Guid("6d849ebf-755f-4552-ad09-9a090cda105d"));
 
         assertGetResult(result);
     }
@@ -258,7 +258,7 @@
     public void testGetAllForConnection() {
         List<StorageDomain> result = 
dao.getAllForConnection(EXISTING_CONNECTION);
 
-        assertGetAllForStoragePoolResult(result);
+        assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID);
     }
 
     /**
@@ -305,7 +305,7 @@
         List<StorageDomain> result =
                 dao.getAllByStoragePoolAndConnection(EXISTING_STORAGE_POOL_ID, 
EXISTING_CONNECTION);
 
-        assertGetAllForStoragePoolResult(result);
+        assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID);
     }
 
     /**
@@ -326,7 +326,7 @@
     public void testGetAllForStoragePool() {
         List<StorageDomain> result = 
dao.getAllForStoragePool(EXISTING_STORAGE_POOL_ID);
 
-        assertGetAllForStoragePoolResult(result);
+        assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID);
     }
 
     /**
@@ -334,9 +334,10 @@
      */
     @Test
     public void testGetAllForStoragePoolWithPermissionsPrivilegedUser() {
-        List<StorageDomain> result = 
dao.getAllForStoragePool(EXISTING_STORAGE_POOL_ID, PRIVILEGED_USER_ID, true);
+        Guid storagePoolId = new Guid("6d849ebf-755f-4552-ad09-9a090cda105d");
+        List<StorageDomain> result = dao.getAllForStoragePool(storagePoolId, 
PRIVILEGED_USER_ID, true);
 
-        assertGetAllForStoragePoolResult(result);
+        assertGetAllForStoragePoolResult(result, storagePoolId);
     }
 
     /**
@@ -346,7 +347,7 @@
     public void 
testGetAllForStoragePoolWithPermissionsDisabledUnprivilegedUser() {
         List<StorageDomain> result = 
dao.getAllForStoragePool(EXISTING_STORAGE_POOL_ID, UNPRIVILEGED_USER_ID, false);
 
-        assertGetAllForStoragePoolResult(result);
+        assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID);
     }
 
     /**
@@ -364,11 +365,11 @@
      * Asserts the result returned from {@link 
StorageDomainDAO#getAllForStoragePool(Guid)} is correct
      * @param result The result to check
      */
-    private static void assertGetAllForStoragePoolResult(List<StorageDomain> 
result) {
+    private static void assertGetAllForStoragePoolResult(List<StorageDomain> 
result, Guid expectedStoragePoolId) {
         assertNotNull(result);
         assertFalse(result.isEmpty());
         for (StorageDomain domain : result) {
-            assertEquals(EXISTING_STORAGE_POOL_ID, domain.getStoragePoolId());
+            assertEquals(expectedStoragePoolId, domain.getStoragePoolId());
         }
     }
 
@@ -377,7 +378,7 @@
         List<StorageDomain> result =
                 dao.getPermittedStorageDomainsByStoragePool(EXISTING_USER_ID,
                         ActionGroup.CONFIGURE_VM_STORAGE,
-                        EXISTING_STORAGE_POOL_ID);
+                        new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"));
         assertNotNull(result);
         assertFalse(result.isEmpty());
         assertEquals(result.get(0).getId(), existingDomain.getId());
@@ -388,7 +389,7 @@
         List<StorageDomain> result =
                 dao.getPermittedStorageDomainsByStoragePool(EXISTING_USER_ID,
                         ActionGroup.CONSUME_QUOTA,
-                        EXISTING_STORAGE_POOL_ID);
+                        new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"));
         assertNotNull(result);
         assertTrue(result.isEmpty());
     }
@@ -422,11 +423,11 @@
 
     @Test
     public void testAllByConnectionId() {
-        List<StorageDomain> domains = 
dao.getAllByConnectionId(FixturesTool.EXISTING_STORAGE_CONNECTION_ID);
+        List<StorageDomain> domains = dao.getAllByConnectionId(new 
Guid("0cc146e8-e5ed-482c-8814-270bc48c297f"));
         assertEquals("Unexpected number of storage domains by connection id", 
domains.size(), 1);
         assertEquals("Wrong storage domain id for search by connection id",
                 domains.get(0).getId(),
-                FixturesTool.EXISTING_DOMAIN_ID_FOR_CONNECTION_ID);
+                new Guid("c2211b56-8869-41cd-84e1-78d7cb96f31d"));
     }
     /**
      * Asserts the result from {@link StorageDomainDAO#getAll()} is correct 
without filtering
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
index 7f241e9..6430f99 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java
@@ -17,7 +17,7 @@
 
 public class StorageServerConnectionDAOTest extends BaseDAOTestCase {
     private static final int SERVER_CONNECTION_COUNT_FOR_SPECIFIC_STORAGE = 7;
-    private static final String EXISTING_DOMAIN_STORAGE_NAME = 
"fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk";
+    private static final String EXISTING_DOMAIN_STORAGE_NAME = 
"G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ";
     private static final Guid EXISTING_STORAGE_POOL_ID = new 
Guid("6d849ebf-755f-4552-ad09-9a090cda105d");
 
     private StorageServerConnectionDAO dao;
@@ -219,4 +219,17 @@
         assertNull(result.getNfsTimeo());
     }
 
+    @Test
+    public void testGetAllConnectionsOfNfsDomain() {
+      List<StorageServerConnections> connections = 
dao.getAllForDomain(Guid.createGuidFromString("d9ede37f-e6c3-4bf9-a984-19174070aa31"));
+      assertEquals(connections.size(),1);
+      
assertEquals(connections.get(0).getid(),"0cc146e8-e5ed-482c-8814-270bc48c2981");
+    }
+
+    @Test
+    public void testGetAllConnectionsOfIscsiDomain() {
+      List<StorageServerConnections> connections = 
dao.getAllForDomain(Guid.createGuidFromString("72e3a666-89e1-4005-a7ca-f7548004a9ab"));
+      assertEquals(connections.size(),2);
+      
assertTrue((connections.get(0).getid().equals("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk"))
 || 
(connections.get(0).getid().equals("0cc146e8-e5ed-482c-8814-270bc48c297e")));
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java
index 074a88e..76c31fa 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java
@@ -29,7 +29,7 @@
         dao = dbFacade.getStorageServerConnectionLunMapDao();
         storageServerConnectionDao = dbFacade.getStorageServerConnectionDao();
 
-        existingConnection = 
storageServerConnectionDao.get("0cc146e8-e5ed-482c-8814-270bc48c297f");
+        existingConnection = 
storageServerConnectionDao.get("0cc146e8-e5ed-482c-8814-270bc48c297e");
 
         newServerConnection = new StorageServerConnections();
         newServerConnection.setid("0cc146e8-e5ed-482c-8814-270bc48c2980");
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index 8600fd7..248b452 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -255,7 +255,7 @@
         <row>
             <value></value>
             <value>1IET_00180001</value>
-            <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value>
+            <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value>
             <value>VIRTUAL-DISK-1</value>
             <value>1</value>
             <value>IET</value>
@@ -264,7 +264,7 @@
         <row>
             <value></value>
             <value>1IET_00180002</value>
-            <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value>
+            <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value>
             <value>VIRTUAL-DISK-1</value>
             <value>1</value>
             <value>IET</value>
@@ -273,7 +273,7 @@
         <row>
             <value></value>
             <value>1IET_00180003</value>
-            <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value>
+            <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value>
             <value>DETACHED-LUN-1</value>
             <value>1</value>
             <value>IET</value>
@@ -282,7 +282,7 @@
         <row>
             <value></value>
             <value>1IET_00180004</value>
-            <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value>
+            <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value>
             <value>SOME-LUN-DISK</value>
             <value>1</value>
             <value>IET</value>
@@ -295,8 +295,14 @@
         <column>storage_server_connection</column>
         <row>
             <value>1IET_00180001</value>
-            <value>0cc146e8-e5ed-482c-8814-270bc48c297f</value>
+            <value>0cc146e8-e5ed-482c-8814-270bc48c297e</value>
         </row>
+        <row>
+            <value>1IET_00180002</value>
+            <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value>
+        </row>
+
+        0cc146e8-e5ed-482c-8814-270bc48c2979
     </table>
 
     <table name="tags">
@@ -2543,7 +2549,7 @@
         <column>storage_description</column>
         <row>
             <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value>
-            <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value>
+            <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value>
             <value>scale_sd5</value>
             <value>0</value>
             <value>3</value>
@@ -2565,7 +2571,7 @@
         </row>
         <row>
             <value>c2211b56-8869-41cd-84e1-78d7cb96f31d</value>
-            <value>7fe9a439-a68e-4c15-8885-29d34eb6cabf</value>
+            <value>0cc146e8-e5ed-482c-8814-270bc48c297f</value>
             <value>nfs_master</value>
             <value>0</value>
             <value>1</value>
@@ -2576,7 +2582,7 @@
         </row>
         <row>
             <value>d9ede37f-e6c3-4bf9-a984-19174070aa31</value>
-            <value>c6d12efe-f0c5-4ce8-b755-21c7aac09c5b</value>
+            <value>0cc146e8-e5ed-482c-8814-270bc48c2981</value>
             <value>nfs_master2</value>
             <value>0</value>
             <value>1</value>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
index 9244d09..a2eaef9 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
@@ -42,4 +42,7 @@
 
     @Path("disks")
     public DisksResource getDisksResource();
+
+    @Path("storageconnections")
+    public StorageDomainServerConnectionsResource 
getStorageConnectionsResource();
 }
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java
new file mode 100644
index 0000000..af696c3
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java
@@ -0,0 +1,13 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.GET;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.StorageConnection;
+
+public interface StorageDomainServerConnectionResource {
+    @GET
+    @Formatted
+    public StorageConnection get();
+
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java
new file mode 100644
index 0000000..34a47b2
--- /dev/null
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java
@@ -0,0 +1,26 @@
+package org.ovirt.engine.api.resource;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.StorageConnections;
+
+@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML })
+public interface StorageDomainServerConnectionsResource {
+    @GET
+    @Formatted
+    public StorageConnections list();
+
+    /**
+     * Sub-resource locator method, returns individual 
StorageDomainServerConnectionResource on which the remainder of the URI is
+     * dispatched.
+     * @param id
+     *            the StorageDomain ID
+     * @return matching subresource if found
+     */
+    @Path("{id}")
+    public StorageDomainServerConnectionResource 
getStorageConnectionSubResource(@PathParam("id") String id);
+}
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 1a329b4..fcf9d11 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -1167,6 +1167,21 @@
     urlparams: {}
     headers:
       Filter: {value: true|false, required: false}
+- name: /api/storagedomains/{storagedomain:id}/storageconnections|rel=get
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams:
+      max: {context: matrix, type: 'xs:int', value: 'max results', required: 
false}
+    headers: {}
+- name: 
/api/storagedomains/{storagedomain:id}/storageconnections/{storageconnection:id}|rel=get
+  request:
+    body:
+      parameterType: null
+      signatures: []
+    urlparams: {}
+    headers: {}
 - name: /api/clusters/{cluster:id}|rel=delete
   request:
     body:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
index 3edb851..00f8498 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.api.resource.RemovableStorageDomainContentsResource;
 import org.ovirt.engine.api.resource.FilesResource;
 import org.ovirt.engine.api.resource.StorageDomainResource;
+import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.ExtendSANStorageDomainParameters;
 import org.ovirt.engine.core.common.action.StorageDomainManagementParameter;
@@ -109,9 +110,9 @@
     }
 
     public static synchronized String[] getLinksToExclude(StorageDomain 
storageDomain) {
-        return isIsoDomain(storageDomain) ? new String[] { "templates", "vms", 
"disks" }
+        return isIsoDomain(storageDomain) ? new String[] { "templates", "vms", 
"disks", "storageconnections" }
                                             :
-                                            isExportDomain(storageDomain) ? 
new String[]{"files"}
+                                            isExportDomain(storageDomain) ? 
new String[]{"files", "storageconnections"}
                                                                             :
                                                                             
new String[]{"templates", "vms", "files"};
     }
@@ -267,4 +268,9 @@
     public DisksResource getDisksResource() {
         return inject(new BackendStorageDomainDisksResource(guid));
     }
+
+    @Override
+    public StorageDomainServerConnectionsResource 
getStorageConnectionsResource() {
+        return inject(new BackendStorageDomainServerConnectionsResource(guid));
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java
new file mode 100644
index 0000000..f75e67e
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java
@@ -0,0 +1,34 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import org.ovirt.engine.api.model.StorageConnection;
+import org.ovirt.engine.api.resource.StorageDomainServerConnectionResource;
+import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import 
org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendStorageDomainServerConnectionResource extends
+        AbstractBackendSubResource<StorageConnection, 
StorageServerConnections> implements StorageDomainServerConnectionResource {
+    private StorageDomainServerConnectionsResource parent;
+
+    public BackendStorageDomainServerConnectionResource(String id, 
StorageDomainServerConnectionsResource parent) {
+        super(id, StorageConnection.class, StorageServerConnections.class);
+        this.parent = parent;
+    }
+
+    @Override
+    public StorageConnection get() {
+        return performGet(VdcQueryType.GetStorageServerConnectionById,
+                new 
StorageServerConnectionQueryParametersBase(guid.toString()));
+    }
+
+    @Override
+    protected StorageConnection doPopulate(StorageConnection model, 
StorageServerConnections entity) {
+        return model;
+    }
+
+    public StorageDomainServerConnectionsResource getParent() {
+        return parent;
+    }
+
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java
new file mode 100644
index 0000000..dcdc408
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java
@@ -0,0 +1,64 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import java.util.List;
+
+import javax.ws.rs.core.Response;
+
+import org.ovirt.engine.api.model.StorageConnection;
+import org.ovirt.engine.api.model.StorageConnections;
+import org.ovirt.engine.api.resource.StorageDomainServerConnectionResource;
+import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+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 BackendStorageDomainServerConnectionsResource extends 
AbstractBackendCollectionResource<StorageConnection, StorageServerConnections> 
implements StorageDomainServerConnectionsResource {
+
+    Guid storageDomainId = null;
+
+    public BackendStorageDomainServerConnectionsResource(Guid storageDomainId) 
{
+        super(StorageConnection.class, StorageServerConnections.class);
+        this.storageDomainId = storageDomainId;
+    }
+
+    @Override
+    public StorageConnections list() {
+        List<StorageServerConnections> connections = getConnections();
+        return mapCollection(connections);
+    }
+
+    protected List<StorageServerConnections> getConnections() {
+        return getEntity(List.class,
+                VdcQueryType.GetStorageServerConnectionsForDomain,
+                new IdQueryParameters(storageDomainId),
+                "storage domain: id=" + storageDomainId);
+    }
+
+    @Override
+    protected StorageConnection doPopulate(StorageConnection model, 
StorageServerConnections entity) {
+        return model;
+    }
+
+    private StorageConnections mapCollection(List<StorageServerConnections> 
entities) {
+        StorageConnections collection = new StorageConnections();
+        for (StorageServerConnections entity : entities) {
+            StorageConnection connection = map(entity);
+            if (connection != null) {
+                
collection.getStorageConnections().add(addLinks(populate(connection, entity)));
+            }
+        }
+        return collection;
+    }
+
+    @Override
+    protected Response performRemove(String id) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    @SingleEntityResource
+    public StorageDomainServerConnectionResource 
getStorageConnectionSubResource(String id) {
+        return inject(new BackendStorageDomainServerConnectionResource(id, 
this));
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
index 155c3d0..15bc29a 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java
@@ -49,7 +49,7 @@
     extends AbstractBackendCollectionResource<StorageDomain, 
org.ovirt.engine.core.common.businessentities.StorageDomain>
     implements StorageDomainsResource {
 
-    static final String[] SUB_COLLECTIONS = { "permissions", "files", 
"templates", "vms", "disks" };
+    static final String[] SUB_COLLECTIONS = { "permissions", "files", 
"templates", "vms", "disks" , "storageconnections"};
 
     private StorageDomain storageDomain = null; //utility variable; used in 
the context of a single activation of remove()
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
index 9926509..201ab00 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java
@@ -61,6 +61,7 @@
             addForceSelectSpmFeature(features);
             addConsoleFeature(features);
             addFeatureStorageServerConnections(features);
+            addFeatureStorageServerConnectionsForDomain(features);
             addSingleQxlPciFeature(features);
             addFeatureAddVmFromOvf(features);
         }
@@ -318,4 +319,11 @@
         feature.setDescription("Ability to add VM from provided OVF 
configuration.");
         features.getFeature().add(feature);
     }
+
+    private void addFeatureStorageServerConnectionsForDomain(Features 
features) {
+        Feature feature = new Feature();
+        feature.setName("Storage server connections of a storage domain");
+        feature.setDescription("Ability to view storage server connections of 
a specific storage domain (GET 
.../storagedomains/{storagedomain:id}/storageconnections)");
+        features.getFeature().add(feature);
+    }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java
new file mode 100644
index 0000000..3242813
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java
@@ -0,0 +1,80 @@
+package org.ovirt.engine.api.restapi.resource;
+
+import static org.easymock.EasyMock.expect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.ovirt.engine.api.model.StorageConnection;
+import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class BackendStorageDomainServerConnectionsResourceTest extends 
AbstractBackendCollectionResourceTest<StorageConnection, 
StorageServerConnections, BackendStorageDomainServerConnectionsResource> {
+    protected static final 
org.ovirt.engine.core.common.businessentities.StorageType 
STORAGE_TYPES_MAPPED[] = {
+            org.ovirt.engine.core.common.businessentities.StorageType.NFS,
+            org.ovirt.engine.core.common.businessentities.StorageType.LOCALFS,
+            org.ovirt.engine.core.common.businessentities.StorageType.POSIXFS,
+            org.ovirt.engine.core.common.businessentities.StorageType.ISCSI };
+
+    public BackendStorageDomainServerConnectionsResourceTest() {
+        super(new BackendStorageDomainServerConnectionsResource(GUIDS[3]), 
null, "");
+    }
+
+    @Test
+    @Ignore
+    @Override
+    public void testQuery() throws Exception {
+    }
+
+
+    @Override
+    protected List<StorageConnection> getCollection() {
+        return collection.list().getStorageConnections();
+    }
+
+    @Override
+    protected void setUpQueryExpectations(String query, Object failure) throws 
Exception {
+        assert (query.equals(""));
+
+        
setUpEntityQueryExpectations(VdcQueryType.GetStorageServerConnectionsForDomain,
+                VdcQueryParametersBase.class,
+                new String[] {},
+                new Object[] {},
+                setUpStorageConnections(),
+                failure);
+
+        control.replay();
+    }
+
+    protected List<StorageServerConnections> setUpStorageConnections() {
+        List<StorageServerConnections> storageConnections = new ArrayList<>();
+        storageConnections.add(getEntity(3));
+        return storageConnections;
+    }
+
+    @Override
+    protected void verifyCollection(List<StorageConnection> collection) throws 
Exception {
+        assertNotNull(collection);
+        assertEquals(1, collection.size());
+    }
+
+    @Override
+    protected StorageServerConnections getEntity(int index) {
+        return 
setUpEntityExpectations(control.createMock(StorageServerConnections.class), 
index);
+    }
+
+    static StorageServerConnections 
setUpEntityExpectations(StorageServerConnections entity, int index) {
+        expect(entity.getid()).andReturn(GUIDS[index].toString()).anyTimes();
+        
expect(entity.getstorage_type()).andReturn(STORAGE_TYPES_MAPPED[index]).anyTimes();
+        expect(entity.getconnection()).andReturn("1.1.1.255").anyTimes();
+        if (STORAGE_TYPES_MAPPED[index].equals(StorageType.ISCSI)) {
+            expect(entity.getport()).andReturn("3260").anyTimes();
+        }
+
+        return entity;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
index 8d50cb6..f29c18a 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java
@@ -835,7 +835,7 @@
         assertEquals(TARGET, 
model.getStorage().getVolumeGroup().getLogicalUnits().get(0).getTarget());
         assertEquals(ADDRESSES[0], 
model.getStorage().getVolumeGroup().getLogicalUnits().get(0).getAddress());
         assertEquals(PORT, 
model.getStorage().getVolumeGroup().getLogicalUnits().get(0).getPort());
-        assertEquals(2, model.getLinks().size());
+        assertEquals(3, model.getLinks().size());
         assertEquals("permissions", model.getLinks().get(0).getRel());
         assertNotNull(model.getLinks().get(0).getHref());
         verifyLinks(model);
diff --git a/packaging/dbscripts/storages_sp.sql 
b/packaging/dbscripts/storages_sp.sql
index 108aa34..98133fa 100644
--- a/packaging/dbscripts/storages_sp.sql
+++ b/packaging/dbscripts/storages_sp.sql
@@ -687,3 +687,27 @@
               (v_supports_gluster_service = TRUE AND vg.gluster_service = 
TRUE)) AND vg.storage_pool_id = sp.id);
 END; $procedure$
 LANGUAGE plpgsql;
+
+
+CREATE OR REPLACE FUNCTION 
GetStorageServerConnectionsForDomain(v_storage_domain_id UUID)
+ RETURNS SETOF storage_server_connections
+ AS $procedure$
+ BEGIN
+RETURN QUERY SELECT *
+FROM storage_server_connections
+WHERE EXISTS  ( SELECT 1
+               FROM    storage_domain_static
+               WHERE   storage_domain_static.id = v_storage_domain_id
+               AND     storage_domain_static.storage_type in (1,4,6) -- file 
storage domains - nfs,posix,local
+               AND     storage_server_connections.id  = 
storage_domain_static.storage
+               UNION ALL
+               SELECT 1
+               FROM   storage_domain_static
+               JOIN   luns ON storage_domain_static.storage  = 
luns.volume_group_id
+               JOIN   lun_storage_server_connection_map ON  luns.lun_id = 
lun_storage_server_connection_map.lun_id
+                                                        AND 
storage_server_connections.id  = 
lun_storage_server_connection_map.storage_server_connection
+               WHERE  storage_domain_static.id = v_storage_domain_id
+               AND    storage_domain_static.storage_type = 3  -- storage type 
= iscsi
+               );
+END; $procedure$
+LANGUAGE plpgsql;


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

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

Reply via email to