package com.sequenceiq.cloudbreak.shell.configuration;
import javax.inject.Inject;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.sequenceiq.cloudbreak.shell.commands.base.BaseCredentialCommands;
import com.sequenceiq.cloudbreak.shell.commands.base.BaseNetworkCommands;
import com.sequenceiq.cloudbreak.shell.commands.base.BasePlatformCommands;
import com.sequenceiq.cloudbreak.shell.commands.base.BaseStackCommands;
import com.sequenceiq.cloudbreak.shell.commands.base.BaseTemplateCommands;
import com.sequenceiq.cloudbreak.shell.commands.base.BaseSecurityGroupCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.BasicCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.BlueprintCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.ClusterCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.DatabaseCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.HostGroupCommands;
import com.sequenceiq.cloudbreak.shell.commands.base.BaseInstanceGroupCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.RdsConfigCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.LdapConfigCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.RecipeCommands;
import com.sequenceiq.cloudbreak.shell.commands.common.SssdConfigCommands;
import com.sequenceiq.cloudbreak.shell.commands.provider.AwsCommands;
import com.sequenceiq.cloudbreak.shell.commands.provider.AzureCommands;
import com.sequenceiq.cloudbreak.shell.commands.provider.GcpCommands;
import com.sequenceiq.cloudbreak.shell.commands.provider.MarathonCommands;
import com.sequenceiq.cloudbreak.shell.commands.provider.OpenStackCommands;
import com.sequenceiq.cloudbreak.shell.commands.provider.YarnCommands;
import com.sequenceiq.cloudbreak.shell.model.ShellContext;
import com.sequenceiq.cloudbreak.shell.util.CloudbreakShellUtil;
@Configuration
public class CommandDefinition {
@Inject
private ShellContext shellContext;
@Inject
private CloudbreakShellUtil cloudbreakShellUtil;
@Bean
BaseCredentialCommands baseCredentialCommands() {
return new BaseCredentialCommands(shellContext);
}
@Bean
BaseTemplateCommands baseTemplateCommands() {
return new BaseTemplateCommands(shellContext);
}
@Bean
BaseNetworkCommands baseNetworkCommands() {
return new BaseNetworkCommands(shellContext);
}
@Bean
BasePlatformCommands basePlatformCommands() {
return new BasePlatformCommands(shellContext);
}
@Bean
BasicCommands basicCommands() {
return new BasicCommands(shellContext);
}
@Bean
BlueprintCommands blueprintCommands() {
return new BlueprintCommands(shellContext);
}
@Bean
RecipeCommands recipeCommands() {
return new RecipeCommands(shellContext);
}
@Bean
BaseSecurityGroupCommands baseSecurityGroupCommands() {
return new BaseSecurityGroupCommands(shellContext);
}
@Bean
SssdConfigCommands sssdConfigCommands() {
return new SssdConfigCommands(shellContext);
}
@Bean
RdsConfigCommands rdsConfigCommands() {
return new RdsConfigCommands(shellContext);
}
@Bean
LdapConfigCommands ldapConfigCommands() {
return new LdapConfigCommands(shellContext);
}
@Bean
BaseStackCommands stackCommands() {
return new BaseStackCommands(shellContext, cloudbreakShellUtil);
}
@Bean
HostGroupCommands hostGroupCommands() {
return new HostGroupCommands(shellContext);
}
@Bean
BaseInstanceGroupCommands instanceGroupCommands() {
return new BaseInstanceGroupCommands(shellContext);
}
@Bean
DatabaseCommands databaseCommands() {
return new DatabaseCommands(shellContext);
}
@Bean
ClusterCommands clusterCommands() {
return new ClusterCommands(shellContext, cloudbreakShellUtil, stackCommands());
}
@Bean
public AwsCommands awsCredentialCommands() {
return new AwsCommands(shellContext, baseCredentialCommands(), baseNetworkCommands(), baseSecurityGroupCommands(),
baseTemplateCommands(), basePlatformCommands(), stackCommands(), instanceGroupCommands());
}
@Bean
public AzureCommands azureCredentialCommands() {
return new AzureCommands(shellContext, baseCredentialCommands(), baseNetworkCommands(), baseSecurityGroupCommands(),
baseTemplateCommands(), basePlatformCommands(), stackCommands(), instanceGroupCommands());
}
@Bean
public GcpCommands gcpCredentialCommands() {
return new GcpCommands(shellContext, baseCredentialCommands(), baseNetworkCommands(), baseSecurityGroupCommands(),
baseTemplateCommands(), basePlatformCommands(), stackCommands(), instanceGroupCommands());
}
@Bean
public OpenStackCommands openStackCredentialCommands() {
return new OpenStackCommands(shellContext, baseCredentialCommands(), baseNetworkCommands(), baseSecurityGroupCommands(),
baseTemplateCommands(), basePlatformCommands(), stackCommands(), instanceGroupCommands());
}
@Bean
public YarnCommands yarnCommands() {
return new YarnCommands(shellContext, baseCredentialCommands(), baseNetworkCommands(), baseSecurityGroupCommands(),
baseTemplateCommands(), basePlatformCommands(), stackCommands());
}
@Bean
public MarathonCommands marathonCommands() {
return new MarathonCommands(shellContext, baseCredentialCommands(), baseNetworkCommands(), baseSecurityGroupCommands(),
baseTemplateCommands(), basePlatformCommands(), stackCommands());
}
}