/******************************************************************************* * Copyright (c) 2016 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Pivotal, Inc. - initial API and implementation *******************************************************************************/ package org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.v1; import java.util.List; import java.util.Map; import java.util.UUID; import org.cloudfoundry.client.lib.domain.CloudApplication; import org.cloudfoundry.client.lib.domain.CloudDomain; import org.cloudfoundry.client.lib.domain.CloudOrganization; import org.cloudfoundry.client.lib.domain.CloudService; import org.cloudfoundry.client.lib.domain.CloudServiceInstance; import org.cloudfoundry.client.lib.domain.CloudSpace; import org.cloudfoundry.client.lib.domain.CloudStack; import org.cloudfoundry.client.lib.domain.InstanceState; import org.cloudfoundry.client.lib.domain.InstanceStats; import org.cloudfoundry.client.lib.domain.Staging; import org.springframework.ide.eclipse.boot.core.BootActivator; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFAppState; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFApplication; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFBuildpack; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFCloudDomain; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFInstanceState; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFInstanceStats; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFOrganization; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFServiceInstance; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFSpace; import org.springframework.ide.eclipse.boot.dash.cloudfoundry.client.CFStack; import org.springsource.ide.eclipse.commons.cloudfoundry.client.diego.BuildpackSupport.Buildpack; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; /** * Static helper methods to wrap data from the cf clients into our own types (thereby avoiding a direct dependency * on types from the client library). * * @author Kris De Volder */ public class CFWrapping { //TODO: 'wrapifying' everything is a work in progress. Only things we have needed to mock so // far have been 'wrapified'. public static CFOrganization wrap(final CloudOrganization organization) { if (organization!=null) { return new CFOrganization() { @Override public String getName() { return organization.getName(); } @Override public UUID getGuid() { return organization.getMeta().getGuid(); } }; } return null; } public static List<CFBuildpack> wrapBuildpacks(List<Buildpack> bps) { if (bps!=null) { Builder<CFBuildpack> builder = ImmutableList.builder(); for (Buildpack d : bps) { builder.add(wrap(d)); } return builder.build(); } return null; } public static List<CFCloudDomain> wrapDomains(List<CloudDomain> domains) { if (domains!=null) { Builder<CFCloudDomain> builder = ImmutableList.builder(); for (CloudDomain d : domains) { builder.add(wrap(d)); } return builder.build(); } return null; } public static List<CFSpace> wrapSpaces(List<CloudSpace> spaces) { if (spaces!=null) { Builder<CFSpace> builder = ImmutableList.builder(); for (CloudSpace s : spaces) { builder.add(wrap(s)); } return builder.build(); } return null; } public static List<CFStack> wrapStacks(List<CloudStack> stacks) { if (stacks!=null) { Builder<CFStack> builder = ImmutableList.builder(); for (CloudStack s : stacks) { builder.add(wrap(s)); } return builder.build(); } return null; } // public static List<CFApplication> wrapApps(List<CloudApplication> apps) { // if (apps!=null) { // Builder<CFApplication> builder = ImmutableList.builder(); // for (CloudApplication a : apps) { // builder.add(wrap(a)); // } // return builder.build(); // } // return null; // } // public static CFApplication wrap(final CloudApplication a) { // if (a!=null) { // return new CFApplicationWrapper(a); // } // return null; // } // public static CFApplicationDetail wrapDetails(CloudApplication a) { // if (a!=null) { // return new CFApplicationDetailWrapper(a); // } // return null; // } // private static class CFApplicationWrapper implements CFApplication { // private final CloudApplication a; // // public CFApplicationWrapper(CloudApplication a) { // this.a = a; // } // // @Override // public String getName() { // return a.getName(); // } // // private CloudApplication unwrap() { // return a; // } // @Override // public boolean equals(Object obj) { // if (obj instanceof CFApplicationWrapper) { // return ((CFApplicationWrapper)obj).unwrap().equals(unwrap()); // } // return false; // } // // @Override // public int hashCode() { // return a.hashCode(); // } // // @Override // public int getInstances() { // return a.getInstances(); // } // // @Override // public int getRunningInstances() { // return a.getRunningInstances(); // } // // @Override // public Map<String, String> getEnvAsMap() { // return a.getEnvAsMap(); // } // // @Override // public int getMemory() { // return a.getMemory(); // } // // @Override // public UUID getGuid() { // return a.getMeta().getGuid(); // } // // @Override // public List<String> getServices() { // return a.getServices(); // } // // @Override // public String getBuildpackUrl() { // Staging s = a.getStaging(); // if (s!=null) { // return s.getBuildpackUrl(); // } // return null; // } // // @Override // public List<String> getUris() { // return a.getUris(); // } // // @Override // public Integer getTimeout() { // Staging s = a.getStaging(); // if (s!=null) { // return s.getHealthCheckTimeout(); // } // return null; // } // // @Override // public String getCommand() { // Staging s = a.getStaging(); // if (s!=null) { // return s.getCommand(); // } // return null; // } // // @Override // public String getStack() { // Staging s = a.getStaging(); // if (s!=null) { // return s.getStack(); // } // return null; // } // // @Override // public CFAppState getState() { // return CFAppState.valueOf(a.getState().toString()); // } // // @Override // public int getDiskQuota() { // return a.getDiskQuota(); // } // // @Override // public String getHealthCheckType() { // return a.get; // } // } // public static CloudApplication unwrap(final CFApplication a) { // if (a!=null) { // return ((CFApplicationWrapper)a).unwrap(); // } // return null; // } // public static List<CloudApplication> unwrapApps(final List<CFApplication> apps) { // if (apps!=null) { // Builder<CloudApplication> builder = ImmutableList.builder(); // for (CFApplication a : apps) { // builder.add(unwrap(a)); // } // return builder.build(); // } // return null; // } // private static class CFApplicationDetailWrapper extends CFApplicationWrapper implements CFApplicationDetail { // public CFApplicationDetailWrapper(CloudApplication a) { // super(a); // } // } public static CFStack wrap(final CloudStack s) { if (s!=null) { return new CFStack() { @Override public String getName() { return s.getName(); } }; } return null; } private static CFBuildpack wrap(final Buildpack b) { if (b!=null) { return new CFBuildpack() { @Override public String getName() { return b.getName(); } }; } return null; } public static CFCloudDomain wrap(final CloudDomain d) { if (d!=null) { return new CFCloudDomain() { @Override public String getName() { return d.getName(); } }; } return null; } public static CFSpace wrap(final CloudSpace s) { if (s!=null) { return new CFSpace() { private final CFOrganization org = wrap(s.getOrganization()); @Override public String toString() { return getName() + "@" + getOrganization().getName(); } @Override public String getName() { return s.getName(); } @Override public CFOrganization getOrganization() { return org; } @Override public UUID getGuid() { return s.getMeta().getGuid(); } }; } return null; } // public static List<CloudAppInstances> wrap(Map<CloudApplication, ApplicationStats> stats) { // if (stats!=null) { // ImmutableList.Builder<CloudAppInstances> builder = ImmutableList.builder(); // for (Entry<CloudApplication, ApplicationStats> e : stats.entrySet()) { // builder.add(new CloudAppInstances(wrap(e.getKey()), wrap(e.getValue()))); // } // return builder.build(); // } // return null; // } // public static List<CFInstanceStats> wrap(ApplicationStats stats) { // return new CFApplicationStats() { // @Override // public List<CFInstanceStats> getRecords() { // return wrapInstanceStats(stats.getRecords()); // } // // }; // } public static List<CFInstanceStats> wrapInstanceStats(List<InstanceStats> records) { if (records!=null) { Builder<CFInstanceStats> builder = ImmutableList.builder(); for (InstanceStats r : records) { builder.add(wrap(r)); } return builder.build(); } return null; } public static CFInstanceStats wrap(InstanceStats r) { return new CFInstanceStats() { @Override public CFInstanceState getState() { return wrap(r.getState()); } }; } public static CFInstanceState wrap(InstanceState state) { try { return CFInstanceState.valueOf(state.toString()); } catch (Exception e) { BootActivator.log(e); return CFInstanceState.UNKNOWN; } } }