/**
* 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.appservice.implementation;
import com.microsoft.azure.PagedList;
import com.microsoft.azure.management.apigeneration.LangDefinition;
import com.microsoft.azure.management.appservice.WebApp;
import com.microsoft.azure.management.appservice.WebApps;
import com.microsoft.azure.management.resources.fluentcore.arm.collection.implementation.TopLevelModifiableResourcesImpl;
import com.microsoft.azure.management.resources.fluentcore.utils.PagedListConverter;
import rx.Observable;
import rx.functions.Func1;
/**
* The implementation for WebApps.
*/
@LangDefinition(ContainerName = "/Microsoft.Azure.Management.AppService.Fluent")
class WebAppsImpl
extends TopLevelModifiableResourcesImpl<
WebApp,
WebAppImpl,
SiteInner,
WebAppsInner,
AppServiceManager>
implements WebApps {
private final PagedListConverter<SiteInner, WebApp> converter;
WebAppsImpl(final AppServiceManager manager) {
super(manager.inner().webApps(), manager);
converter = new PagedListConverter<SiteInner, WebApp>() {
@Override
public WebApp typeConvert(SiteInner siteInner) {
WebAppImpl impl = wrapModel(siteInner, manager.inner().webApps().getConfiguration(siteInner.resourceGroup(), siteInner.name()));
return impl.cacheSiteProperties().toBlocking().single();
}
@Override
protected boolean filter(SiteInner inner) {
return "app".equals(inner.kind());
}
};
}
@Override
public Observable<WebApp> getByResourceGroupAsync(final String groupName, final String name) {
final WebAppsImpl self = this;
return this.inner().getByResourceGroupAsync(groupName, name).flatMap(new Func1<SiteInner, Observable<WebApp>>() {
@Override
public Observable<WebApp> call(final SiteInner siteInner) {
if (siteInner == null) {
return null;
}
return self.inner().getConfigurationAsync(groupName, name).flatMap(new Func1<SiteConfigResourceInner, Observable<WebApp>>() {
@Override
public Observable<WebApp> call(SiteConfigResourceInner siteConfigInner) {
return wrapModel(siteInner, siteConfigInner).cacheSiteProperties();
}
});
}
});
}
@Override
protected WebAppImpl wrapModel(String name) {
return new WebAppImpl(name, new SiteInner(), null, this.manager());
}
protected WebAppImpl wrapModel(SiteInner inner, SiteConfigResourceInner configResourceInner) {
if (inner == null) {
return null;
}
return new WebAppImpl(inner.name(), inner, configResourceInner, this.manager());
}
@Override
protected WebAppImpl wrapModel(SiteInner inner) {
return wrapModel(inner, null);
}
protected PagedList<WebApp> wrapList(PagedList<SiteInner> pagedList) {
return converter.convert(pagedList);
}
@Override
public WebAppImpl define(String name) {
return wrapModel(name);
}
}