/** * Copyright 2014 Jordan Zimmerman * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.soabase.admin; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import io.dropwizard.Configuration; import io.dropwizard.configuration.ConfigurationFactory; import io.dropwizard.configuration.ConfigurationFactoryFactory; import io.dropwizard.configuration.YamlConfigurationFactory; import io.soabase.admin.auth.AuthSpec; import io.soabase.admin.components.MetricComponent; import io.soabase.admin.components.StandardComponents; import io.soabase.admin.components.TabComponent; import io.soabase.admin.details.BundleSpec; import javax.validation.Validator; import java.util.List; public class AdminConsoleAppBuilder<T extends Configuration> { private String appName = "Soabase"; private String companyName = ""; private String footerMessage = "- Internal use only - Proprietary and Confidential"; private String soaConfigFieldName = "soa"; private AuthSpec authSpec = null; private final List<TabComponent> tabs = Lists.newArrayList(); private final List<BundleSpec<T>> bundles = Lists.newArrayList(); private final List<MetricComponent> metrics = Lists.newArrayList(); private ConfigurationFactoryFactory<T> factoryFactory = null; public static <T extends Configuration> AdminConsoleAppBuilder<T> builder() { return new AdminConsoleAppBuilder<>(); } public AdminConsoleApp<T> build() { return new AdminConsoleApp<>(this); } public AdminConsoleAppBuilder<T> withSoaConfigFieldName(String soaConfigFieldName) { this.soaConfigFieldName = Preconditions.checkNotNull(soaConfigFieldName, "soaConfigFieldName cannot be null"); return this; } public AdminConsoleAppBuilder<T> withConfigurationClass(final Class<T> configurationClass) { factoryFactory = new ConfigurationFactoryFactory<T>() { @Override public ConfigurationFactory<T> create(Class<T> klass, Validator validator, ObjectMapper objectMapper, String propertyPrefix) { return new YamlConfigurationFactory<>(configurationClass, validator, objectMapper, propertyPrefix); } }; return this; } public AdminConsoleAppBuilder<T> withConfigurationClassFactory(ConfigurationFactoryFactory<T> factoryFactory) { this.factoryFactory = Preconditions.checkNotNull(factoryFactory, "factoryFactory cannot be null"); return this; } public AdminConsoleAppBuilder<T> withAppName(String appName) { this.appName = Preconditions.checkNotNull(appName, "appName cannot be null"); return this; } public AdminConsoleAppBuilder<T> withCompanyName(String companyName) { this.companyName = Preconditions.checkNotNull(companyName, "companyName cannot be null"); return this; } public AdminConsoleAppBuilder<T> withFooterMessage(String footerMessage) { this.footerMessage = Preconditions.checkNotNull(footerMessage, "footerMessage cannot be null"); return this; } public AdminConsoleAppBuilder<T> withAuthSpec(AuthSpec authSpec) { this.authSpec = authSpec; return this; } public AdminConsoleAppBuilder<T> addingTabComponent(TabComponent tabComponent) { tabComponent = Preconditions.checkNotNull(tabComponent, "tabComponent cannot be null"); tabs.add(tabComponent); return this; } public AdminConsoleAppBuilder<T> addingMetricComponent(MetricComponent metricComponent) { metricComponent = Preconditions.checkNotNull(metricComponent, "metricsComponent cannot be null"); metrics.add(metricComponent); return this; } public AdminConsoleAppBuilder<T> addingBundle(BundleSpec<T> bundleSpec) { bundleSpec = Preconditions.checkNotNull(bundleSpec, "bundleSpec cannot be null"); bundles.add(bundleSpec); return this; } public AdminConsoleAppBuilder<T> clearingComponents() { tabs.clear(); metrics.clear(); return this; } String getAppName() { return appName; } String getCompanyName() { return companyName; } String getFooterMessage() { return footerMessage; } String getSoaConfigFieldName() { return soaConfigFieldName; } List<TabComponent> getTabs() { return tabs; } List<BundleSpec<T>> getBundles() { return bundles; } ConfigurationFactoryFactory<T> getFactoryFactory() { return factoryFactory; } List<MetricComponent> getMetrics() { return metrics; } AuthSpec getAuthSpec() { return authSpec; } private AdminConsoleAppBuilder() { tabs.add(StandardComponents.newServicesTab()); tabs.add(StandardComponents.newAttributesTab()); metrics.add(StandardComponents.newHeapMetric()); metrics.add(StandardComponents.newThreadsMetric()); metrics.add(StandardComponents.newCpuMetric()); metrics.add(StandardComponents.newRequestsMetric()); metrics.add(StandardComponents.newGcMetric()); metrics.add(StandardComponents.newGcTimesMetric()); metrics.add(StandardComponents.newRequestStatusMetric()); } }