/** * Copyright (C) 2013 Red Hat, Inc. (jdcasey@commonjava.org) * * 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 org.commonjava.cartographer.embed; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.IOUtils; import org.commonjava.cartographer.INTERNAL.graph.discover.DiscovererImpl; import org.commonjava.cartographer.INTERNAL.graph.discover.SourceManagerImpl; import org.commonjava.cartographer.ObjectMapperModuleSet; import org.commonjava.cartographer.conf.CartographerConfig; import org.commonjava.cartographer.graph.discover.meta.MetadataScannerSupport; import org.commonjava.cartographer.graph.discover.patch.PatcherSupport; import org.commonjava.cartographer.graph.mutator.ManagedDependencyGraphMutatorFactory; import org.commonjava.cartographer.graph.RelationshipGraphFactory; import org.commonjava.cartographer.graph.spi.neo4j.FileNeo4jConnectionFactory; import org.commonjava.maven.galley.GalleyInitException; import org.commonjava.maven.galley.cache.CacheProviderFactory; import org.commonjava.maven.galley.filearc.FileTransportConfig; import org.commonjava.maven.galley.maven.ArtifactManager; import org.commonjava.maven.galley.maven.parse.MavenPomReader; import org.commonjava.maven.galley.maven.rel.MavenModelProcessor; import org.commonjava.maven.galley.spi.cache.CacheProvider; import org.commonjava.maven.galley.spi.event.FileEventManager; import org.commonjava.maven.galley.spi.io.PathGenerator; import org.commonjava.maven.galley.spi.io.TransferDecorator; import org.commonjava.maven.galley.transport.htcli.conf.GlobalHttpConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.enterprise.context.ApplicationScoped; import javax.enterprise.inject.Default; import javax.enterprise.inject.Instance; import javax.enterprise.inject.Produces; import javax.inject.Inject; /** * Created by jdcasey on 9/14/15. */ @ApplicationScoped public class EmbeddableCDIProducer { @Inject private CartographerConfig config; @Inject private Instance<ObjectMapperModuleSet> moduleSetInstances; @Inject private ObjectMapper objectMapper; @Inject private MetadataScannerSupport metadataScanners; @Inject private PatcherSupport patcherSupport; @Inject private ArtifactManager artifactManager; @Inject private MavenPomReader pomReader; @Inject private PathGenerator pathGenerator; @Inject private TransferDecorator transferDecorator; @Inject private FileEventManager fileEventManager; @Inject private CacheProviderFactory cacheProviderFactory; private RelationshipGraphFactory graphFactory; private SourceManagerImpl sourceManager; private DiscovererImpl discoverer; private FileTransportConfig fileTransportConfig; private GlobalHttpConfiguration globalHttpConfiguration; private ManagedDependencyGraphMutatorFactory mutatorFactory; private CacheProvider cacheProvider; @PostConstruct public void postConstruct() { graphFactory = new RelationshipGraphFactory( new FileNeo4jConnectionFactory( config.getDataBasedir(), false )); sourceManager = new SourceManagerImpl(); discoverer = new DiscovererImpl( new MavenModelProcessor(), pomReader, artifactManager, patcherSupport, metadataScanners ); if ( moduleSetInstances != null ) { Logger logger = LoggerFactory.getLogger( getClass() ); logger.debug( "Adding modules to ObjectMapper in Cartographer: {}", objectMapper ); moduleSetInstances.forEach( ( moduleSet ) -> moduleSet.getSerializerModules() .forEach( ( module ) -> objectMapper.registerModule( module ) ) ); } fileTransportConfig = new FileTransportConfig( config.getCacheBasedir(), pathGenerator ); globalHttpConfiguration = new GlobalHttpConfiguration(); mutatorFactory = new ManagedDependencyGraphMutatorFactory(); } @PreDestroy public void preDestroy() { if ( graphFactory != null ) { IOUtils.closeQuietly( graphFactory ); } } @Default @Produces public RelationshipGraphFactory getGraphFactory() { return graphFactory; } @Default @Produces public SourceManagerImpl getSourceManager() { return sourceManager; } @Default @Produces public DiscovererImpl getDiscoverer() { return discoverer; } @Produces @Default public FileTransportConfig getFileTransportConfig() { return fileTransportConfig; } @Produces @Default public GlobalHttpConfiguration getGlobalHttpConfiguration() { return globalHttpConfiguration; } @Produces @Default public ManagedDependencyGraphMutatorFactory getMutatorFactory() { return mutatorFactory; } @Produces @Default public synchronized CacheProvider getCacheProvider() { if ( cacheProvider == null ) { try { cacheProvider = cacheProviderFactory.create( pathGenerator, transferDecorator, fileEventManager ); } catch ( GalleyInitException e ) { throw new IllegalStateException( "Failed to create CacheProvider: " + e.getMessage(), e ); } } return cacheProvider; } }