All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.datarouter.aws.rds.config.DatarouterAwsRdsPlugin Maven / Gradle / Ivy

/*
 * Copyright © 2009 HotPads ([email protected])
 *
 * 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.datarouter.aws.rds.config;

import java.util.ArrayList;
import java.util.List;

import io.datarouter.aws.rds.service.AuroraAvailabilityZoneProvider;
import io.datarouter.aws.rds.service.AuroraAvailabilityZoneProvider.GenericAvailabilityZoneProvider;
import io.datarouter.aws.rds.service.AuroraClientIdProvider;
import io.datarouter.aws.rds.service.AuroraClientIdProvider.AuroraClientDto;
import io.datarouter.aws.rds.service.AuroraClientIdProvider.GenericAuroraClientIdProvider;
import io.datarouter.aws.rds.service.AwsTags;
import io.datarouter.aws.rds.service.AwsTags.NoOpAwsTags;
import io.datarouter.aws.rds.service.DatabaseAdministrationConfiguration;
import io.datarouter.aws.rds.service.DatabaseAdministrationConfiguration.NoOpDatabaseAdministrationConfiguration;
import io.datarouter.job.BaseTriggerGroup;
import io.datarouter.storage.config.setting.DatarouterSettingOverrides;
import io.datarouter.web.config.BaseWebPlugin;
import io.datarouter.web.navigation.DatarouterNavBarCategory;

public class DatarouterAwsRdsPlugin extends BaseWebPlugin{

	private final Class databaseAdministrationConfiguration;
	private final Class awsTags;
	private final List auroraClientDtos;
	private final String availabilityZone;
	private final Class settingOverridesClass;

	private DatarouterAwsRdsPlugin(
			Class databaseAdministrationConfiguration,
			Class awsTags,
			List auroraClientDtos,
			String availabilityZone,
			Class settingOverridesClass){
		this.databaseAdministrationConfiguration = databaseAdministrationConfiguration;
		this.awsTags = awsTags;
		this.auroraClientDtos = auroraClientDtos;
		this.availabilityZone = availabilityZone;
		this.settingOverridesClass = settingOverridesClass;
		addRouteSet(DatarouterAwsRdsRouteSet.class);
		addPluginEntry(BaseTriggerGroup.KEY, DatarouterAwsRdsTriggerGroup.class);
		addSettingRoot(DatarouterAwsRdsSettingRoot.class);
		addDatarouterNavBarItem(DatarouterNavBarCategory.MONITORING,
				new DatarouterAwsPaths().datarouter.auroraInstances.inspectClientUrl, "Aurora Clients");
		addDatarouterGithubDocLink("datarouter-aws-rds");
	}

	@Override
	public void configure(){
		bind(DatabaseAdministrationConfiguration.class).to(databaseAdministrationConfiguration);
		bind(AwsTags.class).to(awsTags);
		bind(AuroraClientIdProvider.class).toInstance(new GenericAuroraClientIdProvider(auroraClientDtos));
		bind(AuroraAvailabilityZoneProvider.class).toInstance(new GenericAvailabilityZoneProvider(availabilityZone));
		bind(settingOverridesClass).asEagerSingleton(); // allow overriders in tests;
	}

	public static class DatarouterAwsRdsPluginBuilder{

		private final Class settingOverridesClass;

		private Class databaseAdministrationConfiguration
				= NoOpDatabaseAdministrationConfiguration.class;
		private Class awsTags = NoOpAwsTags.class;
		private List auroraClientDtos = new ArrayList<>();
		private String availabilityZone = "";

		public DatarouterAwsRdsPluginBuilder(Class settingOverridesClass){
			this.settingOverridesClass = settingOverridesClass;
		}

		public DatarouterAwsRdsPluginBuilder withDatabaseAdministratorConfigurationClass(
				Class databaseAdministrationConfiguration){
			this.databaseAdministrationConfiguration = databaseAdministrationConfiguration;
			return this;
		}

		public DatarouterAwsRdsPluginBuilder withAwsTagClass(Class awsTags){
			this.awsTags = awsTags;
			return this;
		}

		public DatarouterAwsRdsPluginBuilder addAuroraClientDto(AuroraClientDto auroraClientDto){
			this.auroraClientDtos.add(auroraClientDto);
			return this;
		}

		public DatarouterAwsRdsPluginBuilder addAuroraAvailabilityZone(String availabilityZone){
			this.availabilityZone = availabilityZone;
			return this;
		}

		public DatarouterAwsRdsPlugin build(){
			return new DatarouterAwsRdsPlugin(
					databaseAdministrationConfiguration,
					awsTags,
					auroraClientDtos,
					availabilityZone,
					settingOverridesClass);
		}

	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy