Skip to content

Commit

Permalink
ToscaMetadataProvider handles all ToscaTypeProviders
Browse files Browse the repository at this point in the history
  • Loading branch information
Sam Corbett committed Nov 23, 2015
1 parent 2ee2615 commit 13be08c
Show file tree
Hide file tree
Showing 12 changed files with 199 additions and 108 deletions.
34 changes: 21 additions & 13 deletions a4c-brooklyn-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,30 @@
<artifactId>brooklyn-rest-client</artifactId>
<version>${brooklyn.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${httpclient.version}</version>
</dependency>

<!-- others -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>

<!-- tests -->
<dependency>
<groupId>junit</groupId>
Expand Down Expand Up @@ -91,19 +108,10 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>${httpclient.version}</version>
<groupId>org.apache.brooklyn</groupId>
<artifactId>brooklyn-software-database</artifactId>
<version>${brooklyn.version}</version>
<scope>test</scope>
</dependency>
</dependencies>

Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,10 @@
package alien4cloud.brooklyn;

import java.nio.file.Path;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

import alien4cloud.brooklyn.metadata.AbstractToscaMetadataProvider;
import alien4cloud.model.components.AttributeDefinition;
import alien4cloud.model.components.CSARDependency;
import alien4cloud.model.components.Csar;
import alien4cloud.model.components.IValue;
import alien4cloud.model.components.IndexedNodeType;
import alien4cloud.model.components.Interface;
import alien4cloud.model.components.Operation;
import alien4cloud.model.components.PropertyDefinition;
import alien4cloud.plugin.model.ManagedPlugin;
import alien4cloud.tosca.ArchiveParser;
import alien4cloud.tosca.normative.ToscaType;
import alien4cloud.tosca.parser.ParsingException;
import alien4cloud.tosca.parser.ParsingResult;
import com.google.common.collect.ImmutableList;
import lombok.extern.slf4j.Slf4j;

import org.apache.brooklyn.rest.client.BrooklynApi;
import org.apache.brooklyn.rest.domain.CatalogEntitySummary;
import org.apache.brooklyn.rest.domain.EffectorSummary;
Expand All @@ -32,14 +14,32 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;

import alien4cloud.brooklyn.metadata.ToscaMetadataProvider;
import alien4cloud.brooklyn.metadata.ToscaTypeProvider;
import alien4cloud.component.repository.ICsarRepositry;
import alien4cloud.csar.services.CsarService;
import alien4cloud.model.components.AttributeDefinition;
import alien4cloud.model.components.CSARDependency;
import alien4cloud.model.components.Csar;
import alien4cloud.model.components.IValue;
import alien4cloud.model.components.IndexedNodeType;
import alien4cloud.model.components.Interface;
import alien4cloud.model.components.Operation;
import alien4cloud.model.components.PropertyDefinition;
import alien4cloud.plugin.model.ManagedPlugin;
import alien4cloud.tosca.ArchiveImageLoader;
import alien4cloud.tosca.ArchiveIndexer;
import alien4cloud.tosca.ArchiveParser;
import alien4cloud.tosca.model.ArchiveRoot;
import alien4cloud.tosca.normative.ToscaType;
import alien4cloud.tosca.parser.ParsingException;
import alien4cloud.tosca.parser.ParsingResult;
import lombok.extern.slf4j.Slf4j;

/**
* This component is used to map components out of brooklyn to a4c.
Expand All @@ -50,6 +50,7 @@
@Slf4j
public class BrooklynCatalogMapper {
private final static Map<String, String> TYPE_MAPPING = Maps.newHashMap();

static {
TYPE_MAPPING.put(Boolean.class.getName(), ToscaType.BOOLEAN);
TYPE_MAPPING.put(String.class.getName(), ToscaType.STRING);
Expand Down Expand Up @@ -95,7 +96,7 @@ public void addBaseTypes(){
}
}

public void mapBrooklynEntities(BrooklynApi brooklynApi, AbstractToscaMetadataProvider metadataProvider) {
public void mapBrooklynEntities(BrooklynApi brooklynApi, ToscaMetadataProvider metadataProvider) {
ArchiveRoot archiveRoot = new ArchiveRoot();
// Brooklyn actually depends on normative types and alien types
archiveRoot.getArchive().setToscaDefinitionsVersion("tosca_simple_yaml_1_0_0_wd03");
Expand Down Expand Up @@ -129,7 +130,7 @@ public void mapBrooklynEntities(BrooklynApi brooklynApi, AbstractToscaMetadataPr
archiveIndexer.indexArchive(archiveRoot.getArchive().getName(), archiveRoot.getArchive().getVersion(), archiveRoot, true);
}

public void mapBrooklynEntity(BrooklynApi brooklynApi, ArchiveRoot archiveRoot, String entityName, String entityVersion, AbstractToscaMetadataProvider metadataProvider) {
public void mapBrooklynEntity(BrooklynApi brooklynApi, ArchiveRoot archiveRoot, String entityName, String entityVersion, ToscaMetadataProvider metadataProvider) {
try {
IndexedNodeType toscaType = new IndexedNodeType();
CatalogEntitySummary brooklynEntity = loadEntity(brooklynApi, entityName);
Expand All @@ -148,10 +149,11 @@ public void mapBrooklynEntity(BrooklynApi brooklynApi, ArchiveRoot archiveRoot,
addPropertyDefinitions(brooklynEntity, toscaType);
addAttributeDefinitions(brooklynEntity, toscaType);
addInterfaces(brooklynEntity, toscaType);
toscaType.setDerivedFrom(ImmutableList.of(
metadataProvider.findToscaType(brooklynEntity.getType())
));

Optional<String> derivedFrom = metadataProvider.getToscaType(brooklynEntity.getType());
if (derivedFrom.isPresent()) {
toscaType.setDerivedFrom(ImmutableList.of(derivedFrom.get()));
}

// TODO override the host requirement in order to say that none is required.
// or say it requires some type of cloud/server/location/etc
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package alien4cloud.brooklyn;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package alien4cloud.brooklyn;

import java.util.Collections;
import java.util.List;
import java.util.Map;

import alien4cloud.brooklyn.metadata.BrooklynToscaTypeProvider;
import alien4cloud.brooklyn.metadata.DefaultToscaTypeProvider;
import lombok.extern.slf4j.Slf4j;

import org.apache.brooklyn.util.collections.MutableList;
Expand Down Expand Up @@ -43,12 +46,15 @@ public Class<Configuration> getConfigurationType() {

@Override
public Configuration getDefaultConfiguration() {
// List ordered lowest to highest priority.
List<String> metadataProviders = MutableList.of(
DefaultToscaTypeProvider.class.getName(),
BrooklynToscaTypeProvider.class.getName());
return new Configuration("http://localhost:8081/",
"brooklyn",
"brooklyn",
"localhost",
MutableList.of("alien4cloud.brooklyn.metadata.DefaultToscaMetadataProvider")
);
metadataProviders);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,12 @@

import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.ws.rs.core.Response;

import alien4cloud.brooklyn.metadata.AbstractToscaMetadataProvider;
import alien4cloud.dao.IGenericSearchDAO;
import alien4cloud.orchestrators.locations.services.LocationService;
import alien4cloud.paas.model.InstanceStatus;
import alien4cloud.paas.model.PaaSMessageMonitorEvent;
import lombok.SneakyThrows;

import org.apache.brooklyn.rest.client.BrooklynApi;
import org.apache.brooklyn.rest.domain.ApplicationSummary;
import org.apache.brooklyn.rest.domain.EntitySummary;
Expand All @@ -33,13 +25,17 @@
import com.google.common.collect.Sets;

import alien4cloud.application.ApplicationService;
import alien4cloud.brooklyn.metadata.ToscaMetadataProvider;
import alien4cloud.brooklyn.metadata.ToscaTypeProvider;
import alien4cloud.dao.IGenericSearchDAO;
import alien4cloud.exception.NotFoundException;
import alien4cloud.model.application.Application;
import alien4cloud.model.common.Tag;
import alien4cloud.model.components.AbstractPropertyValue;
import alien4cloud.model.components.ScalarPropertyValue;
import alien4cloud.model.topology.NodeTemplate;
import alien4cloud.model.topology.Topology;
import alien4cloud.orchestrators.locations.services.LocationService;
import alien4cloud.paas.IConfigurablePaaSProvider;
import alien4cloud.paas.IPaaSCallback;
import alien4cloud.paas.exception.MaintenanceModeException;
Expand All @@ -48,9 +44,12 @@
import alien4cloud.paas.model.AbstractMonitorEvent;
import alien4cloud.paas.model.DeploymentStatus;
import alien4cloud.paas.model.InstanceInformation;
import alien4cloud.paas.model.InstanceStatus;
import alien4cloud.paas.model.NodeOperationExecRequest;
import alien4cloud.paas.model.PaaSDeploymentContext;
import alien4cloud.paas.model.PaaSMessageMonitorEvent;
import alien4cloud.paas.model.PaaSTopologyDeploymentContext;
import lombok.SneakyThrows;

/**
*
Expand Down Expand Up @@ -109,23 +108,22 @@ public void init(Map<String, PaaSTopologyDeploymentContext> activeDeployments) {
// TODO synchronise locations
catalogMapper.addBaseTypes();

AbstractToscaMetadataProvider metadataProvider = null;
for (String provider : configuration.getProviders()) {
List<ToscaTypeProvider> metadataProviders = new LinkedList<>();
for (String providerClass : configuration.getProviders()) {
try {
AbstractToscaMetadataProvider next = (AbstractToscaMetadataProvider)Class.forName(provider).newInstance();
if(metadataProvider == null) {metadataProvider = next;}
else {
next.setNext(metadataProvider);
metadataProvider = next;
}
Object provider = Class.forName(providerClass).newInstance();
// Alien UI has higher priority items at the end of the list.
// Reverse the order here.
metadataProviders.add(0, ToscaTypeProvider.class.cast(provider));
} catch (IllegalAccessException| InstantiationException | ClassNotFoundException e) {
log.warn("no such metadata provider {}", provider);
log.warn("Could not load metadata provider " + providerClass, e);
}
}
catalogMapper.mapBrooklynEntities(getNewBrooklynApi(), metadataProvider);


} finally { revertContextClassLoader(); }
catalogMapper.mapBrooklynEntities(getNewBrooklynApi(), new ToscaMetadataProvider(metadataProviders));

} finally {
revertContextClassLoader();
}
}

@Override
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package alien4cloud.brooklyn.metadata;

import com.google.common.base.Optional;
import com.google.common.collect.ImmutableMap;

import java.util.Map;

public class BrooklynToscaTypeProvider implements ToscaTypeProvider {

private Map<String, String> typeMapping = ImmutableMap.of(
"org.apache.brooklyn.entity.database.mysql.MySqlNode", "brooklyn.nodes.Database"
);

@Override
public Optional<String> getToscaType(String type) {
return Optional.fromNullable(typeMapping.get(type));
}

}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package alien4cloud.brooklyn.metadata;

import com.google.common.base.Optional;

/**
* A {@link ToscaTypeProvider} that always returns "brooklyn.nodes.SoftwareProcess".
*/
public class DefaultToscaTypeProvider implements ToscaTypeProvider {

@Override
public Optional<String> getToscaType(String type) {
return Optional.of("brooklyn.nodes.SoftwareProcess");
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package alien4cloud.brooklyn.metadata;

import java.util.List;

import com.google.common.base.Optional;

public class ToscaMetadataProvider {

private final List<ToscaTypeProvider> providers;

public ToscaMetadataProvider(List<ToscaTypeProvider> providers) {
this.providers = providers;
}

/**
* @see alien4cloud.brooklyn.metadata.ToscaTypeProvider#getToscaType(String)
*/
public Optional<String> getToscaType(String type) {
for (ToscaTypeProvider provider : providers) {
Optional<String> providedType = provider.getToscaType(type);
if (providedType.isPresent()) {
return providedType;
}
}
return Optional.absent();
}

}
Loading

0 comments on commit 13be08c

Please sign in to comment.