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.ActiveDirectoryUser;
import com.microsoft.azure.management.graphrbac.ActiveDirectoryUsers;
import com.microsoft.azure.management.resources.fluentcore.arm.collection.implementation.CreatableWrappersImpl;
import com.microsoft.azure.management.resources.fluentcore.model.HasInner;
import com.microsoft.rest.ServiceCallback;
import com.microsoft.rest.ServiceFuture;
import rx.Completable;
import rx.Observable;
import rx.functions.Func1;
@LangDefinition(ContainerName = "/Microsoft.Azure.Management.Graph.RBAC.Fluent")
class ActiveDirectoryUsersImpl
extends CreatableWrappersImpl<
ActiveDirectoryUser,
ActiveDirectoryUserImpl,
UserInner>
implements
ActiveDirectoryUsers,
HasInner<UsersInner> {
private final GraphRbacManager manager;
ActiveDirectoryUsersImpl(
final GraphRbacManager manager) {
this.manager = manager;
}
@Override
public PagedList<ActiveDirectoryUser> list() {
return wrapList(this.manager().inner().users().list());
}
@Override
protected ActiveDirectoryUserImpl wrapModel(UserInner userInner) {
if (userInner == null) {
return null;
}
return new ActiveDirectoryUserImpl(userInner, manager());
}
@Override
public ActiveDirectoryUserImpl getById(String objectId) {
return (ActiveDirectoryUserImpl) getByIdAsync(objectId).toBlocking().single();
}
@Override
public Observable<ActiveDirectoryUser> getByIdAsync(String id) {
return manager().inner().users().getAsync(id).map(new Func1<UserInner, ActiveDirectoryUser>() {
@Override
public ActiveDirectoryUser call(UserInner userInner) {
if (userInner == null) {
return null;
} else {
return new ActiveDirectoryUserImpl(userInner, manager());
}
}
});
}
@Override
public ServiceFuture<ActiveDirectoryUser> getByIdAsync(String id, ServiceCallback<ActiveDirectoryUser> callback) {
return ServiceFuture.fromBody(getByIdAsync(id), callback);
}
@Override
public ActiveDirectoryUserImpl getByName(String upn) {
return (ActiveDirectoryUserImpl) getByNameAsync(upn).toBlocking().single();
}
@Override
public Observable<ActiveDirectoryUser> getByNameAsync(final String name) {
return manager().inner().users().getAsync(name)
.flatMap(new Func1<UserInner, Observable<UserInner>>() {
@Override
public Observable<UserInner> call(UserInner userInner) {
if (userInner != null) {
return Observable.just(userInner);
}
if (name.contains("@")) {
return manager().inner().users().listAsync(String.format("mail eq '%s' or mailNickName eq '%s#EXT#'", name, name.replace("@", "_")))
.map(new Func1<Page<UserInner>, UserInner>() {
@Override
public UserInner call(Page<UserInner> userInnerPage) {
if (userInnerPage.items() == null || userInnerPage.items().isEmpty()) {
return null;
}
return userInnerPage.items().get(0);
}
});
}
else {
return manager().inner().users().listAsync(String.format("displayName eq '%s'", name))
.map(new Func1<Page<UserInner>, UserInner>() {
@Override
public UserInner call(Page<UserInner> userInnerPage) {
if (userInnerPage.items() == null || userInnerPage.items().isEmpty()) {
return null;
}
return userInnerPage.items().get(0);
}
});
}
}
})
.map(new Func1<UserInner, ActiveDirectoryUser>() {
@Override
public ActiveDirectoryUser call(UserInner userInnerServiceResponse) {
if (userInnerServiceResponse == null) {
return null;
}
return new ActiveDirectoryUserImpl(userInnerServiceResponse, manager());
}
});
}
@Override
public UsersInner inner() {
return this.manager().inner().users();
}
@Override
public Observable<ActiveDirectoryUser> listAsync() {
return wrapPageAsync(this.inner().listAsync());
}
@Override
public GraphRbacManager manager() {
return manager;
}
@Override
public ActiveDirectoryUserImpl define(String name) {
return wrapModel(name);
}
@Override
protected ActiveDirectoryUserImpl wrapModel(String name) {
return new ActiveDirectoryUserImpl((UserInner) new UserInner().withDisplayName(name), manager());
}
@Override
public Completable deleteByIdAsync(String id) {
return manager().inner().users().deleteAsync(id).toCompletable();
}
}