ResourceDetails - added createDetail to ResourceDetailDao interface to provide generic way of creating resourceDetail DB objects

This commit is contained in:
Alena Prokharchyk 2013-10-28 12:53:00 -07:00
parent d0090a0c24
commit e86b612750
11 changed files with 59 additions and 53 deletions

View File

@ -28,9 +28,6 @@ import com.cloud.dc.DataCenterDetailVO;
@Local(value=DataCenterDetailsDao.class)
public class DataCenterDetailsDaoImpl extends ResourceDetailDaoBase<DataCenterDetailVO> implements DataCenterDetailsDao, ScopedConfigStorage {
public DataCenterDetailsDaoImpl() {
}
@Override
public Scope getScope() {
return ConfigKey.Scope.Zone;
@ -42,4 +39,9 @@ public class DataCenterDetailsDaoImpl extends ResourceDetailDaoBase<DataCenterDe
return vo == null ? null : vo.getValue();
}
@Override
public DataCenterDetailVO createDetail(long resourceId, String key, String value) {
return new DataCenterDetailVO(resourceId, key, value);
}
}

View File

@ -37,4 +37,6 @@ public interface ResourceDetailDao<R extends ResourceDetail> extends GenericDao<
public void addDetails(List<R> details);
public void addDetail(R detail);
public R createDetail(long resourceId, String key, String value);
}

View File

@ -26,4 +26,9 @@ import com.cloud.dc.dao.ResourceDetailDaoBase;
@Local(value=NetworkDetailsDao.class)
public class NetworkDetailsDaoImpl extends ResourceDetailDaoBase<NetworkDetailVO> implements NetworkDetailsDao {
@Override
public NetworkDetailVO createDetail(long resourceId, String key, String value) {
return new NetworkDetailVO(resourceId, key, value);
}
}

View File

@ -27,7 +27,10 @@ import com.cloud.service.ServiceOfferingDetailsVO;
@Local(value=ServiceOfferingDetailsDao.class)
public class ServiceOfferingDetailsDaoImpl extends ResourceDetailDaoBase<ServiceOfferingDetailsVO>
implements ServiceOfferingDetailsDao {
public ServiceOfferingDetailsDaoImpl() {
@Override
public ServiceOfferingDetailsVO createDetail(long resourceId, String key, String value) {
return new ServiceOfferingDetailsVO(resourceId, key, value);
}
}

View File

@ -42,4 +42,9 @@ public class StoragePoolDetailsDaoImpl extends ResourceDetailDaoBase<StoragePool
StoragePoolDetailVO vo = findDetail(id, key.key());
return vo == null ? null : vo.getValue();
}
@Override
public StoragePoolDetailVO createDetail(long resourceId, String key, String value) {
return new StoragePoolDetailVO(resourceId, key, value);
}
}

View File

@ -26,8 +26,9 @@ import com.cloud.storage.VMTemplateDetailVO;
@Component
@Local(value = VMTemplateDetailsDao.class)
public class VMTemplateDetailsDaoImpl extends ResourceDetailDaoBase<VMTemplateDetailVO> implements VMTemplateDetailsDao {
public VMTemplateDetailsDaoImpl(){
@Override
public VMTemplateDetailVO createDetail(long resourceId, String key, String value) {
return new VMTemplateDetailVO(resourceId, key, value);
}
}

View File

@ -26,7 +26,10 @@ import com.cloud.storage.VolumeDetailVO;
@Component
@Local(value=VolumeDetailsDao.class)
public class VolumeDetailsDaoImpl extends ResourceDetailDaoBase<VolumeDetailVO> implements VolumeDetailsDao {
public VolumeDetailsDaoImpl() {
@Override
public VolumeDetailVO createDetail(long resourceId, String key, String value) {
return new VolumeDetailVO(resourceId, key, value);
}
}

View File

@ -26,7 +26,9 @@ import com.cloud.vm.NicDetailVO;
@Component
@Local (value={NicDetailDao.class})
public class NicDetailDaoImpl extends ResourceDetailDaoBase<NicDetailVO> implements NicDetailDao {
public NicDetailDaoImpl() {
@Override
public NicDetailVO createDetail(long resourceId, String key, String value) {
return new NicDetailVO(resourceId, key, value);
}
}

View File

@ -26,7 +26,10 @@ import com.cloud.vm.UserVmDetailVO;
@Component
@Local(value=UserVmDetailsDao.class)
public class UserVmDetailsDaoImpl extends ResourceDetailDaoBase<UserVmDetailVO> implements UserVmDetailsDao {
public UserVmDetailsDaoImpl() {
@Override
public UserVmDetailVO createDetail(long resourceId, String key, String value) {
return new UserVmDetailVO(resourceId, key, value);
}
}

View File

@ -25,8 +25,10 @@ import com.cloud.dc.dao.ResourceDetailDaoBase;
@Component
public class PrimaryDataStoreDetailsDaoImpl extends ResourceDetailDaoBase<PrimaryDataStoreDetailVO> implements
PrimaryDataStoreDetailsDao {
public PrimaryDataStoreDetailsDaoImpl() {
@Override
public PrimaryDataStoreDetailVO createDetail(long resourceId, String key, String value) {
return new PrimaryDataStoreDetailVO(resourceId, key, value);
}
}

View File

@ -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<? super ResourceDetail> 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<ResourceDetail> dao = (ResourceDetailDao<ResourceDetail>)_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<? extends ResourceDetail> dao = _daoMap.get(resourceType);
dao.removeDetail(resourceId, key);
}
private List<? extends ResourceDetail> getDetails(long resourceId) {
ResourceDetailDao<? extends ResourceDetail> dao = _daoMap.get(resourceType);
List<? extends ResourceDetail> detailList = new ArrayList<ResourceDetail>();
detailList = dao.findDetailsList(resourceId);
return detailList;
}
private ResourceDetail getDetail(long resourceId, String key) {
ResourceDetailDao<? extends ResourceDetail> 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