This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,69 @@
//***************************************************************************//
// Legenerálja egy entitás testreszabható leszármazottjának forráskód vázát. //
//***************************************************************************//
template GenerateCustomEntity(MClass as ENTITY)
[BOM]using System;
using System.Linq;
using System.Xml;
using SDA.Framework;
using SDA.Framework.Classes;
using SDA.Framework.Entities;
using SDA.Framework.Query;
using SDA.Framework.Exceptions;
using SDA.[ProjectName].Entities;
namespace SDA.[ProjectName].CustomEntities
{
public partial class Custom[ENTITY.name] : [ENTITY.name]
{
public new static Custom[ENTITY.name] GiveAnInstance()
{
return (Custom[ENTITY.name])Entities.[ENTITY.name].GiveAnInstance();
}
#region Kézzel írt kód
//#ACD# M(["CustomEntity(" [ENTITY.guid] ")"])
//#end ACD#
#endregion
}
}
namespace SDA.[ProjectName].DirectXML
{
public class CustomDX[ENTITY.name]BaseSet : DX[ENTITY.name]BaseSet
{
#region Kézzel írt kód
//#ACD# M(["CustomDX" [ENTITY.name] "BaseSet"])
//#end ACD#
#endregion
}
sealed class CustomDX[ENTITY.name]ByID : DX[ENTITY.name]ByID
{
public CustomDX[ENTITY.name]ByID(int id)
: base(id) { }
#region Kézzel írt kód
//#ACD# M(["CustomDX" [ENTITY.name] "ById"])
//#end ACD#
#endregion
}
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNER where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNER]) == "Entity"))]
sealed class CustomDX[ENTITY.name]By[GetRoleName([ENDROLE])]ID : DX[ENTITY.name]By[GetRoleName([ENDROLE])]ID
{
public CustomDX[ENTITY.name]By[GetRoleName([ENDROLE])]ID(int [ToLower(GetRoleName([ENDROLE]) "ID")])
: base([ToLower(GetRoleName([ENDROLE]) "ID")]) { }
#region Kézzel írt kód
//#ACD# M(["CustomDX" [ENTITY.name] "By" GetRoleName([ENDROLE]) "Id"])
//#end ACD#
#endregion
}
[end loop]
}
end template

View file

@ -0,0 +1,323 @@
//***************************************************************************//
// Legenerálja a megadott osztályhoz tartozó entitás teljes forráskódját. //
//***************************************************************************//
template GenerateEntity(MClass as ENTITY)
[BOM]using System;
using System.Collections.Generic;
using System.Linq;
using Kreta.DataAccess.Interfaces;
using Kreta.Framework;
using Kreta.Framework.Actions;
using Kreta.Framework.Collections;
using Kreta.Framework.Collections.Generic;
using Kreta.Framework.Entities;
using Kreta.Framework.Entities.Generic;
using Kreta.Framework.Exceptions;
namespace SDA.[ProjectName].Entities
{
/// <summary>
/// Az UML modell [ENTITY.name] entitásának megvalósítása.
/// </summary>
/// <remarks>A kód teljes egészében generált, kézi módosítása nem megengedett!</remarks>
\[Entity("[ENTITY.name]")\]
[if (GetTaggedValue([ENTITY], "disabledsecuritymode") == "read")]
\[Kreta.Framework.Security.EntitySecurityDisabled(Kreta.Framework.Security.EntitySecurityDisabledMode.DISABLE_READ)\]
[else]
[if (GetTaggedValue([ENTITY], "disabledsecuritymode") == "readwrite")]
\[Kreta.Framework.Security.EntitySecurityDisabled(Kreta.Framework.Security.EntitySecurityDisabledMode.DISABLE_READWRITE)\]
[end if]
[end if]
[GenerateEntityHistoryModeAttribute([ENTITY])]
public class [ENTITY.name] : [GetBaseClassName([ENTITY], "Entity")], I[ENTITY.name]
{
internal protected [ENTITY.name]()
: base()
{
}
[if (IsMasterEntity([ENTITY]) == "false")]
[loop (ENTITY -> SuperClass as BASECLASS)]
public new class AttributeInfo : [BASECLASS.name].AttributeInfo
{
[end loop]
[else]
public class AttributeInfo
{
[end if]
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
public const string [ATTRIBUTE.name] = "[ATTRIBUTE.name]";
[end loop]
}
[if (IsMasterEntity([ENTITY]) == "false")]
[loop (ENTITY -> SuperClass as BASECLASS)]
public new class AttributeLengthInfo : [BASECLASS.name].AttributeLengthInfo
{
[end loop]
[else]
public class AttributeLengthInfo
{
[end if]
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[if (GetCSharpType([ATTRIBUTE.type]) == "string")]
public const int [ATTRIBUTE.name]Length = [GetAttributeLength([ATTRIBUTE])];
[end if]
[end loop]
}
[GenerateGeneralSection([ENTITY])]
[//GenerateXMLSection([ENTITY])]
[GenerateEntityValidation([ENTITY])]
[GenerateEntityReset([ENTITY])]
[GenerateDeAssociateBeforeDelete([ENTITY])]
#region Mezők és tulajdonságok
[GenerateSimpleFields([ENTITY])]
#region Asszociációkkal kapcsolatos dolgok
[GenerateAssociationClassFields([ENTITY])]
[GenerateFirstCaseAssociations([ENTITY])]
[//GenerateSecondCaseAssociations([ENTITY])]
[GenerateThirdCaseAssociations([ENTITY])]
[//GenerateFourthCaseAssociations([ENTITY])]
#endregion
#endregion
}
}
end template
//***************************************************************************//
// Legenerálja azt a metódust, ami törlés előtt elvégzi az asszociációinak //
// felbontását, hogy ezzel törölhetővé tegye az entitást. //
//***************************************************************************//
template GenerateDeAssociateBeforeDelete(MClass as ENTITY)
protected override void DeAssociateBeforeDelete(bool runHandler = false)
{
// Nem kaszkád törölhető asszociációk ellenőrzése, hogy üresek-e...
[loop (ENTITY -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass
where (([StartRole.id] != [EndRole.id])
and GetStereoType([PartnerClass]) == "Entity")
and IsCascadeDelete([CurrentAssoc]) == "False"
)]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if (
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "0..1"))]
[if ([ENTITY.name] != [PartnerClass.name] or [EndRole.isNavigable] == "TRUE")]
if (this.[DefineRoleName([EndRole])] != null)
{
[/*
// startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
*/]
throw new EntityDeleteFailedException("[ENTITY.name]", "[DefineRoleName([EndRole])]", EntityUtil.GetAssociationDescription("[ConvertNameToSQLTableName([PartnerClass.name])]", "[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))]")); // nincs kapcsolotabla
}
[else]
// [DefineRoleName([EndRole])] esetében önmagunkra mutatunk, nincs mit ellenőrizni. startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
[end if]
[else]
[if ([StartRole.multiplicity] == "0..1" and [EndRole.multiplicity] == "0..1")]
[if ([ENTITY.name] != [PartnerClass.name] or [EndRole.isNavigable] == "TRUE")]
if (this.[DefineRoleName([EndRole])] != null)
{
throw new EntityDeleteFailedException("[ENTITY.name]", "[DefineRoleName([EndRole])]", EntityUtil.GetAssociationDescription("[ConvertNameToSQLTableName([PartnerClass.name])]", "ID")); // *-* + kapcsolotabla
}
[end if]
[else]
[if(
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "0..1" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "0..1" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "0..1" and [EndRole.multiplicity] == "0..*")
/*
([StartRole.multiplicity] == "0..*" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "1..*" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "*" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "0..*" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "1..*" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "*" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "0..*" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "1..*" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "*" and [EndRole.multiplicity] == "1..*")
*/
)]
[if ([ENTITY.name] != [PartnerClass.name] or [EndRole.isNavigable] == "TRUE")]
if (this.[DefineRoleName([EndRole])].Count > 0)
{
[/*
// startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
*/]
throw new EntityDeleteFailedException("[ENTITY.name]", "[DefineRoleName([EndRole])]", EntityUtil.GetAssociationDescription("[ConvertNameToSQLTableName([PartnerClass.name])]", "[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))]")); // nincs kapcsolotabla
}
[else]
// [DefineRoleName([EndRole])] esetében önmagunkra mutatunk, nincs mit ellenőrizni. startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
[end if]
[else]
[if (
([StartRole.multiplicity] == "0..*" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "1..*" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "*" and [EndRole.multiplicity] == "0..*") or
([StartRole.multiplicity] == "0..*" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "1..*" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "*" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "0..*" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "1..*" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "*" and [EndRole.multiplicity] == "1..*")
)]
[if ([ENTITY.name] != [PartnerClass.name] or [EndRole.isNavigable] == "TRUE")]
if (this.[DefineRoleName([EndRole])].Count > 0)
{
[/*
// startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
*/]
throw new EntityDeleteFailedException("[ENTITY.name]", "[DefineRoleName([EndRole])]", EntityUtil.GetAssociationDescription("[ConvertNameToSQLTableName([PartnerClass.name])]", "ID")); // *-* + kapcsolotabla
}
[end if]
[else]
// [DefineRoleName([EndRole])] esetében mi mutatunk a másikra: startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
[end if]
[end if]
[end if]
[end if]
[else]
[loop (CurrentAssoc -> AssociationClass)]
[if ([ENTITY.name] != DefineRoleName([EndRole]) or [EndRole.isNavigable] == "TRUE")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
if (this.[DefineRoleName([EndRole])] != null)
{
[/*
// asszociacios osztaly
*/]
throw new EntityDeleteFailedException("[ENTITY.name]", "[DefineRoleName([EndRole])]", EntityUtil.GetAssociationDescription("[ConvertNameToSQLTableName([AssociationClass.name])]", "[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))]"));
}
[else]
if (this.[DefineRoleName([EndRole])].Count > 0)
{
[/*
// asszociacios osztaly
*/]
throw new EntityDeleteFailedException("[ENTITY.name]", "[DefineRoleName([EndRole])]", EntityUtil.GetAssociationDescription("[ConvertNameToSQLTableName([AssociationClass.name])]", "[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))]"));
}
[end if]
[else]
// [DefineRoleName([EndRole])] esetében nincs ilyen property, nem navigálható, névütközés, stb., nincs mit ellenőrizni. startrole: [StartRole.multiplicity], endrole: [EndRole.multiplicity]
[end if]
[end loop]
[end if]
[end loop]
// kaszkád törlések...
[loop (ENTITY -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass
where (([StartRole.id] != [EndRole.id])
and GetStereoType([PartnerClass]) == "Entity")
and IsCascadeDelete([CurrentAssoc]) == "True"
)]
[if (([PartnerClass.name] != [ENTITY.name]) or ([PartnerClass.name] == [ENTITY.name] and [ENTITY.name] != DefineRoleName([EndRole])))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "0..1")]
if (this.[DefineRoleName([EndRole])] != null)
{
if (this.[DefineRoleName([EndRole])].State != EntityState.Removed)
{
if (this.[DefineRoleName([EndRole])].ID != this.ID)
{
this.[DefineRoleName([EndRole])].CascadeDelete(runHandler); // Kötelezően ránk mutat...
}
}
}
[else]
[if(
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "1..*") or
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "*") or
([StartRole.multiplicity] == "1" and [EndRole.multiplicity] == "0..*")
)]
foreach ([PartnerClass.name] partner in this.[DefineRoleName([EndRole])])
{
if (partner.State != EntityState.Removed)
{
if (partner.ID != this.ID)
{
partner.CascadeDelete(runHandler); // Kötelezően ránk mutat...
}
}
}
[else]
[if ([EndRole.multiplicity] == "0..1")]
this.[DefineRoleName([EndRole])] = null;
[else]
[if ([EndRole.multiplicity] != "1")]
this.[DefineRoleName([EndRole])].RemoveAll();
[end if]
[end if]
[end if]
[end if]
[else]
[loop (CurrentAssoc -> AssociationClass)]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
if (this.[DefineRoleName([EndRole])] != null)
{
if (this.[DefineRoleName([EndRole])].State != EntityState.Removed)
{
if (this.[DefineRoleName([EndRole])].ID != this.ID)
{
this.[DefineRoleName([EndRole])].CascadeDelete(runHandler); // Asszociációs osztály
}
}
}
[else]
foreach ([AssociationClass.name] associationclass in this.[DefineRoleName([EndRole])])
{
if (associationclass.State != EntityState.Removed)
{
if (associationclass.ID != this.ID)
{
associationclass.CascadeDelete(runHandler); // Asszociációs osztály
}
}
}
[end if]
[end loop]
[end if]
[end if]
[end loop]
[if (IsMasterEntity([ENTITY]) == "false")]
base.DeAssociateBeforeDelete(runHandler);
[end if]
}
end template
proc GenerateEntityHistoryModeAttribute(MClass as ENTITY)
local temp;
[temp] = GetTaggedValue([ENTITY], "historymode");
if ([temp] != "")
if (searchstr([temp], ",", 0) != "-1")
return "[EntityHistoryModeAttribute(\"" [temp] "\")]";
else
return "[EntityHistoryModeAttribute(EntityHistoryModes." [temp] ")]";
end if
else
return "// alapértelmezett EntityHistoryMode";
//return "[EntityHistoryModeAttribute(EntityHistoryModes.Default)] // alapértelmezett EntityHistoryModesß";
end if
end proc

View file

@ -0,0 +1,19 @@
//***************************************************************************//
// A megadott entitáshoz tipizált listát generál //
//***************************************************************************//
template GenerateEntityCollection()
[BOM]using System;
using Kreta.Framework;
using Kreta.Framework.Entities;
using Kreta.Framework.Entities.Generic;
using Kreta.Framework.Collections;
using Kreta.Framework.Collections.Generic;
namespace SDA.[ProjectName].Entities
{
//kompatibilitás miatt
[loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")]
public class [MClass.name]Collection = EntityCollection<[MClass.name]> { }
[end loop]
}
end template

View file

@ -0,0 +1,123 @@
//***************************************************************************//
// '1..*' és '*' végpontú asszociációs osztály nélküli asszociációs mezőket //
// és tulajdonságokat állít elő a megadott entitáshoz (harmadik eset) //
//***************************************************************************//
template GenerateThirdCaseAssociations(MClass as ENTITY)
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (GetStereoType([PARTNERCLASS]) == "Entity") )]
[if ([STARTROLE.id] != [ENDROLE.id])]
[if (HasAssociationClass([CURRENTASSOCIATION]) == "")]
[if ([ENDROLE.multiplicity] == "*" or [ENDROLE.multiplicity] == "1..*" or [ENDROLE.multiplicity] == "0..*")]
[if (([PARTNERCLASS.name] != [ENTITY.name]) or ([PARTNERCLASS.name] == [ENTITY.name] and [ENTITY.name] != DefineRoleName([ENDROLE])))]
#region [ENTITY.name] ([STARTROLE.multiplicity]) -> [PARTNERCLASS.name] ([ENDROLE.multiplicity])
protected IAssociatedEntityCollection<[PARTNERCLASS.name]> m_[DefineRoleName([ENDROLE])] = null;
IReadOnlyList<I[PARTNERCLASS.name]> I[ENTITY.name].[DefineRoleName([ENDROLE])] => [DefineRoleName([ENDROLE])].Cast<I[PARTNERCLASS.name]>().ToList();
/// <summary>
[if ([CURRENTASSOCIATION.description] != "")]
[ConvertDescriptionToCSharpSummary([CURRENTASSOCIATION.description])]
[else]
/// Nincs definiálva megjegyzés.
[end if]
/// </summary>
/// <remarks>
/// Az UML modellben szereplő [ENTITY.name] és [PARTNERCLASS.name] entitások közötti asszociáció megvalósítása.
/// </remarks>
[if ([STARTROLE.multiplicity] == "1" or [STARTROLE.multiplicity] == "0..1")]
\[EntityProperty("[DefineRoleName([ENDROLE])]", EntityPropertyBaseType.EntityCollection, typeof(IAssociatedEntityCollection<[PARTNERCLASS.name]>), EntityCopyMethod.DeepCopy, "[ConvertRoleToName([STARTROLE])]")\]
[else]
\[EntityProperty("[DefineRoleName([ENDROLE])]", EntityPropertyBaseType.EntityCollection, typeof(IAssociatedEntityCollection<[PARTNERCLASS.name]>), EntityCopyMethod.ShallowCopy, "[ConvertRoleToName([STARTROLE])]", "[ConvertRoleToName([ENDROLE])]", "[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))]")\]
[end if]
public virtual IAssociatedEntityCollection<[PARTNERCLASS.name]> [DefineRoleName([ENDROLE])]
{
get
{
if (m_[DefineRoleName([ENDROLE])] == null)
{
m_[DefineRoleName([ENDROLE])] = new AssociatedEntityCollection<[ENTITY.name], [PARTNERCLASS.name]>(
new [GenerateEntityCollectionDAName([ENTITY.name], DefineRoleName([ENDROLE]))](this)
);
m_[DefineRoleName([ENDROLE])].Load();
}
return m_[DefineRoleName([ENDROLE])];
}
}
[if ([STARTROLE.multiplicity] == "0..*" or [STARTROLE.multiplicity] == "*" or [STARTROLE.multiplicity] == "1..*")]
/// <summary>
/// Teljesítményre optimalizált metódus a(z) [DefineRoleName([ENDROLE])] hozzárendelésre. <b>Ne használd, ha nem muszáj!</b>
/// </summary>
public void AddTo[DefineRoleName([ENDROLE])]([PARTNERCLASS.name] partner)
{
if (m_[DefineRoleName([ENDROLE])] == null)
{
new [GenerateEntityCollectionDAName([ENTITY.name], DefineRoleName([ENDROLE]))](this).AddItem(partner);
}
else
{
[DefineRoleName([ENDROLE])].Add(partner);
}
}
/// <summary>
/// Teljesítményre optimalizált metódus a(z) [DefineRoleName([ENDROLE])] szétrendelésre. <b>Ne használd, ha nem muszáj!</b>
/// </summary>
public void RemoveFrom[DefineRoleName([ENDROLE])]([PARTNERCLASS.name] partner)
{
if (m_[DefineRoleName([ENDROLE])] == null)
{
new [GenerateEntityCollectionDAName([ENTITY.name], DefineRoleName([ENDROLE]))](this).DeleteItem(partner);
}
else
{
[DefineRoleName([ENDROLE])].Remove(partner);
}
}
[end if]
#endregion
[end if]
[end if]
[end if]
[end if]
[end loop]
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (GetStereoType([PARTNERCLASS]) == "Entity") )]
[if ([STARTROLE.id] != [ENDROLE.id])]
[if (HasAssociationClass([CURRENTASSOCIATION]) != "")]
[if ([ENDROLE.multiplicity] == "*" or [ENDROLE.multiplicity] == "1..*" or [ENDROLE.multiplicity] == "0..*")]
[if (([PARTNERCLASS.name] != [ENTITY.name]) or ([PARTNERCLASS.name] == [ENTITY.name] and [ENTITY.name] != DefineRoleName([ENDROLE])))]
[loop (CURRENTASSOCIATION -> AssociationClass as ASSOCIATIONCLASS)]
protected internal IAssociatedEntityCollection<[ASSOCIATIONCLASS.name]> m_[DefineRoleName([ENDROLE])] = null;
IReadOnlyList<I[ASSOCIATIONCLASS.name]> I[ENTITY.name].[DefineRoleName([ENDROLE])] => [DefineRoleName([ENDROLE])].Cast<I[ASSOCIATIONCLASS.name]>().ToList();
/// <summary>
///
/// </summary>
#region [ENTITY.name] ([STARTROLE.multiplicity]) -> [PARTNERCLASS.name] ([ENDROLE.multiplicity]) [ASSOCIATIONCLASS.name]
\[EntityProperty("[DefineRoleName([ENDROLE])]", EntityPropertyBaseType.EntityCollection, typeof(IAssociatedEntityCollection<[ASSOCIATIONCLASS.name]>), EntityCopyMethod.DeepCopy, "[ConvertRoleToName([STARTROLE])]")\]
public virtual IAssociatedEntityCollection<[ASSOCIATIONCLASS.name]> [DefineRoleName([ENDROLE])]
{
get
{
if (m_[DefineRoleName([ENDROLE])] == null)
{
m_[DefineRoleName([ENDROLE])] = new AssociatedEntityCollection<[ENTITY.name], [ASSOCIATIONCLASS.name]>(
new [GenerateEntityCollectionDAName([ENTITY.name], DefineRoleName([ENDROLE]))](this)
);
m_[DefineRoleName([ENDROLE])].Load();
}
return m_[DefineRoleName([ENDROLE])];
}
}
#endregion
[end loop]
[end if]
[end if]
[end if]
[end if]
[end loop]
end template

View file

@ -0,0 +1,110 @@
template GenerateEntityInterface(MClass as ENTITY)
[BOM]using System;
using System.Collections.Generic;
namespace Kreta.DataAccess.Interfaces
{
public interface I[ENTITY.name] : I[GetBaseClassName([ENTITY], "Entity")]
{
[GenerateSimpleInterfaceFields([ENTITY])]
[GenerateAssociationClassInterfaceFields([ENTITY])]
[GenerateFirstCaseInterfaceAssociations([ENTITY])]
[GenerateThirdCaseInterfaceAssociations([ENTITY])]
}
}
end template
template GenerateAssociationClassInterfaceFields(MClass)
[loop (MClass -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
[GetCSharpType("ID")] [ConvertRoleToName([StartRole])] { get; set; }
I[StartClass.name] [DefineRoleName([StartRole])] { get; set; }
[GetCSharpType("ID")] [ConvertRoleToName([EndRole])] { get; set; }
I[EndClass.name] [DefineRoleName([EndRole])] { get; set; }
[end loop]
[end loop]
end template
template GenerateSimpleInterfaceFields(MClass as ENTITY)
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[GenerateInterfaceAttributeProperty([ENTITY], [ATTRIBUTE])]
[end loop]
end template
template GenerateInterfaceAttributeProperty(MClass as ENTITY, MAttribute as ATTRIBUTE)
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
[GetCSharpType([ATTRIBUTE.type])] [ATTRIBUTE.name] { get; set; }
[else]
[GetCSharpNullableType([ATTRIBUTE.type])] [ATTRIBUTE.name] { get; set; }
[end if]
[else]
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
[GetCSharpType([ATTRIBUTE.type])] [ATTRIBUTE.name] { get; }
[else]
[GetCSharpNullableType([ATTRIBUTE.type])] [ATTRIBUTE.name] { get; }
[end if]
[end if]
end template
template GenerateFirstCaseInterfaceAssociations(MClass)
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
[if ([StartRole.multiplicity] == "1..*" or [StartRole.multiplicity] == "*" or [StartRole.multiplicity] == "0..*" or [EndRole.multiplicity] == "1")]
int [ConvertRoleToName([EndRole])] { get; set; }
[end if]
I[PartnerClass.name] [DefineRoleName([EndRole])] { get; set; }
[end if]
[end if]
[end if]
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) != "")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
[loop (CurrentAssoc -> AssociationClass)]
I[AssociationClass.name] [DefineRoleName([EndRole])] { get; set; }
[end loop]
[end if]
[end if]
[end if]
[end loop]
end template
template GenerateThirdCaseInterfaceAssociations(MClass as ENTITY)
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (GetStereoType([PARTNERCLASS]) == "Entity") )]
[if ([STARTROLE.id] != [ENDROLE.id])]
[if (HasAssociationClass([CURRENTASSOCIATION]) == "")]
[if ([ENDROLE.multiplicity] == "*" or [ENDROLE.multiplicity] == "1..*" or [ENDROLE.multiplicity] == "0..*")]
[if (([PARTNERCLASS.name] != [ENTITY.name]) or ([PARTNERCLASS.name] == [ENTITY.name] and [ENTITY.name] != DefineRoleName([ENDROLE])))]
IReadOnlyList<I[PARTNERCLASS.name]> [DefineRoleName([ENDROLE])] { get; }
[end if]
[end if]
[end if]
[end if]
[end loop]
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (GetStereoType([PARTNERCLASS]) == "Entity") )]
[if ([STARTROLE.id] != [ENDROLE.id])]
[if (HasAssociationClass([CURRENTASSOCIATION]) != "")]
[if ([ENDROLE.multiplicity] == "*" or [ENDROLE.multiplicity] == "1..*" or [ENDROLE.multiplicity] == "0..*")]
[if (([PARTNERCLASS.name] != [ENTITY.name]) or ([PARTNERCLASS.name] == [ENTITY.name] and [ENTITY.name] != DefineRoleName([ENDROLE])))]
[loop (CURRENTASSOCIATION -> AssociationClass as ASSOCIATIONCLASS)]
IReadOnlyList<I[ASSOCIATIONCLASS.name]> [DefineRoleName([ENDROLE])] { get; }
[end loop]
[end if]
[end if]
[end if]
[end if]
[end loop]
end template

View file

@ -0,0 +1,85 @@
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateEntityState(MClass as ENTITY)
internal class [ConvertNameToEntityStateName([ENTITY.name])] : [ConvertNameToEntityStateName(GetBaseClassName([ENTITY], "Entity"))] {
#region Attribútumok
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
public object [ConvertNameToEntityStateAttributeName([ATTRIBUTE.name])]; // [GetCSharpTypeOfAttribute([ATTRIBUTE])]
[end loop]
#endregion
#region Asszociációk
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNER where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNER]) == "Entity"))]
[if ([ENDROLE.multiplicity] == "0..1" or [ENDROLE.multiplicity] == "1")]
public [ConvertNameToEntityStateName([PARTNER.name])] [ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))];
[else]
public [ConvertNameToEntityStateCollectionName([PARTNER.name])] [ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))];
[end if]
[end loop]
#endregion
#region Asszociációs mezők
[loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity"))]
[loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity"))]
public [ConvertNameToEntityStateName([STARTCLASS.name])] [ConvertNameToEntityStateAttributeName(GetRoleName([STARTROLE]))];
public [ConvertNameToEntityStateName([ENDCLASS.name])] [ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))];
[end loop]
[end loop]
#endregion
#region Alaphelyzetbe állítás
public override void Reset() {
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
this.[ConvertNameToEntityStateAttributeName([ATTRIBUTE.name])] = null;
[end loop]
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNER where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNER]) == "Entity"))]
this.[ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))] = null; // XXX vagy inkább megtartsuk és a tartalmát ürítsük?
[end loop]
[loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity"))]
[loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity"))]
this.[ConvertNameToEntityStateAttributeName(GetRoleName([STARTROLE]))] = null; // XXX vagy inkább megtartsuk és a tartalmát ürítsük?
this.[ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))] = null; // XXX vagy inkább megtartsuk és a tartalmát ürítsük?
[end loop]
[end loop]
base.Reset();
}
#endregion
}
public class [ConvertNameToEntityStateCollectionName([ENTITY.name])] {
}
end template
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc ConvertNameToEntityStateName(ENTITYNAME)
return [ENTITYNAME] "DataObject ";
end proc
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc ConvertNameToEntityStateCollectionName(ENTITYNAME)
return [ENTITYNAME] "DataObjectCollection";
end proc
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc ConvertNameToEntityStateAttributeName(ATTRIBUTENAME)
return [ATTRIBUTENAME];
end proc

View file

@ -0,0 +1,334 @@
//***************************************************************************//
// 0..1 végpontú asszociációs osztály nélküli asszociációs mezőket és //
// tulajdonságokat állít elő a megadott entitáshoz (első eset) //
//***************************************************************************//
template GenerateFirstCaseAssociations(MClass)
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([StartRole.multiplicity] == "1" or [StartRole.multiplicity] == "0..1")]
protected internal virtual bool LoadBy[ConvertRoleToName([EndRole])](int id)
{
return m_DA.LoadBy[ConvertRoleToName([EndRole])](id, this);
}
[end if]
[end if]
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
#region [MClass.name] ([StartRole.multiplicity]) -> [PartnerClass.name] ([EndRole.multiplicity])
protected internal int m_[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")];
[if ([StartRole.multiplicity] == "1..*" or [StartRole.multiplicity] == "*" or [StartRole.multiplicity] == "0..*" or [EndRole.multiplicity] == "1")]
/// <summary>
/// A(z) [DefineRoleName([EndRole])] asszociáció végpontjának ID-ja.
/// </summary>
/// <remarks>
/// - Insert() előtt célszerű kitölteni
/// - Update() nincs rá hatással: ezt a mezőt nem frissíti
/// - LoadByID() felhozza ezt a mezőt
/// </remarks>
public virtual int [ConvertRoleToName([EndRole])]
{
get
{
return Internal[ConvertRoleToName([EndRole])];
}
set
{
Internal[ConvertRoleToName([EndRole])] = value;
}
}
[end if]
/// <summary>
/// Ez egy külön bejárat a DA számára
/// <summary>
internal int Internal[ConvertRoleToName([EndRole])]
{
get
{
if (m_[DefineRoleName([EndRole])] != null)
{
return m_[DefineRoleName([EndRole])].ID;
}
else
{
return m_[ConvertRoleToName([EndRole])];// XXX az meg nem teljesen OK
}
}
set
{
CheckModifyable();
[if (IsReadonlyAssociation([CurrentAssoc]) == "True")]
if (this.ID > 0)
{
Entity partner = this.[DefineRoleName([EndRole])];
if (partner != null)
{
throw new ReadOnlyEntityAttributeException("[MClass.name]", "[ConvertRoleToName([EndRole])]");
}
}
[end if]
if (m_[ConvertRoleToName([EndRole])] != value)
{
m_[ConvertRoleToName([EndRole])] = value;
m_[DefineRoleName([EndRole])] = null;
FieldModified("[ConvertRoleToName([EndRole])]", value);
}
}
}
/// <summary>
/// Ez egy külön bejárat a DA számára
/// <summary>
internal void Modify[DefineRoleName([EndRole])]([PartnerClass.name] value)
{
m_[ConvertRoleToName([EndRole])] = value != null ? value.ID : [GetCSharpDefaultValueOfType("ID")];
m_[DefineRoleName([EndRole])] = value;
FieldModified("[ConvertRoleToName([EndRole])]", value != null ? (object)value.ID : DBNull.Value);
}
protected internal void Set[DefineRoleName([EndRole])]([PartnerClass.name] value)
{
m_[DefineRoleName([EndRole])] = value;
if (value != null)
{
m_[ConvertRoleToName([EndRole])] = value.ID;
}
else
{
m_[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")];
}
}
protected [PartnerClass.name] m_[DefineRoleName([EndRole])] = null;
I[PartnerClass.name] I[MClass.name].[DefineRoleName([EndRole])]
{
get { return [DefineRoleName([EndRole])]; }
set { [DefineRoleName([EndRole])] = value as [PartnerClass.name]; }
}
/// <summary>
[if ([CurrentAssoc.description] != "")]
[ConvertDescriptionToCSharpSummary([CurrentAssoc.description])]
[else]
/// Nincs definiálva megjegyzés.
[end if]
/// </summary>
/// <remarks>
/// Az UML modellben szereplő [MClass.name] és [PartnerClass.name] entitások közötti asszociáció megvalósítása.
/// </remarks>
[if ([StartRole.multiplicity] == "1" or [StartRole.multiplicity] == "0..1")]
\[EntityProperty("[DefineRoleName([EndRole])]", EntityPropertyBaseType.Entity, typeof([PartnerClass.name]), EntityCopyMethod.DeepCopy)\]
[else]
\[EntityProperty("[DefineRoleName([EndRole])]", EntityPropertyBaseType.Entity, typeof([PartnerClass.name]), EntityCopyMethod.ShallowCopy)\]
[end if]
public virtual [PartnerClass.name] [DefineRoleName([EndRole])]
{
get
{
[if ([EndRole.multiplicity] == "0..1" and ([StartRole.multiplicity] == "1" or [StartRole.multiplicity] == "0..1"))]
if (m_[DefineRoleName([EndRole])] == null)
{
SDA.[ProjectName].Entities.[PartnerClass.name] partner = SDA.[ProjectName].Entities.[PartnerClass.name].GiveAnInstance();
if (partner.LoadBy[ConvertRoleToName([StartRole])](this.ID) == false)
{
return null;
}
if (partner.ID != [GetCSharpDefaultValueOfType("ID")])
{
this.Set[DefineRoleName([EndRole])](partner);
[if (([StartRole.multiplicity] != "1..*") and ([StartRole.multiplicity] != "*") and ([StartRole.multiplicity] != "0..*"))]
partner.Set[DefineRoleName([StartRole])](this);
[end if]
}
else
{
this.Set[DefineRoleName([EndRole])](null);
}
}
[else]
if ((m_[DefineRoleName([EndRole])] == null) && (m_[ConvertRoleToName([EndRole])] != [GetCSharpDefaultValueOfType("ID")]))
{
SDA.[ProjectName].Entities.[PartnerClass.name] partner = SDA.[ProjectName].Entities.[PartnerClass.name].GiveAnInstance();
partner.LoadByID(m_[ConvertRoleToName([EndRole])]);
this.Set[DefineRoleName([EndRole])](partner);
[if (([StartRole.multiplicity] != "1..*") and ([StartRole.multiplicity] != "*") and ([StartRole.multiplicity] != "0..*"))]
// itt be kell linkelni magunkat a partnerbe, ha ott nem lista van
partner.Set[DefineRoleName([StartRole])](this);
[end if]
}
[end if]
// természetesen null-t adunk vissza, ha nem tudtunk felhozni semmit
return m_[DefineRoleName([EndRole])];
}
set
{
CheckModifyable();
if (value != null)
{
if ((m_[DefineRoleName([EndRole])] == null) || (value.ID != m_[DefineRoleName([EndRole])].ID))
{
if (value.State != EntityState.Initialized)
{
throw new EntityStateException(value.State);
}
if ((this.State != EntityState.New))
{
[if ([StartRole.multiplicity] == "1..*" or [StartRole.multiplicity] == "*" or [StartRole.multiplicity] == "0..*")]
// Lista van a másik oldalon, úgyhogy a lista DA-ját használjuk
SDA.[ProjectName].Entities.[GenerateEntityCollectionDAName([PartnerClass.name], DefineRoleName([StartRole]))] da = new [GenerateEntityCollectionDAName([PartnerClass.name], DefineRoleName([StartRole]))](value);
da.AddItem(this);
this.Set[DefineRoleName([EndRole])](value);
[else]
[if (([EndRole.multiplicity] == "0..1") and ([StartRole.multiplicity] == "0..1"))]
m_DA.DeAssociate[DefineRoleName([EndRole])](this);
m_DA.Associate[DefineRoleName([EndRole])](this, value);
this.Set[DefineRoleName([EndRole])](value);
[else]
if (this.m_[ConvertRoleToName([EndRole])] != [GetCSharpDefaultValueOfType("ID")])
{
// Unlinkelni kell a régi partnert, ha van
SDA.[ProjectName].Entities.[PartnerClass.name] oldpartner = SDA.[ProjectName].Entities.[PartnerClass.name].GiveAnInstance();
[/*oldpartner.LoadByID(this.m_[ConvertRoleToName([EndRole])]);*/]
oldpartner.LoadBy[ConvertRoleToName([StartRole])](this.ID);
if (oldpartner.ID != [GetCSharpDefaultValueOfType("ID")])
{
oldpartner.Set[DefineRoleName([StartRole])](null);
oldpartner.UpdateAssociations();
}
}
this.Set[DefineRoleName([EndRole])](value);
value.Set[DefineRoleName([StartRole])](this);
UpdateAssociations();
value.UpdateAssociations();
[end if]
[end if]
}
else
{
this.Set[DefineRoleName([EndRole])](value);
}
FieldModified("[ConvertRoleToName([EndRole])]", value.ID);
}
}
else
{
[if (([EndRole.multiplicity] == "0..1") and ([StartRole.multiplicity] == "0..1"))]
m_DA.DeAssociate[DefineRoleName([EndRole])](this);
this.Set[DefineRoleName([EndRole])](null);
[else]
[if (([StartRole.multiplicity] != "1..*") and ([StartRole.multiplicity] != "*") and ([StartRole.multiplicity] != "0..*"))]
// unlinkelni kell a régi partnert, ha van
SDA.[ProjectName].Entities.[PartnerClass.name] oldpartner = SDA.[ProjectName].Entities.[PartnerClass.name].GiveAnInstance();
oldpartner.LoadByID(m_[ConvertRoleToName([EndRole])]);
if (oldpartner.ID != [GetCSharpDefaultValueOfType("ID")])
{
oldpartner.Set[DefineRoleName([StartRole])](null);
oldpartner.UpdateAssociations();
}
[end if]
// ki kell törölni a kapcsolatot az adatbázisban
this.Set[DefineRoleName([EndRole])](null);
UpdateAssociations();
[end if]
FieldModified("[ConvertRoleToName([EndRole])]", DBNull.Value);
}
}
}
#endregion
[end if]
[end if]
[end if]
[end loop]
[if (IsMasterEntity([MClass]) == "false" && HasSubTanev([MClass]) == "true")]
public override int TanevId
{
get
{
return base.TanevId;
}
set
{
InternalAlTanevId = value;
base.TanevId = value;
}
}
[end if]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) != "")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
[loop (CurrentAssoc -> AssociationClass)]
#region [MClass.name] ([StartRole.multiplicity]) -> [PartnerClass.name] ([EndRole.multiplicity]) [AssociationClass.name]
protected internal [AssociationClass.name] m_[DefineRoleName([EndRole])] = null;
I[PartnerClass.name] I[MClass.name].[DefineRoleName([EndRole])]
{
get { return [DefineRoleName([EndRole])]; }
set { [DefineRoleName([EndRole])] = value as [PartnerClass.name]; }
}
\[EntityProperty("[DefineRoleName([EndRole])]", EntityPropertyBaseType.Entity, typeof([AssociationClass.name]), EntityCopyMethod.DeepCopy)\]
public virtual [AssociationClass.name] [DefineRoleName([EndRole])]
{
get
{
if (m_[DefineRoleName([EndRole])] == null)
{
m_[DefineRoleName([EndRole])] = SDA.[ProjectName].Entities.[AssociationClass.name].GiveAnInstance();
m_[DefineRoleName([EndRole])].LoadBy[DefineRoleName([StartRole])](this);
}
if (m_[DefineRoleName([EndRole])].ID != [GetCSharpDefaultValueOfType("ID")])
{
return m_[DefineRoleName([EndRole])];
}
else
{
return null;
}
}
set
{
CheckModifyable();
if (m_[DefineRoleName([EndRole])] == null)
{
// felhozzuk a régit, ha van
m_[DefineRoleName([EndRole])] = SDA.[ProjectName].Entities.[AssociationClass.name].GiveAnInstance();
m_[DefineRoleName([EndRole])].LoadBy[DefineRoleName([StartRole])](this);
}
if (m_[DefineRoleName([EndRole])].ID != [GetCSharpDefaultValueOfType("ID")])
{
// és ha van, akkor kitöröljük
m_[DefineRoleName([EndRole])].Delete();
}
if (value != null)
{
value.[ConvertRoleToName([StartRole])] = this.ID;
value.Insert();
}
m_[DefineRoleName([EndRole])] = value;
}
}
#endregion
[end loop]
[end if]
[end if]
[end if]
[end loop]
end template

View file

@ -0,0 +1,227 @@
//***************************************************************************//
// Legenerálja a megadott entitás általános szekcióját //
//***************************************************************************//
template GenerateGeneralSection(MClass)
#region General
private [MClass.name]DA m_DA = new [MClass.name]DA();
protected static [MClass.name] Fake[MClass.name] { get; set; }
[if (IsMasterEntity([MClass]) == "true")]
public static [MClass.name] GiveAnInstance()
[else]
public static new [MClass.name] GiveAnInstance()
[end if]
{
[MClass.name] result = Fake[MClass.name] == null
? new [MClass.name]()
: ([MClass.name])Fake[MClass.name].MemberwiseClone();
result.Reset();
result.SetDefaultData();
return result;
}
[if (IsMasterEntity([MClass]) == "true")]
protected void SetDefaultData()
[else]
protected new void SetDefaultData()
[end if]
{
[if (HasIntezmeny([MClass]) == "true" || HasSubIntezmeny([MClass]) == "true")]
if (UserContext.Instance != null)
{
if (UserContext.Instance.IntezmenyId > 0)
{
[if (HasIntezmeny([MClass]) == "true")]
IntezmenyId = UserContext.Instance.IntezmenyId;
[end if]
[if(HasSubIntezmeny([MClass]) == "true")]
AlIntezmenyId = UserContext.Instance.IntezmenyId;
[end if]
}
[if (HasTanev([MClass]) == "true" || HasSubTanev([MClass]) == "true")]
if (UserContext.Instance.AktivTanevId > 0)
{
[if (HasTanev([MClass]) == "true")]
TanevId = UserContext.Instance.AktivTanevId;
[end if]
[if(HasSubTanev([MClass]) == "true")]
AlTanevId = UserContext.Instance.AktivTanevId;
[end if]
}
[end if]
m_State = EntityState.Uninitialized;
}
[end if]
}
protected override IEntityDataAccessor GetDataAccessor() { return m_DA; }
[if (IsMasterEntity([MClass]) == "true")]
protected internal virtual IEntityDataAccessor InheritedDA { get { return null; } }
[else]
protected internal new IEntityDataAccessor InheritedDA { get { return base.GetDataAccessor(); } }
[end if]
\[Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")\]
[if (IsMasterEntity([MClass]) == "true")]
public static IEntityCollection<[MClass.name]> LoadAll()
[else]
public static new IEntityCollection<[MClass.name]> LoadAll()
[end if]
{
return LoadWithFilter("");
}
\[Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")\]
[if (IsMasterEntity([MClass]) == "true")]
public static IEntityCollection<[MClass.name]> LoadAll(ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
[else]
public static new IEntityCollection<[MClass.name]> LoadAll(ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
[end if]
{
return LoadWithFilter("", columnFilterMode, columns);
}
\[Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")\]
[if (IsMasterEntity([MClass]) == "true")]
public static IEntityCollection<[MClass.name]> LoadWithFilter(string filter, Dictionary<string, object> commandParameters = null)
[else]
public static new IEntityCollection<[MClass.name]> LoadWithFilter(string filter, Dictionary<string, object> commandParameters = null)
[end if]
{
var result = new EntityCollection<[MClass.name]>();
new [MClass.name]DA().LoadWithFilter(result, filter, commandParameters);
return result;
}
\[Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")\]
[if (IsMasterEntity([MClass]) == "true")]
public static IEntityCollection<[MClass.name]> LoadWithFilter(string filter, ColumnFilterMode columnFilterMode, IEnumerable<string> columns, Dictionary<string, object> commandParameters = null)
[else]
public static new IEntityCollection<[MClass.name]> LoadWithFilter(string filter, ColumnFilterMode columnFilterMode, IEnumerable<string> columns, Dictionary<string, object> commandParameters = null)
[end if]
{
var result = new EntityCollection<[MClass.name]>();
new [MClass.name]DA().LoadWithFilter(result, filter, columnFilterMode, columns, commandParameters);
return result;
}
protected override void StoreOriginalValues()
{
base.StoreOriginalValues();
[loop (MClass -> MAttribute as ATTRIBUTE)]
[if (IsAttributeLoggable([ATTRIBUTE]) == "true")]
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
OriginalValues.Add("[ATTRIBUTE.name]", (object)m_[ATTRIBUTE.name]);
[else]
OriginalValues.Add("[ATTRIBUTE.name]", ([ATTRIBUTE.name] == null ? (object)DBNull.Value : (object)m_[ATTRIBUTE.name]));
[end if]
[else]
// [ATTRIBUTE.name] ([ATTRIBUTE.type]) nem naplózandó attribútum, mert túl hosszú ([GetAttributeLength([ATTRIBUTE])])
[end if]
[end loop]
[loop (MClass -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNERCLASS]) == "Entity"))]
[if (HasAssociationClass([CURRENTASSOCIATION]) == "")]
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
[if (([PARTNERCLASS.name] != [MClass.name]) or ([PARTNERCLASS.name] == [MClass.name] and [MClass.name] != DefineRoleName([ENDROLE])))]
OriginalValues.Add("[ConvertRoleToName([ENDROLE])]", (m_[ConvertRoleToName([ENDROLE])] < 0 ? (object)DBNull.Value : (object)m_[ConvertRoleToName([ENDROLE])]));
[end if]
[end if]
[end if]
[end loop]
[loop (MClass -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity"))]
[loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity" ))]
OriginalValues.Add("[ConvertRoleToName([STARTROLE])]", m_[ConvertRoleToName([STARTROLE])]);
OriginalValues.Add("[ConvertRoleToName([ENDROLE])]", m_[ConvertRoleToName([ENDROLE])]);
[end loop]
[end loop]
}
#endregion
end template
//***************************************************************************//
// Visszaadja egy attribútumról, hogy a megváltozása naplózandó-e, vagy sem. //
// true, ha naplózni kell a változását; egyébként false. //
//***************************************************************************//
proc IsAttributeLoggable(MAttribute)
if ([MAttribute.type] == "Binary")
return "false";
end if
local temp;
[temp] = GetTaggedValue([MAttribute], "history");
if ([temp] != "")
return ToLower([temp]);
end if
// if ([MAttribute.type] == "LongString")
// return "false";
// end if
//
// if ([MAttribute.type] == "String" and GetAttributeLength([MAttribute]) > 200)
// return "false";
// end if
return "true";
end proc
proc HasIntezmeny(MClass)
local HasIntezmeny = "false";
loop (MClass->Role as StartRole ->MAssociation as CurentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id]!=[EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
if([PartnerClass.name] == "Intezmeny")
[HasIntezmeny] = "true";
end if
end loop
if([MClass.name] == "Fenntarto" || [MClass.name] == "MobilDbInfo")
[HasIntezmeny] = "false";
end if
return [HasIntezmeny];
end proc
proc HasSubIntezmeny(MClass)
local HasIntezmeny = "false";
loop (MClass->Role as StartRole ->MAssociation as CurentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id]!=[EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
if([PartnerClass.name] == "Intezmeny" && [EndRole.name] == [StartRole.name] "AlIntezmeny")
[HasIntezmeny] = "true";
end if
end loop
return [HasIntezmeny];
end proc
proc HasTanev(MClass)
local HasTanev = "false";
loop (MClass->Role as StartRole ->MAssociation as CurentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id]!=[EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
if([PartnerClass.name] == "Tanev")
[HasTanev] = "true";
end if
end loop
if([MClass.name] == "MobilDbInfo")
[HasTanev] = "false";
end if
return [HasTanev];
end proc
proc HasSubTanev(MClass)
local HasTanev = "false";
loop (MClass->Role as StartRole ->MAssociation as CurentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id]!=[EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
if([PartnerClass.name] == "Tanev" && [EndRole.name] == [StartRole.name] "AlTanev")
[HasTanev] = "true";
end if
end loop
return [HasTanev];
end proc

View file

@ -0,0 +1,21 @@
template GenerateIEntityBaseClass()
[BOM]namespace Kreta.DataAccess.Interfaces
{
public interface IEntity
{
int ID { get; set; }
bool Torolt { get; set; }
}
}
end template
template GenerateIAssociatedCollection()
[BOM]using System.Collections.Generic;
namespace Kreta.DataAccess.Interfaces
{
public interface IAssociatedCollection<out TEntityType> : IEnumerable<TEntityType>
{
}
}
end template

View file

@ -0,0 +1,494 @@
//***************************************************************************//
// Megjegyzés? //
// //
// REKURZÍV! //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateMidasBaseSetLoadEntityCore(MClass, offset, entityname, readername)
// [MClass.name] mezői
[setVar("counter", [offset])]
[loop (MClass -> MAttribute where [MAttribute.name] != [MClass.name])]
if (reader.IsDBNull([counter]) == false)
{
[entityname].[MAttribute.name] = [GenerateReaderRead([MAttribute.type], [counter], [readername])];
}
else
{
[entityname].[MAttribute.name] = [GetCSharpDefaultValueOfAttribute([MAttribute])]; // Attribútum
}
[setVar("counter", incr([counter]))]
[end loop]
[/* Asszociacios mezok */]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
if ([readername].IsDBNull([counter]) == false)
{
[entityname].[ConvertRoleToName([EndRole])] = [GenerateReaderRead("ID", [counter], [readername])]; // Asszociációs mező
}
else
{
[entityname].[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")];
}
[setVar("counter", incr([counter]))]
[end if]
[end if]
[end loop]
[/* Ha az entitas asszociacios osztaly, akkor ilyenek is vannak */]
[loop (MClass -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
[entityname].[ConvertRoleToName([StartRole])] = [GenerateReaderRead("ID", [counter], [readername])]; // Asszociációs mező
[setVar("counter", incr([counter]))]
[entityname].[ConvertRoleToName([EndRole])] = [GenerateReaderRead("ID", [counter], [readername])]; // Asszociációs mező
[setVar("counter", incr([counter]))]
[end loop]
[end loop]
[if (GetBaseClassName([MClass], [""]) != [""] )]
[loop (MClass -> SuperClass as BASECLASS)]
[GenerateMidasBaseSetLoadEntityCore([BASECLASS], [counter], [entityname], [readername])][break]
[end loop]
[else]
[entityname].Serial = [GenerateReaderRead("Integer", [counter], [readername])];
[end if]
end template
//***************************************************************************//
// Megjegyzés? //
// //
// REKURZÍV! //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateMidasFieldListWithBaseClassFields(MClass)
[loop (MClass->MAttribute)]
"[ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName([MAttribute.name])], " +
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "1")]
"[ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + // Kötelező asszociációs kapcsolómező
[else]
[if ([EndRole.multiplicity] == "0..1")]
[if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))]
"[ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + // Opcionális asszociációs kapcsolómező
[else]
[if ([StartRole.multiplicity] == "1")]
"[ConvertNameToSQLTableName([PartnerClass.name])].ID as [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + // a masik tablaban van a kapcsolomezo
[else]
"[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + // kapcsolotabla van
[end if]
[end if]
[end if]
[end if]
[end if]
[end loop]
[loop (MClass -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
"[ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))], " + // Asszociációs mező
"[ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + // Asszociációs mező
[end loop]
[end loop]
[if (IsMasterEntity([MClass]) == "false")]
[loop (MClass -> SuperClass as BASECLASS)]
[GenerateMidasFieldListWithBaseClassFields([BASECLASS])][break]
[end loop]
[else]
"[ConvertNameToSQLTableName([MClass.name])].SERIAL " +
[end if]
end template
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc GenerateMidasTableListCore(MClass, tables)
loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
if (HasAssociationClass([CurrentAssoc]) == "")
if ([EndRole.multiplicity] == "0..1")
if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))
else
if ([StartRole.multiplicity] == "1")
[tables] = AddDistinctValueToTokenSet([tables], [PartnerClass.name]);
//info = "\n>>>>>>>>>>>>>" [tables] "<<<<<<<<<<<<<<<\n";
else
[tables] = AddDistinctValueToTokenSet([tables], ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]));
//info = "\n>>>>>>>>>>>>>" [tables] "<<<<<<<<<<<<<<<\n";
end if
end if
end if
end if
end loop
return [tables];
end proc
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc GenerateMidasTableList(MClass)
local tables = "";
[tables] = GenerateMidasTableListCore([MClass], [tables]);
if (IsMasterEntity([MClass]) == "false")
loop (MClass -> SuperClass as BASECLASS)
[tables] = GenerateMidasTableListCore([BASECLASS], [tables]);
break;
end loop
end if
return [tables];
end proc
//***************************************************************************//
// Megjegyzés? //
// //
// REKURZÍV! //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateMidasBaseSetLoaderWhereClause(MClass)
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "0..1")]
[if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))]
[else]
[if ([StartRole.multiplicity] == "1")]
"([ConvertNameToSQLTableName([PartnerClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLTableName([MClass.name])].ID) and " + // a masik tablaban van a kapcsolomezo
[else]
"([ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLTableName([MClass.name])].ID) and " + // kapcsolotabla van
[end if]
[end if]
[end if]
[end if]
[end loop]
[if (IsMasterEntity([MClass]) == "false")]
[loop (MClass -> SuperClass as BASECLASS)]
[GenerateMidasBaseSetLoaderWhereClause([BASECLASS])][break]
[end loop]
[end if]
end template
//***************************************************************************//
// Megjegyzés? //
// //
// REKURZÍV! //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateJoins(MClass as current, MClass as master)
[loop (current -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "0..1")]
[if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))]
[else]
[if ([StartRole.multiplicity] == "1")]
"left join [ConvertNameToSQLTableName([PartnerClass.name])] on [ConvertNameToSQLTableName([PartnerClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLTableName([master.name])].ID " + // a masik tablaban van a kapcsolomezo
[else]
"left join [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] on [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLTableName([master.name])].ID " + // kapcsolotabla van
[end if]
[end if]
[end if]
[end if]
[end loop]
[if (IsMasterEntity([current]) == "false")]
[loop (current -> SuperClass as BASECLASS)]
[GenerateJoins([BASECLASS], [master])][break]
[end loop]
[end if]
end template
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateLoadMidasBaseSet(MClass)
#region Load entity base set
[GenerateCommandGetterProperty("LoadMidasBaseSet")]
private [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("LoadMidasBaseSet")]()
{
[GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()]();
result.CommandType = CommandType.Text;
result.CommandText =
"select " +
"[ConvertNameToSQLTableName([MClass.name])].ID, " +
[GenerateMidasFieldListWithBaseClassFields([MClass])]
"from " +
[if (IsMasterEntity([MClass]) == "true")]
"[ConvertNameToSQLTableName([MClass.name])] " +
[else]
"[GenerateSuperClassTableList([MClass])] " +
[end if]
[GenerateJoins([MClass], [MClass])]
"where " +
[if (IsMasterEntity([MClass]) == "true")]
"[ConvertNameToSQLTableName([MClass.name])].SERIAL >= 0" +
[else]
[SDA_GetSuperClassSelectFilter([MClass])] +
[end if]
"and rownum < 1000";
[/*
// a partnertablak meg a kapcsolotablak
[loop (Instances -> TokenSet(GenerateMidasTableList([MClass])))]
"[ConvertNameToSQLTableName([TokenSet.line])], " +
[end loop]
"where " +
[GenerateMidasBaseSetLoaderWhereClause([MClass])]
[if (IsMasterEntity([MClass]) == "true")]
"[ConvertNameToSQLTableName([MClass.name])].SERIAL >= 0";
[else]
[SDA_GetSuperClassSelectFilter([MClass])];
[end if]
*/]
return result;
}
/// <summary>
///
/// </summary>
/// <param name="collection">Az adatbázisból felhozott entitásokat tartalmazó lista</param>
public bool LoadMidasBaseSet([MClass.name]Collection collection)
{
[GetCSharpSQLDataReaderType()] reader = null;
[GetCSharpSQLCommandType()] command = this.[ConvertNameToCommandName("LoadMidasBaseSet")];
[GenerateCommandInit("command")]
// Hajrá!
using (reader = command.ExecuteReader())
{
while (reader.Read())
{
[MClass.name] entity = [MClass.name].GiveAnInstance();
entity.ID = [GenerateReaderRead("ID", 0, "reader")];
[GenerateMidasBaseSetLoadEntityCore([MClass], 1, "entity", "reader")]
collection.AddEntity(entity);
}
return true;
}
}
#endregion
end template
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc GenerateMidasSave(buildername, attributename, type)
switch (ToLower([type]))
case "integer": return [buildername] ".Append(" [attributename] ".ToString());";
case "string": return [buildername] ".Append(this.HtmlEncode(" [attributename] "));";
case "datetime": return [buildername] ".Append(this.DateTimeToMidasString(" [attributename] "));";
case "boolean": return [buildername] ".Append(" [attributename] ".ToString());";
case "char": //return [buildername] ".Append(this.HtmlEncode(" [attributename] ".ToString()));";
return [buildername] ".Append(this.HtmlEncode(" [attributename] "));";
case "double": return [buildername] ".Append(" [attributename] ".ToString());";
case "float": return [buildername] ".Append(" [attributename] ".ToString());";
case "id": return [buildername] ".Append("[attributename] " != " GetCSharpDefaultValueOfType("ID") " ? " [attributename] ".ToString() : \"\");";
case "dictionaryitem": return [buildername] ".Append(" [attributename] ".ToString()); /* XXX DictionaryItem */ ";
case "binary": return "if (" [attributename] " != null) { " [buildername] ".Append(System.Convert.ToBase64String(" [attributename] ")); }";
end switch
return "/* ERROR Ismeretlen típus: " [type] " */";
end proc
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
template GenerateMidasSupport(MClass)
[/*
#region Midas támogatás
[if (IsMasterEntity([MClass]) == "true")]
public [MClass.name]Collection MidasBaseSet
[else]
public new [MClass.name]Collection MidasBaseSet
[end if]
{
get
{
[MClass.name]Collection result = [MClass.name]Collection.GiveAnInstance();
this.m_DA.LoadMidasBaseSet(result);
return result;
}
}
public override string FieldsToDelphiTClientDataSetXML(int parentid, bool needid, string nameprefix)
{
System.Text.StringBuilder builder = new System.Text.StringBuilder();
[if (IsMasterEntity([MClass]) == "false")]
builder.Append(base.FieldsToDelphiTClientDataSetXML(parentid, needid, nameprefix));
[else]
if (needid == true)
{
builder.Append("SELECTED=\\"");
builder.Append("False");
builder.Append("\\" ");
builder.Append("ID=\\"");
[GenerateMidasSave("builder", "this.ID", "ID")]
builder.Append("\\" ");
builder.Append("ParentID=\\"");
[GenerateMidasSave("builder", "parentid", "ID")]
builder.Append("\\" ");
builder.Append("Serial=\\"");
[GenerateMidasSave("builder", "this.Serial", "Integer")]
builder.Append("\\" ");
}
[end if]
[loop (MClass -> MAttribute)]
builder.Append(nameprefix + "[MAttribute.name]=\\"");
[GenerateMidasSave("builder", "this.m_" [MAttribute.name], [MAttribute.type])]
builder.Append("\\" ");
[if ([MAttribute.type] == "DictionaryItem")]
builder.Append(nameprefix + "[MAttribute.name]_DNAME=\\"");
if (this.[MAttribute.name] != [GetCSharpDefaultValueOfType("ID")])
{
//SDA.[ProjectName].Entities.[MAttribute.defaultValue] temp = SDA.[ProjectName].Entities.[MAttribute.defaultValue].GiveAnInstance();
//temp.LoadByID(this.[MAttribute.name]);
//SDA.[ProjectName].Entities.[MAttribute.defaultValue] temp = (SDA.[ProjectName].Entities.[MAttribute.defaultValue])SDAServer.Instance.GetEntityFromCache(this.[MAttribute.name]);
SDA.[ProjectName].Entities.DictionaryItemBase temp = (SDA.[ProjectName].Entities.DictionaryItemBase)SDAServer.Instance.GetEntityFromCache(this.[MAttribute.name]);
if (temp == null)
{
temp = SDA.[ProjectName].Entities.[MAttribute.defaultValue].GiveAnInstance();
temp.LoadByID(this.[MAttribute.name]);
SDAServer.Instance.AddEntityToCache(temp);
}
[GenerateMidasSave("builder", "temp.Name", "string")]
}
builder.Append("\\" ");
[end if]
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
[if ([EndRole.multiplicity] == "1")]
builder.Append("[ConvertRoleToName([EndRole])]=\\"");
[GenerateMidasSave("builder", "this.m_" ConvertRoleToName([EndRole]), "ID")]
builder.Append("\\" ");
[end if]
[if ([EndRole.multiplicity] == "0..1")]
builder.Append(nameprefix + "[ConvertRoleToName([EndRole])]=\\"");
[GenerateMidasSave("builder", "this.m_" ConvertRoleToName([EndRole]), "ID")]
builder.Append("\\" ");
[end if]
[end if]
[end if]
[end loop]
return builder.ToString();
}
//public override string MetainfoToDelphiTClientDataSetXML()
//{
// return this.MetainfoToDelphiTClientDataSetXML(true);
//}
public override string MetainfoToDelphiTClientDataSetXML(bool needid, string nameprefix)
{
System.Text.StringBuilder builder = new System.Text.StringBuilder();
[if (IsMasterEntity([MClass]) == "false")]
builder.Append(base.MetainfoToDelphiTClientDataSetXML(needid, nameprefix));
[else]
if (needid == true)
{
builder.Append("<FIELD attrname=\\"SELECTED\\" fieldtype=\\"boolean\\"/>");
builder.Append("<FIELD attrname=\\"ID\\" fieldtype=\\"i4\\"/>");
builder.Append("<FIELD attrname=\\"ParentID\\" fieldtype=\\"i4\\"/>");
builder.Append("<FIELD attrname=\\"Serial\\" fieldtype=\\"i4\\"/>");
}
[end if]
[loop (MClass -> MAttribute)]
builder.Append("<FIELD attrname=\\"");
builder.Append(nameprefix + "[MAttribute.name]");
builder.Append("\\" fieldtype=\\"");
builder.Append("[GetMidasType([MAttribute.type])]");
builder.Append("\\" WIDTH=\\"");
builder.Append("[GetAttributeLength([MAttribute])]");
builder.Append("\\"/>");
[if ([MAttribute.type] == "DictionaryItem")]
builder.Append("<FIELD attrname=\\"");
builder.Append(nameprefix + "[MAttribute.name]_DNAME");
builder.Append("\\" fieldtype=\\"string\\"");
builder.Append(" WIDTH=\\"200\\"/>");
[end if]
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
builder.Append("<FIELD attrname=\\"");
builder.Append(nameprefix + "[ConvertRoleToName([EndRole])]");
builder.Append("\\" fieldtype=\\"");
builder.Append("[GetMidasType("ID")]");
builder.Append("\\"/>");
[end if]
[end if]
[end if]
[end loop]
return builder.ToString();
}
[if (IsMasterEntity([MClass]) == "true")]
public static string GetDatapacketMetainfo(string prefix)
[else]
public static new string GetDatapacketMetainfo(string prefix)
[end if]
{
return m_DatapacketMetaInfo.Replace("{PREFIX}", prefix);
}
[if (IsMasterEntity([MClass]) == "true")]
public static string GetDatapacketMetainfo()
[else]
public static new string GetDatapacketMetainfo()
[end if]
{
return GetDatapacketMetainfo("");
}
private static readonly string m_DatapacketMetaInfo =
@"<FIELD attrname=""{PREFIX}ID"" fieldtype=""i4""/>
<FIELD attrname=""{PREFIX}Serial"" fieldtype=""i4""/>
[GenerateDataPacketMetadataAttributes([MClass], "{PREFIX}")]
[GenerateDataPacketMetadataAssociations([MClass], "{PREFIX}")]";
#endregion
*/]
end template
//***************************************************************************//
// Megjegyzés? //
// //
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
//***************************************************************************//
proc GetMidasType(type)
switch(ToLower([type]))
case "integer": return "i4";
case "string": return "string";
case "boolean": return "boolean";
case "float": return "r8"; // XXX
case "char": return "string"; // XXX
case "datetime": return "dateTime";
case "id": return "i4";
case "binary": return "bin.hex\"\" SUBTYPE=\"\"Binary";
case "dictionaryitem": return "i4";
end switch
return "object /* ERROR Ismeretlen tipus: " [type] " */";
end proc

View file

@ -0,0 +1,80 @@
//***************************************************************************//
// Pool támogató szekciót generál egy osztályhoz //
//***************************************************************************//
template GeneratePoolableSection(classname, ismasterentity, customname)
#region Pool-lal kapcsolatos műveletek
private static readonly PoolableFactory m_Factory = new [classname]Factory();
private static readonly ObjectPool m_Pool = new ObjectPool(m_Factory);
protected override PoolableFactory GetFactory() { return m_Factory; }
protected override ObjectPool GetPool() { return m_Pool; }
private sealed class [classname]Factory : PoolableFactory
{
public Poolable CreateObject() { return new [customname](); }
}
/// <summary>
/// Visszaad egy alapállapotú [classname] entitáspéldányt, lehetőleg pool-ból.
/// </summary>
/// <returns>Egy alapállapotú [classname] példány.</returns>
[if ([ismasterentity] == "true")]
public static [classname] GiveAnInstance()
[else]
public static new [classname] GiveAnInstance()
[end if]
{
[classname] result = ([classname])m_Factory.CreateObject();
result.Reset();
return result;
}
#endregion
end template
//***************************************************************************//
// Legenerálja egy entitás Reset() metódusát //
//***************************************************************************//
template GenerateEntityReset(MClass)
#region Alaphelyzetbe állítás
protected override void Reset()
{
base.Reset();
// alaphelyzetbe állítjuk az egyszerű mezőket
[loop (MClass -> MAttribute where [MAttribute.name] != [MClass.name])]
this.m_[MAttribute.name] = [GetCSharpDefaultValueOfAttribute([MAttribute])];
[end loop]
// alaphelyzetbe állítjuk az asszociációkból származó mezőket
[loop (MClass -> MAssociation as CurrentAssoc-> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity") )]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id]<[EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
this.m_[ConvertRoleToName([StartRole])] = [GetCSharpDefaultValueOfType("ID")]; // ID
this.m_[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")]; // ID
[end loop]
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([EndRole])))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[//if (([EndRole.multiplicity] == "1") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
[if (([EndRole.multiplicity] == "1") or ([EndRole.multiplicity] == "0..1"))]
this.m_[ConvertRoleToName([EndRole])] = [GetCSharpDefaultValueOfType("ID")];
this.m_[DefineRoleName([EndRole])] = null; // Entity
[end if]
[if ([EndRole.multiplicity] == "*" or [EndRole.multiplicity] == "1..*" or [EndRole.multiplicity] == "0..*")]
this.m_[DefineRoleName([EndRole])] = null; // EntityCollection
[end if]
[else]
[if ([EndRole.multiplicity] == "1" or [EndRole.multiplicity] == "0..1")]
[end if]
[if ([EndRole.multiplicity] == "*" or [EndRole.multiplicity] == "1..*" or [EndRole.multiplicity] == "0..*")]
[end if]
[end if]
[end if]
[end loop]
}
#endregion
end template

View file

@ -0,0 +1,165 @@
//***************************************************************************//
// Legenerálja egy entitás attribútumaiból a mezőket és a tulajdonságokat //
// Rendbe van téve //
//***************************************************************************//
template GenerateSimpleFields(MClass as ENTITY)
#region Egyszerű mezők
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
#region [ATTRIBUTE.name]
[GenerateAttributeProperty([ENTITY], [ATTRIBUTE])]
#endregion
[end loop]
#endregion
end template
//***************************************************************************//
// Rendbe van téve //
//***************************************************************************//
template GenerateAttributeProperty(MClass as ENTITY, MAttribute as ATTRIBUTE)
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
protected internal [GetCSharpType([ATTRIBUTE.type])] m_[ATTRIBUTE.name];
[else]
protected internal [GetCSharpNullableType([ATTRIBUTE.type])] m_[ATTRIBUTE.name];
[end if]
/// <summary>
[if ([ATTRIBUTE.description] != "")]
[ConvertDescriptionToCSharpSummary([ATTRIBUTE.description])]
[else]
/// Nincs definiálva megjegyzés.
[end if]
/// </summary>
\[EntityProperty("[ATTRIBUTE.name]", EntityPropertyBaseType.ValueType, typeof([GetCSharpType([ATTRIBUTE.type])]), EntityCopyMethod.ShallowCopy)\]
[if (IsDictionaryItem([ATTRIBUTE]) == _True())]
\[EntityDictionaryItemProperty("[ATTRIBUTE.name]", "[GetDictionaryItemClass([ATTRIBUTE])]", typeof(SDA.[ProjectName].Entities.[GetDictionaryItemClass([ATTRIBUTE])]))\]
[end if]
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
public virtual [GetCSharpType([ATTRIBUTE.type])] [ATTRIBUTE.name]
[else]
public virtual [GetCSharpNullableType([ATTRIBUTE.type])] [ATTRIBUTE.name]
[end if]
{
get
{
[if ((ToLower([ATTRIBUTE.type]) == "string" || ToLower([ATTRIBUTE.type]) == "longstring") && IsTrimmed([ATTRIBUTE]) == _True())]
return m_[ATTRIBUTE.name] == null ? m_[ATTRIBUTE.name] : m_[ATTRIBUTE.name].Trim();
[else]
return m_[ATTRIBUTE.name];
[end if]
}
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
set
{
[if (IsReadonlyAttribute([ATTRIBUTE]) == _True())]
// readonly attribútum
[GenerateReadonlyAttributeSetter([ENTITY], [ATTRIBUTE])]
[else]
[GenerateAttributeSetter([ENTITY], [ATTRIBUTE])]
[end if]
}
[end if]
}
[if (IsMultiLanguage([ATTRIBUTE]) == _True())]
[if (GetLanguageIndex([ATTRIBUTE]) == "0")]
/// <summary>
/// A(z) [ATTRIBUTE.name] értéke a jelenlegi nyelven. Csak megjelenítéshez használni!
/// </summary>
public [GetCSharpType([ATTRIBUTE.type])] Get[ATTRIBUTE.name]()
{
return Get[ATTRIBUTE.name](EntityUtil.CurrentLanguageIndex);
}
private [GetCSharpType([ATTRIBUTE.type])] Get[ATTRIBUTE.name](int languageIndex)
{
switch (languageIndex)
{
case 1:
{
return (string.IsNullOrEmpty([ATTRIBUTE.name]_1) ? [ATTRIBUTE.name] : [ATTRIBUTE.name]_1);
}
case 2:
{
return (string.IsNullOrEmpty([ATTRIBUTE.name]_2) ? [ATTRIBUTE.name] : [ATTRIBUTE.name]_2);
}
case 3:
{
return (string.IsNullOrEmpty([ATTRIBUTE.name]_3) ? [ATTRIBUTE.name] : [ATTRIBUTE.name]_3);
}
case 4:
{
return (string.IsNullOrEmpty([ATTRIBUTE.name]_4) ? [ATTRIBUTE.name] : [ATTRIBUTE.name]_4);
}
default:
{
return [ATTRIBUTE.name];
}
}
}
[end if]
[end if]
end template
//***************************************************************************//
// Rendbe van téve //
//***************************************************************************//
template GenerateReadonlyAttributeSetter(MClass as ENTITY, MAttribute as ATTRIBUTE)
CheckModifyable();
if (m_[ATTRIBUTE.name] == null || this.ID <= 0)
{
[if (IsDefaultonlyAttribute([ATTRIBUTE]) == _True())]
m_[ATTRIBUTE.name] = [GetCSharpDefaultValueOfAttribute([ATTRIBUTE])];
[else]
[if ((ToLower([ATTRIBUTE.type]) == "string" || ToLower([ATTRIBUTE.type]) == "longstring") && IsTrimmed([ATTRIBUTE]) == _True())]
m_[ATTRIBUTE.name] = value == null ? value : value.Trim();
[else]
m_[ATTRIBUTE.name] = value;
[end if]
[end if]
FieldModified("[ATTRIBUTE.name]", value);
}
else
{
throw new ReadOnlyEntityAttributeException("[ENTITY.name]", "[ATTRIBUTE.name]");
}
end template
//***************************************************************************//
// Rendbe van téve //
//***************************************************************************//
template GenerateAttributeSetter(MClass as ENTITY, MAttribute as ATTRIBUTE)
CheckModifyable();
[if (IsDefaultonlyAttribute([ATTRIBUTE]) == _True())]
m_[ATTRIBUTE.name] = [GetCSharpDefaultValueOfAttribute([ATTRIBUTE])];
FieldModified("[ATTRIBUTE.name]", value);
[else]
[if (ToLower([ATTRIBUTE.type]) == "string" || ToLower([ATTRIBUTE.type]) == "binary" || ToLower([ATTRIBUTE.type]) == "longstring")]
[if ((ToLower([ATTRIBUTE.type]) == "string" || ToLower([ATTRIBUTE.type]) == "longstring") && IsTrimmed([ATTRIBUTE]) == _True())]
value = (value == null) ? value : value.Trim();
[end if]
if (m_[ATTRIBUTE.name] == value) return;
m_[ATTRIBUTE.name] = value;
FieldModified("[ATTRIBUTE.name]", value);
[else]
if (m_[ATTRIBUTE.name] == value) return;
m_[ATTRIBUTE.name] = value;
FieldModified("[ATTRIBUTE.name]", value);
[end if]
[end if]
end template

View file

@ -0,0 +1,96 @@
//***************************************************************************//
// Legenerálja a megadott entitás Validate() metódusát //
//***************************************************************************//
template GenerateEntityValidation(MClass as ENTITY)
#region Ellenőrzés
protected override void Validate(bool skipValidateAttributes = false)
{
base.Validate();
[if (IsProtectedDictionaryItem([ENTITY]) == "True")]
// Védett kódtétel...
//if (m_Protected == false) { throw new InvalidEntityAttributeException("[ENTITY.name]", "Protected", EntityAttributeError.Unknown); }
[end if]
[if (IsEntityDictionaryItem([ENTITY]) == "True")]
[if (GetTaggedValue([ENTITY], "dkt") != "true")]
if (m_Protected && (HasChanged("Name") || HasChanged("Code")))
[else]
if (!m_IsModosithato && (HasChanged("Name") || HasChanged("Code")))
[end if]
{
throw new ProtectedDictionaryItemException("[ENTITY.name]", ID);
}
[end if]
if (!skipValidateAttributes)
{
// korlátos hosszúságú mezők ellenőrzése...
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[if (GetCSharpType([ATTRIBUTE.type]) == "string")]
if (m_[ATTRIBUTE.name] != null && m_[ATTRIBUTE.name].Length > [GetAttributeLength([ATTRIBUTE])])
{
[if (IsAttributeTruncateable([ATTRIBUTE]) == _True())]
m_[ATTRIBUTE.name] = m_[ATTRIBUTE.name].Substring(0,[GetAttributeLength([ATTRIBUTE])]-3) + "...";
[else]
throw new InvalidEntityAttributeException("[ENTITY.name]", "[ATTRIBUTE.name]", EntityAttributeError.TooLong);
[end if]
}
[end if]
[end loop]
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "value")]
if (m_[ATTRIBUTE.name] != null && this.m_[ATTRIBUTE.name] != "")
{
if (EntityUtil.VerifyRegEx(m_[ATTRIBUTE.name], @"[PrepareRegEx([TaggedValue.value])]") == false)
{
throw new InvalidEntityAttributeException("[ENTITY.name]", "[ATTRIBUTE.name]", EntityAttributeError.WrongFormat);
}
}
[end loop]
[end loop]
}
// kötelező asszociációk ellenőrzése...
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNERCLASS where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNERCLASS]) == "Entity"))]
[if (HasAssociationClass([CURRENTASSOCIATION]) == "")]
[if ([ENDROLE.multiplicity] == "1")]
if (m_[ConvertRoleToName([ENDROLE])] == [GetCSharpDefaultValueOfType("ID")]) { throw new InvalidEntityAttributeException("[ENTITY.name]", "[ConvertRoleToName([ENDROLE])]", EntityAttributeError.Empty); }
[end if]
[end if]
[end loop]
[loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity") )]
[loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity" ))]
if (this.[ConvertRoleToName([ENDROLE])] == [GetCSharpDefaultValueOfType("ID")]) { throw new InvalidEntityAttributeException("[ENTITY.name]", "[ConvertRoleToName([ENDROLE])]", EntityAttributeError.Empty); }
if (this.[ConvertRoleToName([STARTROLE])] == [GetCSharpDefaultValueOfType("ID")]) { throw new InvalidEntityAttributeException("[ENTITY.name]", "[ConvertRoleToName([STARTROLE])]", EntityAttributeError.Empty); }
[end loop]
[end loop]
[/* // XXX '1..*' !
[loop (MClass->Role as StartRole ->MAssociation as CurrentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([EndRole.multiplicity] == "1..*")]
//if (this.m_[ConvertRoleToName([EndRole])] == [GetCSharpDefaultValueOfType("ID")]) { throw new InvalidEntityAttributeException(); }
[end if]
[end if]
[end loop]
*/]
}
#endregion
end template
//***************************************************************************//
// A reguláris kifejezésben lecsréli a " karaktert "" karakterekre. Ez //
// amiatt kell, hogy a C# szintaktikának megfelelő legyen, mert @-cal //
// deklaráljuk a sztringliterált. //
//***************************************************************************//
proc PrepareRegEx(input)
local result = replace([input], """", """""");
return [result];
end proc

View file

@ -0,0 +1,295 @@
//***************************************************************************//
// Visszaadja, hogy egy adott entitás rendelkezik-e attribútumokkal, vagy //
// sem. Az ősosztály attribútumait figyelmen kívül hagyja. //
// true, ha rendelkezik legalább egy UML-ben definiált attribútummal; //
// egyébként false. //
//***************************************************************************//
proc HasAttributes(MClass)
loop (MClass -> MAttribute)
return "true";
end loop
return "false";
end proc
//***************************************************************************//
// Segédproc, a GenerateXMLSection() template használja. Visszaadja, hogy //
// kell-e temp lokális változót deklarálni, vagy sem. Ez attól függ, hogy az //
// entitás rendelkezik-e attribútummal, vagy asszociációval, amit XML-ből //
// be kell tölteni, vagy sem. //
// true, ha szükséges temp változó deklarálni; egyébként false. //
//***************************************************************************//
proc NeedTemporaryXmlNode(MClass)
if (HasAttributes([MClass]) == "true")
return "true";
end if
loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id] != [EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
if (HasAssociationClass([CurrentAssoc]) == "")
if ([EndRole.multiplicity] == "1")
return "true";
else
if ([EndRole.multiplicity] == "0..1")
if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))
return "true";
end if
end if
end if
end if
end loop
loop (MClass -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity") )
loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id]<[EndRole.id] and GetStereoType([EndClass]) == "Entity" ))
return "true";
end loop
end loop
return "false";
end proc
//***************************************************************************//
// Név és típus alapján elkészíti az XML DOM-ból való betöltést //
//***************************************************************************//
proc GenerateLoadFromXMLExpression(name, type)
switch (ToLower([type]))
case "integer": return "Int32.Parse(" [name] ".InnerText, LanguageContext.Current.RegionSettings)";
case "string": return [name] ".InnerText";
case "datetime": return "DateTime.Parse(" [name] ".InnerText, LanguageContext.Current.RegionSettings)";
case "boolean": return "Boolean.Parse(" [name] ".InnerText)";
case "char": //return [name] ".InnerText[0]";
return [name] ".InnerText";
case "double": return "Double.Parse(" [name] ".InnerText, LanguageContext.Current.RegionSettings)";
case "float": return "Double.Parse(" [name] ".InnerText, LanguageContext.Current.RegionSettings)";
case "id": return "Int32.Parse(" [name] ".InnerText, LanguageContext.Current.RegionSettings)";
case "dictionaryitem": return "Int32.Parse(" [name] ".InnerText, LanguageContext.Current.RegionSettings) /* XXX DictionaryItem */ ";
case "binary": return "System.Convert.FromBase64String(" [name] ".InnerText)";
case "longstring": return "System.Text.UnicodeEncoding.Unicode.GetString(System.Convert.FromBase64String(" [name] ".InnerText))";
end switch
return "/* ERROR: ismeretlen tipus: " [type] " */";
end proc
//***************************************************************************//
// Legenerálja a megadott entitás XML-lel kapcsolatos dolgait //
//***************************************************************************//
template GenerateXMLSection(MClass as ENTITY)
#region XML támogatás
protected override void DoLoadFromXml(XmlNode entityNode) {
base.DoLoadFromXml(entityNode);
[if (NeedTemporaryXmlNode([ENTITY]) == "true")]
XmlNode current = null;
[end if]
[loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])]
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ATTRIBUTE.name]'\]\")) != null) {
[if (IsDefaultonlyAttribute([ATTRIBUTE]) == _True())]
if (current.FirstChild.Name == "default") {
[ATTRIBUTE.name] = [GetCSharpDefaultValueOfAttribute([ATTRIBUTE])];
}
else {
throw new InvalidEntityAttributeException("[ENTITY.name]", "[ATTRIBUTE.name]", EntityAttributeError.NotAllowed);
}
[else]
if (current.FirstChild.Name == "null") {
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
[ATTRIBUTE.name] = [GetCSharpDefaultValueOfAttribute([ATTRIBUTE])];
[if (HasDefaultValue([ATTRIBUTE]) == "True")]
[else]
//kotelezo attirbutum de validalasnal majd elszall!
m_[ATTRIBUTE.name]IsNull = true;
[end if]
[else]
[ATTRIBUTE.name] = [GetCSharpDefaultValueOfAttribute([ATTRIBUTE])]; // XXX kell???
[if (HasDefaultValue([ATTRIBUTE]) == "True")]
[else]
[ATTRIBUTE.name]IsNull = true;
[end if]
[end if]
}
else {
[ATTRIBUTE.name] = [GenerateLoadFromXMLExpression("current", [ATTRIBUTE.type])];
}
[end if]
}
[end loop]
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CurrentAssoc -> MAssociationEnd as ENDROLE -> MClass as PartnerClass where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PartnerClass]) == "Entity"))]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([ENDROLE.multiplicity] == "1")]
[if (IsA([PartnerClass], "User") == "True" and IsDefaultonlyAssociation([CurrentAssoc]) == "True")]
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ConvertRoleToName([ENDROLE])]'\]\")) != null) {
if (current.FirstChild.Name == "default") {
this.Internal[ConvertRoleToName([ENDROLE])] = UserContext.Instance.UserID;
}
else {
throw new InvalidEntityAttributeException("[ENTITY.name]", "[ConvertRoleToName([ENDROLE])]", EntityAttributeError.NotAllowed);
}
}
[else]
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ConvertRoleToName([ENDROLE])]'\]\")) != null) {
this.Internal[ConvertRoleToName([ENDROLE])] = [GenerateLoadFromXMLExpression("current", "ID")]; // kötelező asszociáció
}
[end if]
[else]
[if ([ENDROLE.multiplicity] == "0..1")]
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
[if (IsA([PartnerClass], "User") == "True" and IsDefaultonlyAssociation([CurrentAssoc]) == "True")]
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ConvertRoleToName([ENDROLE])]'\]\")) != null) {
if (current.FirstChild.Name == "default") {
this.Internal[ConvertRoleToName([ENDROLE])] = UserContext.Instance.UserID;
}
else {
throw new InvalidEntityAttributeException("[ENTITY.name]", "[ConvertRoleToName([ENDROLE])]", EntityAttributeError.NotAllowed);
}
}
[else]
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ConvertRoleToName([ENDROLE])]'\]\")) != null) {
if (current.FirstChild.Name == "null") {
this.Internal[ConvertRoleToName([ENDROLE])] = [GetCSharpDefaultValueOfType("ID")];
}
else {
if (current.InnerText != "") {
this.Internal[ConvertRoleToName([ENDROLE])] = [GenerateLoadFromXMLExpression("current", "ID")]; // nem kötelező asszociáció
}
else {
this.Internal[ConvertRoleToName([ENDROLE])] = [GetCSharpDefaultValueOfType("ID")];
}
}
}
[end if]
[end if]
[end if]
[end if]
[end if]
[end loop]
[loop (ENTITY -> MAssociation as CurrentAssoc -> MAssociationEnd as STARTROLE -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity") )]
[loop (CurrentAssoc -> MAssociationEnd as ENDROLE -> MClass as EndClass where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([EndClass]) == "Entity" ))]
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ConvertRoleToName([ENDROLE])]'\]\")) != null) {
this.[ConvertRoleToName([ENDROLE])] = [GenerateLoadFromXMLExpression("current", "ID")]; // asszociációs osztályos asszociáció egyik végpontja
}
if ((current = entityNode.SelectSingleNode(\"./field\[@name='[ConvertRoleToName([STARTROLE])]'\]\")) != null) {
this.[ConvertRoleToName([STARTROLE])] = [GenerateLoadFromXMLExpression("current", "ID")]; // asszociációs osztályos asszociáció másik végpontja
}
[end loop]
[end loop]
}
protected override void DoSaveToXml(EntityXMLAdapter adapter) {
base.DoSaveToXml(adapter);
[GenerateEntitySaveAllAttributes([ENTITY], "adapter")]
[GenerateEntitySaveAllAssociations([ENTITY], "adapter")]
}
#endregion
end template
//***************************************************************************//
// Legenerálja azt a kódtöredéket, ami egy adott entitás összes attribútumát //
// XML-be sorosítja. //
//***************************************************************************//
template GenerateEntitySaveAllAttributes(MClass as ENTITY, ADAPTERNAME)
// [GetEntityName([ENTITY])] attribútumai
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
[if ([ATTRIBUTE.type] == "DictionaryItem")]
EntityUtil.WriteDictionaryItemXml([ADAPTERNAME], "[ATTRIBUTE.name]", "[ATTRIBUTE.defaultValue]", m_[ATTRIBUTE.name], m_[ATTRIBUTE.name]IsNull);
[else]
EntityUtil.[GetWriteXmlMethod([ATTRIBUTE.type])]([ADAPTERNAME], "[ATTRIBUTE.name]", m_[ATTRIBUTE.name], m_[ATTRIBUTE.name]IsNull);
[end if]
[/*
[if ([ATTRIBUTE.type] == "ID" or [ATTRIBUTE.type] == "String" or [ATTRIBUTE.type] == "Binary")]
if (m_[ATTRIBUTE.name]IsNull == false) {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], [ATTRIBUTE.name], [ATTRIBUTE.type], "m_" [ATTRIBUTE.name], "")]
}
else {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], [ATTRIBUTE.name], [ATTRIBUTE.type], "(object)null", "")]
}
[else]
[if ([ATTRIBUTE.type] == "DictionaryItem")]
if (m_[ATTRIBUTE.name]IsNull == false) {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], [ATTRIBUTE.name], [ATTRIBUTE.type], "m_" [ATTRIBUTE.name], [ATTRIBUTE.defaultValue])]
}
else {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], [ATTRIBUTE.name], [ATTRIBUTE.type], "(object)null", [ATTRIBUTE.defaultValue])]
}
[else]
if (m_[ATTRIBUTE.name]IsNull == false) {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], [ATTRIBUTE.name], [ATTRIBUTE.type], "m_" [ATTRIBUTE.name], "")]
}
else {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], [ATTRIBUTE.name], [ATTRIBUTE.type], "(object)null", "")]
}
[end if]
[end if]
*/]
[end loop]
end template
//***************************************************************************//
//***************************************************************************//
proc GetWriteXmlMethod(ATTRIBUTETYPE)
switch (ToLower([ATTRIBUTETYPE]))
case "integer": return "WriteIntegerXml";
case "string": return "WriteStringXml";
case "datetime": return "WriteDateTimeXml";
case "boolean": return "WriteBooleanXml";
case "char": return "WriteCharXml";
case "double": return "WriteDoubleXml";
case "float": return "WriteDoubleXml";
case "id": return "WriteIntegerXml";
case "binary": return "WriteBinaryXml";
case "longstring": return "WriteLongStringXml";
end switch
return "/* ERROR: ismeretlen tipus: " [ATTRIBUTETYPE] " */";
end proc
//***************************************************************************//
// Legenerálja azt a kódtöredéket, ami egy adott entitás összes //
// asszociációját XML-be sorosítja. //
//***************************************************************************//
template GenerateEntitySaveAllAssociations(MClass as ENTITY, ADAPTERNAME)
// [GetEntityName([ENTITY])] asszociációi
[loop (ENTITY -> Role as STARTROLE -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as PARTNER where (([STARTROLE.id] != [ENDROLE.id]) and GetStereoType([PARTNER]) == "Entity"))]
[if (HasAssociationClass([CURRENTASSOCIATION]) == "")]
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
EntityUtil.WriteAssociationIdXml([ADAPTERNAME], "[GetRoleName([ENDROLE])]", m_[ConvertRoleToName([ENDROLE])], (m_[ConvertRoleToName([ENDROLE])] == [GetCSharpDefaultValueOfType("ID")]));
[/*
if (m_[ConvertRoleToName([ENDROLE])] != [GetCSharpDefaultValueOfType("ID")]) {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], GetRoleName([ENDROLE]), "AssociationID", "this.m_" ConvertRoleToName([ENDROLE]), "")]
}
else {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], GetRoleName([ENDROLE]), "AssociationID", "(object)null", "")]
}
*/]
[end if]
[end if]
[end loop]
[loop (ENTITY -> MAssociation as CURRENTASSOCIATION -> MAssociationEnd as STARTROLE -> MClass as STARTCLASS where (GetStereoType([STARTCLASS]) == "Entity") )]
[loop (CURRENTASSOCIATION -> MAssociationEnd as ENDROLE -> MClass as ENDCLASS where([STARTROLE.id] < [ENDROLE.id] and GetStereoType([ENDCLASS]) == "Entity" ))]
EntityUtil.WriteAssociationIdXml([ADAPTERNAME], "[GetRoleName([STARTROLE])]", m_[ConvertRoleToName([STARTROLE])], (m_[ConvertRoleToName([STARTROLE])] == [GetCSharpDefaultValueOfType("ID")]));
EntityUtil.WriteAssociationIdXml([ADAPTERNAME], "[GetRoleName([ENDROLE])]", m_[ConvertRoleToName([ENDROLE])], (m_[ConvertRoleToName([ENDROLE])] == [GetCSharpDefaultValueOfType("ID")]));
[/*
if (m_[ConvertRoleToName([STARTROLE])] != [GetCSharpDefaultValueOfType("ID")]) {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], GetRoleName([STARTROLE]), "AssociationID", "this.m_" ConvertRoleToName([STARTROLE]), "")]
}
else {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], GetRoleName([STARTROLE]), "AssociationID", "(object)null", "")]
}
if (m_[ConvertRoleToName([ENDROLE])] != [GetCSharpDefaultValueOfType("ID")]) {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], GetRoleName([ENDROLE]), "AssociationID", "this.m_" ConvertRoleToName([ENDROLE]), "")]
}
else {
[GenerateEntityWrapperSaveToXMLExpression([ADAPTERNAME], GetRoleName([ENDROLE]), "AssociationID", "(object)null", "")]
}
*/]
[end loop]
[end loop]
end template

View file

@ -0,0 +1,204 @@
//***************************************************************************//
// Nulladik típusú asszociációs mezőket gyárt a megadott entitáshoz //
//***************************************************************************//
template GenerateAssociationClassFields(MClass)
[loop (MClass -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass]) == "Entity"))]
[loop (CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where([StartRole.id] < [EndRole.id] and GetStereoType([EndClass]) == "Entity" ))]
#region [StartClass.name] ([StartRole.multiplicity]) -> [EndClass.name] ([EndRole.multiplicity]) [MClass.name]
public void DeleteBy[DefineRoleName([StartRole])]And[DefineRoleName([EndRole])](int startId, int endId)
{
DeAssociateBeforeDelete();
m_DA.DeleteBy[DefineRoleName([StartRole])]And[DefineRoleName([EndRole])](startId, endId);
}
public void DeleteBy[DefineRoleName([EndRole])]And[DefineRoleName([StartRole])](int startId, int endId)
{
DeAssociateBeforeDelete();
m_DA.DeleteBy[DefineRoleName([StartRole])]And[DefineRoleName([EndRole])](endId, startId);
}
protected internal [GetCSharpType("ID")] m_[ConvertRoleToName([StartRole])];
protected internal [StartClass.name] m_[DefineRoleName([StartRole])] = null;
/// <summary>
/// Csak akkor használhatod, ha pontosan tudod, hogy mit csinál és hogyan, és
/// milyen mellékhatásai lehetnek!
/// </summary>
public [GetCSharpType("ID")] [ConvertRoleToName([StartRole])]
{
get
{
return m_[ConvertRoleToName([StartRole])];
}
set
{
m_[ConvertRoleToName([StartRole])] = value;
FieldModified("[ConvertRoleToName([StartRole])]", value);
}
}
[if (([EndRole.multiplicity] == "0..1") or ([EndRole.multiplicity] == "1"))]
internal void LoadBy[DefineRoleName([StartRole])]([StartClass.name] entity)
{
m_DA.LoadBy[DefineRoleName([StartRole])](entity, this);
}
[end if]
public bool LoadBy[DefineRoleName([StartRole])]([StartClass.name] entity, [EndClass.name] partner)
{
if (m_DA.LoadBy[DefineRoleName([StartRole])](entity, partner, this) == true)
{
SetLoaded();
return true;
}
else
{
return false;
}
}
I[StartClass.name] I[MClass.name].[DefineRoleName([StartRole])]
{
get { return [DefineRoleName([StartRole])]; }
set { [DefineRoleName([StartRole])] = value as [StartClass.name]; }
}
/// <summary>
[if ([CurrentAssoc.description] != "")]
[ConvertDescriptionToCSharpSummary([CurrentAssoc.description])]
[else]
/// Nincs definiálva megjegyzés.
[end if]
/// </summary>
/// <remarks>
/// Az entitás szerepel a(z) '[StartClass.name] ([StartRole.multiplicity]) -> [EndClass.name] ([EndRole.multiplicity])' asszociációban, mint asszociációs osztály.
/// </remarks>
[if ([StartRole.multiplicity] == "1" or [StartRole.multiplicity] == "0..1")]
\[EntityProperty("[DefineRoleName([StartRole])]", EntityPropertyBaseType.Entity, typeof([StartClass.name]), EntityCopyMethod.DeepCopy)\]
[else]
\[EntityProperty("[DefineRoleName([StartRole])]", EntityPropertyBaseType.Entity, typeof([StartClass.name]), EntityCopyMethod.ShallowCopy)\]
[end if]
public [StartClass.name] [DefineRoleName([StartRole])]
{
get
{
if (m_[ConvertRoleToName([StartRole])] == -1)
{
return null;
}
if (m_[DefineRoleName([StartRole])] == null || m_[DefineRoleName([StartRole])].ID != m_[ConvertRoleToName([StartRole])])
{
m_[DefineRoleName([StartRole])] = SDA.[ProjectName].Entities.[StartClass.name].GiveAnInstance();
m_[DefineRoleName([StartRole])].LoadByID(m_[ConvertRoleToName([StartRole])]);
}
return m_[DefineRoleName([StartRole])];
}
set
{
m_[DefineRoleName([StartRole])] = value;
[ConvertRoleToName([StartRole])] = value.ID;
if (this.State != EntityState.New)
{
UpdateAssociations(true);
}
FieldModified("[ConvertRoleToName([StartRole])]", value.ID);
}
}
protected internal [GetCSharpType("ID")] m_[ConvertRoleToName([EndRole])];
protected internal [EndClass.name] m_[DefineRoleName([EndRole])] = null;
/// <summary>
/// Csak akkor használhatod, ha pontosan tudod, hogy mit csinál és hogyan, és
/// milyen mellékhatásai lehetnek!
/// </summary>
public [GetCSharpType("ID")] [ConvertRoleToName([EndRole])]
{
get
{
return this.m_[ConvertRoleToName([EndRole])];
}
set
{
this.m_[ConvertRoleToName([EndRole])] = value;
FieldModified("[ConvertRoleToName([EndRole])]", value);
}
}
[if (([StartRole.multiplicity] == "0..1") or ([StartRole.multiplicity] == "1"))]
internal void LoadBy[DefineRoleName([EndRole])]([EndClass.name] entity)
{
this.m_DA.LoadBy[DefineRoleName([EndRole])](entity, this);
}
[end if]
public bool LoadBy[DefineRoleName([EndRole])]([EndClass.name] entity, [StartClass.name] partner)
{
if (this.m_DA.LoadBy[DefineRoleName([EndRole])](entity, partner, this) == true)
{
this.SetState(EntityState.Initialized);
return true;
}
else
{
return false;
}
}
I[EndClass.name] I[MClass.name].[DefineRoleName([EndRole])]
{
get { return [DefineRoleName([EndRole])]; }
set { [DefineRoleName([EndRole])] = value as [EndClass.name]; }
}
/// <summary>
[if ([CurrentAssoc.description] != "")]
[ConvertDescriptionToCSharpSummary([CurrentAssoc.description])]
[else]
/// Nincs definiálva megjegyzés.
[end if]
/// </summary>
/// <remarks>
/// Az entitás szerepel a(z) '[StartClass.name] ([StartRole.multiplicity]) -> [EndClass.name] ([EndRole.multiplicity])' asszociációban, mint asszociációs osztály.
/// </remarks>
[if ([StartRole.multiplicity] == "1" or [StartRole.multiplicity] == "0..1")]
\[EntityProperty("[DefineRoleName([EndRole])]", EntityPropertyBaseType.Entity, typeof([EndClass.name]), EntityCopyMethod.DeepCopy)\]
[else]
\[EntityProperty("[DefineRoleName([EndRole])]", EntityPropertyBaseType.Entity, typeof([EndClass.name]), EntityCopyMethod.ShallowCopy)\]
[end if]
public [EndClass.name] [DefineRoleName([EndRole])]
{
get
{
if (m_[ConvertRoleToName([EndRole])] == -1)
{
return null;
}
if (m_[DefineRoleName([EndRole])] == null || m_[DefineRoleName([EndRole])].ID != m_[ConvertRoleToName([EndRole])])
{
m_[DefineRoleName([EndRole])] = SDA.[ProjectName].Entities.[EndClass.name].GiveAnInstance();
m_[DefineRoleName([EndRole])].LoadByID(m_[ConvertRoleToName([EndRole])]);
}
return m_[DefineRoleName([EndRole])];
}
set
{
m_[DefineRoleName([EndRole])] = value;
this.[ConvertRoleToName([EndRole])] = value.ID;
if (this.State != EntityState.New)
{
UpdateAssociations(true);
}
FieldModified("[ConvertRoleToName([EndRole])]", value.ID);
}
}
#endregion
[end loop]
[end loop]
end template