All Downloads are FREE. Search and download functionalities are using the official Maven repository.

schemacrawler.tools.executable.ExecutableCommandProvider Maven / Gradle / Ivy

package schemacrawler.tools.executable;


import java.lang.reflect.Constructor;
import java.util.logging.Level;
import java.util.logging.Logger;

import schemacrawler.schemacrawler.SchemaCrawlerException;
import schemacrawler.schemacrawler.SchemaCrawlerOptions;
import schemacrawler.tools.options.OutputOptions;
import sf.util.StringFormat;

class ExecutableCommandProvider
  implements CommandProvider
{

  private static final Logger LOGGER = Logger
    .getLogger(ExecutableCommandProvider.class.getName());

  private final String command;
  private final String executableClassName;

  ExecutableCommandProvider(final String command,
                            final String executableClassName)
  {
    this.command = command;
    this.executableClassName = executableClassName;
  }

  @Override
  public Executable configureNewExecutable(final SchemaCrawlerOptions schemaCrawlerOptions,
                                           final OutputOptions outputOptions)
                                             throws SchemaCrawlerException
  {

    Class commandExecutableClass;
    try
    {
      commandExecutableClass = (Class) Class
        .forName(executableClassName);
    }
    catch (final ClassNotFoundException e)
    {
      throw new SchemaCrawlerException("Could not load class "
                                       + executableClassName, e);
    }

    Executable executable;
    try
    {
      executable = commandExecutableClass.newInstance();
    }
    catch (final Exception e)
    {
      LOGGER.log(Level.FINE,
                 new StringFormat("Could not instantiate using the default constructor, %s",
                                  executableClassName));
      try
      {
        final Constructor constructor = commandExecutableClass
          .getConstructor(new Class[] { String.class });
        executable = constructor.newInstance(command);
      }
      catch (final Exception e1)
      {
        throw new SchemaCrawlerException("Could not instantiate executable for command '"
                                         + command + "'", e1);
      }
    }

    if (executable != null)
    {
      if (schemaCrawlerOptions != null)
      {
        executable.setSchemaCrawlerOptions(schemaCrawlerOptions);
      }
      if (outputOptions != null)
      {
        executable.setOutputOptions(outputOptions);
      }
    }

    return executable;
  }

  @Override
  public String getCommand()
  {
    return command;
  }

  @Override
  public String getHelpResource()
  {
    final String helpResource = "/help/DefaultExecutable.txt";
    return helpResource;
  }

  @Override
  public String toString()
  {
    return executableClassName;
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy