001    package org.apache.archiva.metadata.repository.file;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     * http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.apache.archiva.metadata.model.MetadataFacetFactory;
023    import org.apache.archiva.metadata.repository.MetadataRepository;
024    import org.apache.archiva.metadata.repository.MetadataResolver;
025    import org.apache.archiva.metadata.repository.RepositorySession;
026    import org.apache.archiva.metadata.repository.RepositorySessionFactory;
027    import org.apache.commons.lang.StringUtils;
028    import org.apache.archiva.configuration.ArchivaConfiguration;
029    import org.springframework.context.ApplicationContext;
030    import org.springframework.stereotype.Service;
031    
032    import javax.annotation.PostConstruct;
033    import javax.inject.Inject;
034    import javax.inject.Named;
035    import java.util.HashMap;
036    import java.util.Map;
037    
038    /**
039     *
040     */
041    @Service( "repositorySessionFactory#file" )
042    public class FileRepositorySessionFactory
043        implements RepositorySessionFactory
044    {
045        /**
046         *
047         */
048        private Map<String, MetadataFacetFactory> metadataFacetFactories;
049    
050        /**
051         *
052         */
053        @Inject
054        @Named( value = "archivaConfiguration#default" )
055        private ArchivaConfiguration configuration;
056    
057        /**
058         *
059         */
060        @Inject
061        private MetadataResolver metadataResolver;
062    
063        @Inject
064        private ApplicationContext applicationContext;
065    
066        @PostConstruct
067        public void initialize()
068        {
069            Map<String, MetadataFacetFactory> tmpMetadataFacetFactories =
070                applicationContext.getBeansOfType( MetadataFacetFactory.class );
071            // olamy with spring the "id" is now "metadataFacetFactory#hint"
072            // whereas was only hint with plexus so let remove  metadataFacetFactory#
073            metadataFacetFactories = new HashMap<String, MetadataFacetFactory>( tmpMetadataFacetFactories.size() );
074    
075            for ( Map.Entry<String, MetadataFacetFactory> entry : tmpMetadataFacetFactories.entrySet() )
076            {
077                metadataFacetFactories.put( StringUtils.substringAfterLast( entry.getKey(), "#" ), entry.getValue() );
078            }
079    
080    
081        }
082    
083        public RepositorySession createSession()
084        {
085            MetadataRepository metadataRepository = new FileMetadataRepository( metadataFacetFactories, configuration );
086    
087            return new RepositorySession( metadataRepository, metadataResolver );
088        }
089    }