Moti Asayag has uploaded a new change for review.

Change subject: engine: Introduce VmNicDao
......................................................................

engine: Introduce VmNicDao

The VmNicDao will serve as the DAO api for persisting
VmNetworkInterface entities to the data base.
It replaces the former VmNetworkInterfaceDao which will
serve as a read-only DAO to retrieve a viewable entity
to the clients.

Change-Id: Ib3d1ff6dfc415915244367c153ffc064ddd0d0df
Signed-off-by: Moti Asayag <masa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/RemoveVmTemplateInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/UpdateVmTemplateInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDao.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDaoDbFacadeImpl.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
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
A 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNicDaoTest.java
M packaging/dbscripts/create_views.sql
M packaging/dbscripts/network_sp.sql
M packaging/dbscripts/vm_templates_sp.sql
M packaging/dbscripts/vms_sp.sql
29 files changed, 553 insertions(+), 179 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/78/17178/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
index e26a571..4cdebff 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmCommand.java
@@ -639,7 +639,7 @@
             
iface.setSpeed(VmInterfaceType.forValue(iface.getType()).getSpeed());
             iface.setVmTemplateId(null);
             iface.setVmId(getParameters().getVmStaticData().getId());
-            DbFacade.getInstance().getVmNetworkInterfaceDao().save(iface);
+            getVmNicDao().save(iface);
             getCompensationContext().snapshotNewEntity(iface);
             
DbFacade.getInstance().getVmNetworkStatisticsDao().save(iface.getStatistics());
             getCompensationContext().snapshotNewEntity(iface.getStatistics());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
index 60af471..0937e7e 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmTemplateCommand.java
@@ -428,12 +428,12 @@
             iDynamic.setId(Guid.newGuid());
             iDynamic.setVmTemplateId(getVmTemplateId());
             iDynamic.setName(iface.getName());
-            iDynamic.setNetworkName(iface.getNetworkName());
+            iDynamic.setVnicProfileId(iface.getVnicProfileId());
             
iDynamic.setSpeed(VmInterfaceType.forValue(iface.getType()).getSpeed());
             iDynamic.setType(iface.getType());
             iDynamic.setLinked(iface.isLinked());
             templateInterfaces.add(iDynamic);
-            DbFacade.getInstance().getVmNetworkInterfaceDao().save(iDynamic);
+            getVmNicDao().save(iDynamic);
         }
         return templateInterfaces;
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java
index 6371b72..639a255 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ChangeVMClusterCommand.java
@@ -172,8 +172,8 @@
                 // if network not exists in cluster we remove the network to
                 // interface connection
                 if (net == null) {
-                    iface.setNetworkName(null);
-                    
DbFacade.getInstance().getVmNetworkInterfaceDao().update(iface);
+                    iface.setVnicProfileId(null);
+                    getVmNicDao().update(iface);
                 }
             }
         }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
index 9007b5c..e3e8bdc 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateCommand.java
@@ -396,7 +396,7 @@
             iDynamic.setSpeed(iface.getSpeed());
             iDynamic.setType(iface.getType());
 
-            DbFacade.getInstance().getVmNetworkInterfaceDao().save(iDynamic);
+            getVmNicDao().save(iDynamic);
             getCompensationContext().snapshotNewEntity(iDynamic);
             DbFacade.getInstance().getVmNetworkStatisticsDao().save(iStat);
             getCompensationContext().snapshotNewEntity(iStat);
@@ -418,7 +418,7 @@
         List<VmNetworkInterface> list =
                 
DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForTemplate(getVmTemplateId());
         for (VmNetworkInterface iface : list) {
-            
DbFacade.getInstance().getVmNetworkInterfaceDao().remove(iface.getId());
+            DbFacade.getInstance().getVmNicDao().remove(iface.getId());
         }
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
index 3d244a9..9d90134 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVmCommand.java
@@ -5,6 +5,7 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
@@ -176,8 +177,8 @@
                 // if network not exists in cluster we remove the network to
                 // interface connection
                 if (net == null) {
-                    iface.setNetworkName(null);
-                    
DbFacade.getInstance().getVmNetworkInterfaceDao().update(iface);
+                    iface.setVnicProfileId(null);
+                    getVmNicDao().update(iface);
                 }
 
             }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
index 5a5bf94..2c216b5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmCommand.java
@@ -19,9 +19,9 @@
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.common.businessentities.tags;
 import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
-import org.ovirt.engine.core.common.businessentities.tags;
 import org.ovirt.engine.core.common.config.Config;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java
index 01d0588..84127da 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmTemplateCommand.java
@@ -171,7 +171,7 @@
                 .getAllForTemplate(getVmTemplateId());
         for (VmNetworkInterface iface : list) {
             DbFacade.getInstance().getVmDeviceDao().remove(new 
VmDeviceId(iface.getId(), getVmTemplateId()));
-            
DbFacade.getInstance().getVmNetworkInterfaceDao().remove(iface.getId());
+            getVmNicDao().remove(iface.getId());
         }
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
index f94e53f..8eeffaa 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+
 import org.ovirt.engine.core.bll.context.CompensationContext;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.FeatureSupported;
@@ -19,6 +20,7 @@
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
 import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDao;
+import org.ovirt.engine.core.dao.network.VmNicDao;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
 import org.ovirt.engine.core.utils.transaction.TransactionMethod;
@@ -57,7 +59,7 @@
             throw new VdcBLLException(VdcBllErrors.MAC_ADDRESS_IS_IN_USE);
         }
 
-        getVmNetworkInterfaceDao().save(iface);
+        getVmNicDao().save(iface);
         getVmNetworkStatisticsDao().save(iface.getStatistics());
         compensationContext.snapshotNewEntity(iface);
         compensationContext.snapshotNewEntity(iface.getStatistics());
@@ -102,7 +104,7 @@
         if (interfaces != null) {
             for (VmNetworkInterface iface : interfaces) {
                 getMacPoolManager().freeMac(iface.getMacAddress());
-                getVmNetworkInterfaceDao().remove(iface.getId());
+                getVmNicDao().remove(iface.getId());
                 getVmNetworkStatisticsDao().remove(iface.getId());
             }
         }
@@ -184,6 +186,10 @@
         return DbFacade.getInstance().getVmNetworkInterfaceDao();
     }
 
+    protected VmNicDao getVmNicDao() {
+        return DbFacade.getInstance().getVmNicDao();
+    }
+
     protected VmDAO getVmDAO() {
         return DbFacade.getInstance().getVmDao();
     }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
index d6444e0..c4cfa96 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/AddVmTemplateInterfaceCommand.java
@@ -39,7 +39,7 @@
                 VmInterfaceType.forValue(
                         getParameters().getInterface().getType()).getSpeed());
 
-        getVmNetworkInterfaceDao().save(getParameters().getInterface());
+        getVmNicDao().save(getParameters().getInterface());
         VmDeviceUtils.addNetworkInterfaceDevice(
                 new VmDeviceId(getParameters().getInterface().getId(), 
getParameters().getVmTemplateId()),
                 getParameters().getInterface().isPlugged(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/RemoveVmTemplateInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/RemoveVmTemplateInterfaceCommand.java
index 70cbe73..83b9fb0 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/RemoveVmTemplateInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/RemoveVmTemplateInterfaceCommand.java
@@ -22,7 +22,7 @@
         }
         getDbFacade().getVmDeviceDao().remove(new 
VmDeviceId(getParameters().getInterfaceId(),
                 getParameters().getVmTemplateId()));
-        getVmNetworkInterfaceDao().remove(getParameters().getInterfaceId());
+        getVmNicDao().remove(getParameters().getInterfaceId());
         setSucceeded(true);
     }
 
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/UpdateVmTemplateInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/UpdateVmTemplateInterfaceCommand.java
index baf85b5..430e4a5 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/UpdateVmTemplateInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/template/UpdateVmTemplateInterfaceCommand.java
@@ -27,7 +27,7 @@
 
     @Override
     protected void executeCommand() {
-        getVmNetworkInterfaceDao().update(getParameters().getInterface());
+        getVmNicDao().update(getParameters().getInterface());
         VmDevice vmDevice = getDbFacade().getVmDeviceDao().get(new 
VmDeviceId(getParameters().getInterface().getId(), 
getParameters().getVmTemplateId()));
         
vmDevice.setCustomProperties(getParameters().getInterface().getCustomProperties());
         getDbFacade().getVmDeviceDao().update(vmDevice);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java
index 35c62c2..df7fa48 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/AddVmInterfaceCommand.java
@@ -87,7 +87,7 @@
     }
 
     private void addInterfaceToDb(VmNetworkInterface vmNetworkInterface) {
-        getVmNetworkInterfaceDao().save(vmNetworkInterface);
+        getVmNicDao().save(vmNetworkInterface);
         getCompensationContext().snapshotNewEntity(vmNetworkInterface);
 
         
getDbFacade().getVmNetworkStatisticsDao().save(vmNetworkInterface.getStatistics());
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java
index a4d7ad7..dd1000c 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/RemoveVmInterfaceCommand.java
@@ -42,7 +42,7 @@
         }
 
         // remove from db
-        getVmNetworkInterfaceDao().remove(getParameters().getInterfaceId());
+        getVmNicDao().remove(getParameters().getInterfaceId());
         
getDbFacade().getVmNetworkStatisticsDao().remove(getParameters().getInterfaceId());
         getDbFacade().getVmDeviceDao().remove(new 
VmDeviceId(getParameters().getInterfaceId(),
                 getParameters().getVmId()));
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java
index bd44a02..1a466e8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVmInterfaceCommand.java
@@ -83,7 +83,7 @@
                 public Void runInTransaction() {
                     getCompensationContext().snapshotEntity(oldIface);
                     getCompensationContext().snapshotEntity(oldVmDevice);
-                    getVmNetworkInterfaceDao().update(getInterface());
+                    getVmNicDao().update(getInterface());
                     
oldVmDevice.setCustomProperties(getInterface().getCustomProperties());
                     getDbFacade().getVmDeviceDao().update(oldVmDevice);
                     getCompensationContext().stateChanged();
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
index b7b332d..0c57967 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
@@ -34,6 +34,7 @@
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
 import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDao;
+import org.ovirt.engine.core.dao.network.VmNicDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 
@@ -57,6 +58,9 @@
     private VmNetworkInterfaceDao vmNetworkInterfaceDAO;
 
     @Mock
+    private VmNicDao vmNicDao;
+
+    @Mock
     private VmDAO vmDAO;
 
     @Spy
@@ -69,6 +73,7 @@
         doReturn(macPoolManager).when(vmInterfaceManager).getMacPoolManager();
         
doReturn(vmNetworkStatisticsDAO).when(vmInterfaceManager).getVmNetworkStatisticsDao();
         
doReturn(vmNetworkInterfaceDAO).when(vmInterfaceManager).getVmNetworkInterfaceDao();
+        doReturn(vmNicDao).when(vmInterfaceManager).getVmNicDao();
         doReturn(vmDAO).when(vmInterfaceManager).getVmDAO();
         
doNothing().when(vmInterfaceManager).auditLogMacInUseUnplug(any(VmNetworkInterface.class));
 
@@ -182,7 +187,7 @@
      */
     protected void verifyAddDelegatedCorrectly(VmNetworkInterface iface, 
VerificationMode addMacVerification) {
         verify(macPoolManager, 
addMacVerification).forceAddMac(iface.getMacAddress());
-        verify(vmNetworkInterfaceDAO).save(iface);
+        verify(vmNicDao).save(iface);
         verify(vmNetworkStatisticsDAO).save(iface.getStatistics());
     }
 
@@ -194,7 +199,7 @@
      */
     protected void verifyRemoveAllDelegatedCorrectly(VmNetworkInterface iface) 
{
         verify(macPoolManager, times(1)).freeMac(iface.getMacAddress());
-        verify(vmNetworkInterfaceDAO).remove(iface.getId());
+        verify(vmNicDao).remove(iface.getId());
         verify(vmNetworkStatisticsDAO).remove(iface.getId());
     }
 
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 1f302c9..7dca54d 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
@@ -108,6 +108,7 @@
 import org.ovirt.engine.core.dao.network.NetworkViewDao;
 import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
 import org.ovirt.engine.core.dao.network.VmNetworkStatisticsDao;
+import org.ovirt.engine.core.dao.network.VmNicDao;
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
 import org.ovirt.engine.core.dao.network.VnicProfileViewDao;
 import org.ovirt.engine.core.dao.provider.ProviderDao;
@@ -941,4 +942,13 @@
     public VnicProfileViewDao getVnicProfileViewDao() {
         return getDao(VnicProfileViewDao.class);
     }
+
+    /**
+     * Returns the singleton instance of {@link VmNicDao}.
+     *
+     * @return the dao
+     */
+    public VmNicDao getVmNicDao() {
+        return getDao(VmNicDao.class);
+    }
 }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
index 83ec52a..f45f6ea 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/auditloghandling/AuditLogableBase.java
@@ -42,6 +42,7 @@
 import org.ovirt.engine.core.dao.network.NetworkClusterDao;
 import org.ovirt.engine.core.dao.network.NetworkDao;
 import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao;
+import org.ovirt.engine.core.dao.network.VmNicDao;
 import org.ovirt.engine.core.dao.network.VnicProfileDao;
 import org.ovirt.engine.core.dao.provider.ProviderDao;
 import org.ovirt.engine.core.utils.log.Log;
@@ -612,6 +613,10 @@
         return getDbFacade().getVmNetworkInterfaceDao();
     }
 
+    protected VmNicDao getVmNicDao() {
+        return getDbFacade().getVmNicDao();
+    }
+
     protected NetworkClusterDao getNetworkClusterDAO() {
         return getDbFacade().getNetworkClusterDao();
     }
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
index 8d6cc8e..c9a7a02 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDao.java
@@ -4,9 +4,9 @@
 
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.compat.Guid;
-import org.ovirt.engine.core.dao.GenericDao;
+import org.ovirt.engine.core.dao.ReadDao;
 
-public interface VmNetworkInterfaceDao extends GenericDao<VmNetworkInterface, 
Guid> {
+public interface VmNetworkInterfaceDao extends ReadDao<VmNetworkInterface, 
Guid> {
     /**
      * Retrieves all interfaces for the given VM id.
      *
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
index 46d13ac..c4e6da4 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoDbFacadeImpl.java
@@ -94,63 +94,19 @@
     }
 
     @Override
-    public void save(VmNetworkInterface stats) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("id", stats.getId())
-                .addValue("mac_addr", stats.getMacAddress())
-                .addValue("name", stats.getName())
-                .addValue("network_name", stats.getNetworkName())
-                .addValue("speed", stats.getSpeed())
-                .addValue("vm_guid", stats.getVmId())
-                .addValue("vnic_profile_id", stats.getVnicProfileId())
-                .addValue("vmt_guid", stats.getVmTemplateId())
-                .addValue("type", stats.getType())
-                .addValue("port_mirroring", stats.isPortMirroring())
-                .addValue("linked", stats.isLinked());
-
-        getCallsHandler().executeModification("Insertvm_interface", 
parameterSource);
-    }
-
-    @Override
-    public void update(VmNetworkInterface iface) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("id", iface.getId())
-                .addValue("mac_addr", iface.getMacAddress())
-                .addValue("name", iface.getName())
-                .addValue("network_name", iface.getNetworkName())
-                .addValue("speed", iface.getSpeed())
-                .addValue("vm_guid", iface.getVmId())
-                .addValue("vnic_profile_id", iface.getVnicProfileId())
-                .addValue("vmt_guid", iface.getVmTemplateId())
-                .addValue("type", iface.getType())
-                .addValue("port_mirroring", iface.isPortMirroring())
-                .addValue("linked", iface.isLinked());
-
-        getCallsHandler().executeModification("Updatevm_interface", 
parameterSource);
-    }
-
-    @Override
-    public void remove(Guid id) {
-        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("id", id);
-
-        getCallsHandler().executeModification("Deletevm_interface", 
parameterSource);
-    }
-
-    @Override
     public List<VmNetworkInterface> getAll() {
         return getCallsHandler().executeReadList("GetAllFromvm_interface", 
mapper, getCustomMapSqlParameterSource());
     }
 
     @Override
     public List<VmNetworkInterface> getAllForNetwork(Guid networkId) {
-        return getCallsHandler().executeReadList("GetVmInterfacesByNetworkId",
+        return 
getCallsHandler().executeReadList("GetVmInterfaceViewsByNetworkId",
                 mapper, 
getCustomMapSqlParameterSource().addValue("network_id", networkId));
     }
 
     @Override
     public List<VmNetworkInterface> getAllForTemplatesByNetwork(Guid 
networkId) {
-        return 
getCallsHandler().executeReadList("GetVmTemplateInterfacesByNetworkId",
+        return 
getCallsHandler().executeReadList("GetVmTemplateInterfaceViewsByNetworkId",
                 mapper, 
getCustomMapSqlParameterSource().addValue("network_id", networkId));
     }
 
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDao.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDao.java
new file mode 100644
index 0000000..91b0d6d
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDao.java
@@ -0,0 +1,63 @@
+package org.ovirt.engine.core.dao.network;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.network.VmNic;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.GenericDao;
+
+public interface VmNicDao extends GenericDao<VmNic, Guid> {
+    /**
+     * Retrieves all interfaces for the given VM id.
+     *
+     * @param id
+     *            the Vm id
+     * @return the list of interfaces
+     */
+    List<VmNic> getAllForVm(Guid id);
+
+    /**
+     * Retrieves all interfaces for the given template id.
+     *
+     * @param id
+     *            the template id
+     * @return the list of interfaces
+     */
+    List<VmNic> getAllForTemplate(Guid id);
+
+    /**
+     * Retrieves the interfaces that the given network is attached to.
+     *
+     * @param networkId
+     *            the network
+     * @return the list of VmNetworkInterfaces
+     */
+    List<VmNic> getAllForNetwork(Guid networkId);
+
+    /**
+     * Retrieves the VmTemplate Network Interfaces that the given network is 
attached to.
+     *
+     * @param networkId
+     *            the network
+     * @return the list of VmNetworkInterfaces
+     */
+    List<VmNic> getAllForTemplatesByNetwork(Guid networkId);
+
+    /**
+     * Retrieves the MAC addresses of the Vms in the given Data Center.
+     *
+     * @param dataCenterId
+     *            the Data Center
+     * @return the list of MAC addresses
+     */
+    List<String> getAllMacsByDataCenter(Guid dataCenterId);
+
+    /***
+     * Retrieves the plugged VmNetworkInterfaces that have the given MAC 
address
+     *
+     * @param macAddress
+     *            the MAC address
+     * @return the list of plugged VmNetworkInterfaces
+     */
+    List<VmNic> getPluggedForMac(String macAddress);
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDaoDbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDaoDbFacadeImpl.java
new file mode 100644
index 0000000..28c3609
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/network/VmNicDaoDbFacadeImpl.java
@@ -0,0 +1,129 @@
+package org.ovirt.engine.core.dao.network;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.comparators.InterfaceComparerByMAC;
+import org.ovirt.engine.core.common.businessentities.network.VmNic;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.DefaultGenericDaoDbFacade;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+public class VmNicDaoDbFacadeImpl extends DefaultGenericDaoDbFacade<VmNic, 
Guid> implements VmNicDao {
+
+    public VmNicDaoDbFacadeImpl() {
+        super("VmInterface");
+    }
+
+    @Override
+    public List<VmNic> getAllForVm(Guid id) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource().addValue("vm_id", id);
+
+        List<VmNic> results =
+                getCallsHandler().executeReadList("GetVmInterfacesByVmId", 
VnicRowMapper.INSTANCE, parameterSource);
+        Collections.sort(results, new InterfaceComparerByMAC());
+        return results;
+    }
+
+    @Override
+    public List<VmNic> getAllForTemplate(Guid id) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource().addValue("template_id", id);
+
+        return getCallsHandler().executeReadList("GetVmInterfaceByTemplateId",
+                VnicRowMapper.INSTANCE,
+                parameterSource);
+    }
+
+    @Override
+    public List<VmNic> getAllForNetwork(Guid networkId) {
+        return getCallsHandler().executeReadList("GetVmInterfacesByNetworkId",
+                VnicRowMapper.INSTANCE, 
getCustomMapSqlParameterSource().addValue("network_id", networkId));
+    }
+
+    @Override
+    public List<VmNic> getAllForTemplatesByNetwork(Guid networkId) {
+        return 
getCallsHandler().executeReadList("GetVmTemplateInterfacesByNetworkId",
+                VnicRowMapper.INSTANCE, 
getCustomMapSqlParameterSource().addValue("network_id", networkId));
+    }
+
+    @Override
+    public List<String> getAllMacsByDataCenter(Guid dataCenterId) {
+        return getCallsHandler().executeReadList("GetMacsByDataCenterId",
+                macMapper, 
getCustomMapSqlParameterSource().addValue("data_center_id", dataCenterId));
+    }
+
+    @Override
+    public List<VmNic> getPluggedForMac(String macAddress) {
+        return getCallsHandler().executeReadList("GetPluggedVmInterfacesByMac",
+                VnicRowMapper.INSTANCE, 
getCustomMapSqlParameterSource().addValue("mac_address", macAddress));
+    }
+
+    @Override
+    protected MapSqlParameterSource createFullParametersMapper(VmNic entity) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("id", entity.getId())
+                .addValue("mac_addr", entity.getMacAddress())
+                .addValue("name", entity.getName())
+                .addValue("speed", entity.getSpeed())
+                .addValue("vm_guid", entity.getVmId())
+                .addValue("vnic_profile_id", entity.getVnicProfileId())
+                .addValue("vmt_guid", entity.getVmTemplateId())
+                .addValue("type", entity.getType())
+                .addValue("linked", entity.isLinked());
+        return parameterSource;
+    }
+
+    @Override
+    protected MapSqlParameterSource createIdParameterMapper(Guid id) {
+        return getCustomMapSqlParameterSource().addValue("id", id);
+    }
+
+    @Override
+    protected RowMapper<VmNic> createEntityRowMapper() {
+        return VnicRowMapper.INSTANCE;
+    }
+
+    static abstract class VmNicRowMapperBase<T extends VmNic> implements 
RowMapper<T> {
+
+        @Override
+        public T mapRow(ResultSet rs, int rowNum) throws SQLException {
+            T entity = createVmNicEntity();
+            entity.setId(getGuidDefaultEmpty(rs, "id"));
+            entity.setName(rs.getString("name"));
+            entity.setVmId(getGuid(rs, "vm_guid"));
+            entity.setVmTemplateId(getGuid(rs, "vmt_guid"));
+            entity.setType((Integer) rs.getObject("type"));
+            entity.setMacAddress(rs.getString("mac_addr"));
+            entity.setVnicProfileId(getGuid(rs, "vnic_profile_id"));
+            entity.setSpeed((Integer) rs.getObject("speed"));
+            entity.setLinked(rs.getBoolean("linked"));
+            return entity;
+        }
+
+        abstract protected T createVmNicEntity();
+    }
+
+    private static class VnicRowMapper extends VmNicRowMapperBase<VmNic> {
+
+        public static VnicRowMapper INSTANCE = new VnicRowMapper();
+
+        @Override
+        protected VmNic createVmNicEntity() {
+            return new VmNic();
+        }
+
+    }
+
+    protected final RowMapper<String> macMapper = new RowMapper<String>() {
+
+        private static final int MAC_COLUMN_POSITION = 1;
+
+        @Override
+        public String mapRow(ResultSet rs, int rowNum) throws SQLException {
+            return rs.getString(MAC_COLUMN_POSITION);
+        }
+    };
+}
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 e6312a8..351b430 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
@@ -9,6 +9,7 @@
 InterfaceDao=org.ovirt.engine.core.dao.network.InterfaceDaoDbFacadeImpl
 
VmNetworkInterfaceDao=org.ovirt.engine.core.dao.network.VmNetworkInterfaceDaoDbFacadeImpl
 VnicProfileDao=org.ovirt.engine.core.dao.network.VnicProfileDaoDbFacadeImpl
+VmNicDao=org.ovirt.engine.core.dao.network.VmNicDaoDbFacadeImpl
 
VnicProfileViewDao=org.ovirt.engine.core.dao.network.VnicProfileViewDaoDbFacadeImpl
 
VmNetworkStatisticsDao=org.ovirt.engine.core.dao.network.VmNetworkStatisticsDaoDbFacadeImpl
 LunDAO=org.ovirt.engine.core.dao.LunDAODbFacadeImpl
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 6e5c447..bd28aed 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
@@ -379,7 +379,9 @@
 
     public static final String MAC_ADDRESS = "00:1a:4a:16:87:db";
 
-    public static final int NUMBER_OF_VM_INTERFACES = 3;
+    public static final int NUMBER_OF_VM_INTERFACE_VIEWS = 3;
+
+    public static final int NUMBER_OF_VM_INTERFACES = 4;
 
     /**
      * Gluster Hook ID(s)
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
index 67935c6..1c8303f 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNetworkInterfaceDaoTest.java
@@ -13,7 +13,6 @@
 import org.junit.Test;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType;
-import org.ovirt.engine.core.common.businessentities.VmDeviceId;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkStatistics;
 import org.ovirt.engine.core.compat.Guid;
@@ -207,63 +206,11 @@
         }
     }
 
-    /**
-     * Ensures that saving an interface works as expected.
-     */
-    @Test
-    public void testSave() {
-        newVmInterface.setVmId(VM_ID);
-        newVmDevice.setId(new VmDeviceId(newVmInterface.getId(), VM_ID));
-
-        dao.save(newVmInterface);
-        vmDevicesDao.save(newVmDevice);
-        StatsDao.save(newVmInterface.getStatistics());
-
-        VmNetworkInterface savedInterface = dao.get(newVmInterface.getId());
-        assertNotNull(savedInterface);
-        assertEquals(newVmInterface.getName(), savedInterface.getName());
-    }
-
-    /**
-     * Ensures updating an interface works.
-     */
-    @Test
-    public void testUpdate() {
-        List<VmNetworkInterface> before = dao.getAllForVm(VM_ID);
-        VmNetworkInterface iface = before.get(0);
-
-        iface.setName(iface.getName().toUpperCase());
-
-        dao.update(iface);
-
-        List<VmNetworkInterface> after = dao.getAllForVm(VM_ID);
-        boolean found = false;
-
-        for (VmNetworkInterface ifaced : after) {
-            found |= ifaced.getName().equals(iface.getName());
-        }
-
-        assertTrue(found);
-    }
-
-    /**
-     * Ensures that the specified VM's interfaces are deleted.
-     */
-    @Test
-    public void testRemove() {
-        assertNotNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE));
-        dao.remove(FixturesTool.VM_NETWORK_INTERFACE);
-        assertNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE));
-
-        dao.save(existingVmInterface);
-        assertNotNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE));
-    }
-
     @Test
     public void testGetAll() throws Exception {
         List<VmNetworkInterface> interfaces = dao.getAll();
         assertNotNull(interfaces);
-        assertEquals(FixturesTool.NUMBER_OF_VM_INTERFACES, interfaces.size());
+        assertEquals(FixturesTool.NUMBER_OF_VM_INTERFACE_VIEWS, 
interfaces.size());
     }
 
     @Test
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNicDaoTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNicDaoTest.java
new file mode 100644
index 0000000..741b348
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/network/VmNicDaoTest.java
@@ -0,0 +1,194 @@
+package org.ovirt.engine.core.dao.network;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.List;
+
+import org.junit.Test;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.common.businessentities.network.VmNic;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dao.BaseDAOTestCase;
+import org.ovirt.engine.core.dao.FixturesTool;
+
+public class VmNicDaoTest extends BaseDAOTestCase {
+    private static final Guid TEMPLATE_ID = new 
Guid("1b85420c-b84c-4f29-997e-0eb674b40b79");
+    private static final Guid VM_ID = new 
Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
+
+    private VmNicDao dao;
+
+    private VmNic existingVmNic;
+    private VmNic existingTemplateNic;
+    private VmNic newVmNic;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        dao = dbFacade.getVmNicDao();
+        existingVmNic = dao.get(FixturesTool.VM_NETWORK_INTERFACE);
+        existingTemplateNic = dao.get(FixturesTool.TEMPLATE_NETWORK_INTERFACE);
+
+        newVmNic = new VmNetworkInterface();
+        newVmNic.setId(Guid.newGuid());
+        newVmNic.setVnicProfileId(FixturesTool.VM_NETWORK_INTERFACE_PROFILE);
+        newVmNic.setName("eth77");
+        newVmNic.setLinked(true);
+        newVmNic.setSpeed(1000);
+        newVmNic.setType(3);
+        newVmNic.setMacAddress("01:C0:81:21:71:17");
+    }
+
+    /**
+     * Ensures null is returned.
+     */
+    @Test
+    public void testGetWithNonExistingId() {
+        VmNic result = dao.get(Guid.newGuid());
+        assertNull(result);
+    }
+
+    /**
+     * Ensures that the network interface is returned.
+     */
+    @Test
+    public void testGet() {
+        VmNic result = dao.get(FixturesTool.VM_NETWORK_INTERFACE);
+        assertNotNull(result);
+        assertEquals(FixturesTool.VM_NETWORK_INTERFACE, result.getId());
+    }
+
+    /**
+     * Ensures that an empty collection is returned.
+     */
+    @Test
+    public void testGetAllForTemplateWithInvalidTemplate() {
+        List<VmNic> result = dao.getAllForTemplate(Guid.newGuid());
+        assertNotNull(result);
+        assertTrue(result.isEmpty());
+    }
+
+    /**
+     * Ensures that interfaces are returned.
+     */
+    @Test
+    public void testGetAllForTemplate() {
+        List<VmNic> result = dao.getAllForTemplate(TEMPLATE_ID);
+        assertCorrectResultForTemplate(result);
+    }
+
+    /**
+     * Ensures an empty collection is returned.
+     */
+    @Test
+    public void testGetAllInterfacesForVmWithInvalidVm() {
+        List<VmNic> result = dao.getAllForVm(Guid.newGuid());
+        assertNotNull(result);
+        assertTrue(result.isEmpty());
+    }
+
+    /**
+     * Ensures that a collection of interfaces related the specified VM are 
returned.
+     */
+    @Test
+    public void testGetAllInterfacesForVm() {
+        List<VmNic> result = dao.getAllForVm(VM_ID);
+        assertNotNull(result);
+        assertFalse(result.isEmpty());
+        for (VmNic iface : result) {
+            assertEquals(VM_ID, iface.getVmId());
+        }
+    }
+
+    /**
+     * Ensures that saving an interface works as expected.
+     */
+    @Test
+    public void testSave() {
+        newVmNic.setVmId(VM_ID);
+        dao.save(newVmNic);
+
+        VmNic savedInterface = dao.get(newVmNic.getId());
+        assertNotNull(savedInterface);
+        assertEquals(newVmNic.getName(), savedInterface.getName());
+    }
+
+    /**
+     * Ensures updating an interface works.
+     */
+    @Test
+    public void testUpdate() {
+        List<VmNic> before = dao.getAllForVm(VM_ID);
+        VmNic iface = before.get(0);
+
+        iface.setName(iface.getName().toUpperCase());
+        dao.update(iface);
+
+        List<VmNic> after = dao.getAllForVm(VM_ID);
+        boolean found = false;
+
+        for (VmNic ifaced : after) {
+            found |= ifaced.getName().equals(iface.getName());
+        }
+
+        assertTrue(found);
+    }
+
+    /**
+     * Ensures that the specified VM's interfaces are deleted.
+     */
+    @Test
+    public void testRemove() {
+        assertNotNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE));
+        dao.remove(FixturesTool.VM_NETWORK_INTERFACE);
+        assertNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE));
+
+        dao.save(existingVmNic);
+        assertNotNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE));
+    }
+
+    @Test
+    public void testGetAll() throws Exception {
+        List<VmNic> interfaces = dao.getAll();
+        assertNotNull(interfaces);
+        assertEquals(FixturesTool.NUMBER_OF_VM_INTERFACES, interfaces.size());
+    }
+
+    @Test
+    public void testGetAllForTemplatesByNetwork() throws Exception {
+        List<VmNic> result = 
dao.getAllForTemplatesByNetwork(FixturesTool.NETWORK_ENGINE);
+        assertEquals(existingTemplateNic, result.get(0));
+    }
+
+    @Test
+    public void testGetAllForNetwork() throws Exception {
+        List<VmNic> result = dao.getAllForNetwork(FixturesTool.NETWORK_ENGINE);
+        assertEquals(existingVmNic, result.get(0));
+    }
+
+    @Test
+    public void testGetAllMacsByStoragePool() throws Exception {
+        List<String> result = 
dao.getAllMacsByDataCenter(FixturesTool.STORAGE_POOL_NFS_2);
+        assertEquals(FixturesTool.MAC_ADDRESS, result.get(0));
+    }
+
+    @Test
+    public void testGetPluggedForMac() throws Exception {
+        List<VmNic> result = dao.getPluggedForMac(FixturesTool.MAC_ADDRESS);
+        for (VmNic vmNetworkInterface : result) {
+            assertEquals(FixturesTool.MAC_ADDRESS, 
vmNetworkInterface.getMacAddress());
+        }
+    }
+
+    private void assertCorrectResultForTemplate(List<VmNic> result) {
+        assertNotNull(result);
+        assertFalse(result.isEmpty());
+        for (VmNic iface : result) {
+            assertEquals(TEMPLATE_ID, iface.getVmTemplateId());
+        }
+    }
+}
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index d582449..1652a5a 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -845,8 +845,7 @@
   JOIN vm_interface ON vm_interface_statistics.id = vm_interface.id
   JOIN vm_static ON vm_interface.vm_guid = vm_static.vm_guid
   JOIN vm_device ON vm_interface.vm_guid = vm_device.vm_id AND vm_interface.id 
= vm_device.device_id
-  LEFT JOIN vnic_profiles ON vnic_profiles.id = vm_interface.vnic_profile_id
-  JOIN network ON network.id = vnic_profiles.network_id
+  LEFT JOIN (vnic_profiles JOIN network ON network.id = 
vnic_profiles.network_id) ON vnic_profiles.id = vm_interface.vnic_profile_id
   UNION
   SELECT vm_interface_statistics.rx_rate, vm_interface_statistics.tx_rate, 
vm_interface_statistics.rx_drop,
       vm_interface_statistics.tx_drop, vm_interface_statistics.iface_status, 
vm_interface.type, vm_interface.speed,
@@ -858,8 +857,7 @@
   RIGHT JOIN vm_interface ON vm_interface_statistics.id = vm_interface.id
   JOIN vm_static AS vm_templates ON vm_interface.vmt_guid = 
vm_templates.vm_guid
   JOIN vm_device ON vm_interface.vmt_guid = vm_device.vm_id AND 
vm_interface.id = vm_device.device_id
-  LEFT JOIN vnic_profiles ON vnic_profiles.id = vm_interface.vnic_profile_id
-  JOIN network ON network.id = vnic_profiles.network_id;
+  LEFT JOIN (vnic_profiles JOIN network ON network.id = 
vnic_profiles.network_id) ON vnic_profiles.id = vm_interface.vnic_profile_id;
 ----------------------------------------------
 -- Event Notification Views
 ----------------------------------------------
diff --git a/packaging/dbscripts/network_sp.sql 
b/packaging/dbscripts/network_sp.sql
index 9370afb..b0fe204 100644
--- a/packaging/dbscripts/network_sp.sql
+++ b/packaging/dbscripts/network_sp.sql
@@ -445,69 +445,54 @@
 
 ----------------------------------------------------------------
 -- [vm_interface] Table
---
-
-
-Create or replace FUNCTION Insertvm_interface(v_id UUID,
-       v_mac_addr VARCHAR(20) ,
-       v_name VARCHAR(50),
-       v_network_name VARCHAR(50) ,
-       v_speed INTEGER ,
-       v_vnic_profile_id UUID ,
-       v_vm_guid UUID ,
-       v_vmt_guid UUID ,
+----------------------------------------------------------------
+Create or replace FUNCTION InsertVmInterface(v_id UUID,
+    v_mac_addr VARCHAR(20) ,
+    v_name VARCHAR(50),
+    v_speed INTEGER ,
+    v_vnic_profile_id UUID ,
+    v_vm_guid UUID ,
+    v_vmt_guid UUID ,
     v_type INTEGER,
-    v_port_mirroring BOOLEAN,
     v_linked BOOLEAN)
 RETURNS VOID
    AS $procedure$
 BEGIN
-INSERT INTO vm_interface(id, mac_addr, name, network_name, speed, 
vnic_profile_id, VM_GUID, VMT_GUID, type, port_mirroring, linked)
-       VALUES(v_id, v_mac_addr, v_name, v_network_name, v_speed, 
v_vnic_profile_id, v_vm_guid, v_vmt_guid, v_type, v_port_mirroring, v_linked);
+INSERT INTO vm_interface(id, mac_addr, name, speed, vnic_profile_id, vm_guid, 
vmt_guid, type, linked)
+       VALUES(v_id, v_mac_addr, v_name, v_speed, v_vnic_profile_id, v_vm_guid, 
v_vmt_guid, v_type, v_linked);
 END; $procedure$
 LANGUAGE plpgsql;
 
 
-
-
-
-Create or replace FUNCTION Updatevm_interface(v_id UUID,
-       v_mac_addr VARCHAR(20) ,
-       v_name VARCHAR(50),
-       v_network_name VARCHAR(50) ,
-       v_speed INTEGER ,
-       v_vnic_profile_id UUID ,
-       v_vm_guid UUID ,
-       v_vmt_guid UUID ,
+Create or replace FUNCTION UpdateVmInterface(v_id UUID,
+    v_mac_addr VARCHAR(20) ,
+    v_name VARCHAR(50),
+    v_speed INTEGER ,
+    v_vnic_profile_id UUID ,
+    v_vm_guid UUID ,
+    v_vmt_guid UUID ,
     v_type INTEGER,
-    v_port_mirroring BOOLEAN,
     v_linked BOOLEAN)
 RETURNS VOID
-
-       --The [vm_interface] table doesn't have a timestamp column. Optimistic 
concurrency logic cannot be generated
    AS $procedure$
 BEGIN
       UPDATE vm_interface
-      SET mac_addr = v_mac_addr,name = v_name,network_name = v_network_name,
-      speed = v_speed, vnic_profile_id = v_vnic_profile_id, VM_GUID = 
v_vm_guid,VMT_GUID = v_vmt_guid,type = v_type,
-      _update_date = LOCALTIMESTAMP, port_mirroring = v_port_mirroring, linked 
= v_linked
+      SET mac_addr = v_mac_addr,name = v_name, speed = v_speed, 
vnic_profile_id = v_vnic_profile_id, vm_guid = v_vm_guid,
+      vmt_guid = v_vmt_guid,type = v_type, _update_date = LOCALTIMESTAMP, 
linked = v_linked
       WHERE id = v_id;
 END; $procedure$
 LANGUAGE plpgsql;
 
 
-
-
-
-Create or replace FUNCTION Deletevm_interface(v_id UUID)
+Create or replace FUNCTION DeleteVmInterface(v_id UUID)
 RETURNS VOID
    AS $procedure$
    DECLARE
    v_val  UUID;
 BEGIN
 
-       -- Get (and keep) a shared lock with "right to upgrade to exclusive"
-       -- in order to force locking parent before children
+   -- Get (and keep) a shared lock with "right to upgrade to exclusive"
+   -- in order to force locking parent before children
    select   id INTO v_val FROM vm_interface  WHERE id = v_id     FOR UPDATE;
 
    DELETE FROM vm_interface
@@ -517,7 +502,85 @@
 LANGUAGE plpgsql;
 
 
+Create or replace FUNCTION GetVmInterfaceByVmInterfaceId(v_id UUID) RETURNS 
SETOF vm_interface
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM vm_interface
+   WHERE id = v_id;
+END; $procedure$
+LANGUAGE plpgsql;
 
+
+Create or replace FUNCTION GetAllFromVmInterfaces() RETURNS SETOF vm_interface
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM vm_interface;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetVmInterfacesByVmId(v_vm_id UUID)
+RETURNS SETOF vm_interface
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM vm_interface
+   WHERE vm_guid = v_vm_id;
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetVmInterfaceByTemplateId(v_template_id UUID)
+RETURNS SETOF vm_interface
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT *
+   FROM vm_interface
+   WHERE vmt_guid = v_template_id;
+
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetVmInterfacesByNetworkId(v_network_id UUID) 
RETURNS SETOF vm_interface
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT vm_interface.*
+   FROM vm_interface
+   INNER JOIN vnic_profiles ON vm_interface.vnic_profile_id = vnic_profiles.id
+   INNER JOIN vm_static on vm_interface.vm_guid = vm_static.vm_guid
+   WHERE vnic_profiles.network_id = v_network_id
+   AND vm_static.entity_type = 'VM';
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+Create or replace FUNCTION GetVmTemplateInterfacesByNetworkId(v_network_id 
UUID) RETURNS SETOF vm_interface
+AS $procedure$
+BEGIN
+   RETURN QUERY SELECT vm_interface.*
+   FROM vm_interface
+   INNER JOIN vm_static on vm_interface.vmt_guid = vm_static.vm_guid
+   INNER JOIN vnic_profiles ON vm_interface.vnic_profile_id = vnic_profiles.id
+   WHERE vnic_profiles.network_id = v_network_id
+   AND vm_static.entity_type  = 'TEMPLATE';
+END; $procedure$
+LANGUAGE plpgsql;
+
+----------------------------------------------------------------
+-- VM Interface View
+----------------------------------------------------------------
+
+Create or replace FUNCTION GetAllFromvm_interface() RETURNS SETOF 
vm_interface_view
+AS $procedure$
+BEGIN
+RETURN QUERY SELECT *
+FROM vm_interface_view;
+
+END; $procedure$
+LANGUAGE plpgsql;
 
 
 
@@ -914,7 +977,7 @@
 
 
 
-Create or replace FUNCTION GetVmInterfacesByNetworkId(v_network_id UUID) 
RETURNS SETOF vm_interface_view
+Create or replace FUNCTION GetVmInterfaceViewsByNetworkId(v_network_id UUID) 
RETURNS SETOF vm_interface_view
    AS $procedure$
 BEGIN
    RETURN QUERY SELECT vm_interface_view.*
@@ -931,7 +994,7 @@
 
 
 
-Create or replace FUNCTION GetVmTemplateInterfacesByNetworkId(v_network_id 
UUID) RETURNS SETOF vm_interface_view
+Create or replace FUNCTION GetVmTemplateInterfaceViewsByNetworkId(v_network_id 
UUID) RETURNS SETOF vm_interface_view
    AS $procedure$
 BEGIN
    RETURN QUERY SELECT vm_interface_view.*
diff --git a/packaging/dbscripts/vm_templates_sp.sql 
b/packaging/dbscripts/vm_templates_sp.sql
index 16309ef..6fc1f5b 100644
--- a/packaging/dbscripts/vm_templates_sp.sql
+++ b/packaging/dbscripts/vm_templates_sp.sql
@@ -399,12 +399,9 @@
    WHERE EXISTS (
       SELECT 1
       FROM vm_interface
-      INNER JOIN network
-      ON network.name = vm_interface.network_name
-      INNER JOIN network_cluster
-      ON network.id = network_cluster.network_id
-      WHERE network.id = v_network_id
-      AND vm_templates_view.vds_group_id = network_cluster.cluster_id
+      INNER JOIN vnic_profiles
+      ON vnic_profiles.id = vm_interface.vnic_profile_id
+      WHERE vnic_profiles.network_id = v_network_id
       AND vm_interface.vmt_guid = vm_templates_view.vmt_guid);
 END; $procedure$
 LANGUAGE plpgsql;
diff --git a/packaging/dbscripts/vms_sp.sql b/packaging/dbscripts/vms_sp.sql
index e2076ba..20504f3 100644
--- a/packaging/dbscripts/vms_sp.sql
+++ b/packaging/dbscripts/vms_sp.sql
@@ -1108,12 +1108,9 @@
    WHERE EXISTS (
       SELECT 1
       FROM vm_interface
-      INNER JOIN network
-      ON network.name = vm_interface.network_name
-      INNER JOIN network_cluster
-      ON network.id = network_cluster.network_id
-      WHERE network_id = v_network_id
-      AND vms.vds_group_id = network_cluster.cluster_id
+      INNER JOIN vnic_profiles
+      ON vnic_profiles.id = vm_interface.vnic_profile_id
+      WHERE vnic_profiles.network_id = v_network_id
       AND vm_interface.vm_guid = vms.vm_guid);
 END; $procedure$
 LANGUAGE plpgsql;


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib3d1ff6dfc415915244367c153ffc064ddd0d0df
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Moti Asayag <masa...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to