diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java index bdccec94ef0..e2fa72081bc 100644 --- a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java +++ b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDao.java @@ -29,4 +29,7 @@ public interface UserVmDetailsDao extends GenericDao { UserVmDetailVO findDetail(long vmId, String name); void deleteDetails(long vmId); + + public void removeDetails(Long vmId, String key); + } diff --git a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java index 6ec6f68ada6..01abce321f6 100644 --- a/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/UserVmDetailsDaoImpl.java @@ -22,6 +22,7 @@ import java.util.Map; import javax.ejb.Local; +import com.cloud.vm.NicDetailVO; import org.springframework.stereotype.Component; import com.cloud.utils.db.GenericDaoBase; @@ -96,4 +97,18 @@ public class UserVmDetailsDaoImpl extends GenericDaoBase i txn.commit(); } + @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); + } + + } + + } diff --git a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java index 82a62beb0c1..80d5055a8e2 100644 --- a/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java +++ b/server/src/com/cloud/metadata/ResourceMetaDataManagerImpl.java @@ -23,6 +23,14 @@ import javax.ejb.Local; import javax.inject.Inject; import javax.naming.ConfigurationException; +import com.cloud.server.ResourceMetaDataService; +import com.cloud.storage.VolumeDetailVO; +import com.cloud.storage.dao.VolumeDetailsDao; +import com.cloud.vm.NicDetailVO; +import com.cloud.vm.UserVmDetailVO; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.NicDetailDao; +import com.cloud.vm.dao.UserVmDetailsDao; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -40,15 +48,12 @@ import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.vpc.dao.StaticRouteDao; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.projects.dao.ProjectDao; -import com.cloud.server.ResourceMetaDataService; import com.cloud.server.ResourceTag; import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.server.TaggedResourceService; -import com.cloud.storage.VolumeDetailVO; import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.dao.VolumeDao; -import com.cloud.storage.dao.VolumeDetailsDao; import com.cloud.tags.dao.ResourceTagDao; import com.cloud.user.AccountManager; import com.cloud.user.DomainManager; @@ -57,12 +62,7 @@ import com.cloud.utils.db.DB; import com.cloud.utils.db.GenericDao; import com.cloud.utils.db.Transaction; import com.cloud.uuididentity.dao.IdentityDao; -import com.cloud.vm.NicDetailVO; -import com.cloud.vm.UserVmDetailVO; -import com.cloud.vm.dao.NicDao; -import com.cloud.vm.dao.NicDetailDao; import com.cloud.vm.dao.UserVmDao; -import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.snapshot.dao.VMSnapshotDao; @@ -119,6 +119,8 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource @Inject NicDetailDao _nicDetailDao; @Inject + UserVmDetailsDao _userVmDetailDao; + @Inject NicDao _nicDao; @Inject TaggedResourceService _taggedResourceMgr; @@ -203,10 +205,10 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource } else if (resourceType == TaggedResourceType.Nic){ NicDetailVO n = new NicDetailVO(id, key, value); _nicDetailDao.persist(n); - } else if (resourceType == TaggedResourceType.UserVm) { - UserVmDetailVO v = new UserVmDetailVO(id, key, value); - _userVmDetail.persist(v); - }else{ + }else if (resourceType == TaggedResourceType.UserVm){ + UserVmDetailVO userVmDetail = new UserVmDetailVO(id, key, value); + _userVmDetailDao.persist(userVmDetail); + } else { throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet"); } @@ -227,8 +229,12 @@ public class ResourceMetaDataManagerImpl extends ManagerBase implements Resource // TODO - Have a better design here. if(resourceType == TaggedResourceType.Volume){ _volumeDetailDao.removeDetails(id, key); - } else { + } else if(resourceType == TaggedResourceType.Nic){ _nicDetailDao.removeDetails(id, key); + } else if(resourceType == TaggedResourceType.UserVm){ + _userVmDetailDao.removeDetails(id, key); + } else { + throw new InvalidParameterValueException("The resource type " + resourceType + " is not supported by the API yet"); } return true;