/** * Abiquo community edition * cloud management application for hybrid clouds * Copyright (C) 2008-2010 - Abiquo Holdings S.L. * * This application is free software; you can redistribute it and/or * modify it under the terms of the GNU LESSER GENERAL PUBLIC * LICENSE as published by the Free Software Foundation under * version 3 of the License * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * LESSER GENERAL PUBLIC LICENSE v.3 for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ package com.abiquo.abiserver.commands.stub; import static com.abiquo.util.URIResolver.resolveURI; import static java.lang.String.valueOf; import java.lang.reflect.UndeclaredThrowableException; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.concurrent.TimeoutException; import javax.ws.rs.core.Cookie; import javax.ws.rs.core.MediaType; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; import org.apache.wink.client.ClientConfig; import org.apache.wink.client.ClientResponse; import org.apache.wink.client.Resource; import org.apache.wink.client.RestClient; import org.apache.wink.client.handlers.ClientHandler; import org.apache.wink.common.internal.utils.UriHelper; import org.jclouds.abiquo.AbiquoContext; import org.jclouds.abiquo.AbiquoContextFactory; import org.jclouds.abiquo.domain.exception.AbiquoException; import org.jclouds.logging.config.NullLoggingModule; import org.jclouds.rest.AuthorizationException; import com.abiquo.abiserver.abicloudws.AbiCloudConstants; import com.abiquo.abiserver.business.UserSessionException; import com.abiquo.abiserver.business.authentication.TokenUtils; import com.abiquo.abiserver.business.hibernate.pojohb.user.UserHB; import com.abiquo.abiserver.commands.BasicCommand; import com.abiquo.abiserver.config.AbiConfigManager; import com.abiquo.abiserver.persistence.DAOFactory; import com.abiquo.abiserver.persistence.hibernate.HibernateDAOFactory; import com.abiquo.abiserver.pojo.authentication.UserSession; import com.abiquo.abiserver.pojo.infrastructure.DataCenter; import com.abiquo.abiserver.pojo.infrastructure.PhysicalMachine; import com.abiquo.abiserver.pojo.infrastructure.Rack; import com.abiquo.abiserver.pojo.result.BasicResult; import com.abiquo.abiserver.pojo.user.Enterprise; import com.abiquo.model.rest.RESTLink; import com.abiquo.model.transport.SingleResourceTransportDto; import com.abiquo.model.transport.error.ErrorsDto; import com.abiquo.server.core.enterprise.User.AuthType; import com.abiquo.util.ErrorManager; import com.abiquo.util.URIResolver; import com.abiquo.util.resources.ResourceManager; import com.google.common.collect.ImmutableSet; import com.google.inject.Module; import edu.emory.mathcs.backport.java.util.Collections; @SuppressWarnings("unchecked") public class AbstractAPIStub { protected RestClient client; public static final String START_WITH = "startwith"; public static final String BY = "by"; public static final String FILTER = "has"; public static final String LIMIT = "limit"; public static final String ASC = "asc"; public static final Integer DEFAULT_PAGE_LENGTH = 25; public static final String DEFAULT_PAGE_LENGTH_STRING = "25"; protected final String apiUri; protected UserSession currentSession; private AbiquoContext context; public AbstractAPIStub() { this.apiUri = AbiConfigManager.getInstance().getAbiConfig().getApiLocation(); // Do not follow redirects. We want to get 301 response codes ClientConfig restConfig = new ClientConfig(); restConfig.followRedirects(false); client = new RestClient(restConfig); } public UserSession getCurrentSession() { return currentSession; } public void setCurrentSession(final UserSession currentSession) { this.currentSession = currentSession; } protected AbiquoContext getApiClient() { if (context == null) { UserHB user = getCurrentUserCredentials(); String token = generateToken(user.getUser(), user.getPassword()); Properties props = new Properties(); props.put("abiquo.endpoint", apiUri); // Do not retry methods that fail with 5xx error codes props.put("jclouds.max-retries", "0"); // Custom timeouts in ms // External storage operations take a while in some storage devices props.put("jclouds.timeouts.CloudClient.createVolume", "90000"); props.put("jclouds.timeouts.CloudClient.updateVolume", "90000"); props.put("jclouds.timeouts.CloudClient.replaceVolumes", "90000"); props.put("jclouds.timeouts.CloudClient.deleteVolume", "90000"); context = new AbiquoContextFactory().createContext(token, ImmutableSet.<Module> of(new NullLoggingModule()), props); } return context; } protected void releaseApiClient() { if (context != null) { context.close(); context = null; } } protected UserHB getCurrentUserCredentials() { DAOFactory factory = HibernateDAOFactory.instance(); factory.beginConnection(); Object[] credentials = factory.getUserDAO().getCurrentUserCredentials(currentSession.getUser(), currentSession.getAuthType()); UserHB user = new UserHB(); user.setUser((String) credentials[0]); user.setPassword((String) credentials[1]); user.setAuthType(currentSession.getAuthType()); factory.endConnection(); return user; } protected ClientResponse get(final String uri, final String mediaType) { UserHB user = getCurrentUserCredentials(); Resource resource; if (!StringUtils.isBlank(mediaType)) { resource = resource(uri, user.getUser(), user.getPassword(), mediaType); } else { resource = resource(uri, user.getUser(), user.getPassword()); } return resource.get(); } protected ClientResponse get(final String uri, final String user, final String password, final String mediaType, final ClientHandler... handlers) { return resource(uri, user, password, mediaType, handlers).get(); } protected ClientResponse post(final String uri, final SingleResourceTransportDto dto) { UserHB user = getCurrentUserCredentials(); Resource resource = resource(uri, user.getUser(), user.getPassword()); if (dto != null) { resource.contentType(dto.getMediaType()); resource.accept(dto.getMediaType()); } return resource.post(dto); } protected ClientResponse post(final String uri, final SingleResourceTransportDto dto, final String mediaType) { UserHB user = getCurrentUserCredentials(); return resource(uri, user.getUser(), user.getPassword(), mediaType).post(dto); } protected ClientResponse post(final String uri, final String acceptType, final String contentType, final SingleResourceTransportDto dto) { UserHB user = getCurrentUserCredentials(); return resource(uri, user.getUser(), user.getPassword(), acceptType).contentType( contentType).post(dto); } protected ClientResponse post(final String uri, final SingleResourceTransportDto dto, final String user, final String password) { Resource resource = resource(uri, user, password); if (dto != null) { resource.contentType(dto.getMediaType()); resource.accept(dto.getMediaType()); } return resource.post(dto); } protected ClientResponse put(final String uri, final SingleResourceTransportDto dto) { UserHB user = getCurrentUserCredentials(); Resource resource = resource(uri, user.getUser(), user.getPassword()); if (dto != null) { resource.contentType(dto.getMediaType()); resource.accept(dto.getMediaType()); } return resource.put(dto); } protected ClientResponse put(final String uri, final SingleResourceTransportDto dto, final String accept, final String content) { UserHB user = getCurrentUserCredentials(); Resource resource = resource(uri, user.getUser(), user.getPassword()); resource.contentType(content); resource.accept(accept); return resource.put(dto); } protected ClientResponse put(final String uri, final SingleResourceTransportDto dto, final String user, final String password, final String accept, final String content) { Resource resource = resource(uri, user, password); if (accept != null) { resource.accept(accept); } if (content != null) { resource.contentType(content); } return resource.put(dto); } protected ClientResponse delete(final String uri) { UserHB user = getCurrentUserCredentials(); return resource(uri, user.getUser(), user.getPassword(), MediaType.APPLICATION_XML) .delete(); } protected String createLoginLink() { return URIResolver.resolveURI(apiUri, "/login", Collections.emptyMap()); } protected Resource resource(final String uri, final String mediaType) { UserHB user = getCurrentUserCredentials(); return resource(uri, user.getUser(), user.getPassword(), mediaType); } private Resource resource(final String uri, final String user, final String password) { Resource resource = client.resource(uri).accept(MediaType.APPLICATION_XML); String cookieValue = generateToken(user, password); return resource.cookie(new Cookie("auth", cookieValue)); } private Resource resource(final String uri, final String user, final String password, final String mediaType) { Resource resource = client.resource(uri).accept(mediaType); String cookieValue = generateToken(user, password); return resource.cookie(new Cookie("auth", cookieValue)); } private String generateToken(final String user, final String password) { long tokenExpiration = System.currentTimeMillis() + 1000L * 1800; String signature = TokenUtils.makeTokenSignature(tokenExpiration, user, password); String[] tokens; if (this.currentSession != null && StringUtils.isNotBlank(currentSession.getAuthType())) { tokens = new String[] {user, valueOf(tokenExpiration), signature, currentSession.getAuthType()}; } else { tokens = new String[] {user, valueOf(tokenExpiration), signature, AuthType.ABIQUO.name()}; } String cookieValue = StringUtils.join(tokens, ":"); return new String(Base64.encodeBase64(cookieValue.getBytes())); } protected UserHB getCurrentUser() { DAOFactory factory = HibernateDAOFactory.instance(); factory.beginConnection(); UserHB user = factory.getUserDAO().getUserByLoginAuth(currentSession.getUser(), currentSession.getAuthType()); factory.endConnection(); return user; } protected void populateErrors(final ClientResponse response, final BasicResult result, final String methodName) { populateErrors(response, result, methodName, null); } protected void populateErrors(final ClientResponse response, final BasicResult result, final String methodName, final String message) { result.setSuccess(false); if (response.getStatusCode() == 401 || response.getStatusCode() == 403) { ErrorManager.getInstance(AbiCloudConstants.ERROR_PREFIX).reportError( new ResourceManager(BasicCommand.class), result, "onFaultAuthorization.noPermission", methodName); result.setMessage(StringUtils.isBlank(message) ? response.getMessage() : message); result.setResultCode(BasicResult.NOT_AUTHORIZED); throw new UserSessionException(result); } else if (response.getStatusCode() == 406) { ErrorManager.getInstance(AbiCloudConstants.ERROR_PREFIX).reportError( new ResourceManager(BasicCommand.class), result, "onFaultAuthorization.noPermission", methodName); result.setMessage(StringUtils.isBlank(message) ? response.getMessage() : message); result.setResultCode(BasicResult.NOT_AUTHORIZED); throw new UserSessionException(result); } else if (response.getStatusCode() == 415) { ErrorManager.getInstance(AbiCloudConstants.ERROR_PREFIX).reportError( new ResourceManager(BasicCommand.class), result, "onFaultAuthorization.noPermission", methodName); result.setMessage(StringUtils.isBlank(message) ? response.getMessage() : message); result.setResultCode(BasicResult.NOT_AUTHORIZED); throw new UserSessionException(result); } else { ErrorsDto errors = response.getEntity(ErrorsDto.class); result.setMessage(errors.toString()); result.setErrorCode(errors.getCollection().get(0).getCode()); if (errors.getCollection().get(0).getCode().equals("SOFT_LIMIT_EXCEEDED") || errors.getCollection().get(0).getCode().equals("LIMIT-2")) { result.setResultCode(BasicResult.SOFT_LIMT_EXCEEDED); // limit exceeded does not include the detail if (result.getMessage().length() < 254) { result.setResultCode(0); } } else if (errors.getCollection().get(0).getCode().equals("LIMIT_EXCEEDED") || errors.getCollection().get(0).getCode().equals("LIMIT-1")) { result.setResultCode(BasicResult.HARD_LIMT_EXCEEDED); // limit exceeded does not include the detail if (result.getMessage().length() < 254) { result.setResultCode(0); } } else if (errors.getCollection().get(0).getCode().equals("VM-44")) { result.setResultCode(BasicResult.NOT_MANAGED_VIRTUAL_IMAGE); } } } protected void populateErrors(final Exception ex, final BasicResult result, final String methodName, final String message) { if (ex instanceof AuthorizationException) { populateErrors((AuthorizationException) ex, result, methodName, message); } else if (ex instanceof AbiquoException) { populateErrors((AbiquoException) ex, result, methodName, message); } else if (ex instanceof UserSessionException) { throw (UserSessionException) ex; } else if (ex instanceof UndeclaredThrowableException) { UndeclaredThrowableException undeclared = (UndeclaredThrowableException) ex; if (undeclared.getCause() instanceof TimeoutException) { result.setSuccess(false); result.setMessage("Connection timed out during '" + methodName + "' invocation"); } } else { result.setSuccess(false); result.setMessage(ex.getMessage()); } } protected void populateErrors(final Exception ex, final BasicResult result, final String methodName) { populateErrors(ex, result, methodName, null); } protected void populateErrors(final AuthorizationException ex, final BasicResult result, final String methodName, final String message) { result.setSuccess(false); ErrorManager.getInstance(AbiCloudConstants.ERROR_PREFIX).reportError( new ResourceManager(BasicCommand.class), result, "onFaultAuthorization.noPermission", methodName); result.setMessage(StringUtils.isBlank(message) ? ex.getMessage() : message); result.setResultCode(BasicResult.NOT_AUTHORIZED); throw new UserSessionException(result); } protected void populateErrors(final AbiquoException abiquoException, final BasicResult result, final String methodName, final String message) { result.setSuccess(false); result.setMessage(StringUtils.isBlank(message) ? abiquoException.getMessage() : message); result.setErrorCode(abiquoException.getErrors().get(0).getCode()); if (abiquoException.hasError("SOFT_LIMIT_EXCEEDED")) { result.setResultCode(BasicResult.SOFT_LIMT_EXCEEDED); // limit exceeded does not include the detail if (result.getMessage().length() < 254) { result.setResultCode(0); } } else if (abiquoException.hasError("LIMIT_EXCEEDED")) { result.setResultCode(BasicResult.HARD_LIMT_EXCEEDED); // limit exceeded does not include the detail if (result.getMessage().length() < 254) { result.setResultCode(0); } } } protected String createEnterprisesLink(final String filter, final Integer firstElem, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "admin/enterprises", Collections.emptyMap()); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (!StringUtils.isEmpty(filter)) { queryParams.put(FILTER, new String[] {filter}); } if (firstElem != null) { queryParams.put(START_WITH, new String[] {firstElem.toString()}); } if (numResults != null) { queryParams.put(LIMIT, new String[] {numResults.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createEnterpriseLink(final int enterpriseId) { return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}", Collections.singletonMap("enterprise", valueOf(enterpriseId))); } protected String createEnterpriseIPsLink(final int enterpriseId) { return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/action/ips", Collections.singletonMap("enterprise", valueOf(enterpriseId))); } protected String createEnterpriseLimitsByDatacenterLink(final int enterpriseId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/limits", params); } protected String createEnterpriseLimitByDatacenterLink(final int enterpriseId, final int limitId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); params.put("limit", valueOf(limitId)); return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/limits/{limit}", params); } protected String createEnterpriseLimitByDatacenterVirtualAppliancesLink(final int enterpriseId, final int limitId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); params.put("limit", valueOf(limitId)); return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/limits/{limit}/action/virtualappliances", params); } protected String createExternalNetworkLink(final Integer entId, final Integer vlanId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(entId)); params.put("externalvlan", valueOf(vlanId)); return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/action/externalnetworks/{externalvlan}", params); } protected String createExternalNetworkByDatacenterLink(final Integer entId, final Integer limitId, final Integer vlanId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(entId)); params.put("limit", valueOf(limitId)); params.put("externalvlan", valueOf(vlanId)); return URIResolver .resolveURI(apiUri, "admin/enterprises/{enterprise}/limits/{limit}/externalnetworks/{externalvlan}", params); } protected String createExternalNetworkByDatacenterSetDefaultLink(final Integer entId, final Integer limitId, final Integer vlanId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(entId)); params.put("limit", valueOf(limitId)); params.put("externalvlan", valueOf(vlanId)); return URIResolver .resolveURI( apiUri, "admin/enterprises/{enterprise}/limits/{limit}/externalnetworks/{externalvlan}/action/default", params); } protected String createExternalNetworksByDatacenterActionInternalDefaultLink( final Integer entId, final Integer limitId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(entId)); params.put("limit", valueOf(limitId)); return URIResolver .resolveURI(apiUri, "admin/enterprises/{enterprise}/limits/{limit}/externalnetworks/action/default", params); } protected String createExternalNetworkIPLink(final Integer enterpriseId, final Integer limitsId, final Integer networkId, final Integer ipId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId.toString()); params.put("limit", limitsId.toString()); params.put("network", networkId.toString()); params.put("ip", ipId.toString()); return resolveURI(apiUri, "admin/enterprises/{enterprise}/limits/{limit}/externalnetworks/{network}/ips/{ip}", params); } protected String getReservedMachinesUri(final Integer enterpriseId, final Integer machineId) { // String uri = createEnterpriseLink(enterpriseId); Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); params.put("machineId", valueOf(machineId)); return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/reservedmachines/{machineId}", params); } protected String createRoleLink(final int roleId) { return URIResolver.resolveURI(apiUri, "admin/roles/{role}", Collections.singletonMap("role", valueOf(roleId))); } protected String createRolesLink() { return createRolesLink(null, null, null, null, false, null); } protected String createRolesLink(final Integer identerprise, final String filter, final String OrderBy, final Integer offset, final boolean asc, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "admin/roles", Collections.emptyMap()); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (identerprise != null) { queryParams.put("identerprise", new String[] {String.valueOf(identerprise)}); } if (StringUtils.isNotEmpty(filter)) { queryParams.put("has", new String[] {filter}); } if (StringUtils.isNotEmpty(OrderBy)) { queryParams.put("by", new String[] {OrderBy}); } if (offset != null) { queryParams.put("startwith", new String[] {String.valueOf(offset)}); } if (numResults != null) { queryParams.put("limit", new String[] {String.valueOf(numResults)}); } queryParams.put("asc", new String[] {String.valueOf(asc)}); return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createPrivilegeLink(final int privilegeId) { return URIResolver.resolveURI(apiUri, "config/privileges/{privilege}", Collections.singletonMap("privilege", valueOf(privilegeId))); } protected String createRoleActionGetPrivilegesURI(final Integer entId) { return createRoleLink(entId) + "/action/privileges"; } protected String createRolesLdapLink() { return createRolesLdapLink(null, null); } protected String createRolesLdapLink(Integer offset, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "admin/rolesldap", Collections.emptyMap()); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (offset != null && numResults != null) { offset = offset / numResults; queryParams.put("page", new String[] {offset.toString()}); queryParams.put("numResults", new String[] {numResults.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createRoleLdapLink(final int roleLdapId) { return URIResolver.resolveURI(apiUri, "admin/rolesldap/{roleldap}", Collections.singletonMap("roleldap", valueOf(roleLdapId))); } protected String createUsersLink(final String enterpriseId) { return createUsersLink(enterpriseId, null, null); } protected String createUsersLink(final String enterpriseId, Integer offset, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/users", Collections.singletonMap("enterprise", enterpriseId)); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (offset != null && numResults != null) { offset = offset / numResults; queryParams.put("page", new String[] {offset.toString()}); queryParams.put("numResults", new String[] {numResults.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createVirtualMachineTemplatesLink(final Integer enterpriseId, final Integer datacenterId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); params.put("datacenterrepository", valueOf(datacenterId)); String uri = URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/" + "datacenterrepositories/{datacenterrepository}/virtualmachinetemplates", params); return uri; } protected String createVirtualMachineTemplateLink(final Integer enterpriseId, final Integer datacenterId, final Integer virtualMachineTemplateId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); params.put("datacenterrepository", valueOf(datacenterId)); params.put("virtualmachinetemplate", valueOf(virtualMachineTemplateId)); String uri = URIResolver .resolveURI( apiUri, "admin/enterprises/{enterprise}/" + "datacenterrepositories/{datacenterrepository}/virtualmachinetemplates/{virtualmachinetemplate}", params); return uri; } protected String createDatacenterRepositoryLink(final Integer enterpriseId, final Integer datacenterId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); params.put("datacenterrepository", valueOf(datacenterId)); String uri = URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/" + "datacenterrepositories/{datacenterrepository}", params); return uri; } protected String createDatacenterRepositoriesLink(final Integer enterpriseId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", valueOf(enterpriseId)); String uri = URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/" + "datacenterrepositories", params); return uri; } protected String createTemplateDefinitionsLink(final String enterpriseId) { String uri = URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitions", Collections.singletonMap("enterprise", enterpriseId)); return uri; } protected String createTemplateDefinitionListLink(final String enterpriseId, final String templateDefinitionListId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); params.put("templateDefinitionList", templateDefinitionListId); return resolveURI( apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitionLists/{templateDefinitionList}", params); } protected String createTemplateStateFromListLink(final String enterpriseId, final String templateDefinitionListId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); params.put("templateDefinitionList", templateDefinitionListId); return resolveURI( apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitionLists/{templateDefinitionList}/actions/repositoryStatus", params); } protected String createTemplateDefinitionListsLink(final String enterpriseId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); return resolveURI(apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitionLists", params); } protected String createTemplateDefinitionLink(final String enterpriseId, final String templateDefinitionId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); params.put("templateDefinition", templateDefinitionId); return resolveURI(apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitions/{templateDefinition}", params); } protected String createTemplateStateLink(final String enterpriseId, final String templateDefinitionId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); params.put("templateDefinition", templateDefinitionId); return resolveURI( apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitions/{templateDefinition}/actions/repositoryStatus", params); } protected String createTemplateDefinitionInstallLink(final String enterpriseId, final String templateDefinitionId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); params.put("templateDefinition", templateDefinitionId); return resolveURI(apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitions/{templateDefinition}/" + "actions/repositoryInstall", params); } protected String createTemplateDefinitionUninstallLink(final String enterpriseId, final String templateDefinitionId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseId); params.put("templateDefinition", templateDefinitionId); return resolveURI(apiUri, "admin/enterprises/{enterprise}/appslib/templateDefinitions/{templateDefinition}/" + "actions/repositoryUninstall", params); } protected String createDiskFormatTypeLink(final Integer diskFormatTypeId) { Map<String, String> params = new HashMap<String, String>(); params.put("diskformattype", valueOf(diskFormatTypeId)); return resolveURI(apiUri, "config/diskformattypes/{diskformattype}", params); } protected String createDiskFormatTypesLink() { Map<String, String> params = new HashMap<String, String>(); return resolveURI(apiUri, "config/diskformattypes", params); } protected String createIconsLink(final Integer idEnterprise) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", idEnterprise.toString()); return resolveURI(apiUri, "admin/enterprises/{enterprise}/icons", params); } protected String createCategoryLink(final Integer categoryId) { Map<String, String> params = new HashMap<String, String>(); params.put("category", valueOf(categoryId)); return resolveURI(apiUri, "config/categories/{category}", params); } protected String createCategoriesLink() { Map<String, String> params = new HashMap<String, String>(); return resolveURI(apiUri, "config/categories", params); } protected String createUserLink(final int enterpriseId, final int userId) { return createUserLink(valueOf(enterpriseId), userId); } protected String createUserLink(final String enterpriseIdOrWildcard, final int userId) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", enterpriseIdOrWildcard); params.put("user", valueOf(userId)); return resolveURI(apiUri, "admin/enterprises/{enterprise}/users/{user}", params); } protected String createVirtualDatacentersLink() { return createVirtualDatacentersLink(null, null); } protected String createVirtualDatacentersLink(final Enterprise enterprise, final DataCenter datacenter) { Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (enterprise != null) { queryParams.put("enterprise", new String[] {valueOf(enterprise.getId())}); } if (datacenter != null) { queryParams.put("datacenter", new String[] {valueOf(datacenter.getId())}); } return URIResolver.resolveURI(apiUri, "cloud/virtualdatacenters", new HashMap<String, String>(), queryParams); } protected String createVirtualDatacenterLink(final Integer vdcId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); return URIResolver.resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}", params); } protected String createVirtualDatacentersFromEnterpriseLink(final Integer idEnterprise) { Map<String, String> params = new HashMap<String, String>(); params.put("enterprise", idEnterprise.toString()); return URIResolver.resolveURI(apiUri, "admin/enterprises/{enterprise}/action/virtualdatacenters", params); } protected String createVirtualDatacenterPrivateIPsLink(final Integer vdcId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/action/ips", params); } protected String createVirtualDatacenterPublicPurchasedIPsLink(final Integer vdcId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/publicips/purchased", params); } protected String createVirtualDatacenterPublicPurchasedIPLink(final Integer vdcId, final Integer ipId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("ip", ipId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/publicips/purchased/{ip}", params); } protected String createVirtualDatacenterPublicToPurchaseIPsLink(final Integer vdcId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/publicips/topurchase", params); } protected String createVirtualDatacenterPublicToPurchaseIPLink(final Integer vdcId, final Integer ipId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("ip", ipId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/publicips/topurchase/{ip}", params); } protected String createVirtualDatacenterActionDefaultVlan(final Integer vdcId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/action/defaultvlan", params); } protected String createVirtualAppliancesLink(final Integer vdcId) { return createVirtualDatacenterLink(vdcId) + "/virtualappliances"; } protected String createVirtualApplianceLink(final Integer vdcId, final Integer vappId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vapp", vappId.toString()); return URIResolver.resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vapp}", params); } protected String createVirtualMachineConfigurationsLink(final Integer vdcId, final Integer vappId, final Integer vmId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vappid", vappId.toString()); params.put("vmid", vmId.toString()); return resolveURI( apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vappid}/virtualmachines/{vmid}/network/configurations", params); } protected String createVirtualMachineConfigurationLink(final Integer vdcId, final Integer vappId, final Integer vmId, final Integer vmConfigId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vappid", vappId.toString()); params.put("vmid", vmId.toString()); params.put("vmconfigid", vmConfigId.toString()); return resolveURI( apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vappid}/virtualmachines/{vmid}/network/configurations/{vmconfigid}", params); } protected String createVirtualMachineNICsLink(final Integer vdcId, final Integer vappId, final Integer vmId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vappid", vappId.toString()); params.put("vmid", vmId.toString()); return resolveURI( apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vappid}/virtualmachines/{vmid}/network/nics", params); } protected String createInfrastructureVirtualMachineNICsLink(final Integer datacenterId, final Integer rackId, final Integer machineId, final Integer virtualMachineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); params.put("vm", virtualMachineId.toString()); return resolveURI( apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/virtualmachines/{vm}/action/nics", params); } protected String createVirtualMachineNICLink(final Integer vdcId, final Integer vappId, final Integer vmId, final Integer nicOrder) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vappid", vappId.toString()); params.put("vmid", vmId.toString()); params.put("nicOrder", nicOrder.toString()); return resolveURI( apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vappid}/virtualmachines/{vmid}/network/nics/{nicOrder}", params); } protected String createVirtualDatacenterDisksLink(final Integer vdcId) { return createVirtualDatacenterDisksLink(vdcId, null); } protected String createVirtualDatacenterDisksLink(final Integer vdcId, final Boolean forceSoftLimits) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); String uri = resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/disks", params); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (forceSoftLimits != null) { queryParams.put("force", new String[] {forceSoftLimits.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createVirtualDatacenterDiskLink(final Integer vdcId, final Integer diskId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("diskId", diskId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdcid}/disks/{diskId}", params); } protected String createVirtualMachineDisksLink(final Integer vdcId, final Integer vappId, final Integer vmId) { return createVirtualMachineDisksLink(vdcId, vappId, vmId, null); } protected String createVirtualMachineDisksLink(final Integer vdcId, final Integer vappId, final Integer vmId, final Boolean forceSoftLimits) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vappid", vappId.toString()); params.put("vmid", vmId.toString()); String uri = resolveURI( apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vappid}/virtualmachines/{vmid}/storage/disks/", params); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (forceSoftLimits != null) { queryParams.put("force", new String[] {forceSoftLimits.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createVirtualMachineDiskLink(final Integer vdcId, final Integer vappId, final Integer vmId, final Integer diskId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdcid", vdcId.toString()); params.put("vappid", vappId.toString()); params.put("vmid", vmId.toString()); params.put("diskId", diskId.toString()); return resolveURI( apiUri, "cloud/virtualdatacenters/{vdcid}/virtualappliances/{vappid}/virtualmachines/{vmid}/storage/disks/{diskId}", params); } protected String createMachineLink(final PhysicalMachine machine) { Integer rackId = null; if (machine.getRack() != null) { rackId = machine.getRack().getId(); } else { rackId = machine.getAssignedTo().getId(); } Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", valueOf(machine.getDataCenter().getId())); params.put("rack", rackId.toString()); params.put("machine", machine.getId().toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}", params); } protected String createMachineLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}", params); } protected String createDatastoresLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { return createMachineLink(datacenterId, rackId, machineId) + "/datastores"; } protected String createDatastoresRefreshLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { return createDatastoresLink(datacenterId, rackId, machineId) + "/action/refresh"; } protected String createMachineLinkPowerOn(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/action/poweron", params); } protected String createMachineLinkPowerOff(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/action/poweroff", params); } protected String createMachineLinkVms(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/virtualmachines", params); } protected String createMachineLinkVm(final Integer datacenterId, final Integer rackId, final Integer machineId, final Integer vmId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); params.put("vm", vmId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/virtualmachines/{vm}", params); } protected String createMachineLinkVmActionCapture(final Integer datacenterId, final Integer rackId, final Integer machineId, final Integer vmId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); params.put("vm", vmId.toString()); return resolveURI( apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/virtualmachines/{vm}/action/capture", params); } protected String createMachineLinkCheckState(final Integer datacenterId, final Integer rackId, final Integer machineId, final String ip, final String hypervisor, final String user, final String password, final Integer port) { boolean includeMachineId = false; if (machineId != null && machineId != 0) { includeMachineId = true; } Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); if (includeMachineId) { params.put("machine", machineId.toString()); } params.put("ip", ip); params.put("hypervisor", hypervisor); params.put("user", user); params.put("password", password); params.put("port", port.toString()); String uri = "admin/datacenters/{datacenter}/"; if (includeMachineId) { uri += "racks/{rack}/machines/{machine}/action/checkstate?sync=true"; } else { uri += "action/checkmachinestate?ip={ip}&hypervisor={hypervisor}&user={user}&password={password}&port={port}"; } return resolveURI(apiUri, uri, params); } protected String createMachineLinkCheckIpmi(final Integer datacenterId, final Integer rackId, final Integer machineId, final String ip, final String user, final String password, final Integer port) { boolean includeMachineId = false; if (machineId != null && machineId != 0) { includeMachineId = true; } Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); if (includeMachineId) { params.put("machine", machineId.toString()); } params.put("ip", ip); params.put("user", user); params.put("password", password); String uri = "admin/datacenters/{datacenter}/"; if (includeMachineId) { uri += "racks/{rack}/machines/{machine}/action/checkipmi"; } else { uri += "action/checkmachineipmi?ip={ip}&user={user}&password={password}"; if (port != null) { params.put("port", port.toString()); uri += "&port={port}"; } } return resolveURI(apiUri, uri, params); } protected String createDatacenterLinkgetMachineInfo(final Integer datacenterId, final String ip, final String user, final String password, final String hypervisor, final Integer port) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("ip", ip); params.put("hypervisor", hypervisor); params.put("user", user); params.put("password", password); params.put("port", port.toString()); String uri = "admin/datacenters/{datacenter}/"; uri += "action/discoversingle?ip={ip}&user={user}&password={password}&hypervisor={hypervisor}&port={port}"; return resolveURI(apiUri, uri, params); } protected String createDatacenterLinkgetHypervisor(final Integer datacenterId, final String ip) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("ip", ip); String uri = "admin/datacenters/{datacenter}/action/hypervisor?ip={ip}"; return resolveURI(apiUri, uri, params); } protected String createMachinesLinkMultiplePost(final Integer datacenterId, final Integer rackId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); String uri = "admin/datacenters/{datacenter}/racks/{rack}/machines"; return resolveURI(apiUri, uri, params); } protected String createRemoteServicesLink(final Integer datacenterId) { return UriHelper.appendPathToBaseUri(createDatacenterLink(datacenterId), "remoteservices"); } protected String createRemoteServiceLink(final Integer datacenterId, final String remoteServiceType) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("remoteservice", remoteServiceType.toLowerCase().replace("_", "")); return resolveURI(apiUri, "admin/datacenters/{datacenter}/remoteservices/{remoteservice}", params); } protected String createDatacenterLinkUsedResources(final Integer datacenterId) { return createDatacenterLink(datacenterId) + "/action/updateusedresources"; } protected String createDatacenterLink() { return createDatacenterLink(null); } protected String createDatacenterLink(final Integer datacenterId) { String uri = "admin/datacenters"; Map<String, String> params = new HashMap<String, String>(); if (datacenterId != null) { params.put("datacenter", datacenterId.toString()); uri += "/{datacenter}"; } return resolveURI(apiUri, uri, params); } protected String createPrivateNetworksLink(final Integer vdcId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdc", vdcId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdc}/privatenetworks", params); } protected String createPrivateNetworkLink(final Integer vdcId, final Integer vlanId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdc", vdcId.toString()); params.put("vlan", vlanId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdc}/privatenetworks/{vlan}", params); } protected String createPrivateNetworkIPLink(final Integer vdcId, final Integer vlanId, final Integer ipId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdc", vdcId.toString()); params.put("vlan", vlanId.toString()); params.put("ip", ipId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdc}/privatenetworks/{vlan}/ips/{ip}", params); } protected String createPrivateNetworkIPsLink(final Integer vdcId, final Integer vlanId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdc", vdcId.toString()); params.put("vlan", vlanId.toString()); return resolveURI(apiUri, "cloud/virtualdatacenters/{vdc}/privatenetworks/{vlan}/ips", params); } protected String createDatacenterPublicIPsLink(final Integer datacenterId) { Map<String, String> params = new HashMap<String, String>(); params.put("dc", datacenterId.toString()); return resolveURI(apiUri, "admin/datacenters/{dc}/network/action/publicips", params); } protected String createDatacenterPublicTagCheck(final Integer datacenterId) { Map<String, String> params = new HashMap<String, String>(); params.put("dc", datacenterId.toString()); return resolveURI(apiUri, "admin/datacenters/{dc}/network/action/checkavailability", params); } protected String createPublicNetworksLink(final Integer datacenterId) { Map<String, String> params = new HashMap<String, String>(); params.put("dc", datacenterId.toString()); return resolveURI(apiUri, "admin/datacenters/{dc}/network", params); } protected String createPublicNetworkLink(final Integer datacenterId, final Integer networkId) { Map<String, String> params = new HashMap<String, String>(); params.put("dc", datacenterId.toString()); params.put("network", networkId.toString()); return resolveURI(apiUri, "admin/datacenters/{dc}/network/{network}", params); } protected String createPublicNetworkIPsLink(final Integer datacenterId, final Integer networkId) { Map<String, String> params = new HashMap<String, String>(); params.put("dc", datacenterId.toString()); params.put("network", networkId.toString()); return resolveURI(apiUri, "admin/datacenters/{dc}/network/{network}/ips", params); } protected String createPublicNetworkIPLink(final Integer datacenterId, final Integer networkId, final Integer ipId) { Map<String, String> params = new HashMap<String, String>(); params.put("dc", datacenterId.toString()); params.put("network", networkId.toString()); params.put("ip", ipId.toString()); return resolveURI(apiUri, "admin/datacenters/{dc}/network/{network}/ips/{ip}", params); } // protected Resource resource(final String uri, final String user, final String password, // final ClientHandler... handlers) // { // return resource(uri, user, password, MediaType.APPLICATION_XML, handlers); // } protected Resource resource(final String uri, final String user, final String password, final String mediaType, final ClientHandler... handlers) { if (handlers == null || handlers.length == 0) { return resource(uri, user, password, mediaType); } ClientConfig config = new ClientConfig(); config.handlers(handlers); Resource resource = new RestClient(config).resource(uri).accept(mediaType); long tokenExpiration = System.currentTimeMillis() + 1000L * 1800; String signature = TokenUtils.makeTokenSignature(tokenExpiration, user, password); String[] tokens; if (this.currentSession != null && StringUtils.isNotBlank(currentSession.getAuthType())) { tokens = new String[] {user, valueOf(tokenExpiration), signature, currentSession.getAuthType()}; } else { tokens = new String[] {user, valueOf(tokenExpiration), signature, AuthType.ABIQUO.name()}; } String cookieValue = StringUtils.join(tokens, ":"); cookieValue = new String(Base64.encodeBase64(cookieValue.getBytes())); return resource.cookie(new Cookie("auth", cookieValue)); } protected String createRacksLink(final Integer datacenterId) { return createRacksLink(datacenterId, null); } protected String createRacksLink(final Integer datacenterId, final Integer rackId) { Map<String, String> params = new HashMap<String, String>(); String uri = "admin/datacenters/{datacenter}/racks"; params.put("datacenter", datacenterId.toString()); if (rackId != null) { uri += "/{rack}"; params.put("rack", rackId.toString()); } return resolveURI(apiUri, uri, params); } protected String createMachinesLink(final Rack rack) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", valueOf(rack.getDataCenter().getId())); params.put("rack", rack.getId().toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines", params); } protected String createMachinesLink(final Integer datacenterId, final Integer rackId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines", params); } protected String createRackLink(final Integer datacenterId, final Integer rackId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}", params); } /** * @param virtualDatacenterId * @param virtualApplianceId * @return String */ protected String createVirtualApplianceDeployLink(final Integer virtualDatacenterId, final Integer virtualApplianceId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualAppliances", String.valueOf(virtualApplianceId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualAppliances}/action/deploy", params); } /** * @param virtualDatacenterId * @param virtualApplianceId * @return String */ protected String createVirtualApplianceUndeployLink(final Integer virtualDatacenterId, final Integer virtualApplianceId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualAppliances", String.valueOf(virtualApplianceId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualAppliances}/action/undeploy", params); } protected String createEditVirtualMachineStateUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId, final Integer virtualMachineId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); params.put("virtualMachine", String.valueOf(virtualMachineId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}/virtualmachines/{virtualMachine}/state", params); } protected String createRunlistLink(final Integer vdcId, final Integer vappId, final Integer virtualMachineId) { Map<String, String> params = new HashMap<String, String>(); params.put("vdc", vdcId.toString()); params.put("vapp", vappId.toString()); params.put("vm", virtualMachineId.toString()); return resolveURI( apiUri, "cloud/virtualdatacenters/{vdc}/virtualappliances/{vapp}/virtualmachines/{vm}/config/runlist", params); } protected String createVirtualMachinesUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}/virtualmachines", params); } protected String createVirtualMachineUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId, final Integer virtualMachineId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); params.put("virtualMachineId", String.valueOf(virtualMachineId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}/virtualmachines/{virtualMachineId}", params); } protected String createVirtualMachineInstanceUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId, final Integer virtualMachineId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); params.put("virtualMachineId", String.valueOf(virtualMachineId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}/virtualmachines/{virtualMachineId}/action/instance", params); } protected String createVirtualMachineResetUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId, final Integer virtualMachineId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); params.put("virtualMachineId", String.valueOf(virtualMachineId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}/virtualmachines/{virtualMachineId}/action/reset", params); } protected String createVirtualApplianceUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); return URIResolver.resolveURI(apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}", params); } protected String createVirtualApplianceMachinesUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); return URIResolver .resolveURI( apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}/virtualmachines", params); } protected String createCurrencyLink(final int currencyId) { return URIResolver.resolveURI(apiUri, "config/currencies/{currency}", Collections.singletonMap("currency", valueOf(currencyId))); } protected String createPricingTemplateLink(final int templateId) { return URIResolver.resolveURI(apiUri, "config/pricingtemplates/{pricingtemplate}", Collections.singletonMap("pricingtemplate", valueOf(templateId))); } protected String createPricingTemplatesLink() { return createPricingTemplatesLink(null, null); } protected String createPricingTemplatesLink(Integer offset, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "config/pricingtemplates", Collections.emptyMap()); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (numResults != null) { queryParams.put("numResults", new String[] {numResults.toString()}); if (offset != null) { offset = offset / numResults; queryParams.put("page", new String[] {offset.toString()}); } } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createCostCodesLink() { return createCostCodesLink(null, null); } protected String createCostCodesLink(Integer offset, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "config/costcodes", Collections.emptyMap()); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (offset != null && numResults != null) { if (numResults != 0) { offset = offset / numResults; queryParams.put("page", new String[] {offset.toString()}); queryParams.put("numResults", new String[] {numResults.toString()}); } else if (numResults == 0 && offset == 0) { queryParams.put("page", new String[] {offset.toString()}); queryParams.put("numResults", new String[] {numResults.toString()}); } } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createCostCodeCurrenciesLink(final Integer costCodeId) { Map<String, String> params = new HashMap<String, String>(); params.put("costcode", costCodeId.toString()); return resolveURI(apiUri, "config/costcodes/{costcode}/currencies", params); } protected String createCostCodeLink(final int costCodeId) { return URIResolver.resolveURI(apiUri, "config/costcodes/{costcode}", Collections.singletonMap("costcode", valueOf(costCodeId))); } protected String createCostCodeCurrenciesLink(final String costCodeId, Integer offset, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "config/costcodes/{costcode}/currencies", Collections.singletonMap("costcode", valueOf(costCodeId))); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (offset != null && numResults != null) { offset = offset / numResults; queryParams.put("page", new String[] {offset.toString()}); queryParams.put("numResults", new String[] {numResults.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createCurrenciesLink() { return createCurrenciesLink(null, null); } protected String createCurrenciesLink(Integer offset, final Integer numResults) { String uri = URIResolver.resolveURI(apiUri, "config/currencies", Collections.emptyMap()); Map<String, String[]> queryParams = new HashMap<String, String[]>(); if (offset != null && numResults != null) { offset = offset / numResults; queryParams.put("page", new String[] {offset.toString()}); queryParams.put("numResults", new String[] {numResults.toString()}); } return UriHelper.appendQueryParamsToPath(uri, queryParams, false); } protected String createPricingCostCodesLink(final Integer pricingId) { Map<String, String> params = new HashMap<String, String>(); params.put("pricingtemplate", pricingId.toString()); return resolveURI(apiUri, "config/pricingtemplates/{pricingtemplate}/costcodes", params); } protected String createPricingCostCodeLink(final Integer pricingId, final Integer pricingCostCodeId) { Map<String, String> params = new HashMap<String, String>(); params.put("pricingtemplate", pricingId.toString()); params.put("costcode", pricingCostCodeId.toString()); return resolveURI(apiUri, "config/pricingtemplates/{pricingtemplate}/costcodes/{costcode}", params); } protected String createPricingTiersLink(final Integer pricingId) { Map<String, String> params = new HashMap<String, String>(); params.put("pricingtemplate", pricingId.toString()); return resolveURI(apiUri, "config/pricingtemplates/{pricingtemplate}/tiers", params); } protected String createPricingTierLink(final Integer pricingId, final Integer pricingTierId) { Map<String, String> params = new HashMap<String, String>(); params.put("pricingtemplate", pricingId.toString()); params.put("tier", pricingTierId.toString()); return resolveURI(apiUri, "config/pricingtemplates/{pricingtemplate}/tiers/{tier}", params); } protected String createVirtualAppliancePriceLink(final int virtualDatacenterId, final int virtualApplianceId) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("vapp", String.valueOf(virtualApplianceId)); return resolveURI(apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{vapp}/action/price", params); } protected String createVirtualAppliancesByEnterpriseLink(final Integer entId) { return createEnterpriseLink(entId) + "/action/virtualappliances"; } protected String createVirtualApplianceUrl(final Integer virtualDatacenterId, final Integer virtualApplianceId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("virtualDatacenter", String.valueOf(virtualDatacenterId)); params.put("virtualApplianceId", String.valueOf(virtualApplianceId)); return URIResolver.resolveURI(apiUri, "cloud/virtualdatacenters/{virtualDatacenter}/virtualappliances/{virtualApplianceId}", params, queryParams); } protected String createVirtualAppliancesByVirtualDatacenterLink(final Integer vdcId) { return createVirtualDatacenterLink(vdcId) + "/virtualappliances"; } /** * Returns the id, if exists, of a RESTLink. If not exists, returns {@code null}. * * <pre> * {@code * http://localhost:80/api/admin/datacenters/2 * } * Returns "2" * </pre> * * @param link * @return string representing the id */ protected String getIdFromLink(final RESTLink link) { if (link == null) { return null; } return link.getHref().substring(link.getHref().lastIndexOf("/") + 1); } protected String createRackOrganizationsLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/organizations", params, queryParams); } protected String createRackLogicServersLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers", params, queryParams); } protected String createRackLogicServerTemplatesLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/lstemplates", params, queryParams); } protected String createRackCloneLogicServerLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers/clone", params, queryParams); } protected String createRackAssociateLogicServerLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers/associate", params, queryParams); } protected String createRackDissociateLogicServerLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers/dissociate", params, queryParams); } protected String createRackDeleteLogicServerLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers/delete", params, queryParams); } protected String createMachineBladeLedOnLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/action/ledon", params); } protected String createMachineBladeLsLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/logicserver", params); } protected String createRackAssociateLogicServerTemplateLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers/assoctemplate", params, queryParams); } protected String createRackAssociateLogicServerCloneLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/logicservers/assocclone", params, queryParams); } protected String createObjectFsmLink(final Integer datacenterId, final Integer rackId, final Map<String, String[]> queryParams) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/fsm", params, queryParams); } protected String createMachineBladeLedOffLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/action/ledoff", params); } protected String createMachineBladeLedLink(final Integer datacenterId, final Integer rackId, final Integer machineId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", machineId.toString()); return resolveURI(apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/led", params); } protected String createVirtualMachineHardDiskLink(final Integer datacenterId, final Integer rackId, final Integer pmId, final Integer vmId) { Map<String, String> params = new HashMap<String, String>(); params.put("datacenter", datacenterId.toString()); params.put("rack", rackId.toString()); params.put("machine", pmId.toString()); params.put("vm", vmId.toString()); return resolveURI( apiUri, "admin/datacenters/{datacenter}/racks/{rack}/machines/{machine}/virtualmachines/{vm}/action/disk", params); } }