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

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

Go to download

SchemaCrawler is an open-source Java API that makes working with database metadata as easy as working with plain old Java objects. SchemaCrawler is also a database schema discovery and comprehension, and schema documentation tool. You can search for database schema objects using regular expressions, and output the schema and data in a readable text format. The output is designed to be diff-ed against other database schemas.

There is a newer version: 16.22.2
Show newest version
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;

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, "Could not instantiate " + executableClassName
                             + " using the default constructor");
      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 - 2024 Weber Informatics LLC | Privacy Policy