From e86b6127500d448ca72fa0dd6ffc76e42192632b Mon Sep 17 00:00:00 2001 From: Alena Prokharchyk Date: Mon, 28 Oct 2013 12:53:00 -0700 Subject: [PATCH] ResourceDetails - added createDetail to ResourceDetailDao interface to provide generic way of creating resourceDetail DB objects --- .../dc/dao/DataCenterDetailsDaoImpl.java | 8 +-- .../com/cloud/dc/dao/ResourceDetailDao.java | 2 + .../network/dao/NetworkDetailsDaoImpl.java | 5 ++ .../dao/ServiceOfferingDetailsDaoImpl.java | 7 ++- .../dao/StoragePoolDetailsDaoImpl.java | 5 ++ .../storage/dao/VMTemplateDetailsDaoImpl.java | 7 +-- .../storage/dao/VolumeDetailsDaoImpl.java | 7 ++- .../com/cloud/vm/dao/NicDetailDaoImpl.java | 6 ++- .../cloud/vm/dao/UserVmDetailsDaoImpl.java | 7 ++- .../db/PrimaryDataStoreDetailsDaoImpl.java | 8 +-- .../metadata/ResourceMetaDataManagerImpl.java | 50 ++++++------------- 11 files changed, 59 insertions(+), 53 deletions(-) diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java index eb9176d1047..bc0621dacad 100644 --- a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java @@ -28,9 +28,6 @@ import com.cloud.dc.DataCenterDetailVO; @Local(value=DataCenterDetailsDao.class) public class DataCenterDetailsDaoImpl extends ResourceDetailDaoBase implements DataCenterDetailsDao, ScopedConfigStorage { - public DataCenterDetailsDaoImpl() { - } - @Override public Scope getScope() { return ConfigKey.Scope.Zone; @@ -42,4 +39,9 @@ public class DataCenterDetailsDaoImpl extends ResourceDetailDaoBase extends GenericDao< public void addDetails(List details); public void addDetail(R detail); + + public R createDetail(long resourceId, String key, String value); } diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java index 915e1847b45..7f43f44e070 100644 --- a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java @@ -26,4 +26,9 @@ import com.cloud.dc.dao.ResourceDetailDaoBase; @Local(value=NetworkDetailsDao.class) public class NetworkDetailsDaoImpl extends ResourceDetailDaoBase implements NetworkDetailsDao { + @Override + public NetworkDetailVO createDetail(long resourceId, String key, String value) { + return new NetworkDetailVO(resourceId, key, value); + } + } diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java index 6cac9da2d87..96f1085e90f 100644 --- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java @@ -27,7 +27,10 @@ import com.cloud.service.ServiceOfferingDetailsVO; @Local(value=ServiceOfferingDetailsDao.class) public class ServiceOfferingDetailsDaoImpl extends ResourceDetailDaoBase implements ServiceOfferingDetailsDao { - public ServiceOfferingDetailsDaoImpl() { - + + @Override + public ServiceOfferingDetailsVO createDetail(long resourceId, String key, String value) { + return new ServiceOfferingDetailsVO(resourceId, key, value); } + } diff --git a/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java index 6d7991f058c..521f3254747 100644 --- a/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/storage/dao/StoragePoolDetailsDaoImpl.java @@ -42,4 +42,9 @@ public class StoragePoolDetailsDaoImpl extends ResourceDetailDaoBase implements VMTemplateDetailsDao { - public VMTemplateDetailsDaoImpl(){ - + + @Override + public VMTemplateDetailVO createDetail(long resourceId, String key, String value) { + return new VMTemplateDetailVO(resourceId, key, value); } - } diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java index c62b66ab6f1..26fdd2f708b 100644 --- a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java @@ -26,7 +26,10 @@ import com.cloud.storage.VolumeDetailVO; @Component @Local(value=VolumeDetailsDao.class) public class VolumeDetailsDaoImpl extends ResourceDetailDaoBase implements VolumeDetailsDao { - public VolumeDetailsDaoImpl() { - + + @Override + public VolumeDetailVO createDetail(long resourceId, String key, String value) { + return new VolumeDetailVO(resourceId, key, value); } + } diff --git a/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java index a0090257932..afab4fd5350 100644 --- a/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java @@ -26,7 +26,9 @@ import com.cloud.vm.NicDetailVO; @Component @Local (value={NicDetailDao.class}) public class NicDetailDaoImpl extends ResourceDetailDaoBase implements NicDetailDao { - public NicDetailDaoImpl() { - + + @Override + public NicDetailVO createDetail(long resourceId, String key, String value) { + return new NicDetailVO(resourceId, key, value); } } diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java index ba72f256edd..28291922c07 100644 --- a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java @@ -26,7 +26,10 @@ import com.cloud.vm.UserVmDetailVO; @Component @Local(value=UserVmDetailsDao.class) public class UserVmDetailsDaoImpl extends ResourceDetailDaoBase implements UserVmDetailsDao { - public UserVmDetailsDaoImpl() { - + + @Override + public UserVmDetailVO createDetail(long resourceId, String key, String value) { + return new UserVmDetailVO(resourceId, key, value); } + } diff --git a/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java index 13b19d0c08b..a1470a30173 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/volume/db/PrimaryDataStoreDetailsDaoImpl.java @@ -25,8 +25,10 @@ import com.cloud.dc.dao.ResourceDetailDaoBase; @Component public class PrimaryDataStoreDetailsDaoImpl extends ResourceDetailDaoBase implements PrimaryDataStoreDetailsDao { - - public PrimaryDataStoreDetailsDaoImpl() { - + + @Override + public PrimaryDataStoreDetailVO createDetail(long resourceId, String key, String value) { + return new PrimaryDataStoreDetailVO(resourceId, key, value); } + } diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java index c94f32f7563..9a61a67ab9c 100644 --- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java +++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java @@ -26,26 +26,20 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; import org.apache.cloudstack.api.ResourceDetail; -import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO; import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; -import com.cloud.dc.DataCenterDetailVO; import com.cloud.dc.dao.DataCenterDetailsDao; import com.cloud.dc.dao.ResourceDetailDao; import com.cloud.event.ActionEvent; import com.cloud.event.EventTypes; import com.cloud.exception.InvalidParameterValueException; -import com.cloud.network.dao.NetworkDetailVO; import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.server.ResourceMetaDataService; import com.cloud.server.ResourceTag.ResourceObjectType; import com.cloud.server.TaggedResourceService; -import com.cloud.service.ServiceOfferingDetailsVO; import com.cloud.service.dao.ServiceOfferingDetailsDao; -import com.cloud.storage.VMTemplateDetailVO; -import com.cloud.storage.VolumeDetailVO; import com.cloud.storage.dao.VMTemplateDetailsDao; import com.cloud.storage.dao.VolumeDetailsDao; import com.cloud.utils.component.ManagerBase; @@ -53,8 +47,6 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.Transaction; import com.cloud.utils.db.TransactionCallback; import com.cloud.utils.db.TransactionStatus; -import com.cloud.vm.NicDetailVO; -import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.dao.NicDetailDao; import com.cloud.vm.dao.UserVmDetailsDao; @@ -119,7 +111,6 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource @Override public Boolean doInTransaction(TransactionStatus status) { for (String key : details.keySet()) { - long id = _taggedResourceMgr.getResourceId(resourceId, resourceType); String value = details.get(key); if (value == null || value.isEmpty()) { @@ -127,33 +118,16 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource } DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType); - ResourceDetail detail = null; + ResourceDetail detail = newDetailDaoHelper.createDetail( _taggedResourceMgr.getResourceId(resourceId, resourceType), key, value); - // TODO - Have a better design here for getting the DAO. - if(resourceType == ResourceObjectType.Volume){ - detail = new VolumeDetailVO(id, key, value); - } else if (resourceType == ResourceObjectType.Nic){ - detail = new NicDetailVO(id, key, value); - } else if (resourceType == ResourceObjectType.Zone){ - detail = new DataCenterDetailVO(id, key, value); - } else if (resourceType == ResourceObjectType.Network){ - detail = new NetworkDetailVO(id, key, value); - } else if (resourceType == ResourceObjectType.UserVm) { - detail = new UserVmDetailVO(id, key, value); - } else if (resourceType == ResourceObjectType.Template) { - detail = new VMTemplateDetailVO(id, key, value); - } else if (resourceType == ResourceObjectType.ServiceOffering) { - detail = new ServiceOfferingDetailsVO(id, key, value); - } else if (resourceType == ResourceObjectType.Storage) { - detail = new StoragePoolDetailVO(id, key, value); - } else { + if (detail == null) { throw new UnsupportedOperationException("ResourceType " + resourceType + " doesn't support metadata"); + } newDetailDaoHelper.addDetail(detail); } - return true; } }); @@ -174,38 +148,42 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource private class DetailDaoHelper { private ResourceObjectType resourceType; + private ResourceDetailDao dao; private DetailDaoHelper(ResourceObjectType resourceType) { if (!resourceType.resourceMetadataSupport()) { throw new UnsupportedOperationException("ResourceType " + resourceType + " doesn't support metadata"); } this.resourceType = resourceType; - } - - private void addDetail(ResourceDetail detail) { - ResourceDetailDao dao = (ResourceDetailDao)_daoMap.get(resourceType); + ResourceDetailDao dao = _daoMap.get(resourceType); if (dao == null) { throw new UnsupportedOperationException("ResourceType " + resourceType + " doesn't support metadata"); } + this.dao = (ResourceDetailDao)_daoMap.get(resourceType); + } + + private void addDetail(ResourceDetail detail) { dao.addDetail(detail); } private void removeDetail(long resourceId, String key) { - ResourceDetailDao dao = _daoMap.get(resourceType); dao.removeDetail(resourceId, key); } private List getDetails(long resourceId) { - ResourceDetailDao dao = _daoMap.get(resourceType); List detailList = new ArrayList(); detailList = dao.findDetailsList(resourceId); return detailList; } private ResourceDetail getDetail(long resourceId, String key) { - ResourceDetailDao dao = _daoMap.get(resourceType); return dao.findDetail(resourceId, key); } + + private ResourceDetail createDetail(long resourceId, String key, String value) { + return dao.createDetail(resourceId, key, value); + } + } @Override