/*
*
* SchemaCrawler
* http://sourceforge.net/projects/schemacrawler
* Copyright (c) 2000-2009, Sualeh Fatehi.
*
* This library is free software; you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Foundation;
* either version 2.1 of the License, or (at your option) any later version.
*
* This library 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
package schemacrawler.tools.text.operation;
import schemacrawler.schemacrawler.Config;
import schemacrawler.schemacrawler.SchemaInfoLevel;
import schemacrawler.tools.OutputOptions;
import schemacrawler.tools.text.BaseToolOptions;
import sf.util.Utility;
/**
* Operator options.
*
* @author Sualeh Fatehi
*/
public final class OperationOptions
extends BaseToolOptions
{
private static final long serialVersionUID = -7977434852526746391L;
private static final String SHOW_LOBS = "schemacrawler.data.show_lobs";
private static final String MERGE_ROWS = "schemacrawler.data.merge_rows";
private boolean mergeRows;
private boolean showLobs;
private Operation operation;
private Query query;
/**
* Operator options, defaults.
*/
public OperationOptions()
{
this(null, null, (Operation) null);
}
/**
* Operator options from properties. Constructor.
*
* @param outputOptions
* Output options
* @param operation
* Operation
* @param config
* Config
*/
public OperationOptions(final Config config,
final OutputOptions outputOptions,
final Operation operation)
{
super(outputOptions);
setFromConfig(config);
if (operation == null)
{
this.operation = Operation.count;
}
else
{
this.operation = operation;
}
}
/**
* Operator options from properties. Constructor.
*
* @param outputOptions
* Output options
* @param queryName
* Query name
* @param config
* Config
*/
public OperationOptions(final Config config,
final OutputOptions outputOptions,
final String queryName)
{
super(outputOptions);
setFromConfig(config);
if (config != null && !Utility.isBlank(queryName))
{
query = new Query(queryName, config.get(queryName));
}
else
{
query = null;
}
operation = null;
}
/**
* Gets the operation.
*
* @return Operation.
*/
public Operation getOperation()
{
return operation;
}
/**
* Get the query.
*
* @return The query
*/
public Query getQuery()
{
if (operation != null)
{
return operation.getQuery();
}
else
{
return query;
}
}
public final SchemaInfoLevel getSchemaInfoLevel()
{
final SchemaInfoLevel schemaInfoLevel = new SchemaInfoLevel();
schemaInfoLevel.setRetrieveDatabaseInfo(true);
schemaInfoLevel.setRetrieveJdbcDriverInfo(true);
// Retrieve tables only if the query requires it
final Query query = getQuery();
if (query == null || query.isQueryOver())
{
schemaInfoLevel.setRetrieveColumnDataTypes(true);
schemaInfoLevel.setRetrieveUserDefinedColumnDataTypes(true);
schemaInfoLevel.setRetrieveTableColumns(true);
schemaInfoLevel.setRetrieveTables(true);
}
return schemaInfoLevel;
}
/**
* Whether to merge similar rows.
*
* @return Whether to merge similar rows.
*/
public boolean isMergeRows()
{
return mergeRows;
}
@Override
public boolean isPrintVerboseDatabaseInfo()
{
return false;
}
/**
* Whether to show LOBs.
*
* @return Whether to show LOBs.
*/
public boolean isShowLobs()
{
return showLobs;
}
/**
* Whether to merge similar rows.
*
* @param mergeRows
* Whether to merge similar rows
*/
public void setMergeRows(final boolean mergeRows)
{
this.mergeRows = mergeRows;
}
/**
* Sets the operation.
*
* @param operation
* Operation
*/
public void setOperation(final Operation operation)
{
this.operation = operation;
}
/**
* Query.
*
* @param query
* Query
*/
public void setQuery(final Query query)
{
if (query == null)
{
throw new IllegalArgumentException("Cannot set null query");
}
this.query = query;
operation = null;
}
/**
* Whether to show LOBs.
*
* @param showLobs
* Whether to show LOBs
*/
public void setShowLobs(final boolean showLobs)
{
this.showLobs = showLobs;
}
private void setFromConfig(final Config config)
{
if (config == null)
{
mergeRows = false;
showLobs = false;
}
else
{
mergeRows = config.getBooleanValue(MERGE_ROWS);
showLobs = config.getBooleanValue(SHOW_LOBS);
}
}
}