Copyright (c) Microsoft Corporation. All rights reserved.
Licensed under the MIT License. See License.txt in the project root for
license information.
/**
* 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.management.resources.fluentcore.arm;
import com.microsoft.azure.management.resources.Provider;
import com.microsoft.azure.management.resources.ProviderResourceType;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Utility methods for Azure resource IDs.
/**
* Utility methods for Azure resource IDs.
*/
public final class ResourceUtils {
private ResourceUtils() { }
Extract resource group from a resource ID string.
Params: - id – the resource ID string
Returns: the resource group name
/**
* Extract resource group from a resource ID string.
* @param id the resource ID string
* @return the resource group name
*/
public static String groupFromResourceId(String id) {
return (id != null) ? ResourceId.fromString(id).resourceGroupName() : null;
}
Extract the subscription ID from a resource ID string.
Params: - id – the resource ID string
Returns: the subscription ID
/**
* Extract the subscription ID from a resource ID string.
* @param id the resource ID string
* @return the subscription ID
*/
public static String subscriptionFromResourceId(String id) {
return (id != null) ? ResourceId.fromString(id).subscriptionId() : null;
}
Extract resource provider from a resource ID string.
Params: - id – the resource ID string
Returns: the resource group name
/**
* Extract resource provider from a resource ID string.
* @param id the resource ID string
* @return the resource group name
*/
public static String resourceProviderFromResourceId(String id) {
return (id != null) ? ResourceId.fromString(id).providerNamespace() : null;
}
Extract resource type from a resource ID string.
Params: - id – the resource ID string
Returns: the resource type
/**
* Extract resource type from a resource ID string.
* @param id the resource ID string
* @return the resource type
*/
public static String resourceTypeFromResourceId(String id) {
return (id != null) ? ResourceId.fromString(id).resourceType() : null;
}
Extract parent resource ID from a resource ID string.
E.g. subscriptions/s/resourcegroups/r/foos/foo/bars/bar will return
subscriptions/s/resourcegroups/r/foos/foo.
Params: - id – the resource ID string
Returns: the parent resource ID
/**
* Extract parent resource ID from a resource ID string.
* E.g. subscriptions/s/resourcegroups/r/foos/foo/bars/bar will return
* subscriptions/s/resourcegroups/r/foos/foo.
*
* @param id the resource ID string
* @return the parent resource ID
*/
public static String parentResourceIdFromResourceId(String id) {
if (id == null) {
return null;
}
ResourceId resourceId = ResourceId.fromString(id);
if (resourceId != null && resourceId.parent() != null) {
return ResourceId.fromString(id).parent().id();
}
return null;
}
Extract parent resource path from a resource ID string.
E.g. subscriptions/s/resourcegroups/r/foos/foo/bars/bar will return foos/foo.
Params: - id – the resource ID string
Returns: the parent resource ID
/**
* Extract parent resource path from a resource ID string.
* E.g. subscriptions/s/resourcegroups/r/foos/foo/bars/bar will return foos/foo.
*
* @param id the resource ID string
* @return the parent resource ID
*/
public static String parentRelativePathFromResourceId(String id) {
if (id == null) {
return null;
}
ResourceId parent = ResourceId.fromString(id).parent();
if (parent != null) {
return parent.resourceType() + "/" + parent.name();
}
return "";
}
Extract the relative path to the current resource provider.
E.g. subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Foo/foos/foo1 will return foos/foo1.
Params: - id – the id of the resource
Returns: the relative path
/**
* Extract the relative path to the current resource provider.
* E.g. subscriptions/sub1/resourceGroups/rg1/providers/Microsoft.Foo/foos/foo1 will return foos/foo1.
*
* @param id the id of the resource
* @return the relative path
*/
public static String relativePathFromResourceId(String id) {
if (id == null) {
return null;
}
String[] paths = id.split("/providers/" + resourceProviderFromResourceId(id) + "/", 2);
if (paths.length == 1) {
return "";
} else {
return paths[1];
}
}
Extract information from a resource ID string with the resource type
as the identifier.
Params: - id – the resource ID
- identifier – the identifier to match, e.g. "resourceGroups", "storageAccounts"
Returns: the information extracted from the identifier
/**
* Extract information from a resource ID string with the resource type
* as the identifier.
*
* @param id the resource ID
* @param identifier the identifier to match, e.g. "resourceGroups", "storageAccounts"
* @return the information extracted from the identifier
*/
public static String extractFromResourceId(String id, String identifier) {
if (id == null || identifier == null) {
return id;
}
Pattern pattern = Pattern.compile(identifier + "/[-\\w._]+");
Matcher matcher = pattern.matcher(id);
if (matcher.find()) {
return matcher.group().split("/")[1];
} else {
return null;
}
}
Extract name of the resource from a resource ID.
Params: - id – the resource ID
Returns: the name of the resource
/**
* Extract name of the resource from a resource ID.
* @param id the resource ID
* @return the name of the resource
*/
public static String nameFromResourceId(String id) {
return (id != null) ? ResourceId.fromString(id).name() : null;
}
Find out the default api version to make a REST request with from
the resource provider.
Params: - id – the resource ID
- provider – the resource provider
Returns: the default api version to use
/**
* Find out the default api version to make a REST request with from
* the resource provider.
*
* @param id the resource ID
* @param provider the resource provider
* @return the default api version to use
*/
public static String defaultApiVersion(String id, Provider provider) {
if (id == null) {
return null;
}
String resourceType = resourceTypeForApiVersion(id);
// Exact match
for (ProviderResourceType prt : provider.resourceTypes()) {
if (prt.resourceType().equalsIgnoreCase(resourceType)) {
return prt.defaultApiVersion() == null ? prt.apiVersions().get(0) : prt.defaultApiVersion();
}
}
// child resource, e.g. sites/config
for (ProviderResourceType prt : provider.resourceTypes()) {
if (prt.resourceType().toLowerCase(Locale.ROOT).contains("/" + resourceType)) {
return prt.defaultApiVersion() == null ? prt.apiVersions().get(0) : prt.defaultApiVersion();
}
}
// look for parent
String parentId = parentResourceIdFromResourceId(id);
if (parentId != null) {
return defaultApiVersion(parentId, provider);
} else {
// Fallback: use a random one, not guaranteed to work
return provider.resourceTypes().get(0).apiVersions().get(0);
}
}
Get the resource type used to find api version.
Params: - id – the resource ID
Returns: the resource type to use
/**
* Get the resource type used to find api version.
*
* @param id the resource ID
* @return the resource type to use
*/
private static String resourceTypeForApiVersion(String id) {
String type = resourceTypeFromResourceId(id);
String parent = parentResourceIdFromResourceId(id);
while (parent != null) {
type = resourceTypeFromResourceId(parent) + "/" + type;
parent = parentResourceIdFromResourceId(parent);
}
return type;
}
Creates a resource ID from information of a generic resource.
Params: - subscriptionId – the subscription UUID
- resourceGroupName – the resource group name
- resourceProviderNamespace – the resource provider namespace
- resourceType – the type of the resource or nested resource
- resourceName – name of the resource or nested resource
- parentResourcePath – parent resource's relative path to the provider,
if the resource is a generic resource
Returns: the resource ID string
/**
* Creates a resource ID from information of a generic resource.
*
* @param subscriptionId the subscription UUID
* @param resourceGroupName the resource group name
* @param resourceProviderNamespace the resource provider namespace
* @param resourceType the type of the resource or nested resource
* @param resourceName name of the resource or nested resource
* @param parentResourcePath parent resource's relative path to the provider,
* if the resource is a generic resource
* @return the resource ID string
*/
public static String constructResourceId(
final String subscriptionId,
final String resourceGroupName,
final String resourceProviderNamespace,
final String resourceType,
final String resourceName,
final String parentResourcePath) {
String prefixedParentPath = parentResourcePath;
if (parentResourcePath != null && !parentResourcePath.isEmpty()) {
prefixedParentPath = "/" + parentResourcePath;
}
return String.format(
"/subscriptions/%s/resourcegroups/%s/providers/%s%s/%s/%s",
subscriptionId,
resourceGroupName,
resourceProviderNamespace,
prefixedParentPath,
resourceType,
resourceName);
}
}