package alien4cloud.dao; import java.beans.IntrospectionException; import java.io.IOException; import javax.annotation.PostConstruct; import org.alien4cloud.tosca.model.Csar; import org.alien4cloud.tosca.model.templates.Topology; import org.alien4cloud.tosca.model.types.*; import org.springframework.stereotype.Component; import alien4cloud.exception.IndexingServiceException; import alien4cloud.model.application.Application; import alien4cloud.model.application.ApplicationEnvironment; import alien4cloud.model.application.ApplicationVersion; import alien4cloud.model.common.AbstractSuggestionEntry; import alien4cloud.model.common.MetaPropConfiguration; import alien4cloud.model.common.SimpleSuggestionEntry; import alien4cloud.model.common.SuggestionEntry; import alien4cloud.model.deployment.Deployment; import alien4cloud.model.deployment.DeploymentTopology; import alien4cloud.model.git.CsarGitRepository; import alien4cloud.model.orchestrators.Orchestrator; import alien4cloud.model.orchestrators.OrchestratorConfiguration; import alien4cloud.model.orchestrators.locations.Location; import alien4cloud.model.orchestrators.locations.LocationResourceTemplate; import alien4cloud.model.repository.Repository; import alien4cloud.plugin.Plugin; import alien4cloud.plugin.model.PluginConfiguration; import lombok.extern.slf4j.Slf4j; /** * Elastic Search DAO for alien 4 cloud application. * * @author luc boutier */ @Slf4j @Component("alien-es-dao") public class ElasticSearchDAO extends ESGenericSearchDAO { public static final String TOSCA_ELEMENT_INDEX = "toscaelement"; public static final String SUGGESTION_INDEX = "suggestion"; /** * Initialize the dao after being loaded by spring (Create the indexes). */ @PostConstruct public void initEnvironment() { // init ES annotation scanning try { getMappingBuilder().initialize("alien4cloud"); getMappingBuilder().initialize("org.alien4cloud"); getMappingBuilder().parseClassMapping(AbstractToscaType.class, ""); } catch (IntrospectionException | IOException e) { throw new IndexingServiceException("Could not initialize elastic search mapping builder", e); } // init indices and mapped classes setJsonMapper(ElasticSearchMapper.getInstance()); initIndices(TOSCA_ELEMENT_INDEX, null, CapabilityType.class, ArtifactType.class, RelationshipType.class, NodeType.class, DataType.class, PrimitiveDataType.class); initIndices(TOSCA_ELEMENT_INDEX, null, AbstractInstantiableToscaType.class, AbstractToscaType.class); initIndice(Application.class); initIndice(ApplicationVersion.class); initIndice(ApplicationEnvironment.class); initIndice(Topology.class); initIndice(Csar.class); initIndice(Repository.class); initIndice(Plugin.class); initIndice(PluginConfiguration.class); initIndice(MetaPropConfiguration.class); initIndice(Orchestrator.class); initIndice(OrchestratorConfiguration.class); initIndice(Location.class); initIndice(LocationResourceTemplate.class); initIndice(Deployment.class); initIndice(CsarGitRepository.class); initIndice(DeploymentTopology.class); initIndices(SUGGESTION_INDEX, null, AbstractSuggestionEntry.class, SuggestionEntry.class, SimpleSuggestionEntry.class); initCompleted(); } private void initIndice(Class<?> clazz) { initIndices(clazz.getSimpleName().toLowerCase(), null, clazz); } }