kreta/Tools/CodeGeneration/Templates/Server/DataAccess/DataAccessor/EntityCollectionDA.tdl
2024-03-13 00:33:46 +01:00

268 lines
16 KiB
Text

//***************************************************************************//
// Nevet generál egy entitáslista DA-jának //
//***************************************************************************//
proc GenerateEntityCollectionDAName(startrole, endrole)
return [startrole] "_" [endrole] "_DA";
end proc
//***************************************************************************//
// Legenerálja a magadott osztályhoz tartozó entitáslista DA-inak tejles //
// forráskódját //
//***************************************************************************//
template GenerateEntityCollectionDAs(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" ))]
[if (([StartRole.multiplicity] == "0..*") or ([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*"))]
internal class [GenerateEntityCollectionDAName([EndClass.name], DefineRoleName([StartRole]))] : EntityCollectionDA<[EndClass.name], [MClass.name]>
{
internal protected [GenerateEntityCollectionDAName([EndClass.name], DefineRoleName([StartRole]))]([EndClass.name] owner)
: base(owner)
{
}
private const string m_Filter = @" and ([ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName("ID")]) ";
public override void LoadCollection(IAssociatedEntityCollection<[MClass.name]> collection)
{
new [MClass.name]DBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID);
}
public override void AddItem([MClass.name] entity)
{
entity.[ConvertRoleToName([EndRole])] = Owner.ID;
[if ([StartRole.id] < [EndRole.id])]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]");
assochandler.BeforeInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]");
assochandler.BeforeInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
entity.Insert(true);
[if ([StartRole.id] < [EndRole.id])]
assochandler.AfterInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
assochandler.AfterInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
}
public override void DeleteItem([MClass.name] entity)
{
[if ([StartRole.id] < [EndRole.id])]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]");
assochandler.BeforeDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]");
assochandler.BeforeDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
entity.Delete(true); // egyszeruen töröljük az asszociációs osztályt
[if ([StartRole.id] < [EndRole.id])]
assochandler.AfterDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
assochandler.AfterDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
}
}
[end if]
[if (([EndRole.multiplicity] == "0..*") or ([EndRole.multiplicity] == "1..*") or ([EndRole.multiplicity] == "*"))]
internal class [GenerateEntityCollectionDAName([StartClass.name], DefineRoleName([EndRole]))] : EntityCollectionDA<[StartClass.name], [MClass.name]>
{
internal protected [GenerateEntityCollectionDAName([StartClass.name], DefineRoleName([EndRole]))]([StartClass.name] owner)
: base(owner)
{
}
private const string m_Filter = @" and ([ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = :[ConvertNameToCommandParameterName("ID")]) ";
public override void LoadCollection(IAssociatedEntityCollection<[MClass.name]> collection)
{
new [MClass.name]DBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID);
}
public override void AddItem([MClass.name] entity)
{
entity.[ConvertRoleToName([StartRole])] = Owner.ID;
[if ([StartRole.id] < [EndRole.id])]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]");
assochandler.BeforeInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]");
assochandler.BeforeInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
entity.Insert(true);
[if ([StartRole.id] < [EndRole.id])]
assochandler.AfterInsert(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
assochandler.AfterInsert(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
}
public override void DeleteItem([MClass.name] entity)
{
[if ([StartRole.id] < [EndRole.id])]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]");
assochandler.BeforeDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]");
assochandler.BeforeDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
entity.Delete(true); // egyszeruen töröljük az asszociációs osztályt
[if ([StartRole.id] < [EndRole.id])]
assochandler.AfterDelete(entity.[DefineRoleName([StartRole])], entity.[DefineRoleName([EndRole])]);
[else]
assochandler.AfterDelete(entity.[DefineRoleName([EndRole])], entity.[DefineRoleName([StartRole])]);
[end if]
}
}
[end if]
[end loop]
[end loop]
[loop (MClass -> Role as StartRole -> MAssociation as CurrentAssoc -> MAssociationEnd as EndRole -> MClass as PartnerClass where (GetStereoType([PartnerClass]) == "Entity"))]
[if ([StartRole.id] != [EndRole.id])]
[if (HasAssociationClass([CurrentAssoc]) == "")]
[if ([StartRole.multiplicity] == "*" or [StartRole.multiplicity] == "1..*" or [StartRole.multiplicity] == "0..*")]
[if (([PartnerClass.name] != [MClass.name]) or ([PartnerClass.name] == [MClass.name] and [MClass.name] != DefineRoleName([StartRole])))]
/// <summary>
/// Az osztály elvégzi az UML modell '[PartnerClass.name] -> [MClass.name] ([DefineRoleName([StartRole])])'
/// asszociációjának teljes kezelését.
/// </summary>
internal class [GenerateEntityCollectionDAName([PartnerClass.name], DefineRoleName([StartRole]))] : EntityCollectionDA<[PartnerClass.name], [MClass.name]>
{
internal protected [GenerateEntityCollectionDAName([PartnerClass.name], DefineRoleName([StartRole]))]([PartnerClass.name] owner)
: base(owner)
{
}
[if ([EndRole.multiplicity] == "0..1" or [EndRole.multiplicity] == "1")]
// Nincs kapcsolótábla
private const string m_Filter = @" and ([ConvertNameToSQLTableName([MClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName("ID")]) ";
[else]
// Kapcsolótábla van
private const string m_Filter = @" and (exists (select 1 from [ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] where [ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLTableName([MClass.name])].ID and [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName("ID")])) ";
[end if]
public override void LoadCollection(IAssociatedEntityCollection<[MClass.name]> collection)
{
new [MClass.name]DBHelper().LoadByPartnerId(collection, m_Filter, Owner.ID);
}
private static [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("Insert" DefineRoleName([StartRole]))]()
{
[GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()]();
[if ([EndRole.multiplicity] == "0..1" or [EndRole.multiplicity] == "1")]
// nincs kapcsolótábla...
result.CommandText = @"update [ConvertNameToSQLTableName([MClass.name])] set [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))] where (ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])";
[else]
// kapcsolótábla van...
result.CommandText = @"insert into [ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] ([ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], [ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))]) values (:[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))], :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])";
[end if]
result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]", [GetCSharpSQLIDType()]);
result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]", [GetCSharpSQLIDType()]);
return result;
}
private void DoAdd([PartnerClass.name] owner, [MClass.name] partner)
{
using ([GetCSharpSQLCommandType()] command = [GenerateCommandCreatorName("Insert" DefineRoleName([StartRole]))]())
{
[GenerateCommandInit("command")]
command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]"\].Value = owner.ID;
command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]"\].Value = partner.ID;
command.ExecuteNonQuery();
}
}
public override void AddItem([MClass.name] entity)
{
[if ([StartRole.id] < [EndRole.id])]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]");
[else]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]");
[end if]
[if ([StartRole.id] < [EndRole.id])]
assochandler.BeforeInsert(entity, this.Owner);
[else]
assochandler.BeforeInsert(this.Owner, entity);
[end if]
[if ([EndRole.multiplicity] == "1")]
entity.Modify[DefineRoleName([EndRole])](this.Owner);
if (entity.State == EntityState.Modified)
{
entity.UpdateAssociations(true);
}
else
{
entity.Insert(true);
}
[else]
this.DoAdd(this.Owner, entity);
[end if]
[if ([StartRole.id] < [EndRole.id])]
assochandler.AfterInsert(entity, this.Owner);
[else]
assochandler.AfterInsert(this.Owner, entity);
[end if]
}
private static [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("Delete" DefineRoleName([StartRole]))]()
{
[GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()]();
[if ([EndRole.multiplicity] == "0..1" or [EndRole.multiplicity] == "1")]
// nincs kapcsolótábla...
result.CommandText = @"update [ConvertNameToSQLTableName([MClass.name])] set [ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = null where ([ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))] and ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])";
[else]
// kapcsolótábla van...
result.CommandText = @"delete from [ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([EndRole],[StartRole]))] where ([ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]) and ([ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))])";
[end if]
result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]", [GetCSharpSQLIDType()]);
result.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]", [GetCSharpSQLIDType()]);
return result;
}
private void DoRemove([PartnerClass.name] owner, [MClass.name] partner)
{
using ([GetCSharpSQLCommandType()] command = [GenerateCommandCreatorName("Delete" DefineRoleName([StartRole]))]())
{
[GenerateCommandInit("command")]
command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))]"\].Value = owner.ID;
command.Parameters\["[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))]"\].Value = partner.ID;
command.ExecuteNonQuery();
}
}
public override void DeleteItem([MClass.name] entity)
{
[if ([StartRole.id] < [EndRole.id])]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([StartRole])], [GetRoleClassName([EndRole])]>("[DefineRoleName([StartRole])]_[DefineRoleName([EndRole])]");
[else]
var assochandler = AssociationHandlerManager.Create<[GetRoleClassName([EndRole])], [GetRoleClassName([StartRole])]>("[DefineRoleName([EndRole])]_[DefineRoleName([StartRole])]");
[end if]
[if ([StartRole.id] < [EndRole.id])]
assochandler.BeforeDelete(entity, this.Owner);
[else]
assochandler.BeforeDelete(this.Owner, entity);
[end if]
[if ([EndRole.multiplicity] == "1")]
entity.Delete(true);
[else]
this.DoRemove(this.Owner, entity);
[end if]
[if ([StartRole.id] < [EndRole.id])]
assochandler.AfterDelete(entity, this.Owner);
[else]
assochandler.AfterDelete(this.Owner, entity);
[end if]
}
}
[end if]
[end if]
[end if]
[end if]
[end loop]
end template