Skip to content

Project structure

arbinada-com edited this page Apr 23, 2020 · 1 revision

GenieLamp project is a XML file containing all required information about transforming logical models into target code.

You should specify at least following elements of configuration:

  • ImportModel - to include model file
  • Genie - to specify transformation
  • Configuration - may be empty

Here is an example of typical project structure

<?xml version="1.0" encoding="utf-8"?>
<GenieLamp xmlns="http://www.arbinada.com/GenieLamp/1/0"
		   project="Inventory"
		   version="1.0">

	<!-- Model files -->
	<ImportModel fileName="Inventory.Main.xml" />
	<ImportModel fileName="Inventory.Physical.Db.xml" />

	<!-- Genies to be used -->
	<Genie	name="SqlServer"
			type="GenieLamp.Genies.SqlServer.SqlServerGenie"
			assembly="GenieLamp.Genies.SqlServer"
			active="false"
			outDir="%PROJECT_DIR%/../SQL/SqlServer-%TARGET_VERSION%"
			outFileName="%PROJECT_NAME%.sql"
			updateDatabase="true"
			targetVersion="2008">
		<Param name="Database.Create" value="true" />
		<Param name="Database.Name" value="Inventory" />
		<Param name="Schemas.Create" value="true" />
		<Param name="UpdateDatabase.Utility" value="sqlcmd" />
		<Param name="UpdateDatabase.Arguments" value="-b -S localhost -i %FILE_NAME%" />
	</Genie>

	<Genie name="NHibernate"
		   type="GenieLamp.Genies.NHibernate.NHibernateGenie"
		   assembly="GenieLamp.Genies.NHibernate"
		   active="true"
		   outDir="%PROJECT_DIR%/../Domain"
		   outFileName="%PROJECT_NAME%.Domain.cs"
		   targetVersion="*">
		<Param name="TargetAssemblyName" value="GenieLamp.Examples.%PROJECT_NAME%.Domain" />
	</Genie>

	<Genie	name="ServiceStack Services Interfaces"
			  type="GenieLamp.Genies.ServicesLayer.ServiceStack.ServicesInterfacesGenie"
			  assembly="GenieLamp.Genies.ServicesLayer"
			  active="true"
			  outDir="%PROJECT_DIR%/../Services.Interfaces"
			  targetVersion="*">
	</Genie>

	<Genie	name="ServiceStack Services"
			  type="GenieLamp.Genies.ServicesLayer.ServiceStack.ServicesGenie"
			  assembly="GenieLamp.Genies.ServicesLayer"
			  active="true"
			  outDir="%PROJECT_DIR%/../Services"
			  targetVersion="*">
	</Genie>

	<Configuration>
		<!-- Layers configurations -->
		<Layer name="Persistence">
			<NamingConvention style="uppercase" maxLength="128">
				<Param name="PrimaryKey.ColumnTemplate" value="ID_%TABLE%" />
				<Param name="PrimaryKey.ConstraintTemplate" value="PK_%TABLE%" />
				<Param name="Unique.ConstraintTemplate" value="UC_%TABLE%_%COLUMNS%%COUNTER%" />
				<Param name="ForeignKey.ColumnTemplate" value="ID_%REF_TABLE%" />
				<Param name="ForeignKey.ConstraintTemplate" value="FK_%TABLE%_%REF_TABLE%_%COLUMNS%%COLUMNS_HASH%" />
				<Param name="Generator.Template" value="SQ_%TABLE%" />
				<Param name="Index.Template" value="IX%COUNTER%_%TABLE%_%COLUMNS_HASH%" />
			</NamingConvention>
			<Param name="ForeignKey.CreateIndex" value="true" />
			<Param name="BooleanValues" value="YesNo"/>
		</Layer>

		<Layer name="Domain">
			<Param name="BaseNamespace" value="GenieLamp.Examples.%PROJECT_NAME%" />
		</Layer>

		<Layer name="Services">
			<Param name="BaseNamespace" value="GenieLamp.Examples.%PROJECT_NAME%" />
		</Layer>

		<!-- Used patterns -->
		<Pattern name="Registry">
			<Param name="Schema" value="Core" />
			<Param name="PersistentSchema" value="EXAMPLES" />
			<Param name="RegistryEntity.Name" value="EntityRegistry" />
			<Param name="TypesEntity.Name" value="EntityType" />
			<Param name="TypesEntity.PrimaryId.Type" value="smallint" />
			<Param name="PrimaryId.Type" value="bigint" />
			<Exclude entity="Inventory.DocumentLines" />
		</Pattern>

		<Pattern name="StateVersion">
			<Param name="Attribute.Name" value="Version" />
			<Param name="Attribute.Type" value="int" />
		</Pattern>

		<Pattern name="Audit">
			<Exclude entity="Inventory.DocumentLines" />
		</Pattern>

		<Pattern name="Localization">
		</Pattern>

		<Pattern name="Security">
		</Pattern>
	</Configuration>
</GenieLamp>

Clone this wiki locally