package com.ldbc.driver.control;
import com.ldbc.driver.util.MapUtils;
import com.ldbc.driver.workloads.ldbc.snb.interactive.LdbcSnbInteractiveWorkload;
import com.ldbc.driver.workloads.ldbc.snb.interactive.db.DummyLdbcSnbInteractiveDb;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import static java.lang.String.format;
public class DriverConfigurationFileHelper
{
private static final String CONFIGURATION_DIR_NAME = "configuration";
public static void main( String[] args ) throws IOException, DriverConfigurationException
{
updateDefaultConfigurationFiles();
print();
}
public static void updateDefaultConfigurationFiles() throws DriverConfigurationException, IOException
{
File driverRootDirectory = getDriverRootDirectory();
File baseConfigurationFilePublicLocation = getBaseConfigurationFilePublicLocation( driverRootDirectory );
createBaseConfigurationAt( baseConfigurationFilePublicLocation );
if ( false == readConfigurationFileAt( baseConfigurationFilePublicLocation ).equals( baseConfiguration() ) )
{
throw new DriverConfigurationException(
format( "Default config file not equal to base configuration\n%s\n%s",
baseConfiguration().toString(),
readConfigurationFileAt( baseConfigurationFilePublicLocation ) ) );
}
}
public static void print() throws DriverConfigurationException
{
System.out.println( ConsoleAndFileDriverConfiguration.commandlineHelpString() );
System.out.println();
System.out.println();
System.out.println( ConsoleAndFileDriverConfiguration
.fromDefaults( DummyLdbcSnbInteractiveDb.class.getName(), LdbcSnbInteractiveWorkload.class.getName(),
1000 ).toString() );
System.out.println();
System.out.println();
System.out.println( ConsoleAndFileDriverConfiguration.fromDefaults( null, null, 0 ).toPropertiesString() );
}
public static void createBaseConfigurationAt( File baseConfigurationFile )
throws IOException, DriverConfigurationException
{
// Delete old configuration file and create new one, in appropriate directory
if ( baseConfigurationFile.exists() )
{ FileUtils.deleteQuietly( baseConfigurationFile ); }
baseConfigurationFile.createNewFile();
// Create base default configuration
ConsoleAndFileDriverConfiguration defaultsOnly = baseConfiguration();
// Write configuration to file
new FileOutputStream( baseConfigurationFile ).write( defaultsOnly.toPropertiesString().getBytes() );
System.out.println( "New configuration file written to " + baseConfigurationFile.getAbsolutePath() );
}
public static ConsoleAndFileDriverConfiguration readConfigurationFileAt( File configurationFile )
throws IOException, DriverConfigurationException
{
if ( false == configurationFile.exists() )
{
throw new DriverConfigurationException(
"Config file does not exist: " + configurationFile.getAbsolutePath() );
}
Properties ldbcDriverDefaultConfigurationProperties = new Properties();
ldbcDriverDefaultConfigurationProperties.load( new FileInputStream( configurationFile ) );
Map<String,String> ldbcDriverDefaultConfigurationAsParamsMap =
ConsoleAndFileDriverConfiguration.convertLongKeysToShortKeys(
MapUtils.<String,String>propertiesToMap( ldbcDriverDefaultConfigurationProperties )
);
if ( false == ldbcDriverDefaultConfigurationAsParamsMap
.containsKey( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG ) )
{ ldbcDriverDefaultConfigurationAsParamsMap.put( ConsoleAndFileDriverConfiguration.OPERATION_COUNT_ARG, "0" ); }
return ConsoleAndFileDriverConfiguration.fromParamsMap( ldbcDriverDefaultConfigurationAsParamsMap );
}
public static File getBaseConfigurationFilePublicLocation() throws DriverConfigurationException
{
return getBaseConfigurationFilePublicLocation( getDriverRootDirectory() );
}
public static File getWorkloadsDirectory() throws DriverConfigurationException
{
File rootDirectory = getDriverRootDirectory();
return getWorkloadsDirectory( rootDirectory );
}
public static File getWorkloadsDirectory( File driverRootDirectory ) throws DriverConfigurationException
{
File workloadsDirectory = new File( driverRootDirectory, CONFIGURATION_DIR_NAME );
if ( false == workloadsDirectory.exists() )
{
throw new DriverConfigurationException(
"Directory does not exist: " + workloadsDirectory.getAbsolutePath() );
}
if ( false == workloadsDirectory.isDirectory() )
{
throw new DriverConfigurationException(
"Directory not a directory: " + workloadsDirectory.getAbsolutePath() );
}
return workloadsDirectory;
}
private static ConsoleAndFileDriverConfiguration baseConfiguration() throws DriverConfigurationException
{
String databaseClassName = null;
String workloadClassName = null;
long operationCount = 0;
return ConsoleAndFileDriverConfiguration.fromDefaults( databaseClassName, workloadClassName, operationCount );
}
private static File getDriverRootDirectory()
{
File resourcesDirectory = FileUtils.toFile( DriverConfigurationFileHelper.class.getResource( "/" ) );
File targetDirectory = resourcesDirectory.getParentFile();
return targetDirectory.getParentFile();
}
private static File getBaseConfigurationFilePublicLocation( File driverRootDirectory )
throws DriverConfigurationException
{
File workloadsDirectory = new File( driverRootDirectory, CONFIGURATION_DIR_NAME );
if ( false == workloadsDirectory.exists() )
{
throw new DriverConfigurationException(
"Directory does not exist: " + workloadsDirectory.getAbsolutePath() );
}
return new File( workloadsDirectory, "ldbc_driver_default.properties" );
}
}