Example usage for org.apache.commons.lang.builder ToStringBuilder reflectionToString

List of usage examples for org.apache.commons.lang.builder ToStringBuilder reflectionToString

Introduction

In this page you can find the example usage for org.apache.commons.lang.builder ToStringBuilder reflectionToString.

Prototype

public static String reflectionToString(Object object, ToStringStyle style) 

Source Link

Document

Forwards to ReflectionToStringBuilder.

Usage

From source file:com.gemini.provision.security.openstack.SecurityProviderOpenStackImpl.java

/**
 *
 * @param tenant//from   www .  jav a  2  s . c o  m
 * @param env
 * @param securityGroup - assumes on the name is available in the object
 * @return
 *
 * Calls open stack to retrieve information about the security group.
 * Typically used when only a security group name is available and the
 * caller wants to get rest of the information
 */
@Override
public ProvisioningProviderResponseType getSecurityGroup(GeminiTenant tenant, GeminiEnvironment env,
        GeminiSecurityGroup securityGroup) {
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_AUTH_FAILURE;
    }

    SecurityGroup osSecGrp = null;
    try {
        List<? extends SecurityGroup> osSecGrps = os.networking().securitygroup().list();
        osSecGrp = osSecGrps.stream().filter(osg -> osg.getName().equals(securityGroup.getName())).findFirst()
                .get();
    } catch (NullPointerException | ClientResponseException ex) {
        Logger.error(
                "Cloud Exception: {}\nCould not retrieve security group information in OpenStack. tenant: {} env: {} security group: {}",
                ex.toString(), tenant.getName(), env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.CLOUD_EXCEPTION;
    } catch (NoSuchElementException ex) {
        //security group was not found, so return an error 
        Logger.error(
                "Security Group {} not found for tenant: {} env: {} Could not retrieve security group information in OpenStack. tenant: {} env: {} security group: {}",
                securityGroup.getName(), tenant.getName(), env.getName());
        return ProvisioningProviderResponseType.OBJECT_NOT_FOUND;
    }

    //copy the basic stuff
    securityGroup.setCloudID(osSecGrp.getId());
    securityGroup.setProvisioned(true);
    securityGroup.setName(osSecGrp.getName());
    securityGroup.setDescription(osSecGrp.getDescription());

    //now the rules
    List<? extends SecurityGroupRule> osSecGrpRules = osSecGrp.getRules();
    osSecGrpRules.stream().forEach(osSecGrpRule -> {
        //check to see if this already exists
        GeminiSecurityGroupRule gemSecGrpRule = null;
        try {
            securityGroup.getSecurityRules().stream()
                    //.filter(gsr -> gsr.getCloudID().equals(osSecGrpRule.getId())) // don't compare the cloud id, because this could be a new Gemini object
                    .filter(gsr -> gsr.getDirection().toString().toLowerCase()
                            .equals(osSecGrpRule.getDirection()))
                    .filter(gsr -> gsr.getIpAddressType().toString()
                            .contains(osSecGrpRule.getEtherType().toUpperCase()))
                    .filter(gsr -> gsr.getPortRangeMax().equals(osSecGrpRule.getPortRangeMax()))
                    .filter(gsr -> gsr.getPortRangeMin().equals(osSecGrpRule.getPortRangeMin()))
                    .filter(gsr -> gsr.getProtocol().toString().contains(osSecGrpRule.getProtocol()))
                    .filter(gsr -> gsr.getRemoteGroupId().equals(osSecGrpRule.getRemoteGroupId()))
                    .filter(gsr -> gsr.getRemoteIpPrefix().equals(osSecGrpRule.getRemoteIpPrefix())).findAny()
                    .get();
        } catch (NoSuchElementException | NullPointerException ex) {
            gemSecGrpRule = new GeminiSecurityGroupRule();
            securityGroup.addSecurityRule(gemSecGrpRule);
            gemSecGrpRule.setPortRangeMin(osSecGrpRule.getPortRangeMin());
            gemSecGrpRule.setPortRangeMax(osSecGrpRule.getPortRangeMax());
            gemSecGrpRule.setProtocol(Protocol.fromString(osSecGrpRule.getProtocol()));
            //                gemSecGrpRule.setCidr(osSecGrpRule.getRange().getCidr());
            gemSecGrpRule.setDirection(
                    GeminiSecurityGroupRuleDirection.valueOf(osSecGrpRule.getDirection().toUpperCase()));
            gemSecGrpRule.setRemoteGroupId(osSecGrpRule.getRemoteGroupId());
            gemSecGrpRule.setRemoteIpPrefix(osSecGrpRule.getRemoteIpPrefix());
            gemSecGrpRule.setIpAddressType(IPAddressType.valueOf(osSecGrpRule.getEtherType()));
            gemSecGrpRule.setParent(securityGroup);
        }
        //rule already existed or new one created - just copy the cloud ID
        gemSecGrpRule.setCloudID(osSecGrpRule.getId());
        gemSecGrpRule.setProvisioned(true);
    });
    Logger.debug("Successfully retrieved security group information Tenant: {} Env: {} security group {}",
            tenant.getName(), env.getName(), securityGroup.getName());
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.all.download.manager.download.ManagedDownload.java

@Override
public synchronized void onSearchSources(SearchSourcesEvent searchSourcesEvent) {
    ManagedDownloader downloader = searchSourcesEvent.getDownloader();
    if (selectedDownloader == null) {

        log.debug("searchedSourcesResult received for "
                + ToStringBuilder.reflectionToString(searchSourcesEvent, ToStringStyle.NO_FIELD_NAMES_STYLE)
                + ToStringBuilder.reflectionToString(searchSourcesEvent.getDownloadStatus(),
                        ToStringStyle.NO_FIELD_NAMES_STYLE));

        DownloadStatus downloadStatus = searchSourcesEvent.getDownloadStatus();

        boolean validEvent = processSearchSourcesEvent(downloadStatus, downloader);
        if (!validEvent) {
            return;
        }/*from   ww w . ja  v  a2 s  .  co  m*/

        findDownloaderCandidate(downloadStatus);

    } else {
        log.warn(String.format(
                "Ignoring event from managedDownloader[%s] since download is already in progress", downloader));
    }
}

From source file:com.gemini.provision.network.openstack.NetworkProviderOpenStackImpl.java

@Override
public ProvisioningProviderResponseType deleteNetwork(GeminiTenant tenant, GeminiEnvironment env,
        GeminiNetwork delNetwork) {//from w  w  w  .j a  v  a 2s.  c  o  m
    //authenticate the session with the OpenStack installation
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_AUTH_FAILURE;
    }

    //check to see if this network exists
    Network n;
    try {
        n = os.networking().network().get(delNetwork.getCloudID());
    } catch (NullPointerException | ClientResponseException ex) {
        Logger.error("Failed to delete network - does not exist. Tenant: {} Environment: {} Network: {}",
                tenant.getName(), env.getName(), delNetwork.getName());
        return ProvisioningProviderResponseType.OBJECT_NOT_FOUND;
    }

    try {
        os.networking().network().delete(delNetwork.getCloudID());
    } catch (ClientResponseException ex) {
        Logger.error(
                "Cloud exception, could not delete network. status code {} Tenant: {} Environment: {} Network: {}",
                ex.getStatusCode(), tenant.getName(), env.getName(), delNetwork.getName());
        return ProvisioningProviderResponseType.CLOUD_EXCEPTION;
    }

    Logger.debug("Successfully deleted network - Tenant: {} Environment: {} Network: {}", tenant.getName(),
            env.getName(), delNetwork.getName());
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.gemini.provision.loadbalancer.openstack.LoadBalancerProviderOpenStackImpl.java

public ProvisioningProviderResponseType getResponseType(Object object, GeminiTenant tenant,
        GeminiEnvironment env, String operation) {
    if (object == null) {
        Logger.error("Failed to {}, failure in Cloud provider. Tenant: {} Environment: {} Network: {}",
                operation, tenant.getName(), env.getName(),
                ToStringBuilder.reflectionToString(object, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_FAILURE;
    }/*from   w  w  w.j a  v a 2 s .c  o  m*/

    Logger.debug("Successfully {} {} - Tenant: {} Environment: {} Network: {}", operation,
            object.getClass().getName(), tenant.getName(), env.getName(),
            ToStringBuilder.reflectionToString(object, ToStringStyle.MULTI_LINE_STYLE));
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.gemini.provision.network.openstack.NetworkProviderOpenStackImpl.java

@Override
public ProvisioningProviderResponseType updateNetwork(GeminiTenant tenant, GeminiEnvironment env,
        GeminiNetwork n) {//from w  w  w. j a  v  a2 s.  c o  m
    //authenticate the session with the OpenStack installation
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_AUTH_FAILURE;
    }

    // Get a network by ID
    Network network;
    try {
        network = os.networking().network().get(n.getCloudID());
    } catch (NullPointerException ex) {
        Logger.error("Failed to update network - does not exist. Tenant: {} Environment: {} Network: {}",
                tenant.getName(), env.getName(), n.getName());
        return ProvisioningProviderResponseType.OBJECT_NOT_FOUND;
    }

    //update the network
    Network updatedNetwork;
    try {
        updatedNetwork = os.networking().network().update(n.getCloudID(),
                Builders.networkUpdate().name(n.getName()).build());
    } catch (ClientResponseException ex) {
        Logger.error(
                "Cloud exception, could not update network. status code {} Tenant: {} Environment: {} Network: {}",
                ex.getStatusCode(), tenant.getName(), env.getName(), n.getName());
        return ProvisioningProviderResponseType.CLOUD_EXCEPTION;
    }

    //TODO: Need to get detailed error codes for the call above. Research the StatusCode class
    if (updatedNetwork == null) {
        Logger.error("Failed to update network, Cloud provider failure Tenant: {} Environment: {} Network: {}",
                tenant.getName(), env.getName(), n.getName());
        return ProvisioningProviderResponseType.CLOUD_FAILURE;
    }

    Logger.debug("Successfully updated the network. Tenant: {} Environment: {} Network: {}", tenant.getName(),
            env.getName(), n.getName());
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.gemini.provision.loadbalancer.openstack.LoadBalancerProviderOpenStackImpl.java

public ProvisioningProviderResponseType getResponseType(ActionResponse actionResponse, Object object,
        GeminiTenant tenant, GeminiEnvironment env, String operation) {
    if (!actionResponse.isSuccess()) {
        Logger.error("Failed to {} {}, failure in Cloud provider. Tenant: {} Environment: {} Network: {}",
                operation, object.getClass().getName(), tenant.getName(), env.getName(),
                ToStringBuilder.reflectionToString(object, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_FAILURE;
    }/*from  w  ww.jav a 2s.  c  o  m*/

    Logger.debug("Successfully {} {} - Tenant: {} Environment: {} Network: {}", operation,
            object.getClass().getName(), tenant.getName(), env.getName(),
            ToStringBuilder.reflectionToString(object, ToStringStyle.MULTI_LINE_STYLE));
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.gemini.provision.security.openstack.SecurityProviderOpenStackImpl.java

/**
 *
 * @param tenant//from   w ww.  java  2 s.com
 * @param env
 * @param securityGroup - the security group to be created
 * @return SUCCESS, AUTH_FAILURE, CLOUD_FAILURE, OBJECT_EXISTS
 *
 * Creates the Security group in OpenStack if it doesn't exist NOTE: it
 * creates all security rules in the group. A separate call to create rules
 * IS NOT required
 */
@Override
public ProvisioningProviderResponseType createSecurityGroup(GeminiTenant tenant, GeminiEnvironment env,
        GeminiSecurityGroup securityGroup) {
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_AUTH_FAILURE;
    }

    SecurityGroup osSecGrp = null;
    try {
        List<? extends SecurityGroup> osSecGrps = os.networking().securitygroup().list();
        osSecGrp = osSecGrps.stream().filter(osg -> osg.getName().equals(securityGroup.getName())).findFirst()
                .get();
    } catch (NullPointerException | ClientResponseException ex) {
        Logger.error(
                "Cloud Exception: {}\nCould not retrieve security group information in OpenStack. tenant: {} env: {} security group: {}",
                ex.toString(), tenant.getName(), env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.CLOUD_EXCEPTION;
    } catch (NoSuchElementException ex) {
        //security group not found, so ok to move forward with the creation
    }

    if (osSecGrp != null) {
        Logger.error("Security Group exists: tenant: {} env: {} security group: {}", tenant.getName(),
                env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.OBJECT_EXISTS;
    }

    //create the security group
    osSecGrp = os.networking().securitygroup().create(Builders.securityGroup().tenantId(tenant.getTenantID())
            .name(securityGroup.getName()).description(securityGroup.getDescription()).build());
    if (osSecGrp == null) {
        Logger.error("Security Group creation failure tenant: {} env: {} security group: {}", tenant.getName(),
                env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.CLOUD_FAILURE;
    }

    //map the object and then create the security group rules in the cloud
    securityGroup.setCloudID(osSecGrp.getId());
    securityGroup.setProvisioned(true);
    securityGroup.getSecurityRules().stream().forEach(s -> {
        SecurityGroupRule r = null;
        try {
            r = os.networking().securityrule()
                    .create(Builders.securityGroupRule().tenantId(tenant.getTenantID())
                            .securityGroupId(securityGroup.getCloudID())
                            .direction(s.getDirection().toString().toLowerCase())
                            .ethertype(s.getIpAddressType().toString()).portRangeMin(s.getPortRangeMin())
                            .portRangeMax(s.getPortRangeMax()).protocol(s.getProtocol().toString())
                            //                                .remoteGroupId(s.getRemoteGroupId())
                            .remoteIpPrefix(s.getRemoteIpPrefix()).build());
            //copy the id
            s.setCloudID(r.getId());
            s.setProvisioned(true);
        } catch (ClientResponseException | NullPointerException ex) {
            Logger.error(
                    "Cloud Exception {} - Security Group rule creation failure tenant: {} env: {} security group: {} rule: {}",
                    ex.toString(), tenant.getName(), env.getName(), securityGroup.getName(), s.getName());
        }
    });

    Logger.debug("Successfully created security group Tenant: {} Env: {} security group {}", tenant.getName(),
            env.getName(), securityGroup.getName());
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.gemini.provision.network.openstack.NetworkProviderOpenStackImpl.java

/**
 * getAllSubnets. Lists all the subnets in the cloud - function may not have
 * practical use in OpenStack. Use getSubnets and provide a network to get
 * subnets specific to a network.//from  ww  w .  j  av  a 2s . c o  m
 *
 * @param tenant - the tenant
 * @param env - the environment with the subnets
 * @return
 */
@Override
public List<GeminiSubnet> getAllSubnets(GeminiTenant tenant, GeminiEnvironment env) {
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return null;
    }

    //get all the subnets
    List<? extends Subnet> subnets = os.networking().subnet().list();
    if (subnets.isEmpty()) {
        return null;
    }
    List<GeminiSubnet> gemSubnets = new ArrayList();

    //map the list of network gateways and their subnets to gemini equivalents
    subnets.stream().forEach(s -> {
        GeminiSubnet gn = new GeminiSubnet();
        //the basic elements
        gn.setName(s.getName());
        gn.setCloudID(s.getId());
        gn.setCidr(s.getCidr());
        gn.setGateway(InetAddresses.forString(s.getGateway()));

        //connect with the parent network
        try {
            //match the parent network to one in the application
            gn.setParent(
                    env.getApplications().stream().map(GeminiApplication::getNetworks).flatMap(List::stream)
                            .filter(g -> g.getCloudID().equals(s.getNetworkId())).findAny().get());
        } catch (NoSuchElementException | NullPointerException ex) {
            try {
                //could not find a parent network in the applications, now look in the orphaned networks
                gn.setParent(env.getOrphanNetworks().stream()
                        .filter(g -> g.getCloudID().equals(s.getNetworkId())).findAny().get());
            } catch (NoSuchElementException | NullPointerException e) {
                gn.setParent(null); //VERY BAD SITUATION - GEMINI MODEL IS COMPLETELY OUT OF SYNC
                Logger.error(
                        "Subnet {} has a network that isn't in Applications or orphaned networks. subnet {} parent network {}",
                        gn.getName(), s.getNetworkId());
            }
        }
        gn.setEnableDHCP(s.isDHCPEnabled());
        gn.setNetworkType(s.getIpVersion() == IPVersionType.V6 ? IPAddressType.IPv6 : IPAddressType.IPv4);
        s.getHostRoutes();
        s.getAllocationPools().stream().forEach(ap -> {
            GeminiSubnetAllocationPool gsap = new GeminiSubnetAllocationPool(
                    InetAddresses.forString(ap.getStart()), InetAddresses.forString(ap.getEnd()));
            gn.addAllocationPool(gsap);
        });
        gemSubnets.add(gn);
    });
    return gemSubnets;
}

From source file:com.gemini.provision.security.openstack.SecurityProviderOpenStackImpl.java

@Override
public ProvisioningProviderResponseType updateSecurityGroup(GeminiTenant tenant, GeminiEnvironment env,
        GeminiSecurityGroup securityGroup) {
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();/*from w  w w .j av a 2s . c o  m*/
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return ProvisioningProviderResponseType.CLOUD_AUTH_FAILURE;
    }

    SecurityGroup osSecGrp;
    try {
        osSecGrp = os.networking().securitygroup().get(securityGroup.getCloudID());
    } catch (NullPointerException | ClientResponseException ex) {
        Logger.error(
                "Could not retrieve security group information in OpenStack. tenant: {} env: {} security group: {}",
                tenant.getName(), env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.CLOUD_EXCEPTION;
    }

    if (osSecGrp == null) {
        Logger.error("Security Group does not exist: tenant: {} env: {} security group: {}", tenant.getName(),
                env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.OBJECT_NOT_FOUND;
    }

    //looks like there no way to update a security group, we have to delete and re-create
    ActionResponse a = os.networking().securitygroup().delete(osSecGrp.getId());
    if (!a.isSuccess()) {
        Logger.error(
                "Security Group update - could not delete the security group: tenant: {} env: {} security group: {} Error Message: {}",
                tenant.getName(), env.getName(), securityGroup.getName(), a.getFault());
        return ProvisioningProviderResponseType.CLOUD_FAILURE;
    }

    //now re-create the group with the updated info
    //create the security group
    osSecGrp = os.networking().securitygroup().create(Builders.securityGroup().tenantId(tenant.getTenantID())
            .name(securityGroup.getName()).description(securityGroup.getDescription()).build());
    if (osSecGrp == null) {
        Logger.error("Security Group update, creation failure. tenant: {} env: {} security group: {}",
                tenant.getName(), env.getName(), securityGroup.getName());
        return ProvisioningProviderResponseType.CLOUD_FAILURE;
    }

    //update the cloud ID since it has most likely changed and then create the security group rules in the cloud
    securityGroup.setCloudID(osSecGrp.getId());
    securityGroup.setProvisioned(true);
    securityGroup.getSecurityRules().stream().forEach(s -> {
        SecurityGroupRule r = os.networking().securityrule()
                .create(Builders.securityGroupRule().tenantId(tenant.getTenantID())
                        .securityGroupId(securityGroup.getCloudID())
                        .direction(s.getDirection().toString().toLowerCase())
                        .ethertype(s.getIpAddressType().toString()).portRangeMin(s.getPortRangeMin())
                        .portRangeMax(s.getPortRangeMax()).protocol(s.getProtocol().toString())
                        //                            .remoteGroupId(s.getRemoteGroupId())
                        .remoteIpPrefix(s.getRemoteIpPrefix()).build());
        if (r == null) {
            Logger.error("Security Group rule creation failure. tenant: {} env: {} security group: {} rule {}",
                    tenant.getName(), env.getName(), securityGroup.getName(), s.getName());
        }
    });

    Logger.debug("Successfully updated security group Tenant: {} Env: {} security group {}", tenant.getName(),
            env.getName(), securityGroup.getName());
    return ProvisioningProviderResponseType.SUCCESS;
}

From source file:com.gemini.provision.network.openstack.NetworkProviderOpenStackImpl.java

/**
 * getSubnets. Find all subnets related to a parent network. For each subnet
 * found it create an equivalent gemini object and adds it to the parent
 * network/*from w  ww .ja  v  a2 s  .co  m*/
 *
 * @param tenant - contains the environment, provides the auth parameters
 * @param env - contains the parent network whose subnets needs to be
 * retrieved
 * @param parent - the parent network whose subnets need to be retrieved
 * @return List<GeminiSubnet> list of the subnets found or null if there was
 * an error
 */
@Override
public List<GeminiSubnet> getSubnets(GeminiTenant tenant, GeminiEnvironment env, GeminiNetwork parent) {
    //authenticate the session with the OpenStack installation
    OSClient os = OSFactory.builder().endpoint(env.getEndPoint())
            .credentials(env.getAdminUserName(), env.getAdminPassword()).tenantName(tenant.getName())
            .authenticate();
    if (os == null) {
        Logger.error("Failed to authenticate Tenant: {}",
                ToStringBuilder.reflectionToString(tenant, ToStringStyle.MULTI_LINE_STYLE));
        return null;
    }

    //get all the subnets
    List<? extends Subnet> subnets = os.networking().subnet().list();
    if (subnets == null || subnets.isEmpty()) {
        Logger.info("No subnets for tenant: {} env: {} network {}", tenant.getName(), env.getName(),
                parent.getName());
        return null;
    }
    List<GeminiSubnet> gemSubnets = new ArrayList();

    //map the list of network gateways and their subnets to gemini equivalents
    subnets.stream().filter(s -> s != null).filter(s -> s.getNetworkId().equals(parent.getCloudID()))
            .forEach(s -> {
                GeminiSubnet gn = new GeminiSubnet();
                gn.setName(s.getName());
                gn.setCloudID(s.getId());
                gn.setCidr(s.getCidr());
                gn.setGateway(InetAddresses.forString(s.getGateway()));
                gn.setParent(parent);
                gn.setEnableDHCP(s.isDHCPEnabled());
                gn.setNetworkType(
                        s.getIpVersion() == IPVersionType.V4 ? IPAddressType.IPv4 : IPAddressType.IPv6);
                s.getAllocationPools().stream().forEach(ap -> {
                    GeminiSubnetAllocationPool gsap = new GeminiSubnetAllocationPool(
                            InetAddresses.forString(ap.getStart()), InetAddresses.forString(ap.getEnd()));
                    gn.addAllocationPool(gsap);
                });
                gemSubnets.add(gn);
                gn.setParent(parent);
                parent.addSubnet(gn);
            });
    return gemSubnets;
}