package alien4cloud.plugin.mock; import java.util.Arrays; import java.util.Map; import javax.annotation.Resource; import org.springframework.beans.factory.BeanFactory; import org.springframework.stereotype.Component; import org.alien4cloud.tosca.model.definitions.PropertyConstraint; import org.alien4cloud.tosca.model.definitions.PropertyDefinition; import org.alien4cloud.tosca.model.definitions.constraints.GreaterOrEqualConstraint; import org.alien4cloud.tosca.model.definitions.constraints.PatternConstraint; import alien4cloud.model.orchestrators.ArtifactSupport; import alien4cloud.model.orchestrators.locations.LocationSupport; import alien4cloud.orchestrators.plugin.IOrchestratorPluginFactory; import alien4cloud.tosca.normative.ToscaType; import com.google.common.collect.Lists; import com.google.common.collect.Maps; /** * Factory for Mock implementation of orchestrator instance. */ @Component("mock-orchestrator-factory") public class MockOrchestratorFactory implements IOrchestratorPluginFactory<MockOrchestrator, ProviderConfig> { public static final String OPENSTACK = "OpenStack"; public static final String AWS = "Amazon"; @Resource private BeanFactory beanFactory; private final Map<String, PropertyDefinition> deploymentProperties = Maps.newHashMap(); @Override public MockOrchestrator newInstance() { return beanFactory.getBean(MockOrchestrator.class); } @Override public void destroy(MockOrchestrator instance) { // nothing specific, the plugin will be garbaged collected when all references are lost. } @Override public ProviderConfig getDefaultConfiguration() { return new ProviderConfig(); } @Override public Class<ProviderConfig> getConfigurationType() { return ProviderConfig.class; } @Override public LocationSupport getLocationSupport() { return new LocationSupport(true, new String[] { OPENSTACK, AWS }); } @Override public ArtifactSupport getArtifactSupport() { // support all type of implementations artifacts return new ArtifactSupport(new String[] { "alien.artifacts.BatchScript", "tosca.artifacts.Implementation.Bash" }); } @Override public Map<String, PropertyDefinition> getDeploymentPropertyDefinitions() { // Field 1 : managerUrl as string PropertyDefinition managerUrl = new PropertyDefinition(); managerUrl.setType(ToscaType.STRING.toString()); managerUrl.setRequired(true); managerUrl.setDescription("PaaS manager URL"); managerUrl.setConstraints(null); PatternConstraint manageUrlConstraint = new PatternConstraint(); manageUrlConstraint.setPattern("http://.+"); managerUrl.setConstraints(Arrays.asList((PropertyConstraint) manageUrlConstraint)); // Field 2 : number backup with constraint PropertyDefinition numberBackup = new PropertyDefinition(); numberBackup.setType(ToscaType.INTEGER.toString()); numberBackup.setRequired(true); numberBackup.setDescription("Number of backup"); numberBackup.setConstraints(null); GreaterOrEqualConstraint greaterOrEqualConstraint = new GreaterOrEqualConstraint(); greaterOrEqualConstraint.setGreaterOrEqual(String.valueOf("1")); numberBackup.setConstraints(Lists.newArrayList((PropertyConstraint) greaterOrEqualConstraint)); // Field 3 : email manager PropertyDefinition managerEmail = new PropertyDefinition(); managerEmail.setType(ToscaType.STRING.toString()); managerEmail.setRequired(true); managerEmail.setDescription("PaaS manager email"); managerEmail.setConstraints(null); PatternConstraint managerEmailConstraint = new PatternConstraint(); managerEmailConstraint.setPattern(".+@.+"); managerEmail.setConstraints(Arrays.asList((PropertyConstraint) managerEmailConstraint)); deploymentProperties.put("managementUrl", managerUrl); deploymentProperties.put("numberBackup", numberBackup); deploymentProperties.put("managerEmail", managerEmail); return deploymentProperties; } @Override public String getType() { return "Mock Orchestrator"; } }