ResourceTags: resourcetags support for Project/Vpc/NetworkACL/StaticRoute
Conflicts:
api/src/com/cloud/api/commands/ListVPCsCmd.java
server/src/com/cloud/api/ApiResponseHelper.java
server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
server/src/com/cloud/network/vpc/VpcManagerImpl.java
server/src/com/cloud/projects/dao/ProjectDaoImpl.java
server/src/com/cloud/uuididentity/dao/IdentityDao.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit:
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/5cbe3d97
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/5cbe3d97
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/5cbe3d97
Branch: refs/heads/vpc
Commit: 5cbe3d9722f5b7e46776667e1e8b548893e9283a
Parents: d2df3e0
Author: Alena Prokharchyk <[email protected]>
Authored: Thu Jul 5 17:33:20 2012 -0700
Committer: Alena Prokharchyk <[email protected]>
Committed: Wed Aug 1 18:54:08 2012 -0700
----------------------------------------------------------------------
.../com/cloud/api/commands/ListNetworkACLsCmd.java | 5 +-
.../com/cloud/api/commands/ListProjectsCmd.java | 31 +++++++++-
.../cloud/api/commands/ListStaticRoutesCmd.java | 4 +-
api/src/com/cloud/api/commands/ListVPCsCmd.java | 8 ++-
.../com/cloud/api/response/NetworkACLResponse.java | 10 +++
.../com/cloud/api/response/ProjectResponse.java | 11 +++-
.../cloud/api/response/StaticRouteResponse.java | 10 +++
api/src/com/cloud/api/response/VpcResponse.java | 7 ++
api/src/com/cloud/network/vpc/VpcService.java | 3 +-
api/src/com/cloud/projects/ProjectService.java | 4 +-
api/src/com/cloud/server/ResourceTag.java | 6 ++-
server/src/com/cloud/api/ApiResponseHelper.java | 38 +++++++++++-
.../cloud/network/dao/FirewallRulesDaoImpl.java | 2 +
.../cloud/network/vpc/Dao/StaticRouteDaoImpl.java | 19 ++++++
.../src/com/cloud/network/vpc/Dao/VpcDaoImpl.java | 19 ++++++
.../cloud/network/vpc/NetworkACLManagerImpl.java | 31 +++++++++-
.../src/com/cloud/network/vpc/VpcManagerImpl.java | 50 ++++++++++++++-
.../src/com/cloud/projects/ProjectManagerImpl.java | 33 +++++++++-
.../src/com/cloud/projects/dao/ProjectDaoImpl.java | 9 ++-
.../src/com/cloud/storage/StorageManagerImpl.java | 1 +
.../com/cloud/tags/TaggedResourceManagerImpl.java | 19 +++++-
.../com/cloud/uuididentity/dao/IdentityDao.java | 6 +-
.../cloud/uuididentity/dao/IdentityDaoImpl.java | 9 ++-
23 files changed, 309 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
index f17c4c0..3529558 100644
--- a/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
+++ b/api/src/com/cloud/api/commands/ListNetworkACLsCmd.java
@@ -23,7 +23,8 @@ import java.util.List;
import org.apache.log4j.Logger;
import com.cloud.api.ApiConstants;
-import com.cloud.api.BaseListProjectAndAccountResourcesCmd;
+import com.cloud.api.BaseCmd.CommandType;
+import com.cloud.api.BaseListTaggedResourcesCmd;
import com.cloud.api.IdentityMapper;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
@@ -32,7 +33,7 @@ import com.cloud.api.response.NetworkACLResponse;
import com.cloud.network.rules.FirewallRule;
@Implementation(description="Lists all network ACLs",
responseObject=NetworkACLResponse.class)
-public class ListNetworkACLsCmd extends BaseListProjectAndAccountResourcesCmd {
+public class ListNetworkACLsCmd extends BaseListTaggedResourcesCmd {
public static final Logger s_logger =
Logger.getLogger(ListNetworkACLsCmd.class.getName());
private static final String s_name = "listnetworkaclsresponse";
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/commands/ListProjectsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListProjectsCmd.java
b/api/src/com/cloud/api/commands/ListProjectsCmd.java
index 34fba80..187e52c 100644
--- a/api/src/com/cloud/api/commands/ListProjectsCmd.java
+++ b/api/src/com/cloud/api/commands/ListProjectsCmd.java
@@ -17,7 +17,11 @@
package com.cloud.api.commands;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import org.apache.log4j.Logger;
@@ -28,6 +32,7 @@ import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.ProjectResponse;
+import com.cloud.exception.InvalidParameterValueException;
import com.cloud.projects.Project;
@Implementation(description="Lists projects and provides detailed information
for listed projects", responseObject=ProjectResponse.class, since="3.0.0")
@@ -52,6 +57,9 @@ public class ListProjectsCmd extends
BaseListAccountResourcesCmd {
@Parameter(name=ApiConstants.STATE, type=CommandType.STRING,
description="list projects by state")
private String state;
+ @Parameter(name = ApiConstants.TAGS, type = CommandType.MAP, description =
"List projects by tags (key/value pairs)")
+ private Map tags;
+
/////////////////////////////////////////////////////
/////////////////// Accessors ///////////////////////
/////////////////////////////////////////////////////
@@ -72,6 +80,25 @@ public class ListProjectsCmd extends
BaseListAccountResourcesCmd {
public String getCommandName() {
return s_name;
}
+
+ public Map<String, String> getTags() {
+ Map<String, String> tagsMap = null;
+ if (tags != null && !tags.isEmpty()) {
+ tagsMap = new HashMap<String, String>();
+ Collection<?> servicesCollection = tags.values();
+ Iterator<?> iter = servicesCollection.iterator();
+ while (iter.hasNext()) {
+ HashMap<String, String> services = (HashMap<String, String>)
iter.next();
+ String key = services.get("key");
+ String value = services.get("value");
+ if (value == null) {
+ throw new InvalidParameterValueException("No value is
passed in for key " + key);
+ }
+ tagsMap.put(key, value);
+ }
+ }
+ return tagsMap;
+ }
/////////////////////////////////////////////////////
/////////////// API Implementation///////////////////
@@ -79,7 +106,9 @@ public class ListProjectsCmd extends
BaseListAccountResourcesCmd {
@Override
public void execute(){
- List<? extends Project> projects = _projectService.listProjects(id,
name, displayText, state, this.getAccountName(), this.getDomainId(),
this.getKeyword(), this.getStartIndex(), this.getPageSizeVal(), this.listAll(),
this.isRecursive());
+ List<? extends Project> projects = _projectService.listProjects(id,
name, displayText, state,
+ this.getAccountName(), this.getDomainId(), this.getKeyword(),
this.getStartIndex(), this.getPageSizeVal(),
+ this.listAll(), this.isRecursive(), getTags());
ListResponse<ProjectResponse> response = new
ListResponse<ProjectResponse>();
List<ProjectResponse> projectResponses = new
ArrayList<ProjectResponse>();
for (Project project : projects) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
b/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
index 20ec6b0..3cd8286 100644
--- a/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
+++ b/api/src/com/cloud/api/commands/ListStaticRoutesCmd.java
@@ -19,7 +19,7 @@ package com.cloud.api.commands;
import java.util.ArrayList;
import java.util.List;
import com.cloud.api.ApiConstants;
-import com.cloud.api.BaseListProjectAndAccountResourcesCmd;
+import com.cloud.api.BaseListTaggedResourcesCmd;
import com.cloud.api.IdentityMapper;
import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
@@ -28,7 +28,7 @@ import com.cloud.api.response.StaticRouteResponse;
import com.cloud.network.vpc.StaticRoute;
@Implementation(description="Lists all static routes",
responseObject=StaticRouteResponse.class)
-public class ListStaticRoutesCmd extends BaseListProjectAndAccountResourcesCmd
{
+public class ListStaticRoutesCmd extends BaseListTaggedResourcesCmd {
private static final String s_name = "liststaticroutesresponse";
/////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/commands/ListVPCsCmd.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/commands/ListVPCsCmd.java
b/api/src/com/cloud/api/commands/ListVPCsCmd.java
index ec2f538..2b9ae87 100644
--- a/api/src/com/cloud/api/commands/ListVPCsCmd.java
+++ b/api/src/com/cloud/api/commands/ListVPCsCmd.java
@@ -22,15 +22,17 @@ import java.util.List;
import org.apache.log4j.Logger;
import com.cloud.api.ApiConstants;
-import com.cloud.api.BaseListAccountResourcesCmd;
+import com.cloud.api.BaseListTaggedResourcesCmd;
import com.cloud.api.IdentityMapper;
+import com.cloud.api.Implementation;
import com.cloud.api.Parameter;
import com.cloud.api.response.ListResponse;
import com.cloud.api.response.VpcResponse;
import com.cloud.network.vpc.Vpc;
-public class ListVPCsCmd extends BaseListAccountResourcesCmd{
+@Implementation(description="Lists VPCs", responseObject=VpcResponse.class)
+public class ListVPCsCmd extends BaseListTaggedResourcesCmd{
public static final Logger s_logger =
Logger.getLogger(ListVPCsCmd.class.getName());
private static final String s_name = "listvpcsresponse";
@@ -136,7 +138,7 @@ public class ListVPCsCmd extends
BaseListAccountResourcesCmd{
List<? extends Vpc> vpcs = _vpcService.listVpcs(getId(), getVpcName(),
getDisplayText(),
getSupportedServices(), getCidr(), getVpcOffId(), getState(),
getAccountName(), getDomainId(),
this.getKeyword(), this.getStartIndex(),
this.getPageSizeVal(), getZoneId(), this.isRecursive(),
- this.listAll(), getRestartRequired());
+ this.listAll(), getRestartRequired(), getTags());
ListResponse<VpcResponse> response = new ListResponse<VpcResponse>();
List<VpcResponse> offeringResponses = new ArrayList<VpcResponse>();
for (Vpc vpc : vpcs) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/response/NetworkACLResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/NetworkACLResponse.java
b/api/src/com/cloud/api/response/NetworkACLResponse.java
index d0bd3b2..10f312b 100644
--- a/api/src/com/cloud/api/response/NetworkACLResponse.java
+++ b/api/src/com/cloud/api/response/NetworkACLResponse.java
@@ -16,6 +16,8 @@
// under the License.
package com.cloud.api.response;
+import java.util.List;
+
import com.cloud.api.ApiConstants;
import com.cloud.serializer.Param;
import com.cloud.utils.IdentityProxy;
@@ -49,6 +51,10 @@ public class NetworkACLResponse extends BaseResponse {
@SerializedName(ApiConstants.ICMP_CODE) @Param(description = "error code
for this icmp message")
private Integer icmpCode;
+
+ @SerializedName(ApiConstants.TAGS) @Param(description="the list of
resource tags associated with the network ACLs",
+ responseObject = ResourceTagResponse.class)
+ private List<ResourceTagResponse> tags;
public void setId(Long id) {
this.id.setValue(id);
@@ -85,4 +91,8 @@ public class NetworkACLResponse extends BaseResponse {
public void setTrafficType(String trafficType) {
this.trafficType = trafficType;
}
+
+ public void setTags(List<ResourceTagResponse> tags) {
+ this.tags = tags;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/response/ProjectResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/ProjectResponse.java
b/api/src/com/cloud/api/response/ProjectResponse.java
index de3d71c..2735980 100644
--- a/api/src/com/cloud/api/response/ProjectResponse.java
+++ b/api/src/com/cloud/api/response/ProjectResponse.java
@@ -16,9 +16,11 @@
// under the License.
package com.cloud.api.response;
+import java.util.List;
+
import com.cloud.api.ApiConstants;
-import com.cloud.utils.IdentityProxy;
import com.cloud.serializer.Param;
+import com.cloud.utils.IdentityProxy;
import com.google.gson.annotations.SerializedName;
@SuppressWarnings("unused")
@@ -44,6 +46,9 @@ public class ProjectResponse extends BaseResponse{
@SerializedName(ApiConstants.STATE) @Param(description="the state of the
project")
private String state;
+
+ @SerializedName(ApiConstants.TAGS) @Param(description="the list of
resource tags associated with vm", responseObject = ResourceTagResponse.class)
+ private List<ResourceTagResponse> tags;
public void setId(Long id) {
@@ -73,4 +78,8 @@ public class ProjectResponse extends BaseResponse{
public void setState(String state) {
this.state = state;
}
+
+ public void setTags(List<ResourceTagResponse> tags) {
+ this.tags = tags;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/response/StaticRouteResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/StaticRouteResponse.java
b/api/src/com/cloud/api/response/StaticRouteResponse.java
index eb0f4f2..0b950ec 100644
--- a/api/src/com/cloud/api/response/StaticRouteResponse.java
+++ b/api/src/com/cloud/api/response/StaticRouteResponse.java
@@ -16,6 +16,8 @@
// under the License.
package com.cloud.api.response;
+import java.util.List;
+
import com.cloud.api.ApiConstants;
import com.cloud.serializer.Param;
import com.cloud.utils.IdentityProxy;
@@ -55,6 +57,10 @@ public class StaticRouteResponse extends BaseResponse
implements ControlledEntit
@SerializedName(ApiConstants.DOMAIN)
@Param(description = "the domain associated with the static route")
private String domainName;
+
+ @SerializedName(ApiConstants.TAGS) @Param(description="the list of
resource tags associated with static route",
+ responseObject = ResourceTagResponse.class)
+ private List<ResourceTagResponse> tags;
public void setId(Long id) {
this.id.setValue(id);
@@ -100,4 +106,8 @@ public class StaticRouteResponse extends BaseResponse
implements ControlledEntit
public void setProjectName(String projectName) {
this.projectName = projectName;
}
+
+ public void setTags(List<ResourceTagResponse> tags) {
+ this.tags = tags;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/api/response/VpcResponse.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/api/response/VpcResponse.java
b/api/src/com/cloud/api/response/VpcResponse.java
index 5cf471e..7cccfba 100644
--- a/api/src/com/cloud/api/response/VpcResponse.java
+++ b/api/src/com/cloud/api/response/VpcResponse.java
@@ -79,6 +79,9 @@ public class VpcResponse extends BaseResponse implements
ControlledEntityRespons
@SerializedName(ApiConstants.NETWORK_DOMAIN) @Param(description="the
network domain")
private String networkDomain;
+
+ @SerializedName(ApiConstants.TAGS) @Param(description="the list of
resource tags associated with the project", responseObject =
ResourceTagResponse.class)
+ private List<ResourceTagResponse> tags;
public void setId(Long id) {
this.id.setValue(id);
@@ -160,4 +163,8 @@ public class VpcResponse extends BaseResponse implements
ControlledEntityRespons
public void setZoneName(String zoneName) {
this.zoneName = zoneName;
}
+
+ public void setTags(List<ResourceTagResponse> tags) {
+ this.tags = tags;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/network/vpc/VpcService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/vpc/VpcService.java
b/api/src/com/cloud/network/vpc/VpcService.java
index e305c38..b869a9d 100644
--- a/api/src/com/cloud/network/vpc/VpcService.java
+++ b/api/src/com/cloud/network/vpc/VpcService.java
@@ -112,13 +112,14 @@ public interface VpcService {
* @param isRecursive TODO
* @param listAll TODO
* @param restartRequired TODO
+ * @param tags TODO
* @param vpc
* @return
*/
public List<? extends Vpc> listVpcs(Long id, String vpcName, String
displayText,
List<String> supportedServicesStr, String cidr, Long vpcOffId,
String state, String accountName, Long domainId,
String keyword, Long startIndex, Long pageSizeVal, Long zoneId,
Boolean isRecursive, Boolean listAll,
- Boolean restartRequired);
+ Boolean restartRequired, Map<String, String> tags);
/**
* @param vpcId
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/projects/ProjectService.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/projects/ProjectService.java
b/api/src/com/cloud/projects/ProjectService.java
index 0f1ac33..c792f26 100644
--- a/api/src/com/cloud/projects/ProjectService.java
+++ b/api/src/com/cloud/projects/ProjectService.java
@@ -17,6 +17,7 @@
package com.cloud.projects;
import java.util.List;
+import java.util.Map;
import com.cloud.exception.ConcurrentOperationException;
import com.cloud.exception.ResourceAllocationException;
@@ -59,7 +60,8 @@ public interface ProjectService {
*/
Project getProject(long id);
- List<? extends Project> listProjects(Long id, String name, String
displayText, String state, String accountName, Long domainId, String keyword,
Long startIndex, Long pageSize, boolean listAll, boolean isRecursive);
+ List<? extends Project> listProjects(Long id, String name, String
displayText, String state, String accountName,
+ Long domainId, String keyword, Long startIndex, Long pageSize,
boolean listAll, boolean isRecursive, Map<String, String> tags);
ProjectAccount assignAccountToProject(Project project, long accountId,
Role accountRole);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/api/src/com/cloud/server/ResourceTag.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/server/ResourceTag.java
b/api/src/com/cloud/server/ResourceTag.java
index 640512b..117e721 100644
--- a/api/src/com/cloud/server/ResourceTag.java
+++ b/api/src/com/cloud/server/ResourceTag.java
@@ -31,7 +31,11 @@ public interface ResourceTag extends ControlledEntity{
PortForwardingRule,
FirewallRule,
SecurityGroup,
- PublicIpAddress
+ PublicIpAddress,
+ Project,
+ Vpc,
+ NetworkACL,
+ StaticRoute
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/api/ApiResponseHelper.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/api/ApiResponseHelper.java
b/server/src/com/cloud/api/ApiResponseHelper.java
index af0055c..5138af1 100755
--- a/server/src/com/cloud/api/ApiResponseHelper.java
+++ b/server/src/com/cloud/api/ApiResponseHelper.java
@@ -3063,6 +3063,15 @@ public class ApiResponseHelper implements
ResponseGenerator {
response.setDomain(domain.getName());
response.setOwner(ApiDBUtils.getProjectOwner(project.getId()).getAccountName());
+
+ //set tag information
+ List<? extends ResourceTag> tags =
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Project, project.getId());
+ List<ResourceTagResponse> tagResponses = new
ArrayList<ResourceTagResponse>();
+ for (ResourceTag tag : tags) {
+ ResourceTagResponse tagResponse = createResourceTagResponse(tag,
true);
+ tagResponses.add(tagResponse);
+ }
+ response.setTags(tagResponses);
response.setObjectName("project");
return response;
@@ -3141,6 +3150,16 @@ public class ApiResponseHelper implements
ResponseGenerator {
response.setIcmpType(networkACL.getIcmpType());
response.setState(stateToSet);
+
+ //set tag information
+ List<? extends ResourceTag> tags =
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.NetworkACL,
networkACL.getId());
+ List<ResourceTagResponse> tagResponses = new
ArrayList<ResourceTagResponse>();
+ for (ResourceTag tag : tags) {
+ ResourceTagResponse tagResponse = createResourceTagResponse(tag,
true);
+ tagResponses.add(tagResponse);
+ }
+ response.setTags(tagResponses);
+
response.setObjectName("networkacl");
return response;
}
@@ -3722,7 +3741,15 @@ public class ApiResponseHelper implements
ResponseGenerator {
response.setNetworks(networkResponses);
response.setServices(serviceResponses);
populateOwner(response, vpc);
-
+
+ //set tag information
+ List<? extends ResourceTag> tags =
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.Vpc, vpc.getId());
+ List<ResourceTagResponse> tagResponses = new
ArrayList<ResourceTagResponse>();
+ for (ResourceTag tag : tags) {
+ ResourceTagResponse tagResponse = createResourceTagResponse(tag,
true);
+ tagResponses.add(tagResponse);
+ }
+ response.setTags(tagResponses);
response.setObjectName("vpc");
return response;
}
@@ -3765,6 +3792,15 @@ public class ApiResponseHelper implements
ResponseGenerator {
response.setState(stateToSet);
populateAccount(response, result.getAccountId());
populateDomain(response, result.getDomainId());
+
+ //set tag information
+ List<? extends ResourceTag> tags =
ApiDBUtils.listByResourceTypeAndId(TaggedResourceType.StaticRoute,
result.getId());
+ List<ResourceTagResponse> tagResponses = new
ArrayList<ResourceTagResponse>();
+ for (ResourceTag tag : tags) {
+ ResourceTagResponse tagResponse = createResourceTagResponse(tag,
true);
+ tagResponses.add(tagResponse);
+ }
+ response.setTags(tagResponses);
response.setObjectName("staticroute");
return response;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
index be6bc70..a2478d8 100644
--- a/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
+++ b/server/src/com/cloud/network/dao/FirewallRulesDaoImpl.java
@@ -300,6 +300,8 @@ public class FirewallRulesDaoImpl extends
GenericDaoBase<FirewallRuleVO, Long> i
_tagsDao.removeByIdAndType(id,
TaggedResourceType.PortForwardingRule);
} else if (entry.getPurpose() == Purpose.Firewall) {
_tagsDao.removeByIdAndType(id,
TaggedResourceType.FirewallRule);
+ } else if (entry.getPurpose() == Purpose.NetworkACL) {
+ _tagsDao.removeByIdAndType(id, TaggedResourceType.NetworkACL);
}
}
boolean result = super.remove(id);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/network/vpc/Dao/StaticRouteDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/StaticRouteDaoImpl.java
b/server/src/com/cloud/network/vpc/Dao/StaticRouteDaoImpl.java
index df52699..20f47f2 100644
--- a/server/src/com/cloud/network/vpc/Dao/StaticRouteDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/Dao/StaticRouteDaoImpl.java
@@ -22,6 +22,9 @@ import javax.ejb.Local;
import com.cloud.network.vpc.StaticRoute;
import com.cloud.network.vpc.StaticRouteVO;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagsDaoImpl;
+import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
@@ -29,6 +32,7 @@ import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Func;
import com.cloud.utils.db.SearchCriteria.Op;
+import com.cloud.utils.db.Transaction;
@Local(value = StaticRouteDao.class)
@@ -37,6 +41,7 @@ public class StaticRouteDaoImpl extends
GenericDaoBase<StaticRouteVO, Long> impl
protected final SearchBuilder<StaticRouteVO> AllFieldsSearch;
protected final SearchBuilder<StaticRouteVO> NotRevokedSearch;
protected final GenericSearchBuilder<StaticRouteVO, Long>
RoutesByGatewayCount;
+ ResourceTagsDaoImpl _tagsDao =
ComponentLocator.inject(ResourceTagsDaoImpl.class);
protected StaticRouteDaoImpl() {
super();
@@ -93,4 +98,18 @@ public class StaticRouteDaoImpl extends
GenericDaoBase<StaticRouteVO, Long> impl
sc.setParameters("gatewayId", gatewayId);
return customSearch(sc, null).get(0);
}
+
+ @Override
+ @DB
+ public boolean remove(Long id) {
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+ StaticRouteVO entry = findById(id);
+ if (entry != null) {
+ _tagsDao.removeBy(id, TaggedResourceType.StaticRoute);
+ }
+ boolean result = super.remove(id);
+ txn.commit();
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/network/vpc/Dao/VpcDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/Dao/VpcDaoImpl.java
b/server/src/com/cloud/network/vpc/Dao/VpcDaoImpl.java
index 3b6f125..048571f 100644
--- a/server/src/com/cloud/network/vpc/Dao/VpcDaoImpl.java
+++ b/server/src/com/cloud/network/vpc/Dao/VpcDaoImpl.java
@@ -22,6 +22,9 @@ import javax.ejb.Local;
import com.cloud.network.vpc.Vpc;
import com.cloud.network.vpc.VpcVO;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagsDaoImpl;
+import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
@@ -29,6 +32,7 @@ import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Func;
import com.cloud.utils.db.SearchCriteria.Op;
+import com.cloud.utils.db.Transaction;
@Local(value = VpcDao.class)
@@ -36,6 +40,7 @@ import com.cloud.utils.db.SearchCriteria.Op;
public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long> implements VpcDao{
final GenericSearchBuilder<VpcVO, Integer> CountByOfferingId;
final SearchBuilder<VpcVO> AllFieldsSearch;
+ ResourceTagsDaoImpl _tagsDao =
ComponentLocator.inject(ResourceTagsDaoImpl.class);
protected VpcDaoImpl() {
super();
@@ -83,5 +88,19 @@ public class VpcDaoImpl extends GenericDaoBase<VpcVO, Long>
implements VpcDao{
sc.setParameters("state", Vpc.State.Inactive);
return listBy(sc, null);
}
+
+ @Override
+ @DB
+ public boolean remove(Long id) {
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+ VpcVO entry = findById(id);
+ if (entry != null) {
+ _tagsDao.removeBy(id, TaggedResourceType.Vpc);
+ }
+ boolean result = super.remove(id);
+ txn.commit();
+ return result;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
index a2a70b6..951af21 100644
--- a/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/NetworkACLManagerImpl.java
@@ -45,6 +45,9 @@ import com.cloud.network.rules.FirewallRule.Purpose;
import com.cloud.network.rules.FirewallRule.TrafficType;
import com.cloud.network.rules.FirewallRuleVO;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.ResourceTagVO;
+import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.UserContext;
@@ -53,6 +56,7 @@ import com.cloud.utils.component.Inject;
import com.cloud.utils.component.Manager;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.JoinBuilder;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.SearchCriteria.Op;
@@ -66,7 +70,6 @@ public class NetworkACLManagerImpl implements
Manager,NetworkACLManager{
String _name;
private static final Logger s_logger =
Logger.getLogger(NetworkACLManagerImpl.class);
-
@Inject
AccountManager _accountMgr;
@Inject
@@ -77,7 +80,8 @@ public class NetworkACLManagerImpl implements
Manager,NetworkACLManager{
NetworkManager _networkMgr;
@Inject
VpcManager _vpcMgr;
-
+ @Inject
+ ResourceTagDao _resourceTagDao;
@Override
public boolean configure(String name, Map<String, Object> params) throws
ConfigurationException {
@@ -328,6 +332,7 @@ public class NetworkACLManagerImpl implements
Manager,NetworkACLManager{
Long networkId = cmd.getNetworkId();
Long id = cmd.getId();
String trafficType = cmd.getTrafficType();
+ Map<String, String> tags = cmd.getTags();
Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>();
@@ -348,6 +353,18 @@ public class NetworkACLManagerImpl implements
Manager,NetworkACLManager{
sb.and("networkId", sb.entity().getNetworkId(), Op.EQ);
sb.and("purpose", sb.entity().getPurpose(), Op.EQ);
sb.and("trafficType", sb.entity().getTrafficType(), Op.EQ);
+
+ if (tags != null && !tags.isEmpty()) {
+ SearchBuilder<ResourceTagVO> tagSearch =
_resourceTagDao.createSearchBuilder();
+ for (int count=0; count < tags.size(); count++) {
+ tagSearch.or().op("key" + String.valueOf(count),
tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+ tagSearch.and("value" + String.valueOf(count),
tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+ tagSearch.cp();
+ }
+ tagSearch.and("resourceType",
tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+ sb.groupBy(sb.entity().getId());
+ sb.join("tagSearch", tagSearch, sb.entity().getId(),
tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+ }
SearchCriteria<FirewallRuleVO> sc = sb.create();
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive,
permittedAccounts, listProjectResourcesCriteria);
@@ -363,6 +380,16 @@ public class NetworkACLManagerImpl implements
Manager,NetworkACLManager{
if (trafficType != null) {
sc.setParameters("trafficType", trafficType);
}
+
+ if (tags != null && !tags.isEmpty()) {
+ int count = 0;
+ sc.setJoinParameters("tagSearch", "resourceType",
TaggedResourceType.NetworkACL.toString());
+ for (String key : tags.keySet()) {
+ sc.setJoinParameters("tagSearch", "key" +
String.valueOf(count), key);
+ sc.setJoinParameters("tagSearch", "value" +
String.valueOf(count), tags.get(key));
+ count++;
+ }
+ }
sc.setParameters("purpose", Purpose.NetworkACL);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/network/vpc/VpcManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
index 6236a05..56a75ac 100644
--- a/server/src/com/cloud/network/vpc/VpcManagerImpl.java
+++ b/server/src/com/cloud/network/vpc/VpcManagerImpl.java
@@ -84,6 +84,8 @@ import com.cloud.offerings.NetworkOfferingServiceMapVO;
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
import com.cloud.org.Grouping;
import com.cloud.projects.Project.ListProjectResourcesCriteria;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.ResourceTagVO;
import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
@@ -157,6 +159,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
@Inject
VlanDao _vlanDao = null;
+
private final ScheduledExecutorService _executor =
Executors.newScheduledThreadPool(1, new NamedThreadFactory("VpcChecker"));
private VpcProvider vpcElement = null;
@@ -694,7 +697,7 @@ public class VpcManagerImpl implements VpcManager, Manager{
@Override
public List<? extends Vpc> listVpcs(Long id, String vpcName, String
displayText, List<String> supportedServicesStr,
String cidr, Long vpcOffId, String state, String accountName, Long
domainId, String keyword,
- Long startIndex, Long pageSizeVal, Long zoneId, Boolean
isRecursive, Boolean listAll, Boolean restartRequired) {
+ Long startIndex, Long pageSizeVal, Long zoneId, Boolean
isRecursive, Boolean listAll, Boolean restartRequired, Map<String, String>
tags) {
Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>();
@@ -719,6 +722,18 @@ public class VpcManagerImpl implements VpcManager, Manager{
sb.and("restartRequired", sb.entity().isRestartRequired(),
SearchCriteria.Op.EQ);
sb.and("cidr", sb.entity().getCidr(), SearchCriteria.Op.EQ);
+ if (tags != null && !tags.isEmpty()) {
+ SearchBuilder<ResourceTagVO> tagSearch =
_resourceTagDao.createSearchBuilder();
+ for (int count=0; count < tags.size(); count++) {
+ tagSearch.or().op("key" + String.valueOf(count),
tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+ tagSearch.and("value" + String.valueOf(count),
tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+ tagSearch.cp();
+ }
+ tagSearch.and("resourceType",
tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+ sb.groupBy(sb.entity().getId());
+ sb.join("tagSearch", tagSearch, sb.entity().getId(),
tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+ }
+
// now set the SC criteria...
SearchCriteria<VpcVO> sc = sb.create();
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive,
permittedAccounts, listProjectResourcesCriteria);
@@ -737,6 +752,16 @@ public class VpcManagerImpl implements VpcManager, Manager{
if (displayText != null) {
sc.addAnd("displayText", SearchCriteria.Op.LIKE, "%" + displayText
+ "%");
}
+
+ if (tags != null && !tags.isEmpty()) {
+ int count = 0;
+ sc.setJoinParameters("tagSearch", "resourceType",
TaggedResourceType.Vpc.toString());
+ for (String key : tags.keySet()) {
+ sc.setJoinParameters("tagSearch", "key" +
String.valueOf(count), key);
+ sc.setJoinParameters("tagSearch", "value" +
String.valueOf(count), tags.get(key));
+ count++;
+ }
+ }
if (id != null) {
sc.addAnd("id", SearchCriteria.Op.EQ, id);
@@ -1525,6 +1550,7 @@ public class VpcManagerImpl implements VpcManager,
Manager{
String accountName = cmd.getAccountName();
Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>();
+ Map<String, String> tags = cmd.getTags();
Ternary<Long, Boolean, ListProjectResourcesCriteria>
domainIdRecursiveListProject = new Ternary<Long, Boolean,
ListProjectResourcesCriteria>(domainId, isRecursive, null);
@@ -1542,6 +1568,18 @@ public class VpcManagerImpl implements VpcManager,
Manager{
sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
sb.and("vpcGatewayId", sb.entity().getVpcGatewayId(),
SearchCriteria.Op.EQ);
+ if (tags != null && !tags.isEmpty()) {
+ SearchBuilder<ResourceTagVO> tagSearch =
_resourceTagDao.createSearchBuilder();
+ for (int count=0; count < tags.size(); count++) {
+ tagSearch.or().op("key" + String.valueOf(count),
tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+ tagSearch.and("value" + String.valueOf(count),
tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+ tagSearch.cp();
+ }
+ tagSearch.and("resourceType",
tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+ sb.groupBy(sb.entity().getId());
+ sb.join("tagSearch", tagSearch, sb.entity().getId(),
tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+ }
+
SearchCriteria<StaticRouteVO> sc = sb.create();
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive,
permittedAccounts, listProjectResourcesCriteria);
@@ -1557,6 +1595,16 @@ public class VpcManagerImpl implements VpcManager,
Manager{
sc.addAnd("vpcGatewayId", Op.EQ, gatewayId);
}
+ if (tags != null && !tags.isEmpty()) {
+ int count = 0;
+ sc.setJoinParameters("tagSearch", "resourceType",
TaggedResourceType.StaticRoute.toString());
+ for (String key : tags.keySet()) {
+ sc.setJoinParameters("tagSearch", "key" +
String.valueOf(count), key);
+ sc.setJoinParameters("tagSearch", "value" +
String.valueOf(count), tags.get(key));
+ count++;
+ }
+ }
+
return _staticRouteDao.search(sc, searchFilter);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/projects/ProjectManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/projects/ProjectManagerImpl.java
b/server/src/com/cloud/projects/ProjectManagerImpl.java
index 39ef8c1..7371201 100755
--- a/server/src/com/cloud/projects/ProjectManagerImpl.java
+++ b/server/src/com/cloud/projects/ProjectManagerImpl.java
@@ -60,6 +60,9 @@ import com.cloud.projects.ProjectAccount.Role;
import com.cloud.projects.dao.ProjectAccountDao;
import com.cloud.projects.dao.ProjectDao;
import com.cloud.projects.dao.ProjectInvitationDao;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.ResourceTagVO;
+import com.cloud.tags.dao.ResourceTagDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.AccountVO;
@@ -111,6 +114,8 @@ public class ProjectManagerImpl implements ProjectManager,
Manager{
private ConfigurationDao _configDao;
@Inject
private ProjectInvitationDao _projectInvitationDao;
+ @Inject
+ protected ResourceTagDao _resourceTagDao;
protected boolean _invitationRequired = false;
protected long _invitationTimeOut = 86400000;
@@ -347,7 +352,9 @@ public class ProjectManagerImpl implements ProjectManager,
Manager{
}
@Override
- public List<? extends Project> listProjects(Long id, String name, String
displayText, String state, String accountName, Long domainId, String keyword,
Long startIndex, Long pageSize, boolean listAll, boolean isRecursive) {
+ public List<? extends Project> listProjects(Long id, String name, String
displayText, String state,
+ String accountName, Long domainId, String keyword, Long
startIndex, Long pageSize, boolean listAll,
+ boolean isRecursive, Map<String, String> tags) {
Account caller = UserContext.current().getCaller();
Long accountId = null;
String path = null;
@@ -384,14 +391,12 @@ public class ProjectManagerImpl implements
ProjectManager, Manager{
accountId = caller.getId();
}
-
if (domainId == null && accountId == null && (caller.getType() ==
Account.ACCOUNT_TYPE_NORMAL || !listAll)) {
accountId = caller.getId();
} else if (caller.getType() == Account.ACCOUNT_TYPE_DOMAIN_ADMIN ||
(isRecursive && !listAll)) {
DomainVO domain = _domainDao.findById(caller.getDomainId());
path = domain.getPath();
}
-
if (path != null) {
SearchBuilder<DomainVO> domainSearch =
_domainDao.createSearchBuilder();
@@ -405,6 +410,18 @@ public class ProjectManagerImpl implements ProjectManager,
Manager{
sb.join("projectAccountSearch", projectAccountSearch,
sb.entity().getId(), projectAccountSearch.entity().getProjectId(),
JoinBuilder.JoinType.INNER);
}
+ if (tags != null && !tags.isEmpty()) {
+ SearchBuilder<ResourceTagVO> tagSearch =
_resourceTagDao.createSearchBuilder();
+ for (int count=0; count < tags.size(); count++) {
+ tagSearch.or().op("key" + String.valueOf(count),
tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
+ tagSearch.and("value" + String.valueOf(count),
tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
+ tagSearch.cp();
+ }
+ tagSearch.and("resourceType",
tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
+ sb.groupBy(sb.entity().getId());
+ sb.join("tagSearch", tagSearch, sb.entity().getId(),
tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
+ }
+
SearchCriteria<ProjectVO> sc = sb.create();
if (id != null) {
@@ -442,6 +459,16 @@ public class ProjectManagerImpl implements ProjectManager,
Manager{
sc.setJoinParameters("domainSearch", "path", path);
}
+ if (tags != null && !tags.isEmpty()) {
+ int count = 0;
+ sc.setJoinParameters("tagSearch", "resourceType",
TaggedResourceType.Project.toString());
+ for (String key : tags.keySet()) {
+ sc.setJoinParameters("tagSearch", "key" +
String.valueOf(count), key);
+ sc.setJoinParameters("tagSearch", "value" +
String.valueOf(count), tags.get(key));
+ count++;
+ }
+ }
+
return _projectDao.search(sc, searchFilter);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
b/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
index 87c8d21..e194876 100644
--- a/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
+++ b/server/src/com/cloud/projects/dao/ProjectDaoImpl.java
@@ -24,6 +24,9 @@ import org.apache.log4j.Logger;
import com.cloud.projects.Project;
import com.cloud.projects.ProjectVO;
+import com.cloud.server.ResourceTag.TaggedResourceType;
+import com.cloud.tags.dao.ResourceTagsDaoImpl;
+import com.cloud.utils.component.ComponentLocator;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.GenericSearchBuilder;
@@ -38,6 +41,7 @@ public class ProjectDaoImpl extends GenericDaoBase<ProjectVO,
Long> implements P
protected final SearchBuilder<ProjectVO> AllFieldsSearch;
protected GenericSearchBuilder<ProjectVO, Long> CountByDomain;
protected GenericSearchBuilder<ProjectVO, Long> ProjectAccountSearch;
+ ResourceTagsDaoImpl _tagsDao =
ComponentLocator.inject(ResourceTagsDaoImpl.class);
protected ProjectDaoImpl() {
AllFieldsSearch = createSearchBuilder();
@@ -73,7 +77,9 @@ public class ProjectDaoImpl extends GenericDaoBase<ProjectVO,
Long> implements P
if (!update(projectId, projectToRemove)) {
s_logger.warn("Failed to reset name for the project id=" +
projectId + " as a part of project remove");
return false;
- }
+ }
+
+ _tagsDao.removeByIdAndType(projectId, TaggedResourceType.Project);
result = super.remove(projectId);
txn.commit();
@@ -102,5 +108,4 @@ public class ProjectDaoImpl extends
GenericDaoBase<ProjectVO, Long> implements P
sc.setParameters("state", state);
return listBy(sc);
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/storage/StorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java
b/server/src/com/cloud/storage/StorageManagerImpl.java
index a2ea98d..a77ce32 100755
--- a/server/src/com/cloud/storage/StorageManagerImpl.java
+++ b/server/src/com/cloud/storage/StorageManagerImpl.java
@@ -335,6 +335,7 @@ public class StorageManagerImpl implements StorageManager,
Manager, ClusterManag
@Inject(adapter = StoragePoolDiscoverer.class)
protected Adapters<StoragePoolDiscoverer> _discoverers;
+
protected SearchBuilder<VMTemplateHostVO> HostTemplateStatesSearch;
protected GenericSearchBuilder<StoragePoolHostVO, Long>
UpHostsInPoolSearch;
protected SearchBuilder<VMInstanceVO> StoragePoolSearch;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
index 3db228d..5d519e3 100644
--- a/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
+++ b/server/src/com/cloud/tags/TaggedResourceManagerImpl.java
@@ -39,7 +39,10 @@ import com.cloud.network.dao.NetworkDao;
import com.cloud.network.dao.RemoteAccessVpnDao;
import com.cloud.network.rules.dao.PortForwardingRulesDao;
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.Project.ListProjectResourcesCriteria;
+import com.cloud.projects.dao.ProjectDao;
import com.cloud.server.ResourceTag;
import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.server.TaggedResourceService;
@@ -62,6 +65,7 @@ import com.cloud.utils.db.GenericDao;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.db.Transaction;
+import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.uuididentity.dao.IdentityDao;
import com.cloud.vm.dao.UserVmDao;
@@ -104,6 +108,12 @@ public class TaggedResourceManagerImpl implements
TaggedResourceService, Manager
RemoteAccessVpnDao _vpnDao;
@Inject
IPAddressDao _publicIpDao;
+ @Inject
+ ProjectDao _projectDao;
+ @Inject
+ VpcDao _vpcDao;
+ @Inject
+ StaticRouteDao _staticRouteDao;
@Override
public boolean configure(String name, Map<String, Object> params) throws
ConfigurationException {
@@ -119,6 +129,10 @@ public class TaggedResourceManagerImpl implements
TaggedResourceService, Manager
_daoMap.put(TaggedResourceType.FirewallRule, _firewallDao);
_daoMap.put(TaggedResourceType.SecurityGroup, _securityGroupDao);
_daoMap.put(TaggedResourceType.PublicIpAddress, _publicIpDao);
+ _daoMap.put(TaggedResourceType.Project, _projectDao);
+ _daoMap.put(TaggedResourceType.Vpc, _vpcDao);
+ _daoMap.put(TaggedResourceType.NetworkACL, _firewallDao);
+ _daoMap.put(TaggedResourceType.StaticRoute, _staticRouteDao);
return true;
}
@@ -141,6 +155,9 @@ public class TaggedResourceManagerImpl implements
TaggedResourceService, Manager
private Long getResourceId(String resourceId, TaggedResourceType
resourceType) {
GenericDao<?, Long> dao = _daoMap.get(resourceType);
+ if (dao == null) {
+ throw new CloudRuntimeException("Dao is not loaded for the
resource type " + resourceType);
+ }
Class<?> claz = DbUtil.getEntityBeanType(dao);
Long identityId = null;
@@ -184,7 +201,7 @@ public class TaggedResourceManagerImpl implements
TaggedResourceService, Manager
if (tableName == null) {
throw new InvalidParameterValueException("Unable to find
resource of type " + resourceType + " in the database");
}
- pair = _identityDao.getAccountDomainInfo(tableName,
resourceId);
+ pair = _identityDao.getAccountDomainInfo(tableName,
resourceId, resourceType);
if (pair.first() != null || pair.second() != null) {
break;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/uuididentity/dao/IdentityDao.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDao.java
b/server/src/com/cloud/uuididentity/dao/IdentityDao.java
index db39bfb..e2758fb 100644
--- a/server/src/com/cloud/uuididentity/dao/IdentityDao.java
+++ b/server/src/com/cloud/uuididentity/dao/IdentityDao.java
@@ -18,6 +18,7 @@
package com.cloud.uuididentity.dao;
import com.cloud.api.IdentityMapper;
+import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.utils.Pair;
import com.cloud.utils.db.GenericDao;
@@ -29,7 +30,8 @@ public interface IdentityDao extends GenericDao<IdentityVO,
Long> {
/**
* @param tableName
* @param identityId
+ * @param resourceType TODO
* @return
*/
- Pair<Long, Long> getAccountDomainInfo(String tableName, Long identityId);
-}
+ Pair<Long, Long> getAccountDomainInfo(String tableName, Long identityId,
TaggedResourceType resourceType);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/5cbe3d97/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
index 169ac09..ce0ca13 100644
--- a/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
+++ b/server/src/com/cloud/uuididentity/dao/IdentityDaoImpl.java
@@ -29,6 +29,7 @@ import org.apache.log4j.Logger;
import com.cloud.api.IdentityMapper;
import com.cloud.exception.InvalidParameterValueException;
+import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.utils.Pair;
import com.cloud.utils.db.DB;
import com.cloud.utils.db.GenericDaoBase;
@@ -101,7 +102,7 @@ public class IdentityDaoImpl extends
GenericDaoBase<IdentityVO, Long> implements
@DB
@Override
- public Pair<Long, Long> getAccountDomainInfo(String tableName, Long
identityId) {
+ public Pair<Long, Long> getAccountDomainInfo(String tableName, Long
identityId, TaggedResourceType resourceType) {
assert(tableName != null);
PreparedStatement pstmt = null;
@@ -122,7 +123,11 @@ public class IdentityDaoImpl extends
GenericDaoBase<IdentityVO, Long> implements
//get accountId
try {
- pstmt = txn.prepareAutoCloseStatement(String.format("SELECT
account_id FROM `%s` WHERE id=?", tableName));
+ String account = "account_id";
+ if (resourceType == TaggedResourceType.Project) {
+ account = "project_account_id";
+ }
+ pstmt = txn.prepareAutoCloseStatement(String.format("SELECT "
+ account + " FROM `%s` WHERE id=?", tableName));
pstmt.setLong(1, identityId);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {