From 9535dc8f4da88991c0c8c1b23e49fda224c6ec0f Mon Sep 17 00:00:00 2001 From: abhishek Date: Wed, 1 Sep 2010 10:38:22 -0700 Subject: [PATCH] bug 6023: Implemented the search by group status 6023: resolved fixed --- .../xen/resource/CitrixResourceBase.java | 2 +- core/src/com/cloud/server/Criteria.java | 3 ++- core/src/com/cloud/vm/dao/UserVmDaoImpl.java | 2 ++ .../com/cloud/api/commands/ListVMsCmd.java | 10 ++++++++ .../cloud/server/ManagementServerImpl.java | 23 ++++++++++++++++--- 5 files changed, 35 insertions(+), 5 deletions(-) diff --git a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java index 069e31b26c9..f04aa4dd702 100644 --- a/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java +++ b/core/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java @@ -1,5 +1,5 @@ /** -: * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. + * Copyright (C) 2010 Cloud.com, Inc. All rights reserved. * * This software is licensed under the GNU General Public License v3 or later. * diff --git a/core/src/com/cloud/server/Criteria.java b/core/src/com/cloud/server/Criteria.java index f2d7090341c..6d41b967be9 100644 --- a/core/src/com/cloud/server/Criteria.java +++ b/core/src/com/cloud/server/Criteria.java @@ -76,7 +76,8 @@ public class Criteria { public static final String TARGET_IQN = "targetiqn"; public static final String SCOPE = "scope"; public static final String NETWORKGROUP = "networkGroup"; - + public static final String GROUP = "group"; + public static final String EMPTY_GROUP = "emptyGroup"; public Criteria(String orderBy, Boolean ascending, Long offset, Long limit) { this.offset = offset; diff --git a/core/src/com/cloud/vm/dao/UserVmDaoImpl.java b/core/src/com/cloud/vm/dao/UserVmDaoImpl.java index 6ab439486af..4e909b7b9f3 100755 --- a/core/src/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/core/src/com/cloud/vm/dao/UserVmDaoImpl.java @@ -116,6 +116,8 @@ public class UserVmDaoImpl extends GenericDaoBase implements Use DestroySearch.and("updateTime", DestroySearch.entity().getUpdateTime(), SearchCriteria.Op.LT); DestroySearch.done(); + + _updateTimeAttr = _allAttributes.get("updateTime"); assert _updateTimeAttr != null : "Couldn't get this updateTime attribute"; } diff --git a/server/src/com/cloud/api/commands/ListVMsCmd.java b/server/src/com/cloud/api/commands/ListVMsCmd.java index 0a61217a95c..5989d982630 100644 --- a/server/src/com/cloud/api/commands/ListVMsCmd.java +++ b/server/src/com/cloud/api/commands/ListVMsCmd.java @@ -53,6 +53,7 @@ public class ListVMsCmd extends BaseCmd { s_properties.add(new Pair(BaseCmd.Properties.STATE, Boolean.FALSE)); s_properties.add(new Pair(BaseCmd.Properties.ZONE_ID, Boolean.FALSE)); s_properties.add(new Pair(BaseCmd.Properties.POD_ID, Boolean.FALSE)); + s_properties.add(new Pair(BaseCmd.Properties.GROUP, Boolean.FALSE)); s_properties.add(new Pair(BaseCmd.Properties.HOST_ID, Boolean.FALSE)); s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); s_properties.add(new Pair(BaseCmd.Properties.ACCOUNT, Boolean.FALSE)); @@ -82,6 +83,7 @@ public class ListVMsCmd extends BaseCmd { Long zoneId = (Long)params.get(BaseCmd.Properties.ZONE_ID.getName()); Long podId = (Long)params.get(BaseCmd.Properties.POD_ID.getName()); Long hostId = (Long)params.get(BaseCmd.Properties.HOST_ID.getName()); + String group = (String)params.get(BaseCmd.Properties.GROUP.getName()); String keyword = (String)params.get(BaseCmd.Properties.KEYWORD.getName()); Integer page = (Integer)params.get(BaseCmd.Properties.PAGE.getName()); Integer pageSize = (Integer)params.get(BaseCmd.Properties.PAGESIZE.getName()); @@ -140,6 +142,14 @@ public class ListVMsCmd extends BaseCmd { if(zoneId != null) c.addCriteria(Criteria.DATACENTERID, zoneId); + if(group != null) + { + if(group.equals("")) + c.addCriteria(Criteria.EMPTY_GROUP, group); + else + c.addCriteria(Criteria.GROUP, group); + } + // ignore these search requests if it's not an admin if (isAdmin == true) { c.addCriteria(Criteria.DOMAINID, domainId); diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 3c65b3033e3..a1ce58b1599 100644 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -4989,7 +4989,6 @@ public class ManagementServerImpl implements ManagementServer { public List searchForUserVMs(Criteria c) { Filter searchFilter = new Filter(UserVmVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); SearchBuilder sb = _userVmDao.createSearchBuilder(); - // some criteria matter for generating the join condition Object[] accountIds = (Object[]) c.getCriteria(Criteria.ACCOUNTID); Object domainId = c.getCriteria(Criteria.DOMAINID); @@ -5006,7 +5005,8 @@ public class ManagementServerImpl implements ManagementServer { Object keyword = c.getCriteria(Criteria.KEYWORD); Object isAdmin = c.getCriteria(Criteria.ISADMIN); Object ipAddress = c.getCriteria(Criteria.IPADDRESS); - + Object vmGroup = c.getCriteria(Criteria.GROUP); + Object emptyGroup = c.getCriteria(Criteria.EMPTY_GROUP); sb.and("displayName", sb.entity().getDisplayName(), SearchCriteria.Op.LIKE); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("accountIdEQ", sb.entity().getAccountId(), SearchCriteria.Op.EQ); @@ -5020,7 +5020,8 @@ public class ManagementServerImpl implements ManagementServer { sb.and("hostIdEQ", sb.entity().getHostId(), SearchCriteria.Op.EQ); sb.and("hostIdIN", sb.entity().getHostId(), SearchCriteria.Op.IN); sb.and("guestIP", sb.entity().getGuestIpAddress(), SearchCriteria.Op.EQ); - + sb.and("groupEQ", sb.entity().getGroup(),SearchCriteria.Op.EQ); + if ((accountIds == null) && (domainId != null)) { // if accountId isn't specified, we can do a domain match for the admin case SearchBuilder domainSearch = _domainDao.createSearchBuilder(); @@ -5109,7 +5110,23 @@ public class ManagementServerImpl implements ManagementServer { if (ipAddress != null) { sc.setParameters("guestIP", ipAddress); } + + if(vmGroup!=null) + sc.setParameters("groupEQ", vmGroup); + + if (emptyGroup!= null) + { + SearchBuilder emptyGroupSearch = _userVmDao.createSearchBuilder(); + emptyGroupSearch.and("group", emptyGroupSearch.entity().getGroup(), SearchCriteria.Op.EQ); + emptyGroupSearch.or("null", emptyGroupSearch.entity().getGroup(), SearchCriteria.Op.NULL); + SearchCriteria sc1 = _userVmDao.createSearchCriteria(); + sc1 = emptyGroupSearch.create(); + sc1.setParameters("group", ""); + + sc.addAnd("group", SearchCriteria.Op.SC, sc1); + } + return _userVmDao.search(sc, searchFilter); }