Skip to content

Commit

Permalink
[AZURE-3] Added support to read Azure Subscription SKUs
Browse files Browse the repository at this point in the history
  • Loading branch information
Matteo Alessandroni committed Apr 16, 2018
1 parent 9b2d83c commit 9082986
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 25 deletions.
46 changes: 46 additions & 0 deletions src/main/java/net/tirasa/connid/bundles/azure/AzureConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import net.tirasa.connid.bundles.azure.dto.License;
import net.tirasa.connid.bundles.azure.dto.PagedGroups;
import net.tirasa.connid.bundles.azure.dto.PagedUsers;
import net.tirasa.connid.bundles.azure.dto.SubscribedSku;
import net.tirasa.connid.bundles.azure.dto.User;
import net.tirasa.connid.bundles.azure.service.AzureService;
import net.tirasa.connid.bundles.azure.utils.AzureAttributes;
Expand Down Expand Up @@ -265,6 +266,23 @@ public void executeQuery(ObjectClass objectClass, Filter query, ResultsHandler h
handler.handle(fromGroup(result, attributesToGet));
}
}
} else if (new ObjectClass(AzureAttributes.AZURE_LICENSE_NAME).equals(objectClass)) {
if (key == null) {
List<SubscribedSku> subscribedSkus = null;
try {
subscribedSkus = client.getAuthenticated().getCurrentTenantSubscriptions();
} catch (Exception e) {
AzureUtils.wrapGeneralError("While getting subscriptions!", e);
}

for (SubscribedSku subscribedSku : subscribedSkus) {
handler.handle(fromLicense(subscribedSku, attributesToGet));
}

if (handler instanceof SearchResultsHandler) {
((SearchResultsHandler) handler).handleResult(new SearchResult(null, -1));
}
}
} else {
LOG.warn("Search of type {0} is not supported", objectClass.getObjectClassValue());
throw new UnsupportedOperationException("Search of type"
Expand Down Expand Up @@ -662,4 +680,32 @@ private ConnectorObject fromGroup(final Group group, final Set<String> attribute

return builder.build();
}

private ConnectorObject fromLicense(final SubscribedSku subscribedSku, final Set<String> attributesToGet) {
ConnectorObjectBuilder builder = new ConnectorObjectBuilder();
builder.setObjectClass(new ObjectClass(AzureAttributes.AZURE_LICENSE_NAME));
builder.setUid(subscribedSku.getObjectId());
builder.setName(subscribedSku.getSkuId());

try {
for (Attribute toAttribute : subscribedSku.toAttributes()) {
String attributeName = toAttribute.getName();
for (String attributeToGetName : attributesToGet) {
if (attributeName.equals(attributeToGetName)) {
builder.addAttribute(toAttribute);
break;
}
}
}
} catch (IllegalArgumentException | IllegalAccessException ex) {
LOG.error(ex, "While converting to attributes");
}

if (attributesToGet.contains(AzureAttributes.AZURE_LICENSE_NAME)) {
builder.addAttribute(AttributeBuilder.build(AzureAttributes.AZURE_LICENSE_NAME,
subscribedSku.getObjectId()));
}

return builder.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,8 @@

public interface AzureObject {

String getDisplayName();

String getObjectId();

void setDisplayName(String displayName);

void setObjectId(String objectId);

Set<Attribute> toAttributes() throws IllegalArgumentException, IllegalAccessException;
Expand Down
3 changes: 0 additions & 3 deletions src/main/java/net/tirasa/connid/bundles/azure/dto/Group.java
Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,10 @@ public void setObjectType(final String objectType) {
this.objectType = objectType;
}

@Override
public String getDisplayName() {
return displayName;
}

@Override
public void setDisplayName(final String displayName) {
this.displayName = displayName;
}
Expand Down Expand Up @@ -296,7 +294,6 @@ private void doSetAttribute(final String name, final List<Object> values) {
securityEnabled =
Boolean.class.cast(value);
break;

}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,27 +18,27 @@
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.tirasa.connid.bundles.azure.utils.AzureAttributes;
import org.identityconnectors.common.CollectionUtil;
import org.identityconnectors.framework.common.objects.Attribute;

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class SubscribedSku {

@JsonProperty
private String capabilityStatus;

@JsonProperty
private int consumedUnits;
public class SubscribedSku implements AzureObject {

@JsonProperty
private String objectId;

@JsonProperty
private PrepaidUnit prepaidUnits;
private String capabilityStatus;

@JsonProperty
private List<ServicePlan> servicePlans = new ArrayList<>();
private int consumedUnits;

@JsonProperty
private String skuId;
Expand All @@ -49,6 +49,12 @@ public class SubscribedSku {
@JsonProperty
private String appliesTo;

@JsonProperty
private PrepaidUnit prepaidUnits;

@JsonProperty
private List<ServicePlan> servicePlans = new ArrayList<>();

public String getCapabilityStatus() {
return capabilityStatus;
}
Expand Down Expand Up @@ -113,6 +119,71 @@ public void setAppliesTo(final String appliesTo) {
this.appliesTo = appliesTo;
}

@Override
public Set<Attribute> toAttributes() throws IllegalArgumentException, IllegalAccessException {
Set<Attribute> attrs = new HashSet<>();

Field[] fields = SubscribedSku.class.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
attrs.add(AzureAttributes.buildAttributeFromClassField(field, this).build());
}

return attrs;
}

@Override
public void fromAttributes(Set<Attribute> attributes) {
for (Attribute attribute : attributes) {
if (!CollectionUtil.isEmpty(attribute.getValue())) {
List<Object> values = attribute.getValue();
String name = attribute.getName();

doSetAttribute(name, values);
}

}
}

@SuppressWarnings("unchecked")
private void doSetAttribute(final String name, final List<Object> values) {
Object value = values.get(0);
switch (name) {
case "objectId":
objectId =
String.class.cast(value);
break;
case "capabilityStatus":
capabilityStatus =
String.class.cast(value);
break;
case "consumedUnits":
consumedUnits =
Integer.class.cast(value);
break;
case "skuId":
skuId =
String.class.cast(value);
break;
case "skuPartNumber":
skuPartNumber =
String.class.cast(value);
break;
case "appliesTo":
appliesTo =
String.class.cast(value);
break;
case "prepaidUnits":
prepaidUnits =
PrepaidUnit.class.cast(value);
break;
case "servicePlans":
servicePlans =
new ArrayList<>((List<ServicePlan>) (Object) values);
break;
}
}

@Override
public String toString() {
return "SubscribedSku{" + "capabilityStatus=" + capabilityStatus + ", consumedUnits=" + consumedUnits
Expand Down
10 changes: 4 additions & 6 deletions src/main/java/net/tirasa/connid/bundles/azure/dto/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -681,19 +681,17 @@ public void setUserIdentities(final List<Object> userIdentities) {
this.userIdentities = userIdentities;
}

@Override
public String getDisplayName() {
return displayName;
}

@Override
public String getObjectId() {
return objectId;
public void setDisplayName(final String displayName) {
this.displayName = displayName;
}

@Override
public void setDisplayName(final String displayName) {
this.displayName = displayName;
public String getObjectId() {
return objectId;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,7 @@ public final class AzureAttributes {

public static final String USER_USAGE_LOCATION = "usageLocation";

public static boolean isAzureLicenses(String attrName) {
return AZURE_LICENSE_NAME.equalsIgnoreCase(attrName);
}
public static final String SUBSCRIBED_SKU_ID = "objectId";

public static final List<String> GROUP_REQUIRED_ATTRS = new ArrayList<String>() {

Expand Down

0 comments on commit 9082986

Please sign in to comment.