<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
  
   http://www.apache.org/licenses/LICENSE-2.0
  
  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<config>

	<properties>
		<!-- provider name must match the property-section containing the connection data -->
		<jdbcClass>org.hsqldb.jdbc.JDBCDriver</jdbcClass>
		<jdbcURL>jdbc:hsqldb:file:src/test/resources/hsqldb/sample;shutdown=true</jdbcURL>
		<jdbcUser>sa</jdbcUser>
		<jdbcPwd></jdbcPwd>
		
		<!-- Empire-db DBMS Handler class -->
		<dbmsHandlerClass>org.apache.empire.dbms.hsql.DBMSHandlerHSql</dbmsHandlerClass>

		<!-- Schema options -->
		<dbCatalog></dbCatalog>
		<dbSchema></dbSchema>
		<dbTablePattern></dbTablePattern>
		<timestampColumn>UPDATE_TIMESTAMP</timestampColumn>
		
		<!-- generation options -->
		<!-- 
		<targetFolder>target/generated-sources/java</targetFolder>
		 -->
		<targetFolder>src/main/java</targetFolder>
		<packageName>org.apache.empire.db.example</packageName>
		<dbClassName>MyDatabase</dbClassName>
		<nestTables>false</nestTables>
		<nestViews>false</nestViews>
		<createRecordProperties>true</createRecordProperties>
		<preserverCharacterCase>false</preserverCharacterCase>
		<preserveRelationNames>false</preserveRelationNames>
		
		<!-- generation options (optional) 
		<tablePackageName></tablePackageName>
		<viewPackageName></viewPackageName>
		<recordPackageName></recordPackageName>
		<tableBaseName>SampleTable</tableBaseName>
		<viewBaseName>SampleView</viewBaseName>
		<recordBaseName>SampleRecord</recordBaseName>
		<tableNamePrefix></tableNamePrefix>
		<tableClassPrefix>T_</tableClassPrefix>
		<tableClassSuffix></tableClassSuffix>
		<viewNamePrefix></viewNamePrefix>
		<viewClassPrefix>V_</viewClassPrefix>
		<viewClassSuffix></viewClassSuffix>
		<columnNamePrefix></columnNamePrefix>
		-->
	</properties>
	
	<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

		<!-- Console -->
		<appender name="default" class="org.apache.log4j.ConsoleAppender">
			<layout class="org.apache.log4j.PatternLayout">
				<param name="ConversionPattern" value="%-5p [%d{yyyy/MM/dd HH:mm}]: %m		at %l %n"/>
			</layout>
		</appender>

		<!-- File output  -->
	    <appender name="logfile" class="org.apache.log4j.FileAppender">
	        <param name="file" value="target/codegen.log" />
	        <param name="append" value="false" />
	        <param name="threshold" value="debug" />
	        <layout class="org.apache.log4j.PatternLayout">
	            <param name="ConversionPattern" value=" %-5p %d{ISO8601} [%c{1}] - %m%n" />
	        </layout>
	    </appender>
	
		<!-- log detail configuration -->
		<logger name="org.apache.empire.commons" additivity="false">
			<level value="warn"/>
			<appender-ref ref="default"/>
		</logger>
	
		<root>
			<priority value="info"/>
			<appender-ref ref="default"/>
		</root>

	</log4j:configuration>
	
</config>
