Menu

Project structure

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

Project structure

You should specify following elements of configuration at least:

  • 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>

Related

Wiki: Detailed guidelines
Wiki: Logical model

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.