/** * 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.impl; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import org.apache.wink.client.ClientResponse; import org.apache.wink.client.Resource; import com.abiquo.abiserver.commands.stub.AbstractAPIStub; import com.abiquo.abiserver.commands.stub.DatacenterRepositoryResourceStub; import com.abiquo.abiserver.pojo.infrastructure.DataCenter; import com.abiquo.abiserver.pojo.result.DataResult; import com.abiquo.abiserver.pojo.service.RemoteServiceType; import com.abiquo.abiserver.pojo.virtualimage.Repository; import com.abiquo.model.rest.RESTLink; import com.abiquo.server.core.appslibrary.DatacenterRepositoryDto; import com.abiquo.server.core.enterprise.DatacenterLimitsDto; import com.abiquo.server.core.enterprise.DatacentersLimitsDto; public class DatacenterRepositoryResourceStubImpl extends AbstractAPIStub implements DatacenterRepositoryResourceStub { public final static String DATACENTER_REPOSITORY_GET_REFRESH_QUERY_PARAM = "refresh"; public final static String DATACENTER_REPOSITORY_GET_USAGE_QUERY_PARAM = "usage"; @Override public DataResult<Repository> getRepository(final Integer idDatacenter, final Integer idEnterprise, final boolean refresh, final boolean includeUsage) { DataResult<Repository> result = new DataResult<Repository>(); String uri = createDatacenterRepositoryLink(idEnterprise, idDatacenter); Resource repositoryResource = resource(uri, DatacenterRepositoryDto.MEDIA_TYPE).// queryParam(DATACENTER_REPOSITORY_GET_REFRESH_QUERY_PARAM, String.valueOf(refresh)).// queryParam(DATACENTER_REPOSITORY_GET_USAGE_QUERY_PARAM, String.valueOf(includeUsage)); ClientResponse response = repositoryResource.get(); if (response.getStatusCode() / 200 == 1) { DatacenterRepositoryDto repo = response.getEntity(DatacenterRepositoryDto.class); result.setSuccess(true); result.setData(transformToFlex(repo)); } else { populateErrors(response, result, "getRepository", "You do not have sufficient privileges to view the contents of the appliance library"); } return result; } @Override public DataResult<ArrayList<DataCenter>> getAllowedRepositories(final Integer idEnterprise) { DataResult<ArrayList<DataCenter>> result = new DataResult<ArrayList<DataCenter>>(); // String uri = createDatacenterRepositoriesLink(idEnterprise); String uri = createEnterpriseLimitsByDatacenterLink(idEnterprise); ClientResponse response = resource(uri, DatacentersLimitsDto.MEDIA_TYPE).get(); if (response.getStatusCode() / 200 == 1) { DatacentersLimitsDto repos = response.getEntity(DatacentersLimitsDto.class); result.setSuccess(true); result.setData(transformToFlex(repos)); } else { populateErrors(response, result, "getAllowedRepositories"); } return result; } private ArrayList<DataCenter> transformToFlex(final DatacentersLimitsDto limits) { ArrayList<DataCenter> datacenters = new ArrayList<DataCenter>(); for (DatacenterLimitsDto limit : limits.getCollection()) { datacenters.add(transformToFlexDc(limit)); } return datacenters; } private DataCenter transformToFlexDc(final DatacenterLimitsDto limit) { final Integer idDataCenter = limit.getIdFromLink("datacenter"); DataCenter datacenter = new DataCenter(); datacenter.setId(idDataCenter); datacenter.setName(limit.searchLink("datacenter").getTitle()); // we only need the appliance manager address RESTLink amRESTLink = limit.searchLink("applianceManagerRepositoryUri"); if (amRESTLink != null) { try { URI amLink = new URI(amRESTLink.getHref()); com.abiquo.abiserver.pojo.service.RemoteService am = new com.abiquo.abiserver.pojo.service.RemoteService(); am.setIdDataCenter(idDataCenter); am .setRemoteServiceType(new RemoteServiceType(com.abiquo.model.enumerator.RemoteServiceType.APPLIANCE_MANAGER)); am.setUri(amLink.toASCIIString()); am.setDomainName(amLink.getHost()); am.setPort(amLink.getPort()); am.setProtocol("http://"); ArrayList<com.abiquo.abiserver.pojo.service.RemoteService> rss = new ArrayList<com.abiquo.abiserver.pojo.service.RemoteService>(); rss.add(am); datacenter.setRemoteServices(rss); } catch (URISyntaxException e) { e.printStackTrace(); } } return datacenter; } public static void main(final String[] args) { final String tal = "http://..../am/ereos/1"; System.err.println("http://..../am/ereos/1".substring(0, tal.indexOf("/am/") + 4)); } private Repository transformToFlex(final DatacenterRepositoryDto repo) { Repository r = new Repository(); DataCenter datacenter = new DataCenter(); datacenter.setId(repo.getIdFromLink("datacenter")); r.setDatacenter(datacenter); r.setId(repo.getId()); r.setName(repo.getName()); r.setRepositoryCapacityMb(repo.getRepositoryCapacityMb()); r.setRepositoryRemainingMb(repo.getRepositoryRemainingMb()); return r; } }