class ExplicitIndexMigrator extends AbstractStoreMigrationParticipant {

    @Override
    public void migrate( DatabaseLayout directoryLayout, DatabaseLayout migrationLayout, ProgressReporter progressMonitor,
            String versionToMigrateFrom, String versionToMigrateTo ) throws IOException
    {
        IndexImplementation indexImplementation = explicitIndexProvider.getProviderByName( LUCENE_EXPLICIT_INDEX_PROVIDER_NAME );
        if ( indexImplementation != null )
        {
            RecordFormats from = RecordFormatSelector.selectForVersion( versionToMigrateFrom );
            RecordFormats to = RecordFormatSelector.selectForVersion( versionToMigrateTo );
            if ( !from.hasCompatibleCapabilities( to, CapabilityType.INDEX ) )
            {
                originalExplicitIndexesRoot = indexImplementation.getIndexImplementationDirectory( directoryLayout );
                migrationExplicitIndexesRoot = indexImplementation.getIndexImplementationDirectory( migrationLayout );
                if ( isNotEmptyDirectory( originalExplicitIndexesRoot ) )
                {
                    migrateExplicitIndexes( progressMonitor );
                    explicitIndexMigrated = true;
                }
            }
        }
        else
        {
            log.debug( "Lucene index provider not found, nothing to migrate." );
        }
    }

    public  ExplicitIndexMigrator( FileSystemAbstraction fileSystem, ExplicitIndexProvider explicitIndexProvider,
            LogProvider logProvider );

}