Moti Asayag has uploaded a new change for review.

Change subject: engine: Add NetworkAttachment dao
......................................................................

engine: Add NetworkAttachment dao

Change-Id: I84187f3900b9e3f8a917fc4e4126de9e50e231b4
Signed-off-by: Moti Asayag <[email protected]>
---
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java
M backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
A 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java
M backend/manager/modules/dal/src/test/resources/fixtures.xml
M packaging/dbscripts/network_sp.sql
A packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql
9 files changed, 398 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/81/32581/1

diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
index 6fe6d86..9664cdc 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
@@ -130,6 +130,7 @@
 import org.ovirt.engine.core.dao.gluster.GlusterServiceDao;
 import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao;
 import org.ovirt.engine.core.dao.network.InterfaceDao;
+import org.ovirt.engine.core.dao.network.NetworkAttachmentDao;
 import org.ovirt.engine.core.dao.network.NetworkClusterDao;
 import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.dao.network.NetworkQoSDao;
@@ -1145,4 +1146,14 @@
     public CpuProfileDao getCpuProfileDao() {
         return getDao(CpuProfileDao.class);
     }
+
+    /**
+     * Returns the singleton instance of {@link NetworkAttachmentDao}.
+     *
+     * @return the dao
+     */
+    public NetworkAttachmentDao getNetworkAttachmentDao() {
+        return getDao(NetworkAttachmentDao.class);
+    }
+
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java
new file mode 100644
index 0000000..7e4c077
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDao.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.core.dao.network;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.GenericDao;
+
+public interface NetworkAttachmentDao extends GenericDao<NetworkAttachment, 
Guid> {
+
+    /**
+     * Retrieves all network attachments associated with the given network 
interface.
+     *
+     * @param nicId
+     *            the network interface ID
+     * @return the list of network attachments
+     */
+    List<NetworkAttachment> getAllForNic(Guid nicId);
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java
new file mode 100644
index 0000000..5a29a6f
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoDbFacadeImpl.java
@@ -0,0 +1,84 @@
+package org.ovirt.engine.core.dao.network;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.network.IpConfiguration;
+import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
+import 
org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol;
+import org.ovirt.engine.core.common.utils.EnumUtils;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade;
+import org.ovirt.engine.core.utils.SerializationFactory;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+public class NetworkAttachmentDaoDbFacadeImpl extends 
DefaultGenericDaoDbFacade<NetworkAttachment, Guid> implements 
NetworkAttachmentDao {
+
+    public NetworkAttachmentDaoDbFacadeImpl() {
+        super("NetworkAttachment");
+    }
+
+    @Override
+    public List<NetworkAttachment> getAllForNic(Guid nicId) {
+        return 
getCallsHandler().executeReadList("GetNetworkAttachmentsByNicId",
+                NetworkAttachmentRowMapper.INSTANCE,
+                getCustomMapSqlParameterSource().addValue("nic_id", nicId));
+    }
+
+    @Override
+    protected MapSqlParameterSource 
createFullParametersMapper(NetworkAttachment networkAttachment) {
+        MapSqlParameterSource mapper = 
createIdParameterMapper(networkAttachment.getId())
+                .addValue("network_id", networkAttachment.getNetworkId())
+                .addValue("nic_id", networkAttachment.getNicId())
+                .addValue("custom_properties",
+                        
SerializationFactory.getSerializer().serialize(networkAttachment.getProperties()));
+
+        IpConfiguration ipConfiguration = 
networkAttachment.getIpConfiguration();
+        if (ipConfiguration != null) {
+            mapper.addValue("boot_protocol", 
EnumUtils.nameOrNull(ipConfiguration.getBootProtocol()))
+                    .addValue("address", ipConfiguration.getAddress())
+                    .addValue("netmask", ipConfiguration.getNetmask())
+                    .addValue("gateway", ipConfiguration.getGateway());
+        }
+
+        return mapper;
+    }
+
+    @Override
+    protected MapSqlParameterSource createIdParameterMapper(Guid id) {
+        return getCustomMapSqlParameterSource().addValue("id", id);
+    }
+
+    @Override
+    protected RowMapper<NetworkAttachment> createEntityRowMapper() {
+        return NetworkAttachmentRowMapper.INSTANCE;
+    }
+
+    private static class NetworkAttachmentRowMapper implements 
RowMapper<NetworkAttachment> {
+
+        public static final NetworkAttachmentRowMapper INSTANCE = new 
NetworkAttachmentRowMapper();
+
+        @SuppressWarnings("unchecked")
+        @Override
+        public NetworkAttachment mapRow(ResultSet rs, int rowNum) throws 
SQLException {
+            NetworkAttachment entity = new NetworkAttachment();
+            entity.setId(getGuid(rs, "id"));
+            entity.setNetworkId(getGuid(rs, "network_id"));
+            entity.setNicId(getGuid(rs, "nic_id"));
+            entity.setProperties(SerializationFactory.getDeserializer()
+                    .deserializeOrCreateNew(rs.getString("custom_properties"), 
LinkedHashMap.class));
+
+            IpConfiguration ipConfiguration = new IpConfiguration();
+            String bootProtocol = rs.getString("boot_protocol");
+            ipConfiguration.setBootProtocol(bootProtocol == null ? null : 
NetworkBootProtocol.valueOf(bootProtocol));
+            ipConfiguration.setAddress(rs.getString("address"));
+            ipConfiguration.setNetmask(rs.getString("netmask"));
+            ipConfiguration.setGateway(rs.getString("gateway"));
+            entity.setIpConfiguration(ipConfiguration);
+            return entity;
+        }
+    }
+}
diff --git 
a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties 
b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
index 92dde0e..07adea2 100644
--- a/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
+++ b/backend/manager/modules/dal/src/main/jdbc-resources/engine-daos.properties
@@ -88,3 +88,4 @@
 VdsKdumpStatusDao=org.ovirt.engine.core.dao.VdsKdumpStatusDaoDbFacadeImpl
 DiskProfileDao=org.ovirt.engine.core.dao.profiles.DiskProfileDaoDbFacadeImpl
 CpuProfileDao=org.ovirt.engine.core.dao.profiles.CpuProfileDaoDbFacadeImpl
+NetworkAttachmentDao=org.ovirt.engine.core.dao.network.NetworkAttachmentDaoDbFacadeImpl
\ No newline at end of file
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
index 184e347..8b3d363 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java
@@ -511,6 +511,12 @@
 
     public static final int NUMBER_OF_VM_INTERFACES = 4;
 
+    public static final Guid NETWORK_ATTACHMENT = new 
Guid("fd81f1f1-785b-4579-ab75-1419ebb87051");
+
+    public static final Guid NETWORK_ATTACHMENT_NIC = new 
Guid("ba31682e-6ae7-4f9d-8c6f-04c93acca9dd");
+
+    public static final int NUMBER_OF_NETWORK_ATTACHMENTS = 2;
+
     /**
      * Gluster Hook ID(s)
      */
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java
new file mode 100644
index 0000000..bb5b223
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/NetworkAttachmentDaoTest.java
@@ -0,0 +1,123 @@
+package org.ovirt.engine.core.dao.network;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.junit.Test;
+import org.ovirt.engine.core.common.businessentities.network.IpConfiguration;
+import org.ovirt.engine.core.common.businessentities.network.NetworkAttachment;
+import 
org.ovirt.engine.core.common.businessentities.network.NetworkBootProtocol;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.BaseDAOTestCase;
+import org.ovirt.engine.core.dao.FixturesTool;
+
+
+public class NetworkAttachmentDaoTest extends BaseDAOTestCase {
+
+    private NetworkAttachment networkAttachment;
+    private NetworkAttachmentDao dao;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        dao = dbFacade.getNetworkAttachmentDao();
+        networkAttachment = new NetworkAttachment();
+        networkAttachment.setId(Guid.newGuid());
+        networkAttachment.setNetworkId(FixturesTool.NETWORK_ENGINE);
+        IpConfiguration ipConfiguration = new IpConfiguration();
+        ipConfiguration.setBootProtocol(NetworkBootProtocol.DHCP);
+        networkAttachment.setIpConfiguration(ipConfiguration);
+    }
+
+    /**
+     * Ensures null is returned.
+     */
+    @Test
+    public void testGetWithNonExistingId() {
+        NetworkAttachment result = dao.get(Guid.newGuid());
+
+        assertNull(result);
+    }
+
+    /**
+     * Ensures that the network attachment is returned.
+     */
+    @Test
+    public void testGet() {
+        NetworkAttachment result = dao.get(FixturesTool.NETWORK_ATTACHMENT);
+
+        assertNotNull(result);
+        assertEquals(FixturesTool.NETWORK_ATTACHMENT, result.getId());
+        assertEquals(NetworkBootProtocol.DHCP, 
result.getIpConfiguration().getBootProtocol());
+    }
+
+    /**
+     * Ensures that network attachments are returned.
+     */
+    @Test
+    public void testGetAllForNic() {
+        List<NetworkAttachment> result = 
dao.getAllForNic(FixturesTool.NETWORK_ATTACHMENT_NIC);
+
+        assertNotNull(result);
+        assertEquals(FixturesTool.NUMBER_OF_NETWORK_ATTACHMENTS, 
result.size());
+    }
+
+    /**
+     * Ensures that a populated collection is returned.
+     */
+    @Test
+    public void testGetAll() {
+        List<NetworkAttachment> result = dao.getAll();
+
+        assertNotNull(result);
+        assertEquals(result.size(), 
FixturesTool.NUMBER_OF_NETWORK_ATTACHMENTS);
+    }
+
+    /**
+     * Ensures that the save is working correctly
+     */
+    @Test
+    public void testSave() {
+        dao.save(networkAttachment);
+        NetworkAttachment result = dao.get(networkAttachment.getId());
+        assertNotNull(result);
+        assertEquals(networkAttachment.getId(), result.getId());
+        assertEquals(NetworkBootProtocol.DHCP, 
result.getIpConfiguration().getBootProtocol());
+    }
+
+    /**
+     * Ensures that the update is working correctly
+     */
+    @Test
+    public void testUpdate() {
+        dao.save(networkAttachment);
+        
networkAttachment.getIpConfiguration().setBootProtocol(NetworkBootProtocol.NONE);
+        Map<String, String> properties = new HashMap<>();
+        properties.put("key", "value");
+        networkAttachment.setProperties(properties);
+        dao.update(networkAttachment);
+        NetworkAttachment result = dao.get(networkAttachment.getId());
+        assertNotNull(result);
+        assertEquals(networkAttachment.getId(), result.getId());
+        assertEquals(NetworkBootProtocol.NONE, 
result.getIpConfiguration().getBootProtocol());
+        assertEquals(properties, result.getProperties());
+    }
+
+    /**
+     * Ensures that the remove is working correctly
+     */
+    @Test
+    public void testRemove() {
+        dao.save(networkAttachment);
+        NetworkAttachment result = dao.get(networkAttachment.getId());
+        assertNotNull(result);
+        dao.remove(networkAttachment.getId());
+        assertNull(dao.get(networkAttachment.getId()));
+    }
+}
diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml 
b/backend/manager/modules/dal/src/test/resources/fixtures.xml
index b2e1360..d1df673 100644
--- a/backend/manager/modules/dal/src/test/resources/fixtures.xml
+++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml
@@ -5265,6 +5265,43 @@
         </row>
     </table>
 
+    <table name="network_attachments">
+        <column>id</column>
+        <column>network_id</column>
+        <column>nic_id</column>
+        <column>boot_protocol</column>
+        <column>address</column>
+        <column>netmask</column>
+        <column>gateway</column>
+        <column>custom_properties</column>
+        <column>_create_date</column>
+        <column>_update_date</column>
+        <row>
+            <value>fd81f1f1-785b-4579-ab75-1419ebb87051</value>
+            <value>58d5c1c6-cb15-4832-b2a4-023770607189</value>
+            <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9dd</value>
+            <value>DHCP</value>
+            <null />
+            <null />
+            <null />
+            <value>{ "prop1" : "true", "prop2" : "123456" }</value>
+            <value>2013-07-02 08:38:36</value>
+            <value>2013-07-02 08:38:36</value>
+        </row>
+        <row>
+            <value>fd81f1f1-785b-4579-ab75-1419ebb87052</value>
+            <value>58d5c1c6-cb15-4832-b2a4-023770607190</value>
+            <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9dd</value>
+            <value>NONE</value>
+            <null />
+            <null />
+            <null />
+            <null />
+            <value>2013-07-02 08:38:36</value>
+            <value>2013-07-02 08:38:36</value>
+        </row>
+    </table>
+
     <table name="vm_pool_map">
         <column>vm_pool_id</column>
         <column>vm_guid</column>
diff --git a/packaging/dbscripts/network_sp.sql 
b/packaging/dbscripts/network_sp.sql
index 9f9f5d7..7a25a2e 100644
--- a/packaging/dbscripts/network_sp.sql
+++ b/packaging/dbscripts/network_sp.sql
@@ -1291,3 +1291,101 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
+-------------------------------------------------------------------------------------------
+-- Network attachments
+-------------------------------------------------------------------------------------------
+
+Create or replace FUNCTION GetNetworkAttachmentByNetworkAttachmentId(v_id UUID)
+RETURNS SETOF network_attachments STABLE
+   AS $procedure$
+BEGIN
+
+   RETURN QUERY SELECT *
+   FROM network_attachments
+   WHERE id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION InsertNetworkAttachment(v_id UUID,
+  v_network_id UUID NOT NULL,
+  v_nic_id UUID,
+  v_boot_protocol CHARACTER VARYING(20),
+  v_address CHARACTER VARYING(20),
+  v_netmask CHARACTER VARYING(20),
+  v_gateway CHARACTER VARYING(20),
+  v_custom_properties TEXT)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+
+   INSERT INTO network_attachments(id, network_id, nic_id, boot_protocol, 
address, netmask, gateway, custom_properties)
+       VALUES(v_id, v_network_id, v_nic_id, v_boot_protocol, v_address, 
v_netmask, v_gateway, custom_properties);
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION UpdateNetworkAttachment(v_id UUID,
+  v_network_id UUID NOT NULL,
+  v_nic_id UUID,
+  v_boot_protocol CHARACTER VARYING(20),
+  v_address CHARACTER VARYING(20),
+  v_netmask CHARACTER VARYING(20),
+  v_gateway CHARACTER VARYING(20),
+  v_custom_properties TEXT)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+
+   UPDATE network_attachments
+   SET network_id = v_network_id,
+       nic_id = v_nic_id,
+       boot_protocol = v_boot_protocol,
+       address = v_address,
+       netmask = v_netmask,
+       gateway = v_gateway,
+       custom_properties = v_custom_properties,
+      _update_date = LOCALTIMESTAMP
+   WHERE id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION DeleteNetworkAttachment(v_id UUID)
+RETURNS VOID
+   AS $procedure$
+BEGIN
+
+    DELETE FROM network_attachments
+    WHERE id = v_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetAllFromNetworkAttachments()
+RETURNS SETOF network_attachments STABLE
+   AS $procedure$
+BEGIN
+
+   RETURN QUERY SELECT *
+   FROM network_attachments;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetNetworkAttachmentsByNicId(v_nic_id UUID)
+RETURNS SETOF network_attachments STABLE
+   AS $procedure$
+BEGIN
+
+   RETURN QUERY SELECT *
+   FROM network_attachments
+   WHERE nic_id = v_nic_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql 
b/packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql
new file mode 100644
index 0000000..d77c238
--- /dev/null
+++ b/packaging/dbscripts/upgrade/03_06_0340_add_network_attachment.sql
@@ -0,0 +1,19 @@
+---------------------------------------------------------------------
+--  table network_attachments
+---------------------------------------------------------------------
+CREATE TABLE network_attachments
+(
+  id UUID NOT NULL CONSTRAINT pk_network_attachments_id PRIMARY KEY,
+  network_id UUID NOT NULL,
+  nic_id UUID,
+  boot_protocol CHARACTER VARYING(20),
+  address CHARACTER VARYING(20),
+  netmask CHARACTER VARYING(20),
+  gateway CHARACTER VARYING(20),
+  custom_properties TEXT,
+  _create_date TIMESTAMP WITH TIME ZONE DEFAULT ('now'::text)::timestamp 
without time zone,
+  _update_date TIMESTAMP WITH TIME ZONE,
+  FOREIGN KEY (network_id) REFERENCES network(id) ON DELETE CASCADE
+);
+
+CREATE INDEX IDX_network_attachments_network_id ON 
network_attachments(network_id);


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

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

Reply via email to