/**
* 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.graphrbac.implementation;
import com.microsoft.azure.Page;
import com.microsoft.azure.PagedList;
import com.microsoft.azure.management.apigeneration.LangDefinition;
import com.microsoft.azure.management.graphrbac.GraphErrorException;
import com.microsoft.azure.management.graphrbac.ServicePrincipal;
import com.microsoft.azure.management.graphrbac.ServicePrincipals;
import com.microsoft.azure.management.resources.fluentcore.arm.collection.implementation.ReadableWrappersImpl;
import com.microsoft.azure.management.resources.fluentcore.arm.models.HasManager;
import com.microsoft.azure.management.resources.fluentcore.model.HasInner;
import com.microsoft.rest.ServiceFuture;
import com.microsoft.rest.ServiceCallback;
import com.microsoft.rest.ServiceResponse;
import rx.Observable;
import rx.functions.Func1;
import java.util.List;
/**
* The implementation of ServicePrincipals and its parent interfaces.
*/
@LangDefinition(ContainerName = "/Microsoft.Azure.Management.Fluent.Graph.RBAC")
class ServicePrincipalsImpl
extends ReadableWrappersImpl<
ServicePrincipal,
ServicePrincipalImpl,
ServicePrincipalInner>
implements
ServicePrincipals,
HasManager<GraphRbacManager>,
HasInner<ServicePrincipalsInner> {
private ServicePrincipalsInner innerCollection;
private GraphRbacManager manager;
ServicePrincipalsImpl(
final ServicePrincipalsInner client,
final GraphRbacManager graphRbacManager) {
this.innerCollection = client;
this.manager = graphRbacManager;
}
@Override
public PagedList<ServicePrincipal> list() {
return wrapList(this.innerCollection.list());
}
@Override
public Observable<ServicePrincipal> listAsync() {
return wrapPageAsync(this.inner().listAsync());
}
@Override
protected ServicePrincipalImpl wrapModel(ServicePrincipalInner servicePrincipalInner) {
if (servicePrincipalInner == null) {
return null;
}
return new ServicePrincipalImpl(servicePrincipalInner, this.innerCollection);
}
@Override
public ServicePrincipalImpl getByObjectId(String objectId) {
return new ServicePrincipalImpl(innerCollection.get(objectId), innerCollection);
}
@Override
public ServicePrincipal getByAppId(String appId) {
return null;
}
@Override
public ServicePrincipal getByServicePrincipalName(String spn) {
List<ServicePrincipalInner> spList = innerCollection.list(String.format("servicePrincipalNames/any(c:c eq '%s')", spn));
if (spList == null || spList.isEmpty()) {
return null;
} else {
return new ServicePrincipalImpl(spList.get(0), innerCollection);
}
}
@Override
public ServiceFuture<ServicePrincipal> getByServicePrincipalNameAsync(final String spn, final ServiceCallback<ServicePrincipal> callback) {
return ServiceFuture.fromBody(getByServicePrincipalNameAsync(spn), callback);
}
@Override
public Observable<ServicePrincipal> getByServicePrincipalNameAsync(final String spn) {
return innerCollection.listWithServiceResponseAsync(String.format("servicePrincipalNames/any(c:c eq '%s')", spn))
.map(new Func1<ServiceResponse<Page<ServicePrincipalInner>>, ServicePrincipal>() {
@Override
public ServicePrincipal call(ServiceResponse<Page<ServicePrincipalInner>> result) {
if (result == null || result.body().items() == null || result.body().items().isEmpty()) {
throw new GraphErrorException("Service principal not found for SPN: " + spn, result.response());
}
return new ServicePrincipalImpl(result.body().items().get(0), innerCollection);
}
});
}
@Override
public GraphRbacManager manager() {
return this.manager;
}
@Override
public ServicePrincipalsInner inner() {
return this.innerCollection;
}
}