Refactor ListProjectInvitationsCmd and ProjectInvitationResponse.

This commit is contained in:
Min Chen 2012-12-11 22:36:25 -08:00 committed by Rohit Yadav
parent 3661f7f992
commit 472f4f91b9
13 changed files with 438 additions and 44 deletions

View File

@ -20,6 +20,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO;
import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ConcurrentOperationException;
@ -85,7 +86,7 @@ public interface ProjectService {
Pair<List<ProjectAccountJoinVO>, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal); Pair<List<ProjectAccountJoinVO>, Integer> listProjectAccounts(long projectId, String accountName, String role, Long startIndex, Long pageSizeVal);
Pair<List<? extends ProjectInvitation>, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, Pair<List<ProjectInvitationJoinVO>, Integer> listProjectInvitations(Long id, Long projectId, String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive,
boolean listAll); boolean listAll);
boolean updateInvitation(long projectId, String accountName, String token, boolean accept); boolean updateInvitation(long projectId, String accountName, String token, boolean accept);

View File

@ -154,6 +154,7 @@ import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO;
import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO;
import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO;
import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO;
import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO;
@ -309,6 +310,8 @@ public interface ResponseGenerator {
ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite); ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite);
List<ProjectInvitationResponse> createProjectInvitationResponse(ProjectInvitationJoinVO... invites);
SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine systemVM); SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine systemVM);
SwiftResponse createSwiftResponse(Swift swift); SwiftResponse createSwiftResponse(Swift swift);

View File

@ -28,6 +28,8 @@ import org.apache.cloudstack.api.Implementation;
import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.Parameter;
import org.apache.cloudstack.api.response.ListResponse; import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.api.response.ProjectInvitationResponse; import org.apache.cloudstack.api.response.ProjectInvitationResponse;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import com.cloud.projects.ProjectInvitation; import com.cloud.projects.ProjectInvitation;
import com.cloud.utils.Pair; import com.cloud.utils.Pair;
@ -83,15 +85,13 @@ public class ListProjectInvitationsCmd extends BaseListAccountResourcesCmd {
@Override @Override
public void execute() { public void execute() {
Pair<List<? extends ProjectInvitation>, Integer> invites = _projectService.listProjectInvitations(id, projectId, Pair<List<ProjectInvitationJoinVO>, Integer> invites = _projectService.listProjectInvitations(id, projectId,
this.getAccountName(), this.getDomainId(), state, activeOnly, this.getStartIndex(), this.getPageSizeVal(), this.getAccountName(), this.getDomainId(), state, activeOnly, this.getStartIndex(), this.getPageSizeVal(),
this.isRecursive(), this.listAll()); this.isRecursive(), this.listAll());
ListResponse<ProjectInvitationResponse> response = new ListResponse<ProjectInvitationResponse>(); ListResponse<ProjectInvitationResponse> response = new ListResponse<ProjectInvitationResponse>();
List<ProjectInvitationResponse> projectInvitationResponses = new ArrayList<ProjectInvitationResponse>(); List<ProjectInvitationResponse> projectInvitationResponses =
for (ProjectInvitation invite : invites.first()) { _responseGenerator.createProjectInvitationResponse(invites.first().toArray(new ProjectInvitationJoinVO[invites.first().size()]));
ProjectInvitationResponse projectResponse = _responseGenerator.createProjectInvitationResponse(invite);
projectInvitationResponses.add(projectResponse);
}
response.setResponses(projectInvitationResponses, invites.second()); response.setResponses(projectInvitationResponses, invites.second());
response.setResponseName(getCommandName()); response.setResponseName(getCommandName());

View File

@ -23,18 +23,18 @@ import com.google.gson.annotations.SerializedName;
import org.apache.cloudstack.api.BaseResponse; import org.apache.cloudstack.api.BaseResponse;
@SuppressWarnings("unused") @SuppressWarnings("unused")
public class ProjectInvitationResponse extends BaseResponse implements ControlledEntityResponse{ public class ProjectInvitationResponse extends BaseResponse implements ControlledViewEntityResponse{
@SerializedName(ApiConstants.ID) @Param(description="the id of the invitation") @SerializedName(ApiConstants.ID) @Param(description="the id of the invitation")
private IdentityProxy id = new IdentityProxy("project_invitations"); private String id;
@SerializedName(ApiConstants.PROJECT_ID) @Param(description="the id of the project") @SerializedName(ApiConstants.PROJECT_ID) @Param(description="the id of the project")
private IdentityProxy projectId = new IdentityProxy("projects"); private String projectId;
@SerializedName(ApiConstants.PROJECT) @Param(description="the name of the project") @SerializedName(ApiConstants.PROJECT) @Param(description="the name of the project")
private String projectName; private String projectName;
@SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id the project belongs to") @SerializedName(ApiConstants.DOMAIN_ID) @Param(description="the domain id the project belongs to")
private IdentityProxy domainId = new IdentityProxy("domain"); private String domainId;
@SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name where the project belongs to") @SerializedName(ApiConstants.DOMAIN) @Param(description="the domain name where the project belongs to")
private String domainName; private String domainName;
@ -48,20 +48,20 @@ public class ProjectInvitationResponse extends BaseResponse implements Controlle
@SerializedName(ApiConstants.STATE) @Param(description="the invitation state") @SerializedName(ApiConstants.STATE) @Param(description="the invitation state")
private String invitationState; private String invitationState;
public void setId(Long id) { public void setId(String id) {
this.id.setValue(id); this.id = id;
} }
public void setProjectId(Long projectId) { public void setProjectId(String projectId) {
this.projectId.setValue(projectId); this.projectId = projectId;
} }
public void setProjectName(String projectName) { public void setProjectName(String projectName) {
this.projectName = projectName; this.projectName = projectName;
} }
public void setDomainId(Long domainId) { public void setDomainId(String domainId) {
this.domainId.setValue(domainId); this.domainId = domainId;
} }
public void setDomainName(String domain) { public void setDomainName(String domain) {

View File

@ -0,0 +1,232 @@
// 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 org.apache.cloudstack.api.view.vo;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.Table;
import com.cloud.utils.db.GenericDao;
import com.cloud.vm.VirtualMachine.State;
@Entity
@Table(name="project_invitation_view")
public class ProjectInvitationJoinVO extends BaseViewVO implements ControlledViewEntity {
@Column(name="id", updatable=false, nullable = false)
private long id;
@Column(name="uuid")
private String uuid;
@Column(name = "email")
private String email;
@Column(name = "state")
@Enumerated(value = EnumType.STRING)
private State state;
@Column(name = GenericDao.CREATED_COLUMN)
private Date created;
@Column(name="account_id")
private long accountId;
@Column(name="account_uuid")
private String accountUuid;
@Column(name="account_name")
private String accountName;
@Column(name="account_type")
private short accountType;
@Column(name="domain_id")
private long domainId;
@Column(name="domain_uuid")
private String domainUuid;
@Column(name="domain_name")
private String domainName;
@Column(name="domain_path")
private String domainPath;
@Column(name="project_id")
private long projectId;
@Column(name="project_uuid")
private String projectUuid;
@Column(name="project_name")
private String projectName;
public ProjectInvitationJoinVO() {
}
@Override
public long getId() {
return id;
}
@Override
public void setId(long id) {
this.id = id;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
@Override
public long getDomainId() {
return domainId;
}
public void setDomainId(long domainId) {
this.domainId = domainId;
}
@Override
public String getDomainUuid() {
return domainUuid;
}
public void setDomainUuid(String domainUuid) {
this.domainUuid = domainUuid;
}
@Override
public String getDomainName() {
return domainName;
}
public void setDomainName(String domainName) {
this.domainName = domainName;
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
@Override
public long getAccountId() {
return accountId;
}
public void setAccountId(long accountId) {
this.accountId = accountId;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String getAccountName() {
return accountName;
}
public void setAccountName(String accountName) {
this.accountName = accountName;
}
public long getProjectId() {
return projectId;
}
public void setProjectId(long projectId) {
this.projectId = projectId;
}
@Override
public String getProjectUuid() {
return projectUuid;
}
public void setProjectUuid(String projectUuid) {
this.projectUuid = projectUuid;
}
@Override
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
@Override
public String getAccountUuid() {
return accountUuid;
}
public void setAccountUuid(String accountUuid) {
this.accountUuid = accountUuid;
}
@Override
public short getAccountType() {
return accountType;
}
public void setAccountType(short accountType) {
this.accountType = accountType;
}
@Override
public String getDomainPath() {
return domainPath;
}
public void setDomainPath(String domainPath) {
this.domainPath = domainPath;
}
}

View File

@ -27,6 +27,7 @@ import org.apache.cloudstack.api.response.DomainRouterResponse;
import org.apache.cloudstack.api.response.EventResponse; import org.apache.cloudstack.api.response.EventResponse;
import org.apache.cloudstack.api.response.InstanceGroupResponse; import org.apache.cloudstack.api.response.InstanceGroupResponse;
import org.apache.cloudstack.api.response.ProjectAccountResponse; import org.apache.cloudstack.api.response.ProjectAccountResponse;
import org.apache.cloudstack.api.response.ProjectInvitationResponse;
import org.apache.cloudstack.api.response.ProjectResponse; import org.apache.cloudstack.api.response.ProjectResponse;
import org.apache.cloudstack.api.response.ResourceTagResponse; import org.apache.cloudstack.api.response.ResourceTagResponse;
import org.apache.cloudstack.api.response.SecurityGroupResponse; import org.apache.cloudstack.api.response.SecurityGroupResponse;
@ -36,6 +37,7 @@ import org.apache.cloudstack.api.view.vo.DomainRouterJoinVO;
import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO;
import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO;
import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO;
import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO;
@ -118,8 +120,10 @@ import com.cloud.offerings.NetworkOfferingVO;
import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.offerings.dao.NetworkOfferingDao;
import com.cloud.projects.Project; import com.cloud.projects.Project;
import com.cloud.projects.ProjectAccount; import com.cloud.projects.ProjectAccount;
import com.cloud.projects.ProjectInvitation;
import com.cloud.projects.ProjectService; import com.cloud.projects.ProjectService;
import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectAccountJoinDao;
import com.cloud.projects.dao.ProjectInvitationJoinDao;
import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.projects.dao.ProjectJoinDao;
import com.cloud.resource.ResourceManager; import com.cloud.resource.ResourceManager;
import com.cloud.server.Criteria; import com.cloud.server.Criteria;
@ -270,6 +274,7 @@ public class ApiDBUtils {
private static UserAccountJoinDao _userAccountJoinDao; private static UserAccountJoinDao _userAccountJoinDao;
private static ProjectJoinDao _projectJoinDao; private static ProjectJoinDao _projectJoinDao;
private static ProjectAccountJoinDao _projectAccountJoinDao; private static ProjectAccountJoinDao _projectAccountJoinDao;
private static ProjectInvitationJoinDao _projectInvitationJoinDao;
static { static {
_ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name); _ms = (ManagementServer) ComponentLocator.getComponent(ManagementServer.Name);
@ -345,6 +350,7 @@ public class ApiDBUtils {
_userAccountJoinDao = locator.getDao(UserAccountJoinDao.class); _userAccountJoinDao = locator.getDao(UserAccountJoinDao.class);
_projectJoinDao = locator.getDao(ProjectJoinDao.class); _projectJoinDao = locator.getDao(ProjectJoinDao.class);
_projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class); _projectAccountJoinDao = locator.getDao(ProjectAccountJoinDao.class);
_projectInvitationJoinDao = locator.getDao(ProjectInvitationJoinDao.class);
// Note: stats collector should already have been initialized by this time, otherwise a null instance is returned // Note: stats collector should already have been initialized by this time, otherwise a null instance is returned
@ -1052,4 +1058,13 @@ public class ApiDBUtils {
return _projectAccountJoinDao.newProjectAccountView(proj); return _projectAccountJoinDao.newProjectAccountView(proj);
} }
public static ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj) {
return _projectInvitationJoinDao.newProjectInvitationResponse(proj);
}
public static ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) {
return _projectInvitationJoinDao.newProjectInvitationView(proj);
}
} }

View File

@ -117,6 +117,7 @@ import org.apache.cloudstack.api.view.vo.ControlledViewEntity;
import org.apache.cloudstack.api.view.vo.EventJoinVO; import org.apache.cloudstack.api.view.vo.EventJoinVO;
import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO; import org.apache.cloudstack.api.view.vo.InstanceGroupJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO;
import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO; import org.apache.cloudstack.api.view.vo.ResourceTagJoinVO;
import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO; import org.apache.cloudstack.api.view.vo.SecurityGroupJoinVO;
@ -2873,26 +2874,22 @@ public class ApiResponseHelper implements ResponseGenerator {
@Override @Override
public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) { public ProjectInvitationResponse createProjectInvitationResponse(ProjectInvitation invite) {
ProjectInvitationResponse response = new ProjectInvitationResponse(); ProjectInvitationJoinVO vInvite = ApiDBUtils.newProjectInvitationView(invite);
response.setId(invite.getId()); return ApiDBUtils.newProjectInvitationResponse(vInvite);
response.setProjectId(invite.getProjectId());
response.setProjectName(ApiDBUtils.findProjectById(invite.getProjectId()).getName());
response.setInvitationState(invite.getState().toString());
if (invite.getForAccountId() != null) {
Account account = ApiDBUtils.findAccountById(invite.getForAccountId());
response.setAccountName(account.getAccountName());
} else {
response.setEmail(invite.getEmail());
}
populateDomain(response, invite.getInDomainId());
response.setObjectName("projectinvitation");
return response;
} }
@Override
public List<ProjectInvitationResponse> createProjectInvitationResponse(ProjectInvitationJoinVO... invites) {
List<ProjectInvitationResponse> respList = new ArrayList<ProjectInvitationResponse>();
for (ProjectInvitationJoinVO v : invites){
respList.add(ApiDBUtils.newProjectInvitationResponse(v));
}
return respList;
}
@Override @Override
public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) { public SystemVmInstanceResponse createSystemVmInstanceResponse(VirtualMachine vm) {
SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse(); SystemVmInstanceResponse vmResponse = new SystemVmInstanceResponse();

View File

@ -139,6 +139,7 @@ import com.cloud.projects.ProjectManagerImpl;
import com.cloud.projects.dao.ProjectAccountDaoImpl; import com.cloud.projects.dao.ProjectAccountDaoImpl;
import com.cloud.projects.dao.ProjectDaoImpl; import com.cloud.projects.dao.ProjectDaoImpl;
import com.cloud.projects.dao.ProjectInvitationDaoImpl; import com.cloud.projects.dao.ProjectInvitationDaoImpl;
import com.cloud.projects.dao.ProjectInvitationJoinDaoImpl;
import com.cloud.projects.dao.ProjectJoinDaoImpl; import com.cloud.projects.dao.ProjectJoinDaoImpl;
import com.cloud.resource.ResourceManagerImpl; import com.cloud.resource.ResourceManagerImpl;
import com.cloud.resourcelimit.ResourceLimitManagerImpl; import com.cloud.resourcelimit.ResourceLimitManagerImpl;
@ -233,6 +234,7 @@ public class DefaultComponentLibrary extends ComponentLibraryBase implements Com
addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class); addDao("UserAccountJoinDao", UserAccountJoinDaoImpl.class);
addDao("ProjectJoinDao", ProjectJoinDaoImpl.class); addDao("ProjectJoinDao", ProjectJoinDaoImpl.class);
addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class); addDao("ProjectAccountJoinDao", ProjectAccountJoinDaoImpl.class);
addDao("ProjectInvitationJoinDao", ProjectInvitationJoinDaoImpl.class);
ComponentInfo<? extends GenericDao<?, ? extends Serializable>> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class); ComponentInfo<? extends GenericDao<?, ? extends Serializable>> info = addDao("ServiceOfferingDao", ServiceOfferingDaoImpl.class);
info.addParameter("cache.size", "50"); info.addParameter("cache.size", "50");
info.addParameter("cache.time.to.live", "600"); info.addParameter("cache.time.to.live", "600");

View File

@ -39,6 +39,7 @@ import javax.mail.internet.InternetAddress;
import javax.naming.ConfigurationException; import javax.naming.ConfigurationException;
import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO;
import org.apache.cloudstack.api.view.vo.UserVmJoinVO; import org.apache.cloudstack.api.view.vo.UserVmJoinVO;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
@ -64,6 +65,7 @@ import com.cloud.projects.dao.ProjectAccountDao;
import com.cloud.projects.dao.ProjectAccountJoinDao; import com.cloud.projects.dao.ProjectAccountJoinDao;
import com.cloud.projects.dao.ProjectDao; import com.cloud.projects.dao.ProjectDao;
import com.cloud.projects.dao.ProjectInvitationDao; import com.cloud.projects.dao.ProjectInvitationDao;
import com.cloud.projects.dao.ProjectInvitationJoinDao;
import com.cloud.projects.dao.ProjectJoinDao; import com.cloud.projects.dao.ProjectJoinDao;
import com.cloud.server.ResourceTag.TaggedResourceType; import com.cloud.server.ResourceTag.TaggedResourceType;
import com.cloud.tags.ResourceTagVO; import com.cloud.tags.ResourceTagVO;
@ -127,6 +129,8 @@ public class ProjectManagerImpl implements ProjectManager, Manager{
@Inject @Inject
private ProjectInvitationDao _projectInvitationDao; private ProjectInvitationDao _projectInvitationDao;
@Inject @Inject
private ProjectInvitationJoinDao _projectInvitationJoinDao;
@Inject
protected ResourceTagDao _resourceTagDao; protected ResourceTagDao _resourceTagDao;
protected boolean _invitationRequired = false; protected boolean _invitationRequired = false;
@ -875,7 +879,7 @@ public class ProjectManagerImpl implements ProjectManager, Manager{
} }
@Override @Override
public Pair<List<? extends ProjectInvitation>, Integer> listProjectInvitations(Long id, Long projectId, public Pair<List<ProjectInvitationJoinVO>, Integer> listProjectInvitations(Long id, Long projectId,
String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll) { String accountName, Long domainId, String state, boolean activeOnly, Long startIndex, Long pageSizeVal, boolean isRecursive, boolean listAll) {
Account caller = UserContext.current().getCaller(); Account caller = UserContext.current().getCaller();
List<Long> permittedAccounts = new ArrayList<Long>(); List<Long> permittedAccounts = new ArrayList<Long>();
@ -886,17 +890,17 @@ public class ProjectManagerImpl implements ProjectManager, Manager{
isRecursive = domainIdRecursiveListProject.second(); isRecursive = domainIdRecursiveListProject.second();
ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third(); ListProjectResourcesCriteria listProjectResourcesCriteria = domainIdRecursiveListProject.third();
Filter searchFilter = new Filter(ProjectInvitationVO.class, "id", true, startIndex, pageSizeVal); Filter searchFilter = new Filter(ProjectInvitationJoinVO.class, "id", true, startIndex, pageSizeVal);
SearchBuilder<ProjectInvitationVO> sb = _projectInvitationDao.createSearchBuilder(); SearchBuilder<ProjectInvitationJoinVO> sb = _projectInvitationJoinDao.createSearchBuilder();
_accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); _accountMgr.buildACLViewSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
sb.and("projectId", sb.entity().getProjectId(), SearchCriteria.Op.EQ); sb.and("projectId", sb.entity().getProjectId(), SearchCriteria.Op.EQ);
sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ); sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
sb.and("created", sb.entity().getCreated(), SearchCriteria.Op.GT); sb.and("created", sb.entity().getCreated(), SearchCriteria.Op.GT);
sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ); sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
SearchCriteria<ProjectInvitationVO> sc = sb.create(); SearchCriteria<ProjectInvitationJoinVO> sc = sb.create();
_accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria); _accountMgr.buildACLViewSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
if (projectId != null){ if (projectId != null){
@ -916,8 +920,8 @@ public class ProjectManagerImpl implements ProjectManager, Manager{
sc.setParameters("created", new Date((DateUtil.currentGMTTime().getTime()) - _invitationTimeOut)); sc.setParameters("created", new Date((DateUtil.currentGMTTime().getTime()) - _invitationTimeOut));
} }
Pair<List<ProjectInvitationVO>, Integer> result = _projectInvitationDao.searchAndCount(sc, searchFilter); return _projectInvitationJoinDao.searchAndCount(sc, searchFilter);
return new Pair<List<? extends ProjectInvitation>, Integer>(result.first(), result.second());
} }
@Override @DB @Override @DB

View File

@ -0,0 +1,29 @@
// 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.projects.dao;
import org.apache.cloudstack.api.response.ProjectInvitationResponse;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import com.cloud.projects.ProjectInvitation;
import com.cloud.utils.db.GenericDao;
public interface ProjectInvitationJoinDao extends GenericDao<ProjectInvitationJoinVO, Long> {
ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO proj);
ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj);
}

View File

@ -0,0 +1,86 @@
// 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.projects.dao;
import java.util.List;
import javax.ejb.Local;
import org.apache.log4j.Logger;
import org.apache.cloudstack.api.response.ProjectInvitationResponse;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import com.cloud.api.ApiDBUtils;
import com.cloud.projects.ProjectInvitation;
import com.cloud.user.Account;
import com.cloud.utils.db.GenericDaoBase;
import com.cloud.utils.db.SearchBuilder;
import com.cloud.utils.db.SearchCriteria;
@Local(value={ProjectInvitationJoinDao.class})
public class ProjectInvitationJoinDaoImpl extends GenericDaoBase<ProjectInvitationJoinVO, Long> implements ProjectInvitationJoinDao {
public static final Logger s_logger = Logger.getLogger(ProjectInvitationJoinDaoImpl.class);
private SearchBuilder<ProjectInvitationJoinVO> vrIdSearch;
protected ProjectInvitationJoinDaoImpl() {
vrIdSearch = createSearchBuilder();
vrIdSearch.and("id", vrIdSearch.entity().getId(), SearchCriteria.Op.EQ);
vrIdSearch.done();
this._count = "select count(distinct id) from project_invitation_view WHERE ";
}
@Override
public ProjectInvitationResponse newProjectInvitationResponse(ProjectInvitationJoinVO invite) {
ProjectInvitationResponse response = new ProjectInvitationResponse();
response.setId(invite.getUuid());
response.setProjectId(invite.getProjectUuid());
response.setProjectName(invite.getProjectName());
response.setInvitationState(invite.getState().toString());
if (invite.getAccountName() != null) {
response.setAccountName(invite.getAccountName());
} else {
response.setEmail(invite.getEmail());
}
response.setDomainId(invite.getDomainUuid());
response.setDomainName(invite.getDomainName());
response.setObjectName("projectinvitation");
return response;
}
@Override
public ProjectInvitationJoinVO newProjectInvitationView(ProjectInvitation proj) {
SearchCriteria<ProjectInvitationJoinVO> sc = vrIdSearch.create();
sc.setParameters("id", proj.getId());
List<ProjectInvitationJoinVO> grps = searchIncludingRemoved(sc, null, null, false);
assert grps != null && grps.size() == 1 : "No project invitation found for id " + proj.getId();
return grps.get(0);
}
}

View File

@ -23,6 +23,7 @@ import javax.ejb.Local;
import javax.naming.ConfigurationException; import javax.naming.ConfigurationException;
import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO; import org.apache.cloudstack.api.view.vo.ProjectAccountJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectInvitationJoinVO;
import org.apache.cloudstack.api.view.vo.ProjectJoinVO; import org.apache.cloudstack.api.view.vo.ProjectJoinVO;
import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ConcurrentOperationException;
@ -116,7 +117,7 @@ public class MockProjectManagerImpl implements ProjectManager, Manager {
} }
@Override @Override
public Pair<List<? extends ProjectInvitation>, Integer> listProjectInvitations(Long id, public Pair<List<ProjectInvitationJoinVO>, Integer> listProjectInvitations(Long id,
Long projectId, String accountName, Long domainId, String state, Long projectId, String accountName, Long domainId, String state,
boolean activeOnly, Long startIndex, Long pageSizeVal, boolean activeOnly, Long startIndex, Long pageSizeVal,
boolean isRecursive, boolean listAll) { boolean isRecursive, boolean listAll) {

View File

@ -2944,3 +2944,27 @@ from project_account
inner join account on project_account.account_id = account.id inner join account on project_account.account_id = account.id
inner join domain on account.domain_id=domain.id inner join domain on account.domain_id=domain.id
inner join projects on projects.id = project_account.project_id; inner join projects on projects.id = project_account.project_id;
DROP VIEW IF EXISTS `cloud`.`project_invitation_view`;
CREATE VIEW project_invitation_view AS
select
project_invitations.id,
project_invitations.uuid,
project_invitations.email,
project_invitations.created,
project_invitations.state,
projects.id project_id,
projects.uuid project_uuid,
projects.name project_name,
account.id account_id,
account.uuid account_uuid,
account.account_name,
account.type account_type,
domain.id domain_id,
domain.uuid domain_uuid,
domain.name domain_name,
domain.path domain_path
from project_invitations
left join account on project_invitations.account_id = account.id
left join domain on project_invitations.domain_id=domain.id
left join projects on projects.id = project_invitations.project_id;