public static void main()

in populate-jcr-repo/src/main/java/org/apache/archiva/metadata/repository/jcr/PopulateRepoApp.java [48:145]


    public static void main( String[] args )
        throws RepositoryException, MetadataRepositoryException, RepositoryStorageMetadataNotFoundException,
        RepositoryStorageMetadataInvalidException
    {
        MavenArtifactFacetFactory factory = new MavenArtifactFacetFactory();

        Map<String, MetadataFacetFactory> metadataFacetFactories =
            Collections.<String, MetadataFacetFactory>singletonMap( MavenArtifactFacet.FACET_ID, factory );

        ConfigurableApplicationContext applicationContext = new PlexusClassPathXmlApplicationContext(
            CONFIG_LOCATIONS );

        MetadataRepository metadataRepository = null;
        try
        {
            File basedir;
            if ( args.length > 0 )
            {
                basedir = new File( args[0] );
            }
            else
            {
                basedir = new File( System.getProperty( "user.home" ),
                                    "Library/Application Support/Archiva/data/repositories/internal" );
            }

            PopulateRepoAppConfig archivaConfig = (PopulateRepoAppConfig) applicationContext.getBean(
                "archivaConfiguration" );
            archivaConfig.addManagedRepo( REPO_ID, basedir );

            metadataRepository = createJcrMetadataRepository( metadataFacetFactories );
//            metadataRepository = createFileMetadataRepository( metadataFacetFactories, archivaConfig );

            Maven2RepositoryPathTranslator translator = (Maven2RepositoryPathTranslator) applicationContext.getBean(
                "repositoryPathTranslator#maven2" );

            Maven2RepositoryStorage storage = (Maven2RepositoryStorage) applicationContext.getBean(
                "repositoryStorage#maven2" );

//            File dir = basedir;
            File dir = new File( basedir, "org/apache/archiva" );

            IOFileFilter dirFilter = new NotFileFilter( new WildcardFileFilter( new String[]{".index*", ".archiva"} ) );
            IOFileFilter fileFilter = new NotFileFilter( new WildcardFileFilter(
                new String[]{"*.asc", "*.md5", "*.sha1", "maven-metadata*.xml"} ) );
            Collection<File> files = FileUtils.listFiles( dir, fileFilter, dirFilter );

            int index = basedir.getAbsolutePath().length() + 1;

            int count = 0, total = files.size();
            System.out.println( "Processing " + total + " files" );
            for ( File f : files )
            {
                String path = f.getAbsolutePath().substring( index );

                ArtifactMetadata artifact = translator.getArtifactForPath( REPO_ID, path );
                artifact.setWhenGathered( new Date() );

                artifact.setFileLastModified( f.lastModified() );
                artifact.setSize( f.length() );

                // skipping checksums for speed

                try
                {
                    ProjectVersionMetadata metadata;
                    metadata = storage.readProjectVersionMetadata( REPO_ID, artifact.getNamespace(),
                                                                   artifact.getProject(),
                                                                   artifact.getProjectVersion() );

                    metadataRepository.updateProjectVersion( REPO_ID, artifact.getNamespace(), artifact.getProject(),
                                                             metadata );
                }
                catch ( Exception e )
                {
                    log.warn( "Unable to read POM, skipping: " + e.getMessage() );
                }

                metadataRepository.updateArtifact( REPO_ID, artifact.getNamespace(), artifact.getProject(),
                                                   artifact.getProjectVersion(), artifact );

                if ( ++count % 500 == 0 )
                {
                    System.out.println( "saving " + ( count * 100 / total ) + "%" );
                    metadataRepository.save();
                }
            }
            metadataRepository.save();
        }
        finally
        {
            if ( metadataRepository != null )
            {
                metadataRepository.close();
            }
            applicationContext.close();
        }
    }