You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2013/10/25 21:04:51 UTC
[1/3] Made all resource details DAOs (nic_details, user_vm_details,
template_details, volume_details,
service_offering_details) extend from the same base class as although details
are being stored in diff tables, those tables have the same structure and
Updated Branches:
refs/heads/master 8e62fb799 -> aa9f8e64a
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/src/com/cloud/template/TemplateManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java
index fb1bb27..7a1b5aa 100755
--- a/server/src/com/cloud/template/TemplateManagerImpl.java
+++ b/server/src/com/cloud/template/TemplateManagerImpl.java
@@ -30,7 +30,6 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.log4j.Logger;
import org.apache.cloudstack.acl.SecurityChecker.AccessType;
import org.apache.cloudstack.api.BaseListTemplateOrIsoPermissionsCmd;
import org.apache.cloudstack.api.BaseUpdateTemplateOrIsoCmd;
@@ -82,6 +81,7 @@ import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
+import org.apache.log4j.Logger;
import com.cloud.agent.AgentManager;
import com.cloud.agent.api.Answer;
@@ -135,6 +135,7 @@ import com.cloud.storage.StoragePoolHostVO;
import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.TemplateProfile;
import com.cloud.storage.Upload;
+import com.cloud.storage.VMTemplateDetailVO;
import com.cloud.storage.VMTemplateHostVO;
import com.cloud.storage.VMTemplateStoragePoolVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
@@ -176,7 +177,6 @@ import com.cloud.utils.component.ManagerBase;
import com.cloud.utils.concurrency.NamedThreadFactory;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Transaction;
-import com.cloud.utils.db.TransactionCallback;
import com.cloud.utils.db.TransactionCallbackNoReturn;
import com.cloud.utils.db.TransactionStatus;
import com.cloud.utils.exception.CloudRuntimeException;
@@ -1627,8 +1627,13 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager,
VMTemplateVO template = _tmpltDao.persist(privateTemplate);
// Increment the number of templates
if (template != null) {
- if (cmd.getDetails() != null) {
- _templateDetailsDao.persist(template.getId(), cmd.getDetails());
+ Map<String, String> detailsStr = cmd.getDetails();
+ if (detailsStr != null) {
+ List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
+ for (String key : detailsStr.keySet()) {
+ details.add(new VMTemplateDetailVO(template.getId(), key, detailsStr.get(key)));
+ }
+ _templateDetailsDao.addDetails(details);
}
_resourceLimitMgr.incrementResourceCount(templateOwner.getId(), ResourceType.template);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java b/server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java
index b071955..ae3cae4 100644
--- a/server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java
+++ b/server/test/com/cloud/metadata/ResourceMetaDataManagerTest.java
@@ -76,8 +76,8 @@ public class ResourceMetaDataManagerTest {
doReturn(1L).when(_taggedResourceMgr).getResourceId(anyString(), eq(ResourceTag.ResourceObjectType.Volume));
// _volumeDetailDao.removeDetails(id, key);
- doNothing().when(_volumeDetailDao).removeDetails(anyLong(), anyString());
- doNothing().when(_nicDetailDao).removeDetails(anyLong(), anyString());
+ doNothing().when(_volumeDetailDao).removeDetail(anyLong(), anyString());
+ doNothing().when(_nicDetailDao).removeDetail(anyLong(), anyString());
_resourceMetaDataMgr.deleteResourceMetaData(anyString(), eq(ResourceTag.ResourceObjectType.Volume), anyString());
}
@@ -91,8 +91,8 @@ public class ResourceMetaDataManagerTest {
doReturn(1L).when(_taggedResourceMgr).getResourceId("1", ResourceTag.ResourceObjectType.Volume);
// _volumeDetailDao.removeDetails(id, key);
- doNothing().when(_volumeDetailDao).removeDetails(anyLong(), anyString());
- doNothing().when(_nicDetailDao).removeDetails(anyLong(), anyString());
+ doNothing().when(_volumeDetailDao).removeDetail(anyLong(), anyString());
+ doNothing().when(_nicDetailDao).removeDetail(anyLong(), anyString());
Map<String, String> map = new HashedMap();
map.put("key","value");
_resourceMetaDataMgr.addResourceMetaData("1", ResourceTag.ResourceObjectType.Volume, map);
[2/3] git commit: updated refs/heads/master to aa9f8e6
Posted by al...@apache.org.
Made all resource details DAOs (nic_details, user_vm_details, template_details, volume_details, service_offering_details) extend from the same base class as although details are being stored in diff tables, those tables have the same structure and same accessors.
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/0fb4d9d5
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/0fb4d9d5
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/0fb4d9d5
Branch: refs/heads/master
Commit: 0fb4d9d5a2d4321c3a87f26c5ea9f77d2d82b7d8
Parents: 8e62fb7
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Fri Oct 25 09:54:46 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Fri Oct 25 10:56:19 2013 -0700
----------------------------------------------------------------------
.../apache/cloudstack/api/ResourceDetail.java | 6 +-
.../com/cloud/vm/VirtualMachineManagerImpl.java | 8 +-
.../src/com/cloud/dc/DataCenterDetailVO.java | 23 ++--
.../src/com/cloud/dc/dao/DataCenterDaoImpl.java | 10 +-
.../com/cloud/dc/dao/DataCenterDetailsDao.java | 16 +--
.../cloud/dc/dao/DataCenterDetailsDaoImpl.java | 98 +----------------
.../src/com/cloud/dc/dao/ResourceDetailDao.java | 40 +++++++
.../com/cloud/dc/dao/ResourceDetailDaoImpl.java | 110 +++++++++++++++++++
.../com/cloud/network/dao/NetworkDetailVO.java | 38 ++-----
.../cloud/network/dao/NetworkDetailsDao.java | 15 +--
.../network/dao/NetworkDetailsDaoImpl.java | 72 +-----------
.../cloud/service/ServiceOfferingDetailsVO.java | 22 ++--
.../service/dao/ServiceOfferingDaoImpl.java | 13 ++-
.../service/dao/ServiceOfferingDetailsDao.java | 10 +-
.../dao/ServiceOfferingDetailsDaoImpl.java | 84 +-------------
.../com/cloud/storage/VMTemplateDetailVO.java | 34 ++----
.../src/com/cloud/storage/VolumeDetailVO.java | 33 ++----
.../cloud/storage/dao/VMTemplateDaoImpl.java | 25 +++--
.../cloud/storage/dao/VMTemplateDetailsDao.java | 17 +--
.../storage/dao/VMTemplateDetailsDaoImpl.java | 98 +----------------
.../com/cloud/storage/dao/VolumeDetailsDao.java | 17 +--
.../cloud/storage/dao/VolumeDetailsDaoImpl.java | 90 +--------------
engine/schema/src/com/cloud/vm/NicDetailVO.java | 34 ++----
.../schema/src/com/cloud/vm/UserVmDetailVO.java | 34 ++----
.../src/com/cloud/vm/dao/NicDetailDao.java | 15 +--
.../src/com/cloud/vm/dao/NicDetailDaoImpl.java | 83 +-------------
.../src/com/cloud/vm/dao/UserVmDaoImpl.java | 16 +--
.../src/com/cloud/vm/dao/UserVmDetailsDao.java | 19 +---
.../com/cloud/vm/dao/UserVmDetailsDaoImpl.java | 105 +-----------------
server/src/com/cloud/api/ApiDBUtils.java | 2 +
.../com/cloud/api/query/QueryManagerImpl.java | 6 +-
.../configuration/ConfigurationManagerImpl.java | 24 ++--
.../hypervisor/CloudZonesStartupProcessor.java | 9 +-
.../metadata/ResourceMetaDataManagerImpl.java | 40 ++++---
.../com/cloud/template/TemplateManagerImpl.java | 13 ++-
.../metadata/ResourceMetaDataManagerTest.java | 8 +-
36 files changed, 361 insertions(+), 926 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/api/src/org/apache/cloudstack/api/ResourceDetail.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/ResourceDetail.java b/api/src/org/apache/cloudstack/api/ResourceDetail.java
index 0c5dcab..7a2570b 100644
--- a/api/src/org/apache/cloudstack/api/ResourceDetail.java
+++ b/api/src/org/apache/cloudstack/api/ResourceDetail.java
@@ -16,12 +16,12 @@
// under the License.
package org.apache.cloudstack.api;
-public interface ResourceDetail {
+public interface ResourceDetail extends InternalIdentity{
- public long getResourceDetail();
+ public long getResourceId();
public String getName();
public String getValue();
-
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
index ce078c9..0ff4446 100755
--- a/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/engine/orchestration/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -439,7 +439,7 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
VirtualMachineGuru guru = getVmGuru(vm);
guru.finalizeExpunge(vm);
//remove the overcommit detials from the uservm details
- _uservmDetailsDao.deleteDetails(vm.getId());
+ _uservmDetailsDao.removeDetails(vm.getId());
// send hypervisor-dependent commands before removing
List<Command> finalizeExpungeCommands = hvGuru.finalizeExpunge(vm);
@@ -810,11 +810,9 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac
_uservmDetailsDao.persist(vmDetail_ram);
} else if (_uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio") != null) {
UserVmDetailVO vmDetail_cpu = _uservmDetailsDao.findDetail(vm.getId(), "cpuOvercommitRatio");
- vmDetail_cpu.setValue(cluster_detail_cpu.getValue());
UserVmDetailVO vmDetail_ram = _uservmDetailsDao.findDetail(vm.getId(), "memoryOvercommitRatio");
- vmDetail_ram.setValue(cluster_detail_ram.getValue());
- _uservmDetailsDao.update(vmDetail_cpu.getId(), vmDetail_cpu);
- _uservmDetailsDao.update(vmDetail_ram.getId(), vmDetail_ram);
+ _uservmDetailsDao.addDetail(vmDetail_cpu);
+ _uservmDetailsDao.addDetail(vmDetail_ram);
}
vmProfile.setCpuOvercommitRatio(Float.parseFloat(cluster_detail_cpu.getValue()));
vmProfile.setMemoryOvercommitRatio(Float.parseFloat(cluster_detail_ram.getValue()));
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java b/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
index 4476a6f..6771ef8 100644
--- a/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
+++ b/engine/schema/src/com/cloud/dc/DataCenterDetailVO.java
@@ -23,19 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
-import org.apache.cloudstack.api.InternalIdentity;
import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name="data_center_details")
-public class DataCenterDetailVO implements InternalIdentity, ResourceDetail {
+public class DataCenterDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="dc_id")
- private long dcId;
+ private long resourceId;
@Column(name="name")
private String name;
@@ -47,33 +46,29 @@ public class DataCenterDetailVO implements InternalIdentity, ResourceDetail {
}
public DataCenterDetailVO(long dcId, String name, String value) {
- this.dcId = dcId;
+ this.resourceId = dcId;
this.name = name;
this.value = value;
}
+
- public long getDcId() {
- return dcId;
- }
-
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
- public void setValue(String value) {
- this.value = value;
- }
-
+ @Override
public long getId() {
return id;
}
@Override
- public long getResourceDetail() {
- return dcId;
+ public long getResourceId() {
+ return resourceId;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
index aaa372f..9d90241 100755
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDaoImpl.java
@@ -26,9 +26,11 @@ import javax.inject.Inject;
import javax.naming.ConfigurationException;
import javax.persistence.TableGenerator;
+import org.apache.cloudstack.api.ResourceDetail;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
+import com.cloud.dc.DataCenterDetailVO;
import com.cloud.dc.DataCenterIpAddressVO;
import com.cloud.dc.DataCenterLinkLocalIpAddressVO;
import com.cloud.dc.DataCenterVO;
@@ -366,7 +368,13 @@ public class DataCenterDaoImpl extends GenericDaoBase<DataCenterVO, Long> implem
if (details == null) {
return;
}
- _detailsDao.persist(zone.getId(), details);
+
+ List<DataCenterDetailVO> resourceDetails = new ArrayList<DataCenterDetailVO>();
+ for (String key : details.keySet()) {
+ resourceDetails.add(new DataCenterDetailVO(zone.getId(), key, details.get(key)));
+ }
+
+ _detailsDao.addDetails(resourceDetails);
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java
index 2cc7df8..011aa73 100644
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDao.java
@@ -16,22 +16,8 @@
// under the License.
package com.cloud.dc.dao;
-import java.util.List;
-import java.util.Map;
-
import com.cloud.dc.DataCenterDetailVO;
import com.cloud.utils.db.GenericDao;
-public interface DataCenterDetailsDao extends GenericDao<DataCenterDetailVO, Long> {
- Map<String, String> findDetails(long dcId);
-
- void persist(long dcId, Map<String, String> details);
-
- DataCenterDetailVO findDetail(long dcId, String name);
-
- void deleteDetails(long dcId);
-
- void removeDetails(long id, String key);
-
- List<DataCenterDetailVO> findDetailsList(long dcId);
+public interface DataCenterDetailsDao extends GenericDao<DataCenterDetailVO, Long>, ResourceDetailDao<DataCenterDetailVO> {
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
index b8a36f0..b6949f5 100644
--- a/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/dc/dao/DataCenterDetailsDaoImpl.java
@@ -16,117 +16,29 @@
// under the License.
package com.cloud.dc.dao;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import javax.ejb.Local;
-import com.cloud.vm.UserVmDetailVO;
+import org.apache.cloudstack.api.ResourceDetail;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
import org.apache.cloudstack.framework.config.ScopedConfigStorage;
import com.cloud.dc.DataCenterDetailVO;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.TransactionLegacy;
@Local(value=DataCenterDetailsDao.class)
-public class DataCenterDetailsDaoImpl extends GenericDaoBase<DataCenterDetailVO, Long> implements DataCenterDetailsDao, ScopedConfigStorage {
- protected final SearchBuilder<DataCenterDetailVO> DcSearch;
- protected final SearchBuilder<DataCenterDetailVO> DetailSearch;
+public class DataCenterDetailsDaoImpl extends ResourceDetailDaoImpl<DataCenterDetailVO> implements DataCenterDetailsDao, ScopedConfigStorage {
public DataCenterDetailsDaoImpl() {
- DcSearch = createSearchBuilder();
- DcSearch.and("dcId", DcSearch.entity().getDcId(), SearchCriteria.Op.EQ);
- DcSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("dcId", DetailSearch.entity().getDcId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
- }
-
- @Override
- public DataCenterDetailVO findDetail(long dcId, String name) {
- SearchCriteria<DataCenterDetailVO> sc = DetailSearch.create();
- sc.setParameters("dcId", dcId);
- sc.setParameters("name", name);
-
- return findOneIncludingRemovedBy(sc);
- }
-
- @Override
- public Map<String, String> findDetails(long dcId) {
- SearchCriteria<DataCenterDetailVO> sc = DcSearch.create();
- sc.setParameters("dcId", dcId);
-
- List<DataCenterDetailVO> results = search(sc, null);
- Map<String, String> details = new HashMap<String, String>(results.size());
- for (DataCenterDetailVO result : results) {
- details.put(result.getName(), result.getValue());
- }
- return details;
}
-
- @Override
- public List<DataCenterDetailVO> findDetailsList(long dcId) {
- SearchCriteria<DataCenterDetailVO> sc = DcSearch.create();
- sc.setParameters("dcId", dcId);
-
- List<DataCenterDetailVO> results = search(sc, null);
- return results;
- }
-
-
- @Override
- public void deleteDetails(long dcId) {
- SearchCriteria<DataCenterDetailVO> sc = DcSearch.create();
- sc.setParameters("dcId", dcId);
-
- List<DataCenterDetailVO> results = search(sc, null);
- for (DataCenterDetailVO result : results) {
- remove(result.getId());
- }
- }
-
- @Override
- public void removeDetails(long id, String key) {
- if(key != null){
- DataCenterDetailVO detail = findDetail(id, key);
- if(detail != null){
- remove(detail.getId());
- }
- }else {
- deleteDetails(id);
- }
- }
-
- @Override
- public void persist(long dcId, Map<String, String> details) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- SearchCriteria<DataCenterDetailVO> sc = DcSearch.create();
- sc.setParameters("dcId", dcId);
- expunge(sc);
-
- for (Map.Entry<String, String> detail : details.entrySet()) {
- DataCenterDetailVO vo = new DataCenterDetailVO(dcId, detail.getKey(), detail.getValue());
- persist(vo);
- }
- txn.commit();
- }
-
+
@Override
public Scope getScope() {
return ConfigKey.Scope.Zone;
}
-
+
@Override
public String getConfigValue(long id, ConfigKey<?> key) {
- DataCenterDetailVO vo = findDetail(id, key.key());
+ ResourceDetail vo = findDetail(id, key.key());
return vo == null ? null : vo.getValue();
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/dc/dao/ResourceDetailDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/ResourceDetailDao.java b/engine/schema/src/com/cloud/dc/dao/ResourceDetailDao.java
new file mode 100644
index 0000000..85d2c78
--- /dev/null
+++ b/engine/schema/src/com/cloud/dc/dao/ResourceDetailDao.java
@@ -0,0 +1,40 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.dc.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.api.ResourceDetail;
+
+import com.cloud.utils.db.GenericDao;
+
+public interface ResourceDetailDao<R extends ResourceDetail> extends GenericDao<R, Long>{
+ public R findDetail(long resourceId, String name);
+
+ public Map<String, String> findDetails(long resourceId);
+
+ public List<R> findDetailsList(long resourceId);
+
+ public void removeDetails(long resourceId);
+
+ public void removeDetail(long resourceId, String key);
+
+ public void addDetails(List<R> details);
+
+ public void addDetail(R detail);
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/dc/dao/ResourceDetailDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/dc/dao/ResourceDetailDaoImpl.java b/engine/schema/src/com/cloud/dc/dao/ResourceDetailDaoImpl.java
new file mode 100644
index 0000000..8819e4b
--- /dev/null
+++ b/engine/schema/src/com/cloud/dc/dao/ResourceDetailDaoImpl.java
@@ -0,0 +1,110 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package com.cloud.dc.dao;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.api.ResourceDetail;
+
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.TransactionLegacy;
+
+
+public abstract class ResourceDetailDaoImpl<R extends ResourceDetail> extends GenericDaoBase<R, Long>{
+ private SearchBuilder<R> AllFieldsSearch;
+
+ public ResourceDetailDaoImpl() {
+ AllFieldsSearch = createSearchBuilder();
+ AllFieldsSearch.and("resourceId", AllFieldsSearch.entity().getResourceId(), SearchCriteria.Op.EQ);
+ AllFieldsSearch.and("name", AllFieldsSearch.entity().getName(), SearchCriteria.Op.EQ);
+ AllFieldsSearch.done();
+ }
+
+ public R findDetail(long resourceId, String name) {
+ SearchCriteria<R> sc = AllFieldsSearch.create();
+ sc.setParameters("resourceId", resourceId);
+ sc.setParameters("name", name);
+
+ return findOneBy(sc);
+ }
+
+
+ public Map<String, String> findDetails(long resourceId) {
+ SearchCriteria<R> sc = AllFieldsSearch.create();
+ sc.setParameters("resourceId", resourceId);
+
+ List<R> results = search(sc, null);
+ Map<String, String> details = new HashMap<String, String>(results.size());
+ for (R result : results) {
+ details.put(result.getName(), result.getValue());
+ }
+ return details;
+ }
+
+ public List<R> findDetailsList(long resourceId) {
+ SearchCriteria<R> sc = AllFieldsSearch.create();
+ sc.setParameters("resourceId", resourceId);
+
+ List<R> results = search(sc, null);
+ return results;
+ }
+
+
+ public void removeDetails(long resourceId) {
+ SearchCriteria<R> sc = AllFieldsSearch.create();
+ sc.setParameters("resourceId", resourceId);
+ remove(sc);
+ }
+
+
+ public void removeDetail(long resourceId, String key) {
+ if (key != null){
+ SearchCriteria<R> sc = AllFieldsSearch.create();
+ sc.setParameters("name", key);
+ remove(sc);
+ }
+ }
+
+
+ public void addDetails(List<R> details) {
+ TransactionLegacy txn = TransactionLegacy.currentTxn();
+ txn.start();
+ SearchCriteria<R> sc = AllFieldsSearch.create();
+ sc.setParameters("resourceId", details.get(0).getResourceId());
+ expunge(sc);
+
+ for (R detail : details) {
+ persist(detail);
+ }
+
+ txn.commit();
+ }
+
+
+ public void addDetail(R detail) {
+ R existingDetail = findDetail(detail.getResourceId(), detail.getName());
+ if (existingDetail != null) {
+ remove(existingDetail.getId());
+ }
+ persist(detail);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java b/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
index 6292397..c7006c4 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkDetailVO.java
@@ -16,9 +16,6 @@
// under the License.
package com.cloud.network.dao;
-import org.apache.cloudstack.api.InternalIdentity;
-import org.apache.cloudstack.api.ResourceDetail;
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -26,16 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
+import org.apache.cloudstack.api.ResourceDetail;
+
@Entity
@Table(name="network_details")
-public class NetworkDetailVO implements InternalIdentity, ResourceDetail {
+public class NetworkDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="network_id")
- private long networkId;
+ private long resourceId;
@Column(name="name")
private String name;
@@ -46,45 +45,28 @@ public class NetworkDetailVO implements InternalIdentity, ResourceDetail {
public NetworkDetailVO() {}
public NetworkDetailVO(long networkId, String name, String value) {
- this.networkId = networkId;
+ this.resourceId = networkId;
this.name = name;
this.value = value;
}
+ @Override
public long getId() {
return id;
}
- public long getNetworkId() {
- return networkId;
- }
-
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
- public void setId(long id) {
- this.id = id;
- }
-
- public void setNetworkId(long networkId) {
- this.networkId = networkId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
@Override
- public long getResourceDetail() {
- return networkId;
+ public long getResourceId() {
+ return resourceId;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java
index 930e8f8..f791888 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDao.java
@@ -16,20 +16,9 @@
// under the License.
package com.cloud.network.dao;
+import com.cloud.dc.dao.ResourceDetailDao;
import com.cloud.utils.db.GenericDao;
-import java.util.List;
-import java.util.Map;
-
-public interface NetworkDetailsDao extends GenericDao<NetworkDetailVO, Long> {
- List<NetworkDetailVO> findDetails(long networkId);
-
- void persist(long networkId, Map<String, String> details);
-
- NetworkDetailVO findDetail(long networkId, String name);
-
- void deleteDetails(long networkId);
-
- public void removeDetails(long networkId, String key);
+public interface NetworkDetailsDao extends GenericDao<NetworkDetailVO, Long>, ResourceDetailDao<NetworkDetailVO> {
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
index 29bac95..76dc24a 100644
--- a/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/network/dao/NetworkDetailsDaoImpl.java
@@ -16,78 +16,14 @@
// under the License.
package com.cloud.network.dao;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.network.dao.NetworkDetailVO;
-import com.cloud.vm.dao.UserVmDetailsDao;
+import javax.ejb.Local;
+
import org.springframework.stereotype.Component;
-import javax.ejb.Local;
-import java.util.List;
-import java.util.Map;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
@Component
@Local(value=NetworkDetailsDao.class)
-public class NetworkDetailsDaoImpl extends GenericDaoBase<NetworkDetailVO, Long> implements NetworkDetailsDao {
-
- protected final SearchBuilder<NetworkDetailVO> NetworkSearch;
- protected final SearchBuilder<NetworkDetailVO> DetailSearch;
-
- public NetworkDetailsDaoImpl() {
- NetworkSearch = createSearchBuilder();
- NetworkSearch.and("networkId", NetworkSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
- NetworkSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("networkId", DetailSearch.entity().getNetworkId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
- }
-
-
- @Override
- public List<NetworkDetailVO> findDetails(long networkId) {
- SearchCriteria<NetworkDetailVO> sc = NetworkSearch.create();
- sc.setParameters("networkId", networkId);
-
- List<NetworkDetailVO> results = search(sc, null);
- return results;
- }
-
- @Override
- public void persist(long networkId, Map<String, String> details) {
- //To change body of implemented methods use File | Settings | File Templates.
- }
-
- @Override
- public NetworkDetailVO findDetail(long networkId, String name) {
- SearchCriteria<NetworkDetailVO> sc = DetailSearch.create();
- sc.setParameters("networkId", networkId);
- sc.setParameters("name", name);
-
- return findOneBy(sc); }
-
- @Override
- public void deleteDetails(long networkId) {
- SearchCriteria<NetworkDetailVO> sc = NetworkSearch.create();
- sc.setParameters("networkId", networkId);
-
- List<NetworkDetailVO> results = search(sc, null);
- for (NetworkDetailVO result : results) {
- remove(result.getId());
- }
- }
+public class NetworkDetailsDaoImpl extends ResourceDetailDaoImpl<NetworkDetailVO> implements NetworkDetailsDao {
- @Override
- public void removeDetails(long networkId, String key) {
- if(key != null){
- NetworkDetailVO detail = findDetail(networkId, key);
- if(detail != null){
- remove(detail.getId());
- }
- }else {
- deleteDetails(networkId);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java b/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
index b005c73..8b70b77 100644
--- a/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
+++ b/engine/schema/src/com/cloud/service/ServiceOfferingDetailsVO.java
@@ -16,8 +16,6 @@
// under the License.
package com.cloud.service;
-import org.apache.cloudstack.api.InternalIdentity;
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -25,16 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
+import org.apache.cloudstack.api.ResourceDetail;
+
@Entity
@Table(name="service_offering_details")
-public class ServiceOfferingDetailsVO implements InternalIdentity {
+public class ServiceOfferingDetailsVO implements ResourceDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="service_offering_id")
- private long serviceOfferingId;
+ private long resourceId;
@Column(name="name")
private String name;
@@ -46,27 +46,27 @@ public class ServiceOfferingDetailsVO implements InternalIdentity {
}
public ServiceOfferingDetailsVO(long serviceOfferingId, String name, String value) {
- this.serviceOfferingId = serviceOfferingId;
+ this.resourceId = serviceOfferingId;
this.name = name;
this.value = value;
}
- public long getServiceOfferingId() {
- return serviceOfferingId;
+ @Override
+ public long getResourceId() {
+ return resourceId;
}
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
- public void setValue(String value) {
- this.value = value;
- }
-
+ @Override
public long getId() {
return id;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
index b7890a4..648e4d0 100644
--- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
+++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDaoImpl.java
@@ -16,6 +16,7 @@
// under the License.
package com.cloud.service.dao;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -27,6 +28,7 @@ import javax.persistence.EntityExistsException;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
+import com.cloud.service.ServiceOfferingDetailsVO;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
@@ -167,8 +169,15 @@ public class ServiceOfferingDaoImpl extends GenericDaoBase<ServiceOfferingVO, Lo
@Override
public void saveDetails(ServiceOfferingVO serviceOffering) {
Map<String, String> details = serviceOffering.getDetails();
- if (details != null) {
- detailsDao.persist(serviceOffering.getId(), details);
+ if (details == null) {
+ return;
}
+
+ List<ServiceOfferingDetailsVO> resourceDetails = new ArrayList<ServiceOfferingDetailsVO>();
+ for (String key : details.keySet()) {
+ resourceDetails.add(new ServiceOfferingDetailsVO(serviceOffering.getId(), key, details.get(key)));
+ }
+
+ detailsDao.addDetails(resourceDetails);
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java
index e6ff6e5..ba753b7 100644
--- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java
+++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDao.java
@@ -16,15 +16,9 @@
// under the License.
package com.cloud.service.dao;
-import java.util.Map;
-
+import com.cloud.dc.dao.ResourceDetailDao;
import com.cloud.service.ServiceOfferingDetailsVO;
import com.cloud.utils.db.GenericDao;
-public interface ServiceOfferingDetailsDao extends GenericDao<ServiceOfferingDetailsVO, Long> {
- Map<String, String> findDetails(long serviceOfferingId);
- void persist(long serviceOfferingId, Map<String, String> details);
- ServiceOfferingDetailsVO findDetail(long serviceOfferingId, String name);
- void deleteDetails(long serviceOfferingId);
- void removeDetails(long offId, String key);
+public interface ServiceOfferingDetailsDao extends GenericDao<ServiceOfferingDetailsVO, Long>, ResourceDetailDao<ServiceOfferingDetailsVO> {
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
index de99cf2..bf3cdcc 100644
--- a/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/service/dao/ServiceOfferingDetailsDaoImpl.java
@@ -16,96 +16,16 @@
// under the License.
package com.cloud.service.dao;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import javax.ejb.Local;
import org.springframework.stereotype.Component;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
import com.cloud.service.ServiceOfferingDetailsVO;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.TransactionLegacy;
@Component
@Local(value=ServiceOfferingDetailsDao.class)
-public class ServiceOfferingDetailsDaoImpl extends GenericDaoBase<ServiceOfferingDetailsVO, Long>
+public class ServiceOfferingDetailsDaoImpl extends ResourceDetailDaoImpl<ServiceOfferingDetailsVO>
implements ServiceOfferingDetailsDao {
- protected final SearchBuilder<ServiceOfferingDetailsVO> ServiceOfferingSearch;
- protected final SearchBuilder<ServiceOfferingDetailsVO> DetailSearch;
-
- public ServiceOfferingDetailsDaoImpl() {
- ServiceOfferingSearch = createSearchBuilder();
- ServiceOfferingSearch.and("serviceOfferingId", ServiceOfferingSearch.entity().getServiceOfferingId(), SearchCriteria.Op.EQ);
- ServiceOfferingSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("serviceOfferingId", DetailSearch.entity().getServiceOfferingId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
- }
-
- @Override
- public ServiceOfferingDetailsVO findDetail(long serviceOfferingId, String name) {
- SearchCriteria<ServiceOfferingDetailsVO> sc = DetailSearch.create();
- sc.setParameters("serviceOfferingId", serviceOfferingId);
- sc.setParameters("name", name);
- ServiceOfferingDetailsVO detail = findOneIncludingRemovedBy(sc);
- return detail;
- }
-
- @Override
- public Map<String, String> findDetails(long serviceOfferingId) {
- SearchCriteria<ServiceOfferingDetailsVO> sc = ServiceOfferingSearch.create();
- sc.setParameters("serviceOfferingId", serviceOfferingId);
- List<ServiceOfferingDetailsVO> results = search(sc, null);
- Map<String, String> details = new HashMap<String, String>(results.size());
- for (ServiceOfferingDetailsVO result : results) {
- details.put(result.getName(), result.getValue());
- }
-
- return details;
- }
-
- @Override
- public void deleteDetails(long serviceOfferingId) {
- SearchCriteria sc = ServiceOfferingSearch.create();
- sc.setParameters("serviceOfferingId", serviceOfferingId);
- List<ServiceOfferingDetailsVO> results = search(sc, null);
- for (ServiceOfferingDetailsVO result : results) {
- remove(result.getId());
- }
- }
-
- @Override
- public void persist(long serviceOfferingId, Map<String, String> details) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- SearchCriteria<ServiceOfferingDetailsVO> sc = ServiceOfferingSearch.create();
- sc.setParameters("serviceOfferingId", serviceOfferingId);
- expunge(sc);
-
- for (Map.Entry<String, String> detail : details.entrySet()) {
- String value = detail.getValue();
- ServiceOfferingDetailsVO vo = new ServiceOfferingDetailsVO(serviceOfferingId, detail.getKey(), value);
- persist(vo);
- }
- txn.commit();
- }
- @Override
- public void removeDetails(long offId, String key) {
- if(key != null){
- ServiceOfferingDetailsVO detail = findDetail(offId, key);
- if(detail != null){
- remove(detail.getId());
- }
- }else {
- deleteDetails(offId);
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java b/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
index 3d4c7ef..59b490b 100644
--- a/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
+++ b/engine/schema/src/com/cloud/storage/VMTemplateDetailVO.java
@@ -16,8 +16,6 @@
// under the License.
package com.cloud.storage;
-import org.apache.cloudstack.api.InternalIdentity;
-
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
@@ -25,16 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
+import org.apache.cloudstack.api.ResourceDetail;
+
@Entity
@Table(name = "vm_template_details")
-public class VMTemplateDetailVO implements InternalIdentity {
+public class VMTemplateDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "template_id")
- private long templateId;
+ private long resourceId;
@Column(name = "name")
private String name;
@@ -46,40 +46,28 @@ public class VMTemplateDetailVO implements InternalIdentity {
}
public VMTemplateDetailVO(long templateId, String name, String value) {
- this.templateId = templateId;
+ this.resourceId = templateId;
this.name = name;
this.value = value;
}
+ @Override
public long getId() {
return id;
}
- public long getTemplateId() {
- return templateId;
+ @Override
+ public long getResourceId() {
+ return resourceId;
}
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
-
- public void setId(long id) {
- this.id = id;
- }
-
- public void setTemplateId(long templateId) {
- this.templateId = templateId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/VolumeDetailVO.java b/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
index 6d2a618..499be86 100644
--- a/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
+++ b/engine/schema/src/com/cloud/storage/VolumeDetailVO.java
@@ -28,14 +28,14 @@ import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name="volume_details")
-public class VolumeDetailVO implements InternalIdentity, ResourceDetail {
+public class VolumeDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="volume_id")
- private long volumeId;
+ private long resourceId;
@Column(name="name")
private String name;
@@ -46,46 +46,29 @@ public class VolumeDetailVO implements InternalIdentity, ResourceDetail {
public VolumeDetailVO() {}
public VolumeDetailVO(long volumeId, String name, String value) {
- this.volumeId = volumeId;
+ this.resourceId = volumeId;
this.name = name;
this.value = value;
}
+ @Override
public long getId() {
return id;
}
- public long getVolumeId() {
- return volumeId;
- }
-
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
- public void setId(long id) {
- this.id = id;
- }
-
- public void setVolumeId(long volumeId) {
- this.volumeId = volumeId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
@Override
- public long getResourceDetail() {
- return volumeId;
+ public long getResourceId() {
+ return resourceId;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
index 71ec6c7..d4bb367 100755
--- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -28,11 +28,10 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
+import org.apache.log4j.Logger;
+import org.springframework.stereotype.Component;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.domain.dao.DomainDao;
@@ -44,6 +43,7 @@ import com.cloud.server.ResourceTag.ResourceObjectType;
import com.cloud.storage.Storage;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.TemplateType;
+import com.cloud.storage.VMTemplateDetailVO;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VMTemplateZoneVO;
@@ -411,11 +411,17 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
@Override
public void saveDetails(VMTemplateVO tmpl) {
- Map<String, String> details = tmpl.getDetails();
- if (details == null) {
+ Map<String, String> detailsStr = tmpl.getDetails();
+ if (detailsStr == null) {
return;
}
- _templateDetailsDao.persist(tmpl.getId(), details);
+ List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
+ for (String key : detailsStr.keySet()) {
+ VMTemplateDetailVO detail = new VMTemplateDetailVO(tmpl.getId(), key, detailsStr.get(key));
+ details.add(detail);
+ }
+
+ _templateDetailsDao.addDetails(details);
}
@@ -744,8 +750,13 @@ public class VMTemplateDaoImpl extends GenericDaoBase<VMTemplateVO, Long> implem
if (persist(tmplt) == null) {
throw new CloudRuntimeException("Failed to persist the template " + tmplt);
}
+
if (tmplt.getDetails() != null) {
- _templateDetailsDao.persist(tmplt.getId(), tmplt.getDetails());
+ List<VMTemplateDetailVO> details = new ArrayList<VMTemplateDetailVO>();
+ for (String key : tmplt.getDetails().keySet()) {
+ details.add(new VMTemplateDetailVO(tmplt.getId(), key, tmplt.getDetails().get(key)));
+ }
+ _templateDetailsDao.addDetails(details);
}
}
VMTemplateZoneVO tmpltZoneVO = _templateZoneDao.findByZoneTemplate(zoneId, tmplt.getId());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java
index 3021b8f..aa7ce4b 100644
--- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java
+++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDao.java
@@ -16,21 +16,10 @@
// under the License.
package com.cloud.storage.dao;
-import java.util.Map;
-
+import com.cloud.dc.dao.ResourceDetailDao;
import com.cloud.storage.VMTemplateDetailVO;
import com.cloud.utils.db.GenericDao;
-public interface VMTemplateDetailsDao extends GenericDao<VMTemplateDetailVO, Long> {
- Map<String, String> findDetails(long templateId);
-
- void persist(long templateId, Map<String, String> details);
-
- VMTemplateDetailVO findDetail(long templateId, String name);
-
- void deleteDetails(long vmId);
-
- void addTemplateDetail(long templateId, String key, String value);
-
- void removeDetails(long templateId, String key);
+public interface VMTemplateDetailsDao extends GenericDao<VMTemplateDetailVO, Long>, ResourceDetailDao<VMTemplateDetailVO> {
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
index f1af0d0..007f9ca 100644
--- a/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VMTemplateDetailsDaoImpl.java
@@ -16,108 +16,14 @@
// under the License.
package com.cloud.storage.dao;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import javax.ejb.Local;
import org.springframework.stereotype.Component;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
import com.cloud.storage.VMTemplateDetailVO;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.TransactionLegacy;
@Component
@Local(value = VMTemplateDetailsDao.class)
-public class VMTemplateDetailsDaoImpl extends GenericDaoBase<VMTemplateDetailVO, Long> implements VMTemplateDetailsDao {
-
- protected final SearchBuilder<VMTemplateDetailVO> TemplateSearch;
- protected final SearchBuilder<VMTemplateDetailVO> DetailSearch;
-
- public VMTemplateDetailsDaoImpl() {
- TemplateSearch = createSearchBuilder();
- TemplateSearch.and("templateId", TemplateSearch.entity().getTemplateId(), SearchCriteria.Op.EQ);
- TemplateSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("templateId", DetailSearch.entity().getTemplateId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
- }
-
- @Override
- public void deleteDetails(long templateId) {
- SearchCriteria<VMTemplateDetailVO> sc = TemplateSearch.create();
- sc.setParameters("templateId", templateId);
-
- List<VMTemplateDetailVO> results = search(sc, null);
- for (VMTemplateDetailVO result : results) {
- remove(result.getId());
- }
- }
-
- @Override
- public VMTemplateDetailVO findDetail(long templateId, String name) {
- SearchCriteria<VMTemplateDetailVO> sc = DetailSearch.create();
- sc.setParameters("templateId", templateId);
- sc.setParameters("name", name);
-
- return findOneBy(sc);
- }
-
- @Override
- public Map<String, String> findDetails(long templateId) {
- SearchCriteria<VMTemplateDetailVO> sc = TemplateSearch.create();
- sc.setParameters("templateId", templateId);
-
- List<VMTemplateDetailVO> results = search(sc, null);
- Map<String, String> details = new HashMap<String, String>(results.size());
- for (VMTemplateDetailVO result : results) {
- details.put(result.getName(), result.getValue());
- }
-
- return details;
- }
-
- @Override
- public void persist(long templateId, Map<String, String> details) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- SearchCriteria<VMTemplateDetailVO> sc = TemplateSearch.create();
- sc.setParameters("templateId", templateId);
- expunge(sc);
-
- for (Map.Entry<String, String> detail : details.entrySet()) {
- VMTemplateDetailVO vo = new VMTemplateDetailVO(templateId, detail.getKey(), detail.getValue());
- persist(vo);
- }
- txn.commit();
- }
-
- @Override
- public void addTemplateDetail(long templateId, String key, String value) {
- VMTemplateDetailVO detail = findDetail(templateId, key);
- if (detail == null) {
- VMTemplateDetailVO newEntry = new VMTemplateDetailVO(templateId, key, value);
- persist(newEntry);
- } else {
- detail.setValue(value);
- update(detail.getId(), detail);
- }
- }
-
- @Override
- public void removeDetails(long templateId, String key) {
- if(key != null){
- VMTemplateDetailVO detail = findDetail(templateId, key);
- if(detail != null){
- remove(detail.getId());
- }
- } else {
- deleteDetails(templateId);
- }
- }
+public class VMTemplateDetailsDaoImpl extends ResourceDetailDaoImpl<VMTemplateDetailVO> implements VMTemplateDetailsDao {
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java
index 4e786ba..635ca97 100644
--- a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java
+++ b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDao.java
@@ -16,21 +16,10 @@
// under the License.
package com.cloud.storage.dao;
-import java.util.List;
-import java.util.Map;
-
+import com.cloud.dc.dao.ResourceDetailDao;
import com.cloud.storage.VolumeDetailVO;
import com.cloud.utils.db.GenericDao;
-public interface VolumeDetailsDao extends GenericDao<VolumeDetailVO, Long> {
- List<VolumeDetailVO> findDetails(long volumeId);
-
- void persist(long vmId, Map<String, String> details);
-
- VolumeDetailVO findDetail(long vmId, String name);
-
- void deleteDetails(long vmId);
-
- public void removeDetails(long volumeId, String key);
+public interface VolumeDetailsDao extends GenericDao<VolumeDetailVO, Long>, ResourceDetailDao<VolumeDetailVO> {
- }
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
index 54158f5..d264394 100644
--- a/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/storage/dao/VolumeDetailsDaoImpl.java
@@ -16,99 +16,15 @@
// under the License.
package com.cloud.storage.dao;
-import java.util.List;
-import java.util.Map;
-
import javax.ejb.Local;
-import com.cloud.storage.VolumeDetailVO;
import org.springframework.stereotype.Component;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
+import com.cloud.storage.VolumeDetailVO;
@Component
@Local(value=VolumeDetailsDao.class)
-public class VolumeDetailsDaoImpl extends GenericDaoBase<VolumeDetailVO, Long> implements VolumeDetailsDao {
- protected final SearchBuilder<VolumeDetailVO> VolumeSearch;
- protected final SearchBuilder<VolumeDetailVO> DetailSearch;
- protected final SearchBuilder<VolumeDetailVO> VolumeDetailSearch;
-
- public VolumeDetailsDaoImpl() {
- VolumeSearch = createSearchBuilder();
- VolumeSearch.and("volumeId", VolumeSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
- VolumeSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("volumeId", DetailSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
-
- VolumeDetailSearch = createSearchBuilder();
- VolumeDetailSearch.and("volumeId", VolumeDetailSearch.entity().getVolumeId(), SearchCriteria.Op.EQ);
- VolumeDetailSearch.and("name", VolumeDetailSearch.entity().getName(), SearchCriteria.Op.IN);
- VolumeDetailSearch.done();
-
- }
-
- @Override
- public void deleteDetails(long volumeId) {
- SearchCriteria<VolumeDetailVO> sc = VolumeSearch.create();
- sc.setParameters("volumeId", volumeId);
-
- List<VolumeDetailVO> results = search(sc, null);
- for (VolumeDetailVO result : results) {
- remove(result.getId());
- }
- }
-
- @Override
- public VolumeDetailVO findDetail(long volumeId, String name) {
- SearchCriteria<VolumeDetailVO> sc = DetailSearch.create();
- sc.setParameters("volumeId", volumeId);
- sc.setParameters("name", name);
-
- return findOneBy(sc);
- }
-
- @Override
- public void removeDetails(long volumeId, String key) {
-
- if(key != null){
- VolumeDetailVO detail = findDetail(volumeId, key);
- if(detail != null){
- remove(detail.getId());
- }
- }else {
- deleteDetails(volumeId);
- }
-
- }
-
- @Override
- public List<VolumeDetailVO> findDetails(long volumeId) {
- SearchCriteria<VolumeDetailVO> sc = VolumeSearch.create();
- sc.setParameters("volumeId", volumeId);
-
- List<VolumeDetailVO> results = search(sc, null);
- return results;
- }
-
- @Override
- public void persist(long volumeId, Map<String, String> details) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- SearchCriteria<VolumeDetailVO> sc = VolumeSearch.create();
- sc.setParameters("volumeId", volumeId);
- expunge(sc);
-
- for (Map.Entry<String, String> detail : details.entrySet()) {
- VolumeDetailVO vo = new VolumeDetailVO(volumeId, detail.getKey(), detail.getValue());
- persist(vo);
- }
- txn.commit();
- }
+public class VolumeDetailsDaoImpl extends ResourceDetailDaoImpl<VolumeDetailVO> implements VolumeDetailsDao {
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/NicDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/NicDetailVO.java b/engine/schema/src/com/cloud/vm/NicDetailVO.java
index 5d05501..4be5723 100644
--- a/engine/schema/src/com/cloud/vm/NicDetailVO.java
+++ b/engine/schema/src/com/cloud/vm/NicDetailVO.java
@@ -23,19 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
-import org.apache.cloudstack.api.InternalIdentity;
import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name="nic_details")
-public class NicDetailVO implements InternalIdentity, ResourceDetail {
+public class NicDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="nic_id")
- private long nicId;
+ private long resourceId;
@Column(name="name")
private String name;
@@ -46,46 +45,29 @@ public class NicDetailVO implements InternalIdentity, ResourceDetail {
public NicDetailVO() {}
public NicDetailVO(long nicId, String name, String value) {
- this.nicId = nicId;
+ this.resourceId = nicId;
this.name = name;
this.value = value;
}
+ @Override
public long getId() {
return id;
}
- public long getNicId() {
- return nicId;
- }
-
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
- public void setId(long id) {
- this.id = id;
- }
-
- public void setNicId(long nicId) {
- this.nicId = nicId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
@Override
- public long getResourceDetail() {
- return nicId;
+ public long getResourceId() {
+ return resourceId;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/UserVmDetailVO.java b/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
index 5811ab4..62c924b 100644
--- a/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
+++ b/engine/schema/src/com/cloud/vm/UserVmDetailVO.java
@@ -23,19 +23,18 @@ import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
-import org.apache.cloudstack.api.InternalIdentity;
import org.apache.cloudstack.api.ResourceDetail;
@Entity
@Table(name="user_vm_details")
-public class UserVmDetailVO implements InternalIdentity, ResourceDetail {
+public class UserVmDetailVO implements ResourceDetail {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;
@Column(name="vm_id")
- private long vmId;
+ private long resourceId;
@Column(name="name")
private String name;
@@ -46,46 +45,29 @@ public class UserVmDetailVO implements InternalIdentity, ResourceDetail {
public UserVmDetailVO() {}
public UserVmDetailVO(long vmId, String name, String value) {
- this.vmId = vmId;
+ this.resourceId = vmId;
this.name = name;
this.value = value;
}
+ @Override
public long getId() {
return id;
}
- public long getVmId() {
- return vmId;
- }
-
+ @Override
public String getName() {
return name;
}
+ @Override
public String getValue() {
return value;
}
- public void setId(long id) {
- this.id = id;
- }
-
- public void setVmId(long vmId) {
- this.vmId = vmId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
@Override
- public long getResourceDetail() {
- return vmId;
+ public long getResourceId() {
+ return resourceId;
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/dao/NicDetailDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDetailDao.java b/engine/schema/src/com/cloud/vm/dao/NicDetailDao.java
index 66bff16..f960ecf 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDetailDao.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDetailDao.java
@@ -16,20 +16,9 @@
// under the License.
package com.cloud.vm.dao;
-import java.util.List;
-import java.util.Map;
-
+import com.cloud.dc.dao.ResourceDetailDao;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.NicDetailVO;
-public interface NicDetailDao extends GenericDao<NicDetailVO, Long> {
- List<NicDetailVO> findDetails(long nicId);
-
- void persist(long nicId, Map<String, String> details);
-
- NicDetailVO findDetail(long nicId, String name);
-
- void deleteDetails(long nicId);
-
- void removeDetails(long nicId, String key);
+public interface NicDetailDao extends GenericDao<NicDetailVO, Long>, ResourceDetailDao<NicDetailVO> {
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java
index 4c1d59c..65a327f 100644
--- a/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/NicDetailDaoImpl.java
@@ -16,88 +16,15 @@
// under the License.
package com.cloud.vm.dao;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.TransactionLegacy;
-import com.cloud.vm.NicDetailVO;
+import javax.ejb.Local;
+
import org.springframework.stereotype.Component;
-import javax.ejb.Local;
-import java.util.List;
-import java.util.Map;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
+import com.cloud.vm.NicDetailVO;
@Component
@Local (value={NicDetailDao.class})
-public class NicDetailDaoImpl extends GenericDaoBase<NicDetailVO, Long> implements NicDetailDao {
- protected final SearchBuilder<NicDetailVO> NicSearch;
- protected final SearchBuilder<NicDetailVO> DetailSearch;
-
- public NicDetailDaoImpl() {
- NicSearch = createSearchBuilder();
- NicSearch.and("nicId", NicSearch.entity().getNicId(), SearchCriteria.Op.EQ);
- NicSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("nicId", DetailSearch.entity().getNicId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
- }
-
- @Override
- public void deleteDetails(long nicId) {
- SearchCriteria<NicDetailVO> sc = NicSearch.create();
- sc.setParameters("nicId", nicId);
-
- List<NicDetailVO> results = search(sc, null);
- for (NicDetailVO result : results) {
- remove(result.getId());
- }
- }
-
- @Override
- public NicDetailVO findDetail(long nicId, String name) {
- SearchCriteria<NicDetailVO> sc = DetailSearch.create();
- sc.setParameters("nicId", nicId);
- sc.setParameters("name", name);
-
- return findOneBy(sc);
- }
-
- @Override
- public List<NicDetailVO> findDetails(long nicId) {
- SearchCriteria<NicDetailVO> sc = NicSearch.create();
- sc.setParameters("nicId", nicId);
-
- List<NicDetailVO> results = search(sc, null);
- return results;
- }
-
- @Override
- public void persist(long nicId, Map<String, String> details) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- SearchCriteria<NicDetailVO> sc = NicSearch.create();
- sc.setParameters("nicId", nicId);
- expunge(sc);
-
- for (Map.Entry<String, String> detail : details.entrySet()) {
- NicDetailVO vo = new NicDetailVO(nicId, detail.getKey(), detail.getValue());
- persist(vo);
- }
- txn.commit();
- }
-
- @Override
- public void removeDetails(long nicId, String key) {
- if(key != null){
- NicDetailVO detail = findDetail(nicId, key);
- if(detail != null){
- remove(detail.getId());
- }
- }else {
- deleteDetails(nicId);
- }
- }
+public class NicDetailDaoImpl extends ResourceDetailDaoImpl<NicDetailVO> implements NicDetailDao {
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
index 70b04e3..1992ef47 100755
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/UserVmDaoImpl.java
@@ -31,14 +31,10 @@ import javax.ejb.Local;
import javax.inject.Inject;
import org.apache.log4j.Logger;
-import org.springframework.stereotype.Component;
-import com.cloud.configuration.Resource;
import com.cloud.server.ResourceTag.ResourceObjectType;
import com.cloud.tags.dao.ResourceTagDao;
-import com.cloud.tags.dao.ResourceTagsDaoImpl;
import com.cloud.user.Account;
-
import com.cloud.utils.db.Attribute;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
@@ -49,6 +45,7 @@ import com.cloud.utils.db.SearchCriteria.Func;
import com.cloud.utils.db.TransactionLegacy;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.NicVO;
+import com.cloud.vm.UserVmDetailVO;
import com.cloud.vm.UserVmVO;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State;
@@ -341,11 +338,16 @@ public class UserVmDaoImpl extends GenericDaoBase<UserVmVO, Long> implements Use
@Override
public void saveDetails(UserVmVO vm) {
- Map<String, String> details = vm.getDetails();
- if (details == null) {
+ Map<String, String> detailsStr = vm.getDetails();
+ if (detailsStr == null) {
return;
}
- _detailsDao.persist(vm.getId(), details);
+ List<UserVmDetailVO> details = new ArrayList<UserVmDetailVO>();
+ for (String key : detailsStr.keySet()) {
+ details.add(new UserVmDetailVO(vm.getId(), key, detailsStr.get(key)));
+ }
+
+ _detailsDao.addDetails(details);
}
@Override
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java
index ce36c0b..a0249e6 100644
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java
+++ b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java
@@ -16,24 +16,9 @@
// under the License.
package com.cloud.vm.dao;
-import java.util.List;
-import java.util.Map;
-
+import com.cloud.dc.dao.ResourceDetailDao;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.UserVmDetailVO;
-public interface UserVmDetailsDao extends GenericDao<UserVmDetailVO, Long> {
- Map<String, String> findDetails(long vmId);
-
- public List<UserVmDetailVO> findDetailsList(long vmId);
-
- void persist(long vmId, Map<String, String> details);
-
- UserVmDetailVO findDetail(long vmId, String name);
-
- void deleteDetails(long vmId);
-
- void addVmDetail(long vmId, String key, String value);
-
- void removeDetails(long vmId, String key);
+public interface UserVmDetailsDao extends GenericDao<UserVmDetailVO, Long>, ResourceDetailDao<UserVmDetailVO> {
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
index 67b7f81..38b691d 100644
--- a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
+++ b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java
@@ -16,116 +16,15 @@
// under the License.
package com.cloud.vm.dao;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import javax.ejb.Local;
import org.springframework.stereotype.Component;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.TransactionLegacy;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
import com.cloud.vm.UserVmDetailVO;
@Component
@Local(value=UserVmDetailsDao.class)
-public class UserVmDetailsDaoImpl extends GenericDaoBase<UserVmDetailVO, Long> implements UserVmDetailsDao {
- protected final SearchBuilder<UserVmDetailVO> VmSearch;
- protected final SearchBuilder<UserVmDetailVO> DetailSearch;
-
- public UserVmDetailsDaoImpl() {
- VmSearch = createSearchBuilder();
- VmSearch.and("vmId", VmSearch.entity().getVmId(), SearchCriteria.Op.EQ);
- VmSearch.done();
-
- DetailSearch = createSearchBuilder();
- DetailSearch.and("vmId", DetailSearch.entity().getVmId(), SearchCriteria.Op.EQ);
- DetailSearch.and("name", DetailSearch.entity().getName(), SearchCriteria.Op.EQ);
- DetailSearch.done();
- }
-
- @Override
- public void deleteDetails(long vmId) {
- SearchCriteria<UserVmDetailVO> sc = VmSearch.create();
- sc.setParameters("vmId", vmId);
-
- List<UserVmDetailVO> results = search(sc, null);
- for (UserVmDetailVO result : results) {
- remove(result.getId());
- }
- }
-
- @Override
- public UserVmDetailVO findDetail(long vmId, String name) {
- SearchCriteria<UserVmDetailVO> sc = DetailSearch.create();
- sc.setParameters("vmId", vmId);
- sc.setParameters("name", name);
-
- return findOneBy(sc);
- }
-
- @Override
- public Map<String, String> findDetails(long vmId) {
- SearchCriteria<UserVmDetailVO> sc = VmSearch.create();
- sc.setParameters("vmId", vmId);
-
- List<UserVmDetailVO> results = search(sc, null);
- Map<String, String> details = new HashMap<String, String>(results.size());
- for (UserVmDetailVO result : results) {
- details.put(result.getName(), result.getValue());
- }
-
- return details;
- }
-
- @Override
- public List<UserVmDetailVO> findDetailsList(long vmId) {
- SearchCriteria<UserVmDetailVO> sc = VmSearch.create();
- sc.setParameters("vmId", vmId);
-
- List<UserVmDetailVO> results = search(sc, null);
- return results;
- }
-
- @Override
- public void persist(long vmId, Map<String, String> details) {
- TransactionLegacy txn = TransactionLegacy.currentTxn();
- txn.start();
- SearchCriteria<UserVmDetailVO> sc = VmSearch.create();
- sc.setParameters("vmId", vmId);
- expunge(sc);
-
- for (Map.Entry<String, String> detail : details.entrySet()) {
- UserVmDetailVO vo = new UserVmDetailVO(vmId, detail.getKey(), detail.getValue());
- persist(vo);
- }
- txn.commit();
- }
-
- @Override
- public void addVmDetail(long vmId, String key, String value) {
- UserVmDetailVO detail = findDetail(vmId, key);
- if (detail == null) {
- UserVmDetailVO newEntry = new UserVmDetailVO(vmId, key, value);
- persist(newEntry);
- } else {
- detail.setValue(value);
- update(detail.getId(), detail);
- }
- }
+public class UserVmDetailsDaoImpl extends ResourceDetailDaoImpl<UserVmDetailVO> implements UserVmDetailsDao {
- @Override
- public void removeDetails(long vmId, String key) {
- if(key != null){
- UserVmDetailVO detail = findDetail(vmId, key);
- if(detail != null){
- remove(detail.getId());
- }
- }else {
- deleteDetails(vmId);
- }
- }
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/src/com/cloud/api/ApiDBUtils.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiDBUtils.java b/server/src/com/cloud/api/ApiDBUtils.java
index a14fdba..36fddf4 100755
--- a/server/src/com/cloud/api/ApiDBUtils.java
+++ b/server/src/com/cloud/api/ApiDBUtils.java
@@ -116,6 +116,7 @@ import com.cloud.dc.ClusterDetailsDao;
import com.cloud.dc.ClusterDetailsVO;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.DataCenter;
+import com.cloud.dc.DataCenterDetailVO;
import com.cloud.dc.DataCenterVO;
import com.cloud.dc.HostPodVO;
import com.cloud.dc.Vlan;
@@ -125,6 +126,7 @@ import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.dc.dao.DataCenterDetailsDao;
import com.cloud.dc.dao.HostPodDao;
+import com.cloud.dc.dao.ResourceDetailDaoImpl;
import com.cloud.dc.dao.VlanDao;
import com.cloud.domain.DomainVO;
import com.cloud.domain.dao.DomainDao;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index e92680f..8cf09bf 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -3273,13 +3273,13 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
if (resourceType == ResourceTag.ResourceObjectType.Volume) {
if (key == null) {
- detailList = _volumeDetailDao.findDetails(id);
+ detailList = _volumeDetailDao.findDetailsList(id);
} else {
requestedDetail = _volumeDetailDao.findDetail(id, key);
}
} else if (resourceType == ResourceTag.ResourceObjectType.Nic){
if (key == null) {
- detailList = _nicDetailDao.findDetails(id);
+ detailList = _nicDetailDao.findDetailsList(id);
} else {
requestedDetail = _nicDetailDao.findDetail(id, key);
}
@@ -3297,7 +3297,7 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
}
} else if (resourceType == ResourceObjectType.Network){
if (key == null) {
- detailList = _networkDetailsDao.findDetails(id);
+ detailList = _networkDetailsDao.findDetailsList(id);
} else {
requestedDetail = _networkDetailsDao.findDetail(id, key);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
index 84ea2d2..6af50df 100755
--- a/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -35,7 +35,6 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
-import org.apache.log4j.Logger;
import org.apache.cloudstack.acl.SecurityChecker;
import org.apache.cloudstack.affinity.AffinityGroup;
import org.apache.cloudstack.affinity.AffinityGroupService;
@@ -83,6 +82,7 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
+import org.apache.log4j.Logger;
import com.cloud.alert.AlertManager;
import com.cloud.api.ApiDBUtils;
@@ -95,10 +95,10 @@ import com.cloud.dc.ClusterDetailsVO;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.DataCenter;
import com.cloud.dc.DataCenter.NetworkType;
+import com.cloud.dc.DataCenterDetailVO;
import com.cloud.dc.DataCenterIpAddressVO;
import com.cloud.dc.DataCenterLinkLocalIpAddressVO;
import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.DataCenterDetailVO;
import com.cloud.dc.DedicatedResourceVO;
import com.cloud.dc.HostPodVO;
import com.cloud.dc.Pod;
@@ -109,9 +109,9 @@ import com.cloud.dc.VlanVO;
import com.cloud.dc.dao.AccountVlanMapDao;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
+import com.cloud.dc.dao.DataCenterDetailsDao;
import com.cloud.dc.dao.DataCenterIpAddressDao;
import com.cloud.dc.dao.DataCenterLinkLocalIpAddressDao;
-import com.cloud.dc.dao.DataCenterDetailsDao;
import com.cloud.dc.dao.DedicatedResourceDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.dc.dao.PodVlanMapDao;
@@ -167,6 +167,7 @@ import com.cloud.projects.Project;
import com.cloud.projects.ProjectManager;
import com.cloud.server.ConfigurationServer;
import com.cloud.server.ManagementService;
+import com.cloud.service.ServiceOfferingDetailsVO;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.service.dao.ServiceOfferingDetailsDao;
@@ -450,14 +451,8 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
if (zone == null) {
throw new InvalidParameterValueException("unable to find zone by id " + resourceId);
}
- DataCenterDetailVO dcDetailVO = _dcDetailsDao.findDetail(resourceId, name.toLowerCase());
- if (dcDetailVO == null) {
- dcDetailVO = new DataCenterDetailVO(resourceId, name, value);
- _dcDetailsDao.persist(dcDetailVO);
- } else {
- dcDetailVO.setValue(value);
- _dcDetailsDao.update(dcDetailVO.getId(), dcDetailVO);
- }
+ DataCenterDetailVO dcDetailVO = new DataCenterDetailVO(resourceId, name, value);
+ _dcDetailsDao.addDetail(dcDetailVO);
break;
case Cluster:
ClusterVO cluster = _clusterDao.findById(resourceId);
@@ -2113,7 +2108,12 @@ public class ConfigurationManagerImpl extends ManagerBase implements Configurati
if ((offering = _serviceOfferingDao.persist(offering)) != null) {
if (details != null) {
- _serviceOfferingDetailsDao.persist(offering.getId(), details);
+ List<ServiceOfferingDetailsVO> detailsVO = new ArrayList<ServiceOfferingDetailsVO>();
+ for (String key : details.keySet()) {
+ detailsVO.add(new ServiceOfferingDetailsVO(offering.getId(), key, details.get(key)));
+ }
+
+ _serviceOfferingDetailsDao.addDetails(detailsVO);
}
CallContext.current().setEventDetails("Service offering id=" + offering.getId());
return offering;
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java b/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java
index c056c67..8761b6b 100755
--- a/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java
+++ b/server/src/com/cloud/hypervisor/CloudZonesStartupProcessor.java
@@ -23,11 +23,11 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.api.ResourceDetail;
+import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
-import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
-
import com.cloud.agent.AgentManager;
import com.cloud.agent.StartupCommandProcessor;
import com.cloud.agent.api.StartupCommand;
@@ -38,7 +38,6 @@ import com.cloud.configuration.ConfigurationManager;
import com.cloud.configuration.ZoneConfig;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.DataCenterVO;
-import com.cloud.dc.DataCenterDetailVO;
import com.cloud.dc.HostPodVO;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
@@ -46,11 +45,9 @@ import com.cloud.dc.dao.DataCenterDetailsDao;
import com.cloud.dc.dao.HostPodDao;
import com.cloud.exception.ConnectionException;
import com.cloud.host.Host;
-import com.cloud.host.Host.Type;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.storage.Storage;
import com.cloud.utils.component.AdapterBase;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.net.MacAddress;
@@ -175,7 +172,7 @@ public class CloudZonesStartupProcessor extends AdapterBase implements StartupCo
}
long zoneId = zone.getId();
- DataCenterDetailVO maxHostsInZone = _zoneDetailsDao.findDetail(zoneId, ZoneConfig.MaxHosts.key());
+ ResourceDetail maxHostsInZone = _zoneDetailsDao.findDetail(zoneId, ZoneConfig.MaxHosts.key());
if(maxHostsInZone != null){
long maxHosts = new Long(maxHostsInZone.getValue()).longValue();
long currentCountOfHosts = _hostDao.countRoutingHostsByDataCenter(zoneId);
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/0fb4d9d5/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
index 8fc7471..152e57f 100644
--- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
+++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
@@ -37,6 +37,7 @@ 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;
@@ -46,6 +47,7 @@ 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;
@@ -111,24 +113,26 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
// TODO - Have a better design here for getting the DAO.
if(resourceType == ResourceObjectType.Volume){
- VolumeDetailVO v = new VolumeDetailVO(id, key, value);
- _volumeDetailDao.persist(v);
+ VolumeDetailVO detail = new VolumeDetailVO(id, key, value);
+ _volumeDetailDao.addDetail(detail);
} else if (resourceType == ResourceObjectType.Nic){
- NicDetailVO n = new NicDetailVO(id, key, value);
- _nicDetailDao.persist(n);
+ NicDetailVO detail = new NicDetailVO(id, key, value);
+ _nicDetailDao.addDetail(detail);
} else if (resourceType == ResourceObjectType.Zone){
DataCenterDetailVO dataCenterDetail = new DataCenterDetailVO(id, key, value);
- _dcDetailsDao.persist(dataCenterDetail);
+ _dcDetailsDao.addDetail(dataCenterDetail);
} else if (resourceType == ResourceObjectType.Network){
- NetworkDetailVO networkDetail = new NetworkDetailVO(id, key, value);
- _networkDetailsDao.persist(networkDetail);
+ NetworkDetailVO detail = new NetworkDetailVO(id, key, value);
+ _networkDetailsDao.addDetail(detail);
} else if (resourceType == ResourceObjectType.UserVm) {
- _userVmDetailsDao.addVmDetail(id, key, value);
+ UserVmDetailVO detail = new UserVmDetailVO(id, key, value);
+ _userVmDetailsDao.addDetail(detail);
} else if (resourceType == ResourceObjectType.Template) {
- _templateDetailsDao.addTemplateDetail(id, key, value);
+ VMTemplateDetailVO detail = new VMTemplateDetailVO(id, key, value);
+ _templateDetailsDao.addDetail(detail);
} else if (resourceType == ResourceObjectType.ServiceOffering) {
- ServiceOfferingDetailsVO entity = new ServiceOfferingDetailsVO(id, key, value);
- _serviceOfferingDetailsDao.persist(entity);
+ ServiceOfferingDetailsVO detail = new ServiceOfferingDetailsVO(id, key, value);
+ _serviceOfferingDetailsDao.addDetail(detail);
}
}
@@ -152,19 +156,19 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
// TODO - Have a better design here for getting the DAO.
if (resourceType == ResourceObjectType.Volume){
- _volumeDetailDao.removeDetails(id, key);
+ _volumeDetailDao.removeDetail(id, key);
} else if (resourceType == ResourceObjectType.Nic){
- _nicDetailDao.removeDetails(id, key);
+ _nicDetailDao.removeDetail(id, key);
} else if (resourceType == ResourceObjectType.UserVm) {
- _userVmDetailsDao.removeDetails(id, key);
+ _userVmDetailsDao.removeDetail(id, key);
} else if (resourceType == ResourceObjectType.Template) {
- _templateDetailsDao.removeDetails(id, key);
+ _templateDetailsDao.removeDetail(id, key);
} else if (resourceType == ResourceObjectType.Zone){
- _dcDetailsDao.removeDetails(id, key);
+ _dcDetailsDao.removeDetail(id, key);
} else if (resourceType == ResourceObjectType.ServiceOffering) {
- _serviceOfferingDetailsDao.removeDetails(id, key);
+ _serviceOfferingDetailsDao.removeDetail(id, key);
} else if (resourceType == ResourceObjectType.Network) {
- _networkDetailsDao.removeDetails(id, key);
+ _networkDetailsDao.removeDetail(id, key);
}
return true;
[3/3] git commit: updated refs/heads/master to aa9f8e6
Posted by al...@apache.org.
Resource details: added way of generic access of resource DAO based on the resourceType passed in (was hardcoded before)
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/aa9f8e64
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/aa9f8e64
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/aa9f8e64
Branch: refs/heads/master
Commit: aa9f8e64ae35adab531c92c7ee5c1dc9f60bc6cd
Parents: 0fb4d9d
Author: Alena Prokharchyk <al...@citrix.com>
Authored: Fri Oct 25 11:49:13 2013 -0700
Committer: Alena Prokharchyk <al...@citrix.com>
Committed: Fri Oct 25 11:57:17 2013 -0700
----------------------------------------------------------------------
.../cloud/server/ResourceMetaDataService.java | 9 ++
.../user/volume/ListResourceDetailsCmd.java | 9 +-
.../com/cloud/api/query/QueryManagerImpl.java | 50 ++-----
.../metadata/ResourceMetaDataManagerImpl.java | 145 +++++++++++--------
4 files changed, 112 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa9f8e64/api/src/com/cloud/server/ResourceMetaDataService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ResourceMetaDataService.java b/api/src/com/cloud/server/ResourceMetaDataService.java
index 1a12b6a..46f1c4a 100644
--- a/api/src/com/cloud/server/ResourceMetaDataService.java
+++ b/api/src/com/cloud/server/ResourceMetaDataService.java
@@ -16,8 +16,11 @@
// under the License.package com.cloud.server;
package com.cloud.server;
+import java.util.List;
import java.util.Map;
+import org.apache.cloudstack.api.ResourceDetail;
+
import com.cloud.server.ResourceTag.ResourceObjectType;
public interface ResourceMetaDataService {
@@ -41,4 +44,10 @@ public interface ResourceMetaDataService {
public boolean deleteResourceMetaData(String resourceId, ResourceObjectType resourceType, String key);
+ List<? extends ResourceDetail> getDetails(long resourceId, ResourceObjectType resourceType);
+
+
+ ResourceDetail getDetail(long resourceId, ResourceObjectType resourceType, String key);
+
+
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa9f8e64/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java b/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
index 4c2856b..18accac 100644
--- a/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
+++ b/api/src/org/apache/cloudstack/api/command/user/volume/ListResourceDetailsCmd.java
@@ -17,7 +17,8 @@
package org.apache.cloudstack.api.command.user.volume;
-import com.cloud.server.ResourceTag;
+import java.util.List;
+
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.BaseListProjectAndAccountResourcesCmd;
@@ -26,16 +27,16 @@ import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.ResourceDetailResponse;
import org.apache.cloudstack.api.response.ResourceTagResponse;
-import java.util.List;
+import com.cloud.server.ResourceTag;
@APICommand(name = "listResourceDetails", description = "List resource detail(s)", responseObject = ResourceTagResponse.class, since = "4.2")
public class ListResourceDetailsCmd extends BaseListProjectAndAccountResourcesCmd{
private static final String s_name = "listresourcedetailsresponse";
- @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.STRING, description="list by resource type")
+ @Parameter(name=ApiConstants.RESOURCE_TYPE, type=CommandType.STRING, description="list by resource type", required=true)
private String resourceType;
- @Parameter(name=ApiConstants.RESOURCE_ID, type=CommandType.STRING, description="list by resource id")
+ @Parameter(name=ApiConstants.RESOURCE_ID, type=CommandType.STRING, description="list by resource id", required=true)
private String resourceId;
@Parameter(name=ApiConstants.KEY, type=CommandType.STRING, description="list by key")
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa9f8e64/server/src/com/cloud/api/query/QueryManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/query/QueryManagerImpl.java b/server/src/com/cloud/api/query/QueryManagerImpl.java
index 8cf09bf..85674ea 100644
--- a/server/src/com/cloud/api/query/QueryManagerImpl.java
+++ b/server/src/com/cloud/api/query/QueryManagerImpl.java
@@ -138,7 +138,6 @@ import com.cloud.event.dao.EventJoinDao;
import com.cloud.exception.CloudAuthenticationException;
import com.cloud.exception.InvalidParameterValueException;
import com.cloud.exception.PermissionDeniedException;
-import com.cloud.exception.UnsupportedServiceException;
import com.cloud.ha.HighAvailabilityManager;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.dao.NetworkDetailsDao;
@@ -3264,54 +3263,25 @@ public class QueryManagerImpl extends ManagerBase implements QueryService {
public List<ResourceDetailResponse> listResource(ListResourceDetailsCmd cmd) {
String key = cmd.getKey();
ResourceTag.ResourceObjectType resourceType = cmd.getResourceType();
- String resourceId = cmd.getResourceId();
- long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
- List<ResourceDetailResponse> responseList = new ArrayList<ResourceDetailResponse>();
- List<? extends ResourceDetail> detailList = new ArrayList<ResourceDetail>();
+ String resourceIdStr = cmd.getResourceId();
+ long resourceId = _taggedResourceMgr.getResourceId(resourceIdStr, resourceType);
+ List<? extends ResourceDetail> detailList = new ArrayList<ResourceDetail>();
ResourceDetail requestedDetail = null;
-
- if (resourceType == ResourceTag.ResourceObjectType.Volume) {
- if (key == null) {
- detailList = _volumeDetailDao.findDetailsList(id);
- } else {
- requestedDetail = _volumeDetailDao.findDetail(id, key);
- }
- } else if (resourceType == ResourceTag.ResourceObjectType.Nic){
- if (key == null) {
- detailList = _nicDetailDao.findDetailsList(id);
- } else {
- requestedDetail = _nicDetailDao.findDetail(id, key);
- }
- } else if (resourceType == ResourceTag.ResourceObjectType.UserVm){
- if (key == null) {
- detailList = _userVmDetailDao.findDetailsList(id);
- } else {
- requestedDetail = _userVmDetailDao.findDetail(id, key);
- }
- } else if (resourceType == ResourceTag.ResourceObjectType.Zone){
- if (key == null) {
- detailList = _dcDetailsDao.findDetailsList(id);
- } else {
- requestedDetail = _dcDetailsDao.findDetail(id, key);
- }
- } else if (resourceType == ResourceObjectType.Network){
- if (key == null) {
- detailList = _networkDetailsDao.findDetailsList(id);
- } else {
- requestedDetail = _networkDetailsDao.findDetail(id, key);
- }
- }else {
- throw new UnsupportedServiceException("Resource type " + resourceType + " is not supported by the cloudStack");
+ if (key == null) {
+ detailList = _resourceMetaDataMgr.getDetails(resourceId, resourceType);
+ } else {
+ requestedDetail = _resourceMetaDataMgr.getDetail(resourceId, resourceType, key);
}
+ List<ResourceDetailResponse> responseList = new ArrayList<ResourceDetailResponse>();
if (requestedDetail != null) {
- ResourceDetailResponse detailResponse = createResourceDetailsResponse(id, requestedDetail.getName(), requestedDetail.getValue(),
+ ResourceDetailResponse detailResponse = createResourceDetailsResponse(resourceId, requestedDetail.getName(), requestedDetail.getValue(),
resourceType);
responseList.add(detailResponse);
} else {
for (ResourceDetail detail : detailList) {
- ResourceDetailResponse detailResponse = createResourceDetailsResponse(id, detail.getName(), detail.getValue(),
+ ResourceDetailResponse detailResponse = createResourceDetailsResponse(resourceId, detail.getName(), detail.getValue(),
resourceType);
responseList.add(detailResponse);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/aa9f8e64/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
index 152e57f..5bfe004 100644
--- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
+++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java
@@ -16,17 +16,22 @@
// under the License.
package com.cloud.metadata;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.api.ResourceDetail;
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;
@@ -71,13 +76,21 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
@Inject
VMTemplateDetailsDao _templateDetailsDao;
@Inject
- UserVmDetailsDao _userVmDetailsDao;
- @Inject
ServiceOfferingDetailsDao _serviceOfferingDetailsDao;
+ private static Map<ResourceObjectType, ResourceDetailDao<? extends ResourceDetail>> _daoMap=
+ new HashMap<ResourceObjectType, ResourceDetailDao<? extends ResourceDetail>>();
+
@Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+ _daoMap.put(ResourceObjectType.UserVm, _userVmDetailDao);
+ _daoMap.put(ResourceObjectType.Volume, _volumeDetailDao);
+ _daoMap.put(ResourceObjectType.Template, _templateDetailsDao);
+ _daoMap.put(ResourceObjectType.Network, _networkDetailsDao);
+ _daoMap.put(ResourceObjectType.Nic, _nicDetailDao);
+ _daoMap.put(ResourceObjectType.ServiceOffering, _serviceOfferingDetailsDao);
+ _daoMap.put(ResourceObjectType.Zone, _dcDetailsDao);
return true;
}
@@ -100,40 +113,34 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
@Override
public Boolean doInTransaction(TransactionStatus status) {
for (String key : details.keySet()) {
- String value = details.get(key);
-
- if (value == null || value.isEmpty()) {
- throw new InvalidParameterValueException("Value for the key " + key + " is either null or empty");
- }
+ long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
+ String value = details.get(key);
+
+ if (value == null || value.isEmpty()) {
+ throw new InvalidParameterValueException("Value for the key " + key + " is either null or empty");
+ }
+
+ DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
+ ResourceDetail detail = null;
+
+ // 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);
+ }
+ newDetailDaoHelper.addDetail(detail);
- if (!resourceType.resourceMetadataSupport()) {
- throw new InvalidParameterValueException("The resource type " + resourceType + " doesn't support metadata (resource details)");
- }
-
- long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
- // TODO - Have a better design here for getting the DAO.
- if(resourceType == ResourceObjectType.Volume){
- VolumeDetailVO detail = new VolumeDetailVO(id, key, value);
- _volumeDetailDao.addDetail(detail);
- } else if (resourceType == ResourceObjectType.Nic){
- NicDetailVO detail = new NicDetailVO(id, key, value);
- _nicDetailDao.addDetail(detail);
- } else if (resourceType == ResourceObjectType.Zone){
- DataCenterDetailVO dataCenterDetail = new DataCenterDetailVO(id, key, value);
- _dcDetailsDao.addDetail(dataCenterDetail);
- } else if (resourceType == ResourceObjectType.Network){
- NetworkDetailVO detail = new NetworkDetailVO(id, key, value);
- _networkDetailsDao.addDetail(detail);
- } else if (resourceType == ResourceObjectType.UserVm) {
- UserVmDetailVO detail = new UserVmDetailVO(id, key, value);
- _userVmDetailsDao.addDetail(detail);
- } else if (resourceType == ResourceObjectType.Template) {
- VMTemplateDetailVO detail = new VMTemplateDetailVO(id, key, value);
- _templateDetailsDao.addDetail(detail);
- } else if (resourceType == ResourceObjectType.ServiceOffering) {
- ServiceOfferingDetailsVO detail = new ServiceOfferingDetailsVO(id, key, value);
- _serviceOfferingDetailsDao.addDetail(detail);
- }
}
@@ -147,32 +154,56 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource
@DB
@ActionEvent(eventType = EventTypes.EVENT_RESOURCE_DETAILS_DELETE, eventDescription = "deleting resource meta data")
public boolean deleteResourceMetaData(String resourceId, ResourceObjectType resourceType, String key){
-
long id = _taggedResourceMgr.getResourceId(resourceId, resourceType);
- if (!resourceType.resourceMetadataSupport()) {
- throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet");
- }
-
- // TODO - Have a better design here for getting the DAO.
- if (resourceType == ResourceObjectType.Volume){
- _volumeDetailDao.removeDetail(id, key);
- } else if (resourceType == ResourceObjectType.Nic){
- _nicDetailDao.removeDetail(id, key);
- } else if (resourceType == ResourceObjectType.UserVm) {
- _userVmDetailsDao.removeDetail(id, key);
- } else if (resourceType == ResourceObjectType.Template) {
- _templateDetailsDao.removeDetail(id, key);
- } else if (resourceType == ResourceObjectType.Zone){
- _dcDetailsDao.removeDetail(id, key);
- } else if (resourceType == ResourceObjectType.ServiceOffering) {
- _serviceOfferingDetailsDao.removeDetail(id, key);
- } else if (resourceType == ResourceObjectType.Network) {
- _networkDetailsDao.removeDetail(id, key);
- }
+ DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
+ newDetailDaoHelper.removeDetail(id, key);
return true;
}
-
+ private class DetailDaoHelper {
+ private ResourceObjectType resourceType;
+
+ 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);
+ 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);
+ }
+ }
+
+ @Override
+ public List<? extends ResourceDetail> getDetails(long resourceId, ResourceObjectType resourceType) {
+ DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
+ return newDetailDaoHelper.getDetails(resourceId);
+ }
+
+ @Override
+ public ResourceDetail getDetail(long resourceId, ResourceObjectType resourceType, String key) {
+ DetailDaoHelper newDetailDaoHelper = new DetailDaoHelper(resourceType);
+ return newDetailDaoHelper.getDetail(resourceId, key);
+ }
}