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.arm.resources;
import com.microsoft.azure.management.apigeneration.LangDefinition;
import org.apache.commons.lang3.StringUtils;
import java.security.InvalidParameterException;
Instantiate itself from a resource id, and give easy access to resource information like subscription, resourceGroup,
resource name.
/**
* Instantiate itself from a resource id, and give easy access to resource information like subscription, resourceGroup,
* resource name.
*/
@LangDefinition
public final class ResourceId {
private String subscriptionId = null;
private String resourceGroupName = null;
private String name = null;
private String providerNamespace = null;
private String resourceType = null;
private String id = null;
private String parentId = null;
private static String badIdErrorText(String id) {
return String.format("The specified ID `%s` is not a valid Azure resource ID.", id);
}
private ResourceId(final String id) {
if (id == null) {
// Protect against NPEs from null IDs, preserving legacy behavior for null IDs
return;
} else {
// Skip the first '/' if any, and then split using '/'
String[] splits = (id.startsWith("/")) ? id.substring(1).split("/") : id.split("/");
if (splits.length % 2 == 1) {
throw new InvalidParameterException(badIdErrorText(id));
}
// Save the ID itself
this.id = id;
// Format of id:
// /subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/<providerNamespace>(/<parentResourceType>/<parentName>)*/<resourceType>/<name>
// 0 1 2 3 4 5 N-2 N-1
// Extract resource type and name
if (splits.length < 2) {
throw new InvalidParameterException(badIdErrorText(id));
} else {
this.name = splits[splits.length - 1];
this.resourceType = splits[splits.length - 2];
}
// Extract parent ID
if (splits.length < 10) {
this.parentId = null;
} else {
String[] parentSplits = new String[splits.length - 2];
System.arraycopy(splits, 0, parentSplits, 0, splits.length - 2);
this.parentId = "/" + StringUtils.join(parentSplits, "/");
}
for (int i = 0; i < splits.length && i < 6; i++) {
switch (i) {
case 0:
// Ensure "subscriptions"
if (!splits[i].equalsIgnoreCase("subscriptions")) {
throw new InvalidParameterException(badIdErrorText(id));
}
break;
case 1:
// Extract subscription ID
this.subscriptionId = splits[i];
break;
case 2:
// Ensure "resourceGroups"
if (!splits[i].equalsIgnoreCase("resourceGroups")) {
throw new InvalidParameterException(badIdErrorText(id));
}
break;
case 3:
// Extract resource group name
this.resourceGroupName = splits[i];
break;
case 4:
// Ensure "providers"
if (!splits[i].equalsIgnoreCase("providers")) {
throw new InvalidParameterException(badIdErrorText(id));
}
break;
case 5:
// Extract provider namespace
this.providerNamespace = splits[i];
break;
default:
break;
}
}
}
}
Returns parsed ResourceId object for a given resource id.
Params: - id – of the resource
Returns: ResourceId object
/**
* Returns parsed ResourceId object for a given resource id.
* @param id of the resource
* @return ResourceId object
*/
public static ResourceId fromString(String id) {
return new ResourceId(id);
}
Returns: subscriptionId of the resource.
/**
* @return subscriptionId of the resource.
*/
public String subscriptionId() {
return this.subscriptionId;
}
Returns: resourceGroupName of the resource.
/**
* @return resourceGroupName of the resource.
*/
public String resourceGroupName() {
return this.resourceGroupName;
}
Returns: name of the resource.
/**
* @return name of the resource.
*/
public String name() {
return this.name;
}
Returns: parent resource id of the resource if any, otherwise null.
/**
* @return parent resource id of the resource if any, otherwise null.
*/
public ResourceId parent() {
if (this.id == null || this.parentId == null) {
return null;
} else {
return fromString(this.parentId);
}
}
Returns: name of the provider.
/**
* @return name of the provider.
*/
public String providerNamespace() {
return this.providerNamespace;
}
Returns: type of the resource.
/**
* @return type of the resource.
*/
public String resourceType() {
return this.resourceType;
}
Returns: full type of the resource.
/**
* @return full type of the resource.
*/
public String fullResourceType() {
if (this.parentId == null) {
return this.providerNamespace + "/" + this.resourceType;
} else {
return this.parent().fullResourceType() + "/" + this.resourceType;
}
}
Returns: the id of the resource.
/**
* @return the id of the resource.
*/
public String id() {
return id;
}
}