/** * 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.api.util; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ws.rs.core.MediaType; import org.apache.wink.server.utils.LinkBuilders; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; import com.abiquo.api.resources.AbstractResource; import com.abiquo.api.resources.DatacenterResource; import com.abiquo.api.resources.DatastoreResource; import com.abiquo.api.resources.DatastoresResource; import com.abiquo.api.resources.EnterpriseResource; import com.abiquo.api.resources.MachineResource; import com.abiquo.api.resources.MachinesResource; import com.abiquo.api.resources.RackResource; import com.abiquo.api.resources.RacksResource; import com.abiquo.api.resources.RemoteServiceResource; import com.abiquo.api.resources.RemoteServicesResource; import com.abiquo.api.resources.RoleResource; import com.abiquo.api.resources.TaskResourceUtils; import com.abiquo.api.resources.UserResource; import com.abiquo.api.resources.UsersResource; import com.abiquo.api.resources.VirtualMachinesInfrastructureResource; import com.abiquo.api.resources.appslibrary.CategoryResource; import com.abiquo.api.resources.appslibrary.DatacenterRepositoriesResource; import com.abiquo.api.resources.appslibrary.DatacenterRepositoryResource; import com.abiquo.api.resources.appslibrary.TemplateDefinitionListResource; import com.abiquo.api.resources.appslibrary.TemplateDefinitionListsResource; import com.abiquo.api.resources.appslibrary.TemplateDefinitionResource; import com.abiquo.api.resources.appslibrary.TemplateDefinitionsResource; import com.abiquo.api.resources.appslibrary.VirtualMachineTemplateResource; import com.abiquo.api.resources.appslibrary.VirtualMachineTemplatesResource; import com.abiquo.api.resources.cloud.DiskResource; import com.abiquo.api.resources.cloud.IpAddressesResource; import com.abiquo.api.resources.cloud.PrivateNetworkResource; import com.abiquo.api.resources.cloud.PrivateNetworksResource; import com.abiquo.api.resources.cloud.VirtualApplianceResource; import com.abiquo.api.resources.cloud.VirtualAppliancesResource; import com.abiquo.api.resources.cloud.VirtualDatacenterResource; import com.abiquo.api.resources.cloud.VirtualDatacentersResource; import com.abiquo.api.resources.cloud.VirtualMachineNetworkConfigurationResource; import com.abiquo.api.resources.cloud.VirtualMachineResource; import com.abiquo.api.resources.cloud.VirtualMachineStorageConfigurationResource; import com.abiquo.api.resources.cloud.VirtualMachinesResource; import com.abiquo.api.resources.config.PrivilegeResource; import com.abiquo.api.resources.config.SystemPropertyResource; import com.abiquo.api.services.InfrastructureService; import com.abiquo.appliancemanager.transport.TemplatesStateDto; import com.abiquo.model.enumerator.HypervisorType; import com.abiquo.model.rest.RESTLink; import com.abiquo.model.transport.AcceptedRequestDto; import com.abiquo.model.transport.LinksDto; import com.abiquo.server.core.appslibrary.Category; import com.abiquo.server.core.appslibrary.CategoryDto; import com.abiquo.server.core.appslibrary.DatacenterRepositoryDto; import com.abiquo.server.core.appslibrary.TemplateDefinitionDto; import com.abiquo.server.core.appslibrary.TemplateDefinitionListDto; import com.abiquo.server.core.appslibrary.TemplateDefinitionListsDto; import com.abiquo.server.core.appslibrary.TemplateDefinitionsDto; import com.abiquo.server.core.appslibrary.VirtualMachineTemplate; import com.abiquo.server.core.appslibrary.VirtualMachineTemplateDto; import com.abiquo.server.core.appslibrary.VirtualMachineTemplatesDto; import com.abiquo.server.core.cloud.HypervisorTypesDto; import com.abiquo.server.core.cloud.VirtualAppliance; import com.abiquo.server.core.cloud.VirtualApplianceDto; import com.abiquo.server.core.cloud.VirtualApplianceStateDto; import com.abiquo.server.core.cloud.VirtualAppliancesDto; import com.abiquo.server.core.cloud.VirtualDatacenter; import com.abiquo.server.core.cloud.VirtualDatacenterDto; import com.abiquo.server.core.cloud.VirtualDatacentersDto; import com.abiquo.server.core.cloud.VirtualMachine; import com.abiquo.server.core.cloud.VirtualMachineDto; import com.abiquo.server.core.cloud.VirtualMachineStateDto; import com.abiquo.server.core.cloud.VirtualMachinesDto; import com.abiquo.server.core.config.LicenseDto; import com.abiquo.server.core.config.SystemPropertyDto; import com.abiquo.server.core.enterprise.DatacenterLimitsDto; import com.abiquo.server.core.enterprise.Enterprise; import com.abiquo.server.core.enterprise.EnterpriseDto; import com.abiquo.server.core.enterprise.EnterprisePropertiesDto; import com.abiquo.server.core.enterprise.EnterprisesDto; import com.abiquo.server.core.enterprise.PrivilegeDto; import com.abiquo.server.core.enterprise.PrivilegesDto; import com.abiquo.server.core.enterprise.RoleDto; import com.abiquo.server.core.enterprise.RoleLdapDto; import com.abiquo.server.core.enterprise.UserDto; import com.abiquo.server.core.enterprise.UsersDto; import com.abiquo.server.core.infrastructure.Datacenter; import com.abiquo.server.core.infrastructure.DatacenterDto; import com.abiquo.server.core.infrastructure.Datastore; import com.abiquo.server.core.infrastructure.DatastoreDto; import com.abiquo.server.core.infrastructure.DatastoresDto; import com.abiquo.server.core.infrastructure.FsmsDto; import com.abiquo.server.core.infrastructure.LogicServersDto; import com.abiquo.server.core.infrastructure.MachineDto; import com.abiquo.server.core.infrastructure.MachineStateDto; import com.abiquo.server.core.infrastructure.MachinesDto; import com.abiquo.server.core.infrastructure.OrganizationsDto; import com.abiquo.server.core.infrastructure.RackDto; import com.abiquo.server.core.infrastructure.RacksDto; import com.abiquo.server.core.infrastructure.RemoteServiceDto; import com.abiquo.server.core.infrastructure.RemoteServicesDto; import com.abiquo.server.core.infrastructure.UcsRackDto; import com.abiquo.server.core.infrastructure.management.RasdManagement; import com.abiquo.server.core.infrastructure.network.IpPoolManagement; import com.abiquo.server.core.infrastructure.network.IpPoolManagementDto; import com.abiquo.server.core.infrastructure.network.IpsPoolManagementDto; import com.abiquo.server.core.infrastructure.network.NicDto; import com.abiquo.server.core.infrastructure.network.NicsDto; import com.abiquo.server.core.infrastructure.network.VLANNetwork; import com.abiquo.server.core.infrastructure.network.VLANNetworkDto; import com.abiquo.server.core.infrastructure.network.VLANNetworksDto; import com.abiquo.server.core.infrastructure.network.VMNetworkConfiguration; import com.abiquo.server.core.infrastructure.network.VMNetworkConfigurationDto; import com.abiquo.server.core.infrastructure.network.VMNetworkConfigurationsDto; import com.abiquo.server.core.infrastructure.storage.DiskManagement; import com.abiquo.server.core.infrastructure.storage.DiskManagementDto; import com.abiquo.server.core.infrastructure.storage.DisksManagementDto; import com.abiquo.server.core.infrastructure.storage.Tier; import com.abiquo.server.core.infrastructure.storage.VolumeManagement; import com.abiquo.server.core.pricing.CostCode; import com.abiquo.server.core.pricing.CostCodeCurrencyDto; import com.abiquo.server.core.pricing.Currency; import com.abiquo.server.core.pricing.CurrencyDto; import com.abiquo.server.core.pricing.PricingCostCodeDto; import com.abiquo.server.core.pricing.PricingTemplate; import com.abiquo.server.core.pricing.PricingTemplateDto; import com.abiquo.server.core.pricing.PricingTierDto; import com.abiquo.server.core.scheduler.EnterpriseExclusionRule; import com.abiquo.server.core.scheduler.EnterpriseExclusionRuleDto; import com.abiquo.server.core.scheduler.FitPolicyRule; import com.abiquo.server.core.scheduler.FitPolicyRuleDto; import com.abiquo.server.core.scheduler.MachineLoadRule; import com.abiquo.server.core.scheduler.MachineLoadRuleDto; import com.abiquo.server.core.task.TaskDto; import com.abiquo.server.core.task.TasksDto; import com.abiquo.server.core.util.PagedList; @Component @Scope(BeanDefinition.SCOPE_PROTOTYPE) // This bean must not be singleton public class RESTBuilder implements IRESTBuilder { public static final String REL_EDIT = "edit"; public static final String REL_SELF = "self"; public static final String FIRST = "first"; public static final String NEXT = "next"; public static final String PREV = "previous"; public static final String LAST = "last"; protected LinkBuilders linkProcessor; @Override public RESTBuilder injectProcessor(final LinkBuilders linkProcessor) { this.linkProcessor = linkProcessor; return this; } public RESTLink buildDatacenterLink(final Integer datacenterId) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); return buildDatacenterLink(datacenterId, builder); } protected RESTLink buildDatacenterLink(final Integer datacenterId, final AbiquoLinkBuilder builder) { Map<String, String> params = Collections.singletonMap(DatacenterResource.DATACENTER, datacenterId.toString()); return builder.buildRestLink(DatacenterResource.class, DatacenterResource.DATACENTER, params); } @Override public List<RESTLink> buildDatacenterLinks(final DatacenterDto datacenter) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = Collections.singletonMap(DatacenterResource.DATACENTER, datacenter.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(DatacenterResource.class, REL_EDIT, params, DatacenterDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(RacksResource.class, RacksResource.RACKS_PATH, params, RacksDto.BASE_MEDIA_TYPE)); links .add(builder.buildRestLink(RemoteServicesResource.class, RemoteServicesResource.REMOTE_SERVICES_PATH, params, RemoteServicesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.HYPERVISORS_PATH, DatacenterResource.HYPERVISORS_PATH, params, HypervisorTypesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.ENTERPRISES_PATH, DatacenterResource.ENTERPRISES_REL, params, EnterprisesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.UPDATE_RESOURCES_PATH, DatacenterResource.UPDATE_RESOURCES, params)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.ACTION_DISCOVER_SINGLE_PATH, DatacenterResource.ACTION_DISCOVER_SINGLE_REL, params, MachineDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.ACTION_DISCOVER_MULTIPLE_PATH, DatacenterResource.ACTION_DISCOVER_MULTIPLE_REL, params, MachinesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.ACTION_DISCOVER_HYPERVISOR_TYPE, DatacenterResource.ACTION_DISCOVER_HYPERVISOR_TYPE_REL, params, MediaType.TEXT_PLAIN)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.ACTION_MACHINES_CHECK, DatacenterResource.ACTION_MACHINES_CHECK_REL, params, MachineStateDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.ACTION_MACHINES_CHECK_IPMI, DatacenterResource.ACTION_MACHINES_CHECK_IPMI_REL, params)); // links.add(builder.buildRestLink(OVFPackageListsResource.class, // OVFPackageListsResource.OVF_PACKAGE_LISTS_PATH, params)); // links.add(builder.buildRestLink(OVFPackagesResource.class, // OVFPackagesResource.OVF_PACKAGES_PATH, params)); return links; } @Override public List<RESTLink> buildRackLinks(final Integer datacenterId, final RackDto rack) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(DatacenterResource.DATACENTER, datacenterId.toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.DATACENTER, params, DatacenterDto.BASE_MEDIA_TYPE)); params.put(RackResource.RACK, rack.getId().toString()); links.add(builder.buildRestLink(RackResource.class, REL_EDIT, params, RackDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(MachinesResource.class, MachinesResource.MACHINES_PATH, params, MachinesDto.BASE_MEDIA_TYPE)); if (rack instanceof UcsRackDto) { links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_ASSOCIATE, RackResource.RACK_ACTION_LOGICSERVERS_ASSOCIATE_REL, params)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_ASSOCIATE_TEMPLATE, RackResource.RACK_ACTION_LOGICSERVERS_ASSOCIATE_TEMPLATE_REL, params)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_CLONE, RackResource.RACK_ACTION_LOGICSERVERS_CLONE_REL, params)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_DELETE, RackResource.RACK_ACTION_LOGICSERVERS_DELETE_REL, params)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_DISSOCIATE, RackResource.RACK_ACTION_LOGICSERVERS_DISSOCIATE_REL, params)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS, RackResource.RACK_ACTION_LOGICSERVERS_REL, params, LogicServersDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_TEMPLATES, RackResource.RACK_ACTION_LOGICSERVERS_TEMPLATES_REL, params, LogicServersDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_LOGICSERVERS_ASSOCIATE_CLONE, RackResource.RACK_ACTION_LOGICSERVERS_ASSOCIATE_CLONE_REL, params)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_ORGANIZATIONS, RackResource.RACK_ACTION_ORGANIZATIONS_REL, params, OrganizationsDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(RackResource.class, RackResource.RACK_ACTION_FSM, RackResource.RACK_ACTION_FSM_REL, params, FsmsDto.BASE_MEDIA_TYPE)); } return links; } @Override public List<RESTLink> buildMachineLinks(final Integer datacenterId, final Integer rackId, final Boolean managedRack, final Enterprise enterprise, final MachineDto machine) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); return this.buildMachineLinks(datacenterId, rackId, managedRack, enterprise, machine, builder); } protected RESTLink buildMachineRackLink(final AbiquoLinkBuilder builder, final Map<String, String> params, final Boolean managedRack) { RESTLink link; if (!managedRack) { link = builder.buildRestLink(RackResource.class, RackResource.RACK, params, RackDto.BASE_MEDIA_TYPE); } else { link = builder.buildRestLink(RackResource.class, RackResource.RACK, params, UcsRackDto.BASE_MEDIA_TYPE); } return link; } public List<RESTLink> buildMachineLinks(final Integer datacenterId, final Integer rackId, final Boolean managedRack, final Enterprise enterprise, final MachineDto machine, final AbiquoLinkBuilder builder) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(DatacenterResource.DATACENTER, datacenterId.toString()); params.put(RackResource.RACK, rackId.toString()); params.put(MachineResource.MACHINE, machine.getId().toString()); links.add(buildMachineRackLink(builder, params, managedRack)); links.add(builder.buildRestLink(MachineResource.class, REL_EDIT, params, MachineDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatastoresResource.class, DatastoresResource.DATASTORES_PATH, params, DatastoresDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachinesInfrastructureResource.class, VirtualMachinesInfrastructureResource.VIRTUAL_MACHINES_INFRASTRUCTURE_PARAM, params, VirtualMachinesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(MachineResource.class, MachineResource.MACHINE_ACTION_CHECK, MachineResource.MACHINE_CHECK, params, MachineStateDto.BASE_MEDIA_TYPE)); if (enterprise != null) { params.put(EnterpriseResource.ENTERPRISE, enterprise.getId().toString()); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params)); } return links; } @Override public List<RESTLink> buildRemoteServiceLinks(final Integer datacenterId, final RemoteServiceDto remoteService) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); List<RESTLink> links = buildRemoteServiceLinks(datacenterId, remoteService, builder); return links; } protected List<RESTLink> buildRemoteServiceLinks(final Integer datacenterId, final RemoteServiceDto remoteService, final AbiquoLinkBuilder builder) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(DatacenterResource.DATACENTER, datacenterId.toString()); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.DATACENTER, params, DatacenterDto.BASE_MEDIA_TYPE)); params.put(RemoteServiceResource.REMOTE_SERVICE, remoteService.getType().toString() .toLowerCase().replace("_", "")); if (remoteService.getType().canBeChecked()) { links .add(builder.buildRestLink(RemoteServiceResource.class, RemoteServiceResource.CHECK_RESOURCE, InfrastructureService.CHECK_RESOURCE, params)); } links.add(builder.buildRestLink(RemoteServiceResource.class, REL_EDIT, params, RemoteServiceDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildPrivilegeLink(final PrivilegeDto privilege) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = Collections.singletonMap(PrivilegeResource.PRIVILEGE, privilege.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(PrivilegeResource.class, REL_SELF, params, PrivilegeDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildPrivilegeListLink(final PrivilegeDto privilege) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = Collections.singletonMap(PrivilegeResource.PRIVILEGE, privilege.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(PrivilegeResource.class, "privilege", params, PrivilegeDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildRoleLinks(final RoleDto role) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = Collections.singletonMap(RoleResource.ROLE, role.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(RoleResource.class, REL_EDIT, params, RoleDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(RoleResource.class, RoleResource.ROLE_ACTION_GET_PRIVILEGES_PATH, PrivilegeResource.PRIVILEGES, params, PrivilegesDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildRoleLinks(final Integer enterpriseId, final RoleDto role) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); params.put(RoleResource.ROLE, role.getId().toString()); links.add(builder.buildRestLink(RoleResource.class, REL_EDIT, params, RoleDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(RoleResource.class, RoleResource.ROLE_ACTION_GET_PRIVILEGES_PATH, PrivilegeResource.PRIVILEGES, params, RoleDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildEnterpriseLinks(final EnterpriseDto enterprise) { Map<String, String> params = Collections.singletonMap(EnterpriseResource.ENTERPRISE, enterprise.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); return buildEnterpriseLinks(builder, params); } protected List<RESTLink> buildEnterpriseLinks(final AbiquoLinkBuilder builder, final Map<String, String> params) { List<RESTLink> links = new ArrayList<RESTLink>(); links.add(builder.buildRestLink(EnterpriseResource.class, REL_EDIT, params, EnterpriseDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(UsersResource.class, UsersResource.USERS_PATH, params, UsersDto.BASE_MEDIA_TYPE)); // apps library links.add(builder.buildRestLink(TemplateDefinitionListsResource.class, TemplateDefinitionListsResource.TEMPLATE_DEFINITION_LISTS_PATH, params, TemplateDefinitionListsDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(TemplateDefinitionsResource.class, TemplateDefinitionsResource.TEMPLATE_DEFINITIONS_PATH, params, TemplateDefinitionsDto.BASE_MEDIA_TYPE)); // action get virtual machines by enterprise links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE_ACTION_GET_VIRTUALMACHINES_PATH, VirtualMachinesResource.VIRTUAL_MACHINES_PATH, params, VirtualMachinesDto.BASE_MEDIA_TYPE)); // action get virtual appliances by enterprise links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE_ACTION_GET_VIRTUALAPPLIANCES_PATH, VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH, params, VirtualAppliancesDto.MEDIA_TYPE)); // action get virtual appliances by enterprise links.add(builder.buildRelLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE_ACTION_GET_VIRTUALAPPLIANCES_PATH, VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH, params, VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH)); // action get virtual appliances by enterprise links.add(builder.buildRelLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE_ACTION_GET_VIRTUALAPPLIANCES_PATH, VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH, params, VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH)); // action get ips by enterprise links.add(builder.buildRelLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE_ACTION_GET_IPS_PATH, IpAddressesResource.IP_ADDRESSES, params, IpAddressesResource.IP_ADDRESSES)); // action get virtual datacenters by enterprise links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE_ACTION_GET_VIRTUALDATACENTERS_PATH, VirtualDatacentersResource.VIRTUAL_DATACENTERS_PATH, params, VirtualDatacentersDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(EnterpriseResource.class, DatacenterRepositoriesResource.DATACENTER_REPOSITORIES_PATH, DatacenterRepositoriesResource.DATACENTER_REPOSITORIES_PATH, params)); return links; } @Override public List<RESTLink> buildEnterprisePropertiesLinks(final Integer enterpriseId, final EnterprisePropertiesDto enterpriseProperties) { return null; } @Override public List<RESTLink> buildUserLinks(final Integer enterpriseId, final Integer roleId, final UserDto user) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); params.put(RoleResource.ROLE, roleId.toString()); links.add(builder.buildRestLink(RoleResource.class, RoleResource.ROLE, params, RoleDto.BASE_MEDIA_TYPE)); params.put(UserResource.USER, user.getId().toString()); links.add(builder.buildRestLink(UserResource.class, REL_EDIT, params, UserDto.BASE_MEDIA_TYPE)); // virtual machines links.add(builder.buildRestLink(UserResource.class, UserResource.USER_ACTION_GET_VIRTUALMACHINES_PATH, VirtualMachinesResource.VIRTUAL_MACHINES_PATH, params, VirtualMachinesDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildStoragePoolLinks(final Integer datacenterId, final Integer deviceId, final Integer tierId, final String poolId) { return null; } @Override public List<RESTLink> buildTemplateDefinitionListLinks(final Integer enterpriseId, final TemplateDefinitionListDto templateDefinitionList) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, String.valueOf(enterpriseId)); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); params.put(TemplateDefinitionListResource.TEMPLATE_DEFINITION_LIST, templateDefinitionList .getId().toString()); links.add(builder.buildRestLink(TemplateDefinitionListResource.class, REL_EDIT, params, TemplateDefinitionListDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(TemplateDefinitionListResource.class, TemplateDefinitionListResource.TEMPLATE_DEFINITION_LIST_REPOSITORY_STATUS_PATH, TemplateDefinitionListResource.TEMPLATE_DEFINITION_LIST_REPOSITORY_STATUS_REL, params, TemplatesStateDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildTemplateDefinitionLinks(final Integer enterpriseId, final TemplateDefinitionDto templateDefinition, final Category category) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, String.valueOf(enterpriseId)); if (category != null) { params.put(CategoryResource.CATEGORY, String.valueOf(category.getId())); } AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); if (category != null) { links .add(builder.buildRestLink(CategoryResource.class, null, CategoryResource.CATEGORY, category.getName(), params, CategoryDto.BASE_MEDIA_TYPE)); } params.put(TemplateDefinitionResource.TEMPLATE_DEFINITION, templateDefinition.getId() .toString()); links.add(builder.buildRestLink(TemplateDefinitionResource.class, REL_EDIT, params, TemplateDefinitionDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildPrivateNetworkLinks(final Integer virtualDatacenterId, final VLANNetworkDto network) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, virtualDatacenterId.toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.VIRTUAL_DATACENTER, params, VirtualDatacenterDto.BASE_MEDIA_TYPE)); params.put(PrivateNetworkResource.PRIVATE_NETWORK, network.getId().toString()); links.add(builder.buildRestLink(PrivateNetworkResource.class, REL_EDIT, params, VLANNetworkDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(IpAddressesResource.class, IpAddressesResource.IP_ADDRESSES, params, IpPoolManagementDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildPublicNetworkLinks(final Integer datacenterId, final VLANNetwork network) { return null; } @Override public List<RESTLink> buildPublicNetworksLinks(final Integer datacenterId) { return null; } @Override public List<RESTLink> buildVirtualDatacenterLinks(final VirtualDatacenter vdc, final Integer datacenterId, final Integer enterpriseId) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdc.getId().toString()); params.put(DatacenterResource.DATACENTER, datacenterId.toString()); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); params.put(PrivateNetworkResource.PRIVATE_NETWORK, vdc.getDefaultVlan().getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualDatacenterResource.class, REL_EDIT, params, VirtualDatacenterDto.BASE_MEDIA_TYPE)); links .add(builder.buildRestLink(PrivateNetworksResource.class, PrivateNetworksResource.PRIVATE_NETWORKS_PATH, params, VLANNetworksDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.DATACENTER, params, DatacenterDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualAppliancesResource.class, VirtualAppliancesResource.VIRTUAL_APPLIANCES_PATH, params, VirtualAppliancesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(PrivateNetworkResource.class, VirtualDatacenterResource.DEFAULT_NETWORK_REL, params, VLANNetworkDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.VIRTUAL_DATACENTER_GET_IPS_PATH, VirtualDatacenterResource.VIRTUAL_DATACENTER_GET_IPS_REL, params, IpPoolManagementDto.BASE_MEDIA_TYPE)); RESTLink getVlanLink = builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.DEFAULT_VLAN_PATH, VirtualDatacenterResource.DEFAULT_VLAN_REL, params, VLANNetworkDto.BASE_MEDIA_TYPE); getVlanLink.setTitle("GET"); RESTLink setVlanLink = builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.DEFAULT_VLAN_PATH, VirtualDatacenterResource.DEFAULT_VLAN_REL, params, LinksDto.BASE_MEDIA_TYPE); setVlanLink.setTitle("PUT"); links.add(getVlanLink); links.add(setVlanLink); return links; } @Override public List<RESTLink> buildVirtualApplianceLinks(final VirtualApplianceDto dto, final Integer vdcId, final Integer enterpriseId) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, dto.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualApplianceResource.class, REL_EDIT, params, VirtualApplianceDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.VIRTUAL_DATACENTER, params, VirtualDatacenterDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachinesResource.class, VirtualMachinesResource.VIRTUAL_MACHINES_PATH, params, VirtualMachinesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_STATE_REL, VirtualApplianceResource.VIRTUAL_APPLIANCE_STATE_REL, params, VirtualApplianceStateDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_GET_IPS_PATH, IpAddressesResource.IP_ADDRESSES, params, IpPoolManagementDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_UNDEPLOY_PATH, VirtualApplianceResource.VIRTUAL_APPLIANCE_UNDEPLOY_REL, params, AcceptedRequestDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_DEPLOY_PATH, VirtualApplianceResource.VIRTUAL_APPLIANCE_DEPLOY_REL, params, AcceptedRequestDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_PRICE_PATH, VirtualApplianceResource.VIRTUAL_APPLIANCE_PRICE_REL, params, MediaType.TEXT_PLAIN)); return links; } @Override public List<RESTLink> buildDatastoreLinks(final Integer datacenterId, final Integer rackId, final Integer machineId, final Datastore datastore) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(DatacenterResource.DATACENTER, datacenterId.toString()); params.put(RackResource.RACK, rackId.toString()); params.put(MachineResource.MACHINE, machineId.toString()); params.put(DatastoreResource.DATASTORE, datastore.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(DatastoreResource.class, REL_EDIT, params, DatastoreDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildVirtualMachineAdminLinks(final Integer datacenterId, final Integer rackId, final Integer machineId, final Integer enterpriseId, final Integer userId, final HypervisorType machineType, final VirtualAppliance vapp, final Integer vmId) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); // Only build the machine hypervisor link if the hypervisor is deployed if (datacenterId != null && rackId != null && machineId != null) { params.put(DatacenterResource.DATACENTER, datacenterId.toString()); params.put(RackResource.RACK, rackId.toString()); params.put(MachineResource.MACHINE, machineId.toString()); RESTLink machineLink = builder.buildRestLink(MachineResource.class, MachineResource.MACHINE, params, MachineDto.BASE_MEDIA_TYPE); // Title is used in the UI machineLink.setTitle(machineType.name()); links.add(machineLink); } if (vapp != null) { params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vapp.getVirtualDatacenter() .getId().toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vapp.getId().toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, vmId.toString()); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE, params, VirtualMachineDto.BASE_MEDIA_TYPE)); } if (enterpriseId != null) { params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); } if (userId != null) { params = new HashMap<String, String>(); params.put(UserResource.USER, userId.toString()); links.add(builder.buildRestLink(UserResource.class, UserResource.USER, params, UserDto.BASE_MEDIA_TYPE)); } return links; } @Override public List<RESTLink> buildSystemPropertyLinks(final SystemPropertyDto systemProperty) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(SystemPropertyResource.SYSTEM_PROPERTY, systemProperty.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(SystemPropertyResource.class, REL_EDIT, params, SystemPropertyDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildVirtualMachineCloudLinks(final Integer vdcId, final Integer vappId, final VirtualMachine vm, final boolean chefEnabled, final Integer[] volumeIds, final Integer[] diskIds, final List<IpPoolManagement> ips) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vappId.toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, vm.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualMachineNetworkConfigurationResource.class, VirtualMachineNetworkConfigurationResource.CONFIGURATION_PATH, VirtualMachineNetworkConfigurationResource.CONFIGURATION_PATH, params, VMNetworkConfigurationsDto.BASE_MEDIA_TYPE)); if (vm.getNetworkConfiguration() != null) { params.put(VirtualMachineNetworkConfigurationResource.CONFIGURATION, vm .getNetworkConfiguration().getId().toString()); links.add(builder.buildRestLink(VirtualMachineNetworkConfigurationResource.class, VirtualMachineNetworkConfigurationResource.CONFIGURATION_PATH + "/" + VirtualMachineNetworkConfigurationResource.CONFIGURATION_PARAM, VirtualMachineNetworkConfigurationResource.DEFAULT_CONFIGURATION, params, VMNetworkConfigurationDto.BASE_MEDIA_TYPE)); } links.add(builder.buildRestLink(VirtualMachineNetworkConfigurationResource.class, VirtualMachineNetworkConfigurationResource.NICS_PATH, VirtualMachineNetworkConfigurationResource.NICS_PATH, params, NicsDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineStorageConfigurationResource.class, VirtualMachineStorageConfigurationResource.DISKS_PATH, VirtualMachineStorageConfigurationResource.DISKS_PATH, params, DisksManagementDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_GET_IPS_PATH, IpAddressesResource.IP_ADDRESSES, params, IpsPoolManagementDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE_STATE_PATH, VirtualMachineResource.VIRTUAL_MACHINE_STATE_REL, params, VirtualMachineStateDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE_UNDEPLOY_PATH, VirtualMachineResource.VIRTUAL_MACHINE_ACTION_UNDEPLOY_REL, params, AcceptedRequestDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE_DEPLOY_PATH, VirtualMachineResource.VIRTUAL_MACHINE_ACTION_DEPLOY_REL, params, AcceptedRequestDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE_ACTION_RESET, VirtualMachineResource.VIRTUAL_MACHINE_ACTION_RESET_REL, params, AcceptedRequestDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE_ACTION_SNAPSHOT, VirtualMachineResource.VIRTUAL_MACHINE_ACTION_SNAPSHOT_REL, params, AcceptedRequestDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, TaskResourceUtils.TASKS_PATH, TaskResourceUtils.TASKS_REL, params, TasksDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, RESTBuilder.REL_EDIT, params, VirtualMachineDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildVirtualMachineCloudAdminLinks(final Integer vdcId, final Integer vappId, final VirtualMachine vm, final Integer datacenterId, final Integer rackId, final Integer machineId, final Integer enterpriseId, final Integer userId, final boolean chefEnabled, final Integer[] volumeIds, final Integer[] diskIds, final List<IpPoolManagement> ips, final HypervisorType vdcType, final VirtualAppliance vapp) { List<RESTLink> links = new ArrayList<RESTLink>(); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.addAll(buildVirtualMachineAdminLinks(datacenterId, rackId, machineId, enterpriseId, userId, vdcType, vapp, vm.getId())); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vappId.toString()); RESTLink vdcLink = builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.VIRTUAL_DATACENTER, params, VirtualDatacenterDto.BASE_MEDIA_TYPE); // Title is used in the UI vdcLink.setTitle(vdcType.name()); links.add(vdcLink); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE, params, VirtualApplianceDto.MEDIA_TYPE)); links.addAll(buildVirtualMachineCloudLinks(vdcId, vappId, vm, chefEnabled, volumeIds, diskIds, ips)); return links; } @Override public List<RESTLink> buildDatacenterRepositoryLinks(final Integer enterpriseId, final Integer dcId, final String dcName, final Integer repoId) { List<RESTLink> links = new ArrayList<RESTLink>(); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); Map<String, String> paramsDc = new HashMap<String, String>(); paramsDc.put(DatacenterResource.DATACENTER, dcId.toString()); RESTLink dclink = builder.buildRestLink(DatacenterResource.class, DatacenterResource.DATACENTER, paramsDc, DatacenterDto.BASE_MEDIA_TYPE); dclink.setTitle(dcName); links.add(dclink); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); params.put(DatacenterRepositoryResource.DATACENTER_REPOSITORY, repoId.toString()); links.add(builder.buildRestLink(DatacenterRepositoryResource.class, REL_EDIT, params, DatacenterRepositoryDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineTemplatesResource.class, VirtualMachineTemplatesResource.VIRTUAL_MACHINE_TEMPLATES_PATH, params, VirtualMachineTemplatesDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DatacenterRepositoryResource.class, DatacenterRepositoryResource.DATACENTER_REPOSITORY_REFRESH_PATH, "refresh", params)); return links; } protected List<RESTLink> buildVirtualMachineTemplateLinks(final Integer enterpriseId, final Integer dcId, final VirtualMachineTemplate vmtemplate, final VirtualMachineTemplate master, final AbiquoLinkBuilder builder) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> paramsDc = new HashMap<String, String>(); paramsDc.put(DatacenterResource.DATACENTER, dcId.toString()); links.add(builder.buildRestLink(DatacenterResource.class, DatacenterResource.DATACENTER, paramsDc, DatacenterDto.BASE_MEDIA_TYPE)); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); params.put(DatacenterRepositoryResource.DATACENTER_REPOSITORY, dcId.toString()); links.add(builder.buildRestLink(DatacenterRepositoryResource.class, DatacenterRepositoryResource.DATACENTER_REPOSITORY, params, DatacenterRepositoryDto.BASE_MEDIA_TYPE)); params.put(CategoryResource.CATEGORY, vmtemplate.getCategory().getId().toString()); RESTLink categoryLink = builder.buildRestLink(CategoryResource.class, CategoryResource.CATEGORY, params, CategoryDto.BASE_MEDIA_TYPE); categoryLink.setTitle(vmtemplate.getCategory().getName()); links.add(categoryLink); params.put(VirtualMachineTemplateResource.VIRTUAL_MACHINE_TEMPLATE, vmtemplate.getId() .toString()); RESTLink vmtemplateLink = builder.buildRestLink(VirtualMachineTemplateResource.class, REL_EDIT, params, VirtualMachineTemplateDto.BASE_MEDIA_TYPE); vmtemplateLink.setTitle(vmtemplate.getName()); links.add(vmtemplateLink); // TODO: How to build a link for an imported one?? if (master != null) { // Master's enterprise may differ from the current virtual machine template. // Datacenter repository id will be the same (the id of the datacenter) params.put(EnterpriseResource.ENTERPRISE, master.getEnterprise().getId().toString()); params.put(VirtualMachineTemplateResource.VIRTUAL_MACHINE_TEMPLATE, master.getId() .toString()); RESTLink masterLink = builder.buildRestLink(VirtualMachineTemplateResource.class, "master", params); masterLink.setTitle(master.getName()); links.add(masterLink); } return links; } @Override public List<RESTLink> buildVirtualMachineTemplateLinks(final Integer enterpriseId, final Integer dcId, final VirtualMachineTemplate template, final VirtualMachineTemplate master) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); return buildVirtualMachineTemplateLinks(enterpriseId, dcId, template, master, builder); } @Override public RESTLink buildVirtualMachineTemplateLink(final Integer enterpriseId, final Integer dcId, final Integer virtualMachineTemplateId) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); params.put(DatacenterRepositoryResource.DATACENTER_REPOSITORY, dcId.toString()); params.put(VirtualMachineTemplateResource.VIRTUAL_MACHINE_TEMPLATE, virtualMachineTemplateId.toString()); return builder.buildRestLink(VirtualMachineTemplateResource.class, VirtualMachineTemplateResource.VIRTUAL_MACHINE_TEMPLATE, params, VirtualMachineTemplateDto.BASE_MEDIA_TYPE); } @Override public List<RESTLink> buildPaggingLinks(final String absolutePath, final PagedList< ? > list) { List<RESTLink> links = new ArrayList<RESTLink>(); // If the list is empty, we don't return the links if (list.size() == 0) { return links; } // Add FIRST element links.add(new RESTLink(FIRST, absolutePath)); if (list.getCurrentElement() != 0) { // Previous using the page size avoiding to be less than 0. Integer previous = list.getCurrentElement() - list.getPageSize(); previous = previous > list.getTotalResults() ? list.getTotalResults() - 2 * list.getPageSize() : previous; previous = previous < 0 ? 0 : previous; links.add(new RESTLink(PREV, absolutePath + "?" + AbstractResource.START_WITH + "=" + previous)); } Integer next = list.getCurrentElement() + list.getPageSize(); if (next < list.getTotalResults()) { links.add(new RESTLink(NEXT, absolutePath + "?" + AbstractResource.START_WITH + "=" + next)); } Integer last = list.getTotalResults() - list.getPageSize(); if (last < 0) { last = 0; } links .add(new RESTLink(LAST, absolutePath + "?" + AbstractResource.START_WITH + "=" + last)); return links; } @Override public List<RESTLink> buildRasdLinks(final RasdManagement resource) { List<RESTLink> links = new ArrayList<RESTLink>(); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); Map<String, String> params = new HashMap<String, String>(); if (resource.getVirtualDatacenter() != null) { params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, resource .getVirtualDatacenter().getId().toString()); RESTLink vdcLink = builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.VIRTUAL_DATACENTER, params, VirtualDatacenterDto.BASE_MEDIA_TYPE); vdcLink.setTitle(resource.getVirtualDatacenter().getName()); links.add(vdcLink); if (resource.getVirtualAppliance() != null) { params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, resource .getVirtualAppliance().getId().toString()); RESTLink vappLink = builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE, params, VirtualApplianceDto.BASE_MEDIA_TYPE); vappLink.setTitle(resource.getVirtualAppliance().getName()); links.add(vappLink); if (resource.getVirtualMachine() != null) { params.put(VirtualMachineResource.VIRTUAL_MACHINE, resource.getVirtualMachine() .getId().toString()); RESTLink vmLink = builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE, params, VirtualMachineDto.BASE_MEDIA_TYPE); vmLink.setTitle(resource.getVirtualMachine().getName()); links.add(vmLink); } } } return links; } @Override public RESTLink buildEnterpriseLink(final Integer enterpriseId) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); return buildEnterpriseLink(enterpriseId, builder); } protected RESTLink buildEnterpriseLink(final Integer enterpriseId, final AbiquoLinkBuilder builder) { Map<String, String> params = Collections.singletonMap(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); return builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE); } @Override public List<RESTLink> buildIpRasdLinks(final IpPoolManagement ip) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, ip.getVirtualDatacenter().getId() .toString()); params.put(PrivateNetworkResource.PRIVATE_NETWORK, ip.getVlanNetwork().getId().toString()); params.put(IpAddressesResource.IP_ADDRESS, ip.getId().toString()); List<RESTLink> links = new ArrayList<RESTLink>(); RESTLink link = builder.buildRestLink(PrivateNetworkResource.class, PrivateNetworkResource.PRIVATE_NETWORK, params); link.setTitle(ip.getVlanNetwork().getName()); RESTLink ipLink = builder.buildRestLink(IpAddressesResource.class, IpAddressesResource.IP_ADDRESS_PARAM, REL_SELF, params); ipLink.setTitle(VirtualMachineNetworkConfigurationResource.PRIVATE_IP); links.add(link); links.add(ipLink); return links; } @Override public List<RESTLink> buildLicenseLinks(final LicenseDto license) { return null; } @Override public List<RESTLink> buildLimitsLinks(final Enterprise enterprise, final Datacenter datacenter, final DatacenterLimitsDto dto) { return null; } @Override public List<RESTLink> buildTierLinks(final Integer datacenterId, final Integer tierId) { return null; } @Override public List<RESTLink> buildStorageDeviceLinks(final Integer datacenterId, final Integer deviceId) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildVolumeInfrastructureLinks(final VolumeManagement volume) { return null; } @Override public List<RESTLink> buildEnterpriseExclusionRuleLinks( final EnterpriseExclusionRuleDto enterpriseExclusionDto, final EnterpriseExclusionRule enterpriseExclusion) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildVolumeCloudLinks(final VolumeManagement volume) { return null; } @Override public List<RESTLink> buildMachineLoadRuleLinks(final MachineLoadRuleDto mlrDto, final MachineLoadRule mlr) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildRoleLdapLinks(final Integer roleId, final RoleLdapDto roleLdap) { return null; } @Override public List<RESTLink> buildFitPolicyRuleLinks(final FitPolicyRuleDto fprDto, final FitPolicyRule fpr) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildVirtualApplianceStateLinks(final VirtualApplianceStateDto dto, final Integer id, final Integer vdcId) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, id.toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualDatacenterResource.class, "parent", params, VirtualDatacenterDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualApplianceResource.class, VirtualApplianceResource.VIRTUAL_APPLIANCE_STATE_REL, REL_EDIT, params, VirtualApplianceDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildCurrencyLinks(final CurrencyDto currencyDto, final Currency currency) { return null; } @Override public List<RESTLink> buildPublicIpLinks(final Integer datacenterId, final IpPoolManagement ip) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildPublicIpRasdLinks(final Integer vdcId, final IpPoolManagement ip) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildPricingTemplateLinks(final Integer currencyId, final PricingTemplateDto pricingTemplate) { return null; } @Override public List<RESTLink> buildCostCodeLinks(final Integer costCodeId) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildCostCodeCurrencyLinks(final CostCode costCode, final Currency currency, final CostCodeCurrencyDto dto) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildPricingCostCodeLinks(final CostCode costCode, final PricingTemplate pricingTemplate, final PricingCostCodeDto dto) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildPricingTierLinks(final Tier tier, final PricingTemplate pricingTemplate, final PricingTierDto dto) { // TODO Auto-generated method stub return null; } @Override public List<RESTLink> buildVMNetworkConfigurationLinks(final Integer vdcId, final Integer vappId, final Integer vmId, final VMNetworkConfiguration config) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vappId.toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, vmId.toString()); params.put(VirtualMachineNetworkConfigurationResource.CONFIGURATION, config.getId() .toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualMachineNetworkConfigurationResource.class, VirtualMachineNetworkConfigurationResource.CONFIGURATION_PATH + "/" + VirtualMachineNetworkConfigurationResource.CONFIGURATION_PARAM, REL_EDIT, params, VMNetworkConfigurationDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildVirtualMachineStateLinks(final Integer vappId, final Integer vdcId, final Integer vmId) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vappId.toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, vmId.toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualMachineResource.class, "parent", params, VirtualMachineDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(VirtualMachineResource.class, VirtualMachineResource.VIRTUAL_MACHINE_STATE_PATH, REL_EDIT, params, VirtualMachineStateDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildNICLinks(final IpPoolManagement ip) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, ip.getVirtualDatacenter().getId() .toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, ip.getVirtualAppliance().getId() .toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, ip.getVirtualMachine().getId() .toString()); params.put(VirtualMachineNetworkConfigurationResource.NIC, ip.getId().toString()); params.put(IpAddressesResource.IP_ADDRESS, ip.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualMachineNetworkConfigurationResource.class, VirtualMachineNetworkConfigurationResource.NICS_PATH + "/" + VirtualMachineNetworkConfigurationResource.NIC_PARAM, REL_EDIT, params, NicDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(IpAddressesResource.class, IpAddressesResource.IP_ADDRESS_PARAM, IpAddressesResource.IP_ADDRESS_PARAM, params, IpPoolManagementDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildExternalNetworkLinks(final Integer enterpriseId, final VLANNetworkDto dto) { return null; } @Override public List<RESTLink> buildExternalNetworkByDatacenterLinks(final Integer enterpriseId, final Integer limitId, final VLANNetwork network) { return null; } @Override public List<RESTLink> buildExternalNetworksByDatacenterLinks(final Integer enterpriseId, final Integer limitId) { return null; } @Override public List<RESTLink> buildExternalIpRasdLinks(final Integer entId, final Integer limitId, final IpPoolManagement ip) { return null; } @Override public List<RESTLink> buildDiskLinks(final DiskManagement disk, final Integer vdcId, final Integer vappId) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdcId.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vappId.toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, disk.getVirtualMachine().getId() .toString()); params.put(VirtualMachineStorageConfigurationResource.DISK, String.valueOf(disk.getId())); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualMachineStorageConfigurationResource.class, VirtualMachineStorageConfigurationResource.DISKS_PATH + "/" + VirtualMachineStorageConfigurationResource.DISK_PARAM, REL_EDIT, params, DiskManagementDto.BASE_MEDIA_TYPE)); return links; } @Override public List<RESTLink> buildCategoryLinks(final Category category) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(CategoryResource.CATEGORY, category.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); if (category.getEnterprise() != null) { params.put(EnterpriseResource.ENTERPRISE, category.getEnterprise().getId().toString()); links.add(builder.buildRestLink(EnterpriseResource.class, EnterpriseResource.ENTERPRISE, params, EnterpriseDto.BASE_MEDIA_TYPE)); } RESTLink editLink = builder.buildRestLink(CategoryResource.class, REL_EDIT, params, CategoryDto.BASE_MEDIA_TYPE); links.add(editLink); return links; } @Override public List<RESTLink> buildVirtualDatacenterDiskLinks(final DiskManagement disk) { List<RESTLink> links = new ArrayList<RESTLink>(); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, disk.getVirtualDatacenter() .getId().toString()); params.put(DiskResource.DISK, disk.getId().toString()); AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); links.add(builder.buildRestLink(VirtualDatacenterResource.class, VirtualDatacenterResource.VIRTUAL_DATACENTER, params, VirtualDatacenterDto.BASE_MEDIA_TYPE)); links.add(builder.buildRestLink(DiskResource.class, REL_EDIT, params, DiskManagementDto.BASE_MEDIA_TYPE)); return links; } @Override public RESTLink buildUserLink(final Integer enterpriseId, final Integer userId) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); return buildEnterpriseLink(enterpriseId, builder); } protected RESTLink buildUserLink(final Integer enterpriseId, final Integer userId, final AbiquoLinkBuilder builder) { Map<String, String> params = new HashMap<String, String>(); params.put(EnterpriseResource.ENTERPRISE, enterpriseId.toString()); params.put(UserResource.USER, userId.toString()); return builder.buildRestLink(UserResource.class, UserResource.USER, params, UserDto.BASE_MEDIA_TYPE); } @Override public List<RESTLink> buildVirtualDatacenterTierLinks(final Integer virtualDatacenterId, final Integer id) { return null; } @Override public RESTLink buildMovedVolumeLinks(final VolumeManagement movedVolume) { return null; } @Override public RESTLink buildVirtualMachineLink(final Integer vdc, final Integer vapp, final Integer vm) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, vdc.toString()); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, vapp.toString()); params.put(VirtualMachineResource.VIRTUAL_MACHINE, vm.toString()); return builder.buildRestLink(VirtualMachineResource.class, "", params); } public static RESTLink searchLinkInList(final String rel, final List<RESTLink> list) { for (RESTLink link : list) { if (link.getRel() != null) { if (link.getRel().equals(rel)) { return link; } } } return null; } public static void deleteLinkFromList(final String rel, final List<RESTLink> list) { RESTLink link = searchLinkInList(rel, list); if (link != null) { list.remove(link); } } @Override public RESTLink buildVirtualMachineTaskLink(final Integer vdc, final Integer vapp, final Integer vm, final String taskId) { AbiquoLinkBuilder builder = AbiquoLinkBuilder.createBuilder(linkProcessor); Map<String, String> params = new HashMap<String, String>(); params.put(VirtualDatacenterResource.VIRTUAL_DATACENTER, String.valueOf(vdc)); params.put(VirtualApplianceResource.VIRTUAL_APPLIANCE, String.valueOf(vapp)); params.put(VirtualMachineResource.VIRTUAL_MACHINE, String.valueOf(vm)); params.put(TaskResourceUtils.TASK, taskId); return builder.buildRestLink(VirtualMachineResource.class, TaskResourceUtils.TASK_PATH, TaskResourceUtils.SELF_REL, params, TaskDto.MEDIA_TYPE); } }