<?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></jdbcClass>
		<jdbcURL></jdbcURL>
		<jdbcServer></jdbcServer>
		<jdbcPort></jdbcPort>
		<jdbcSID></jdbcSID>
		<jdbcUser></jdbcUser>
		<jdbcPwd></jdbcPwd>

		<!-- Schema options -->
		<dbCatalog></dbCatalog>
		<dbSchema></dbSchema>
		<dbTablePattern></dbTablePattern>
		<timestampColumn>CREATIONDATE</timestampColumn>
		
		<!-- generation options -->
		<targetFolder></targetFolder>
		<packageName>org.apache.empire.db</packageName>
		<tablePackageName>org.apache.empire.db.table</tablePackageName>
		<viewPackageName>org.apache.empire.db.view</viewPackageName>
		<recordPackageName>org.apache.empire.db.record</recordPackageName>
		<dbClassName>EmpireDB</dbClassName>
		<tableBaseName>BaseTable</tableBaseName>
		<viewBaseName>BaseView</viewBaseName>
		<recordBaseName>BaseRecord</recordBaseName>
		<tableNamePrefix></tableNamePrefix>
		<tableClassPrefix>T_</tableClassPrefix>
		<tableClassSuffix></tableClassSuffix>
		<viewNamePrefix></viewNamePrefix>
		<viewClassPrefix>V_</viewClassPrefix>
		<viewClassSuffix></viewClassSuffix>
		<columnNamePrefix></columnNamePrefix>
		<nestTables>true</nestTables>
		<nestViews>false</nestViews>
		<createRecordProperties>true</createRecordProperties>
		<preserverCharacterCase>false</preserverCharacterCase>
		<preserveRelationNames>false</preserveRelationNames>
	</properties>
	
	<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

		<appender name="default" class="org.apache.log4j.ConsoleAppender">
			<!-- layout class="org.apache.log4j.TTCCLayout"/ -->
			<layout class="org.apache.log4j.PatternLayout">
				<!-- param name="ConversionPattern" value="NSB(%c) %-5p %m	at %l%n"/ -->
				<param name="ConversionPattern" value="%-5p [%d{yyyy/MM/dd HH:mm}]: %m		at %l %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>
