All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.microsoft.azure.toolkit.lib.mysql.MySqlServiceSubscription Maven / Gradle / Ivy

There is a newer version: 0.52.2
Show newest version
/*
 * Copyright (c) Microsoft Corporation. All rights reserved.
 * Licensed under the MIT License. See License.txt in the project root for license information.
 */

package com.microsoft.azure.toolkit.lib.mysql;

import com.azure.resourcemanager.mysqlflexibleserver.MySqlManager;
import com.azure.resourcemanager.mysqlflexibleserver.models.CapabilityProperties;
import com.azure.resourcemanager.mysqlflexibleserver.models.NameAvailability;
import com.azure.resourcemanager.mysqlflexibleserver.models.NameAvailabilityRequest;
import com.azure.resourcemanager.mysqlflexibleserver.models.StorageEditionCapability;
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzResourceModule;
import com.microsoft.azure.toolkit.lib.common.model.AbstractAzServiceSubscription;
import com.microsoft.azure.toolkit.lib.common.model.Availability;
import com.microsoft.azure.toolkit.lib.common.model.Region;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;

import javax.annotation.Nonnull;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

@Getter
public class MySqlServiceSubscription extends AbstractAzServiceSubscription {
    @Nonnull
    private final String subscriptionId;
    @Nonnull
    private final MySqlServerModule serverModule;

    MySqlServiceSubscription(@Nonnull String subscriptionId, @Nonnull AzureMySql service) {
        super(subscriptionId, service);
        this.subscriptionId = subscriptionId;
        this.serverModule = new MySqlServerModule(this);
    }

    MySqlServiceSubscription(@Nonnull MySqlManager manager, @Nonnull AzureMySql service) {
        this(manager.serviceClient().getSubscriptionId(), service);
    }

    @Nonnull
    @Override
    public List> getSubModules() {
        return Collections.singletonList(serverModule);
    }

    @Nonnull
    public MySqlServerModule servers() {
        return this.serverModule;
    }

    @Nonnull
    public List listSupportedRegions() {
        return super.listSupportedRegions(this.serverModule.getName());
    }

    @Nonnull
    public List listSupportedVersions(String region) {
        return Objects.requireNonNull(this.getRemote()).locationBasedCapabilities().list(region).stream()
            .flatMap(c -> c.supportedFlexibleServerEditions().stream())
            .flatMap(e -> e.supportedStorageEditions().stream())
            .map(StorageEditionCapability::name)
            .collect(Collectors.toList());
//        return ServerVersion.values().stream().map(ExpandableStringEnum::toString).collect(Collectors.toList());
    }

    @Nonnull
    public Availability checkNameAvailability(@Nonnull String location, @Nonnull String name) {
        final NameAvailabilityRequest request = new NameAvailabilityRequest().withName(name).withType("Microsoft.DBforMySQL/flexibleServers");
        final NameAvailability result = Objects.requireNonNull(this.getRemote()).checkNameAvailabilities().execute(location, request);
        return new Availability(result.nameAvailable(), result.reason(), result.message());
    }

    public boolean checkRegionAvailability(@Nonnull Region region) {
        List capabilityProperties = Objects.requireNonNull(this.getRemote()).locationBasedCapabilities()
            .list(region.getName()).stream().collect(Collectors.toList());
        return capabilityProperties.stream().anyMatch(e -> CollectionUtils.isNotEmpty(e.supportedFlexibleServerEditions()));
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy