Skip to content

Commit

Permalink
Extract the database importer to a new class.
Browse files Browse the repository at this point in the history
  • Loading branch information
srbaker committed Sep 15, 2016
1 parent f457991 commit 4f47dd6
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 28 deletions.
@@ -0,0 +1,73 @@
/*
* Copyright (c) 2002-2016 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This file is part of Neo4j.
*
* Neo4j is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.neo4j.commandline.dbms;

import java.io.File;
import java.io.IOException;

import org.neo4j.commandline.admin.IncorrectUsage;
import org.neo4j.dbms.DatabaseManagementSystemSettings;
import org.neo4j.helpers.Args;
import org.neo4j.io.fs.FileUtils;
import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.util.Converters;
import org.neo4j.kernel.impl.util.Validators;

import static org.neo4j.dbms.DatabaseManagementSystemSettings.database_path;
import static org.neo4j.helpers.collection.MapUtil.stringMap;

public class DatabaseImporter
{
private final String database;
private final File from;
private final Config config;

public DatabaseImporter( Args parsedArgs, Config config ) throws IncorrectUsage
{
try
{
this.database = parsedArgs.interpretOption( "database", Converters.<String>mandatory(), s -> s );
this.from = parsedArgs.interpretOption( "from", Converters.<File>mandatory(), Converters.toFile(),
Validators.CONTAINS_EXISTING_DATABASE );
}
catch ( IllegalArgumentException e )
{
throw new IncorrectUsage( e.getMessage() );
}
this.config =
config.with( stringMap( DatabaseManagementSystemSettings.active_database.name(), this.database ) );
}

public void doImport() throws IOException
{
copyDatabase( from, config );
removeMessagesLog( config );
}

private void copyDatabase( File from, Config config ) throws IOException
{
FileUtils.copyRecursively( from, config.get( database_path ) );
}

private void removeMessagesLog( Config config )
{
FileUtils.deleteFile( new File( config.get( database_path ), "messages.log" ) );
}
}
Expand Up @@ -19,7 +19,6 @@
*/ */
package org.neo4j.commandline.dbms; package org.neo4j.commandline.dbms;


import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
Expand All @@ -33,15 +32,11 @@
import org.neo4j.dbms.DatabaseManagementSystemSettings; import org.neo4j.dbms.DatabaseManagementSystemSettings;
import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.graphdb.factory.GraphDatabaseSettings;
import org.neo4j.helpers.Args; import org.neo4j.helpers.Args;
import org.neo4j.io.fs.FileUtils;
import org.neo4j.kernel.configuration.Config; import org.neo4j.kernel.configuration.Config;
import org.neo4j.kernel.impl.util.Converters; import org.neo4j.kernel.impl.util.Converters;
import org.neo4j.kernel.impl.util.Validators; import org.neo4j.kernel.impl.util.Validators;
import org.neo4j.server.configuration.ConfigLoader; import org.neo4j.server.configuration.ConfigLoader;


import static org.neo4j.dbms.DatabaseManagementSystemSettings.database_path;
import static org.neo4j.helpers.collection.MapUtil.stringMap;

public class ImportCommand implements AdminCommand public class ImportCommand implements AdminCommand
{ {
public static class Provider extends AdminCommand.Provider public static class Provider extends AdminCommand.Provider
Expand Down Expand Up @@ -73,6 +68,7 @@ public AdminCommand create( Path homeDir, Path configDir, OutsideWorld outsideWo


private final Path homeDir; private final Path homeDir;
private final Path configDir; private final Path configDir;
private final String[] allowedModes = {"database"};


public ImportCommand( Path homeDir, Path configDir ) public ImportCommand( Path homeDir, Path configDir )
{ {
Expand All @@ -83,17 +79,11 @@ public ImportCommand( Path homeDir, Path configDir )
@Override @Override
public void execute( String[] args ) throws IncorrectUsage, CommandFailed public void execute( String[] args ) throws IncorrectUsage, CommandFailed
{ {
File from;
String database;

Args parsedArgs = Args.parse( args ); Args parsedArgs = Args.parse( args );
try try
{ {
parsedArgs.interpretOption( "mode", Converters.<String>mandatory(), s -> s, parsedArgs.interpretOption( "mode", Converters.<String>mandatory(), s -> s,
Validators.inList( new String[]{"database"} ) ); Validators.inList( allowedModes ) );
database = parsedArgs.interpretOption( "database", Converters.<String>mandatory(), s -> s );
from = parsedArgs.interpretOption( "from", Converters.<File>mandatory(), Converters.toFile(),
Validators.CONTAINS_EXISTING_DATABASE );
} }
catch ( IllegalArgumentException e ) catch ( IllegalArgumentException e )
{ {
Expand All @@ -102,34 +92,23 @@ public void execute( String[] args ) throws IncorrectUsage, CommandFailed


try try
{ {
Config config = loadNeo4jConfig( homeDir, configDir, database ); Config config = loadNeo4jConfig( homeDir, configDir );
copyDatabase( from, config ); DatabaseImporter databaseImporter = new DatabaseImporter( parsedArgs, config );
removeMessagesLog( config ); databaseImporter.doImport();
} }
catch ( IOException e ) catch ( IOException e )
{ {
throw new RuntimeException( e ); throw new RuntimeException( e );
} }

}

private void copyDatabase( File from, Config config ) throws IOException
{
FileUtils.copyRecursively( from, config.get( database_path ) );
}

private void removeMessagesLog( Config config )
{
FileUtils.deleteFile( new File( config.get( database_path ), "messages.log" ) );
} }


private static Config loadNeo4jConfig( Path homeDir, Path configDir, String databaseName ) private static Config loadNeo4jConfig( Path homeDir, Path configDir )
{ {
ConfigLoader configLoader = new ConfigLoader( settings() ); ConfigLoader configLoader = new ConfigLoader( settings() );
Config config = configLoader.loadConfig( Optional.of( homeDir.toFile() ), Config config = configLoader.loadConfig( Optional.of( homeDir.toFile() ),
Optional.of( configDir.resolve( "neo4j.conf" ).toFile() ) ); Optional.of( configDir.resolve( "neo4j.conf" ).toFile() ) );


return config.with( stringMap( DatabaseManagementSystemSettings.active_database.name(), databaseName ) ); return config;
} }


private static List<Class<?>> settings() private static List<Class<?>> settings()
Expand Down

0 comments on commit 4f47dd6

Please sign in to comment.