init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
|
@ -0,0 +1,86 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
CreateDescriptionList();
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
setOutput( [OutputDir] "/" "create.comments.sql" );
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
proc CreateDescriptionList()
|
||||
out = [BOM];
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
if ( string_trim(ConvertDescriptionToString([MClass.description])) != "" )
|
||||
out = "EXEC sp_addextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = N'dbo' ,@level1type = N'Table', @level1name = N'"ConvertNameToSQLTableScript([MClass.name])"',@level2type = NULL, @level2name = NULL, @value = N'"string_trim(ConvertDescriptionToString([MClass.description]))"';\n";
|
||||
end if
|
||||
end loop
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
loop ( MClass -> MAttribute )
|
||||
if ( string_trim(ConvertDescriptionToString([MAttribute.description])) != "" )
|
||||
out = "EXEC sp_addextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = N'dbo' ,@level1type = N'Table', @level1name = N'"ConvertNameToSQLTableScript([MClass.name])"' ,@level2type = N'Column', @level2name = N'"ConvertNameToSQLColumnName([MAttribute.name])"', @value = N'"string_trim(ConvertDescriptionToString([MAttribute.description]))"';\n";
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
local HasAC = "";
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
loop (MClass->Role as StartRole ->MAssociation as CurrentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id]!=[EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
|
||||
[HasAC] = HasAssociationClass([CurrentAssoc]);
|
||||
if ([HasAC] == "")
|
||||
if (
|
||||
//0..1-1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="1") or
|
||||
//1..*-1
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1") or
|
||||
//*-1
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1")
|
||||
)
|
||||
if (string_trim(ConvertDescriptionToString([CurrentAssoc.description])) != "" )
|
||||
out = "EXEC sp_addextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = N'dbo' ,@level1type = N'Table', @level1name = N'"ConvertNameToSQLTableScript([MClass.name])"' ,@level2type = N'Column', @level2name = N'"ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))"', @value = N'"string_trim(ConvertDescriptionToString([CurrentAssoc.description]))"';\n";
|
||||
end if
|
||||
end if
|
||||
if (
|
||||
//1..*-0..1
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..1") or
|
||||
//*-0..1
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..1") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..1")
|
||||
)
|
||||
if (string_trim(ConvertDescriptionToString([CurrentAssoc.description])) != "" )
|
||||
out = "EXEC sp_addextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = N'dbo' ,@level1type = N'Table', @level1name = N'"ConvertNameToSQLTableScript([MClass.name])"' ,@level2type = N'Column', @level2name = N'"ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))"', @value = N'"string_trim(ConvertDescriptionToString([CurrentAssoc.description]))"';\n";
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
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 (string_trim(ConvertDescriptionToString([CurrentAssoc.description])) != "" )
|
||||
out = "EXEC sp_addextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = N'dbo' ,@level1type = N'Table', @level1name = N'"ConvertNameToSQLTableScript([MClass.name])"' ,@level2type = N'Column', @level2name = N'"ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))"', @value = N'"string_trim(ConvertDescriptionToString([CurrentAssoc.description]))"';\n";
|
||||
out = "EXEC sp_addextendedproperty @name = N'MS_Description', @level0type = N'Schema', @level0name = N'dbo' ,@level1type = N'Table', @level1name = N'"ConvertNameToSQLTableScript([MClass.name])"' ,@level2type = N'Column', @level2name = N'"ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))"', @value = N'"string_trim(ConvertDescriptionToString([CurrentAssoc.description]))"';\n";
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
||||
|
||||
tcl_proc string_trim(str)
|
||||
return [string trim $str];
|
||||
end proc
|
||||
|
||||
proc ConvertDescriptionToString(description)
|
||||
return replace(replace(replace(replace([description], "\t", " "), "\r", ""), "\n", " "), "'", "''");
|
||||
end proc
|
110
Tools/CodeGeneration/Templates/Common/ActionUtil.tdl
Normal file
110
Tools/CodeGeneration/Templates/Common/ActionUtil.tdl
Normal file
|
@ -0,0 +1,110 @@
|
|||
//***************************************************************************//
|
||||
// Visszaadja, hogy a törlő akció engedélyezett-e, vagy sem. //
|
||||
// //
|
||||
// true, ha engedélyezett; egyébként false. //
|
||||
//***************************************************************************//
|
||||
proc IsDeleterEnabled(MClass)
|
||||
if ([ProjectName] == "Poszeidon")
|
||||
if (toLower(GetTaggedValue([MClass], "PoszeidonDeleter")) == "false")
|
||||
return "false";
|
||||
else
|
||||
return "true";
|
||||
end if
|
||||
else
|
||||
return "true";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az entitás nevéből és a művelet nevéből a saját (egyéni) //
|
||||
// akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateCustomActionName(CLASSNAME, OPERATIONNAME)
|
||||
return [CLASSNAME] "_" [OPERATIONNAME];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Nevet generál egy osztályhoz tartozó service-nek. //
|
||||
//***************************************************************************//
|
||||
proc GenerateServiceName(ENTITYNAME)
|
||||
return [ENTITYNAME] "Service";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az entitás nevéből az alaphalmazt lekérdező akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateLoadBaseSetActionName(ENTITYNAME)
|
||||
return [ENTITYNAME] "BaseSetLoader";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenrálja az entitás nevéből az azonosító alapján lekérdező ació nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateLoadEntityActionName(ENTITYNAME)
|
||||
return [ENTITYNAME] "Loader";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az entitás nevéből a törlő akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateDeleteEntityActionName(ENTITYNAME)
|
||||
return [ENTITYNAME] "Deleter";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az entitás nevéből a létrehozó akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateInsertEntityActionName(ENTITYNAME)
|
||||
return [ENTITYNAME] "Inserter";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az entitás nevéből a módosító akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateModifyEntityActionName(ENTITYNAME)
|
||||
return [ENTITYNAME] "Modifier";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy entitás nevéből, és az asszociáció szerepkörének nevéből //
|
||||
// az összerendelő akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateAssociaterName(MClass, MAssociationEnd)
|
||||
if (([MAssociationEnd.multiplicity] == "1") or ([MAssociationEnd.multiplicity] == "0..1"))
|
||||
return [MClass.name] "_" "Set" "_" DefineRoleName([MAssociationEnd]);
|
||||
else
|
||||
return [MClass.name] "_" "AddTo" "_" DefineRoleName([MAssociationEnd]);
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy entitás nevéből, és az asszociáció szerepkörének nevéből //
|
||||
// a szétkapcsoló akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateDeAssociaterName(MClass, MAssociationEnd)
|
||||
if (([MAssociationEnd.multiplicity] == "1") or ([MAssociationEnd.multiplicity] == "0..1"))
|
||||
return [MClass.name] "_" "Null" "_" DefineRoleName([MAssociationEnd]);
|
||||
else
|
||||
return [MClass.name] "_" "RemoveFrom" "_" DefineRoleName([MAssociationEnd]);
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy entitás nevéből, és az asszociáció szerepkörének nevéből //
|
||||
// a lekérdező akció nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateAssociationQuerierName(MClass, MAssociationEnd)
|
||||
return [MClass.name] "_" "Get" "_" DefineRoleName([MAssociationEnd]);
|
||||
end proc
|
||||
|
||||
|
176
Tools/CodeGeneration/Templates/Common/CSharpUtil.tdl
Normal file
176
Tools/CodeGeneration/Templates/Common/CSharpUtil.tdl
Normal file
|
@ -0,0 +1,176 @@
|
|||
//***************************************************************************//
|
||||
// Nevet konvertál C# osztály névre. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToCSharpClassName(name)
|
||||
return [name];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// C# kommentet gyárt egy sztringből. //
|
||||
//***************************************************************************//
|
||||
template ConvertDescriptionToCSharpSummary(description)
|
||||
[if ([description] == "")]
|
||||
[else]
|
||||
/// [replace([description], "", "\n /// ")]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy művelet visszatérési értékét a C# nyelv szintaktikájának //
|
||||
// megfelelően //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpReturnTypeOfOperation(MOperation)
|
||||
if ([MOperation.returnType] == "")
|
||||
return "void";
|
||||
else
|
||||
return GetCSharpType([MOperation.returnType]);
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy művelet paraméterlistáját a C# nyelv szintaktikájának és //
|
||||
// a saját jelölésbeli konvencióinknak megfelelően //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpOperationParameters(MOperation)
|
||||
local ops;
|
||||
[ops] = "";
|
||||
loop (MOperation -> OpPara; setDelim(""); setDelim(", "))
|
||||
[ops] = [ops] delim() GetCSharpType([OpPara.type]) " " ToLower([OpPara.name]);
|
||||
end loop
|
||||
return [ops];
|
||||
end proc
|
||||
|
||||
proc GetCSharpTypeOfAttribute(MAttribute)
|
||||
return GetCSharpType([MAttribute.type]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszadja a megadott típushoz tartozó C# tipust //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpType(type)
|
||||
switch(ToLower([type]))
|
||||
case "string": return "string";
|
||||
case "integer": return "int";
|
||||
case "datetime": return "DateTime";
|
||||
case "boolean": return "bool";
|
||||
case "dictionaryitem": return "int /* DictionaryItem */"; //XXX
|
||||
case "binary": return "Byte[]";
|
||||
case "float": return "double";
|
||||
case "char": return "string";
|
||||
case "longstring": return "string";
|
||||
case "id": return "int";
|
||||
case "guid": return "Guid";
|
||||
end switch
|
||||
//return "object /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
return [type];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja a megadott típus alapértelmezett (kezdeti) értékét a C# nyelv //
|
||||
// szintaktikájának megfelelően //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpDefaultValueOfType(type)
|
||||
switch(ToLower([type]))
|
||||
case "string": return "\"\"";
|
||||
case "integer": return "-1";
|
||||
case "datetime": return "DateTime.Now /* XXX DateTime */";//XXX
|
||||
case "boolean": return "false";
|
||||
case "dictionaryitem": return "-1 /* DictionaryItem */"; //XXX
|
||||
case "binary": return "null";
|
||||
case "float": return "0";
|
||||
case "char": return "\"\"";
|
||||
case "longstring": return "\"\"";
|
||||
case "id": return "-1";
|
||||
case "guid": return "default(Guid)";
|
||||
end switch
|
||||
return "null /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja hogy DictionaryItem tipusu-e az adott attributum //
|
||||
// //
|
||||
//***************************************************************************//
|
||||
proc IsDictionaryItem(MAttribute)
|
||||
if (ToLower([MAttribute.type]) == "dictionaryitem")
|
||||
return _True();
|
||||
else
|
||||
return _False();
|
||||
end if
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adott DictionaryItem konkrét osztályának a nevét //
|
||||
// //
|
||||
//***************************************************************************//
|
||||
proc GetDictionaryItemClass(MAttribute)
|
||||
return [MAttribute.defaultValue];
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja a megadott attribútum alapértelmezett (kezdeti) értékét a C# //
|
||||
// nyelv szintaktikájának megfelelően //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpDefaultValueOfAttribute(MAttribute)
|
||||
if (IsAttributeRequired([MAttribute]) == _True())
|
||||
else
|
||||
return "null";
|
||||
end if
|
||||
|
||||
if ([MAttribute.type] == "DictionaryItem")
|
||||
return GetCSharpDefaultValueOfType("ID");
|
||||
end if
|
||||
if ([MAttribute.type] == "Char")
|
||||
//info = [MAttribute.defaultValue]; // teszt
|
||||
end if
|
||||
|
||||
local result;
|
||||
[result] = [MAttribute.defaultValue];
|
||||
|
||||
if ([result] == "")
|
||||
[result] = GetCSharpDefaultValueOfType([MAttribute.type]);
|
||||
else
|
||||
switch (ToLower([MAttribute.type]))
|
||||
case "string": return "\"" [result] "\"";
|
||||
case "boolean": return ToLower([result]);
|
||||
case "longstring": return "\"" [result] "\"";
|
||||
case "char": //return "'" [result] "'";
|
||||
return "\"" [result] "\"";
|
||||
end switch
|
||||
if (ToLower([MAttribute.type]) == "guid")
|
||||
if ([result] == "NEWID")
|
||||
return "Guid.NewGuid()";
|
||||
else
|
||||
return "Guid.Parse(\"" [result] "\")";
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
|
||||
return [result];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszadja a megadott típushoz tartozó C# nullabletipust //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpNullableType(type)
|
||||
switch(ToLower([type]))
|
||||
case "string": return "string";
|
||||
case "integer": return "int?";
|
||||
case "datetime": return "DateTime?";
|
||||
case "boolean": return "bool?";
|
||||
case "dictionaryitem": return "int? /* DictionaryItem */"; //XXX
|
||||
case "binary": return "Byte[]";
|
||||
case "float": return "double?";
|
||||
case "char": return "string";
|
||||
case "longstring": return "string";
|
||||
case "id": return "int?";
|
||||
case "guid": return "Guid?";
|
||||
end switch
|
||||
//return "object /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
return [type];
|
||||
end proc
|
816
Tools/CodeGeneration/Templates/Common/CommonUtil.tdl
Normal file
816
Tools/CodeGeneration/Templates/Common/CommonUtil.tdl
Normal file
|
@ -0,0 +1,816 @@
|
|||
proc IsMultiLanguage(MAttribute as ATTRIBUTE)
|
||||
loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "languageindex")
|
||||
if ([TaggedValue.value] != "")
|
||||
return _True();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
proc IsTrimmed(MAttribute as ATTRIBUTE)
|
||||
loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "trim")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return _True();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
proc GetLanguageIndex(MAttribute as ATTRIBUTE)
|
||||
loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "languageindex")
|
||||
return [TaggedValue.value];
|
||||
end loop
|
||||
return "Hiba: nincs languageindex";
|
||||
end proc
|
||||
|
||||
|
||||
proc GetModelVersion()
|
||||
loop (Instances -> MClass as VERSIONCLASS -> TaggedValue as VERSION where [VERSIONCLASS.name] == ToUpper([ProjectName]) "_VERSION" and ToLower([VERSION.tag]) == "version")
|
||||
return [VERSION.value];
|
||||
end loop
|
||||
return "0";
|
||||
end proc
|
||||
|
||||
|
||||
proc IsClassView(MClass as ELEMENT)
|
||||
local result;
|
||||
local package;
|
||||
[result] = getStereotype([ELEMENT]);
|
||||
[package] = GetPackage([ELEMENT]);
|
||||
|
||||
if ([result] == "View")
|
||||
if (IsPackageAllowed([package]) == "True")
|
||||
return "View";
|
||||
else
|
||||
return "";
|
||||
end if
|
||||
end if
|
||||
return [result];
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy entitásról, hogy melyik sémába kerüljön. //
|
||||
// //
|
||||
// DBO értékkel, ha nem a projekt package-ben van benne. //
|
||||
//***************************************************************************//
|
||||
proc GetSchemaName(MClass as ELEMENT)
|
||||
local result;
|
||||
local package;
|
||||
[result] = "DBO";
|
||||
[package] = GetPackage([ELEMENT]);
|
||||
|
||||
if([ProjectName] != [package])
|
||||
[result] = [package];
|
||||
end if
|
||||
|
||||
return [result];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy entitásról, hogy védett kódtétel-e. //
|
||||
// //
|
||||
// True, ha védett kódtétel; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsProtectedDictionaryItem(MClass as ENTITY)
|
||||
// if (IsEntityDictionaryItem([ENTITY]) == "True")
|
||||
loop (ENTITY -> TaggedValue where toLower([TaggedValue.tag]) == "saveddi")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return "True";
|
||||
end if
|
||||
end loop
|
||||
// end if
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy asszociációról, hogy engedélyezett-e rá a kaszkád törlés, //
|
||||
// vagy sem. //
|
||||
// //
|
||||
// True, ha engedélyezett; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsCascadeDelete(MAssociation as ASSOCIATION)
|
||||
loop (ASSOCIATION -> TaggedValue where toLower([TaggedValue.tag]) == "cascadedelete")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return "True";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy modellelem adott nevű taggedvalue-jának értékét. Ha nincs //
|
||||
// definiálva, akkor üres karakterláncot ad vissza. //
|
||||
//***************************************************************************//
|
||||
proc GetTaggedValue(MSemElement as ELEMENT, NAME)
|
||||
loop (ELEMENT -> TaggedValue as TAGGEDVALUE where toLower([TAGGEDVALUE.tag]) == toLower([NAME]))
|
||||
return [TAGGEDVALUE.value];
|
||||
end loop
|
||||
|
||||
return "";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy a jelenlegi generálási kontextusban egy adott UML csomag //
|
||||
// engedélyezett-e, vagy sem. //
|
||||
// //
|
||||
// True, ha engedélyezett, egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsPackageAllowed(PACKAGE)
|
||||
switch ([PACKAGE])
|
||||
case "":
|
||||
switch ([ProjectName])
|
||||
case "Kreta": return "True";
|
||||
case "stage": return "True";
|
||||
default: return "False";
|
||||
end switch
|
||||
case [ProjectName]: return "True";
|
||||
case "stage": return "True";
|
||||
end switch
|
||||
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy asszociációs szerepkör nevét, ha az definiált; ha nem //
|
||||
// definiált, akkot nevet generál neki a partnerosztály nevéből. //
|
||||
//***************************************************************************//
|
||||
proc GetRoleName(MAssociationEnd as ROLE)
|
||||
return DefineRoleName([ROLE]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy osztály sztereotípiáját. //
|
||||
//***************************************************************************//
|
||||
proc GetStereoType(MClass as ELEMENT)
|
||||
local result;
|
||||
local package;
|
||||
[result] = getStereotype([ELEMENT]);
|
||||
[package] = GetPackage([ELEMENT]);
|
||||
|
||||
if ([result] == "Entity" or [result] == "Entity2")
|
||||
if (IsPackageAllowed([package]) == "True")
|
||||
return "Entity";
|
||||
else
|
||||
return "";
|
||||
end if
|
||||
end if
|
||||
return [result];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútum sztereotípiáját. //
|
||||
//***************************************************************************//
|
||||
proc GetStereoTypeForAttribute(MAttribute as ATTRIBUTE)
|
||||
local temp;
|
||||
[temp] = getStereotype([ATTRIBUTE]);
|
||||
return [temp];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy művelet sztereotípiáját. //
|
||||
//***************************************************************************//
|
||||
proc GetStereoTypeForOperation(MOperation as OPERATION)
|
||||
local temp;
|
||||
[temp] = getStereotype([OPERATION]);
|
||||
return [temp];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy entitás nevét. //
|
||||
//***************************************************************************//
|
||||
proc GetEntityName(MClass as ENTITY)
|
||||
return [ENTITY.name];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútum nevét. //
|
||||
//***************************************************************************//
|
||||
proc GetAttributeName(MAttribute as ATTRIBUTE)
|
||||
return [ATTRIBUTE.name];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megmondja, hogy egy osztály entitásnak tekintendő-e, vagy sem. //
|
||||
// Az, hogy entitás-e, az attól is függ, hogy melyik UML csomagot dolgozzuk //
|
||||
// fel, és az osztály melyik UML csomagban található. //
|
||||
//***************************************************************************//
|
||||
proc IsEntity(MClass as ENTITY)
|
||||
if (GetStereoType([ENTITY]) == "Entity")
|
||||
return "True";
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy egy osztály melyik UML csomagban található. //
|
||||
//***************************************************************************//
|
||||
proc GetPackage(MClass as ELEMENT)
|
||||
loop (ELEMENT -> MPackage)
|
||||
return [MPackage.name];
|
||||
end loop
|
||||
return "";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy egy attribútum rendelkezik-e UML-ben előírt //
|
||||
// alapértelmezett értékkel, vagy sem. //
|
||||
// //
|
||||
// True, ha rendelkezik; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc HasDefaultValue(MAttribute)
|
||||
if ([MAttribute.type] == "DictionaryItem")
|
||||
loop (MAttribute -> TaggedValue where toLower([TaggedValue.tag]) == "dictdefault")
|
||||
return "true";
|
||||
end loop
|
||||
return "false";
|
||||
end if
|
||||
|
||||
local result = [MAttribute.defaultValue];
|
||||
|
||||
if ([result] == "")
|
||||
return "False";
|
||||
else
|
||||
return "True";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy egy osztály kódtételnek tekintendő-e vagy sem. Ez attól //
|
||||
// függ, hogy leszármazottja-e a DictionaryItemBase osztálynak. //
|
||||
// //
|
||||
// True, ha kódtételnek minősül; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsEntityDictionaryItem(MClass as ENTITY)
|
||||
local dictitems = GetDictionaryItemTypes();
|
||||
loop (Instances -> TokenSet([dictitems]) )
|
||||
if ([ENTITY.name] == [TokenSet.line])
|
||||
return "True";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az osztály legősibb entitás ősének a nevét. //
|
||||
//***************************************************************************//
|
||||
proc GetMasterEntityNameOf(MClass as ENTITY)
|
||||
if (IsMasterEntity([ENTITY]) == "false")
|
||||
loop (ENTITY -> SuperClass as BASECLASS)
|
||||
return GetMasterEntityNameOf([BASECLASS]);
|
||||
end loop
|
||||
else
|
||||
return [ENTITY.name];
|
||||
end if
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, az öröklodés típusát, ha neki nincs, akkor az öséét //
|
||||
//***************************************************************************//
|
||||
proc GetInheritance(MClass as ENTITY)
|
||||
loop (ENTITY -> TaggedValue where toLower([TaggedValue.tag]) == "inheritance")
|
||||
return [TaggedValue.value];
|
||||
end loop
|
||||
loop (ENTITY -> SuperClass as BASECLASS)
|
||||
return GetInheritance([BASECLASS]);
|
||||
end loop
|
||||
return "";
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy egy entitás rendelkezik-e UML-ben definiált saját //
|
||||
// integritás-ellenőrzésre irányuló igénnyel, vagy sem. //
|
||||
// //
|
||||
// True, ha rendelkezik; egyébként False. //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
proc HasCustomValidate(MClass as ENTITY)
|
||||
loop (ENTITY -> TaggedValue where toLower([TaggedValue.tag]) == "customvalidate")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return "True";
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy egy osztály leszármazottja-e egy másik osztálynak. //
|
||||
//***************************************************************************//
|
||||
proc IsA(MClass as ENTITY, ASCENDANT)
|
||||
if ([ENTITY.name] == [ASCENDANT])
|
||||
return "True";
|
||||
end if
|
||||
|
||||
if (IsMasterEntity([ENTITY]) == "false")
|
||||
loop (ENTITY -> SuperClass as BASECLASS)
|
||||
return IsA([BASECLASS], [ASCENDANT]);
|
||||
end loop
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy csak olvasható-e vagy sem. //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsReadonlyAttribute(MAttribute as ATTRIBUTE)
|
||||
loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "readonly")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return _True();
|
||||
else
|
||||
return _False();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy csak olvasható-e vagy sem. //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsComputedAttribute(MAttribute as ATTRIBUTE)
|
||||
loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "computed")
|
||||
return _True();
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy csak alapértelmezett értékkel //
|
||||
// rendelkezhet, vagy sem. //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsDefaultonlyAttribute(MAttribute as ATTRIBUTE)
|
||||
loop (ATTRIBUTE -> TaggedValue where toLower([TaggedValue.tag]) == "defaultonly")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return _True();
|
||||
else
|
||||
return _False();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy asszociációról, hogy csak olvasható-e vagy sem. //
|
||||
//***************************************************************************//
|
||||
proc IsReadonlyAssociation(MAssociation as ASSOCIATION)
|
||||
loop (ASSOCIATION -> TaggedValue where toLower([TaggedValue.tag]) == "readonly")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return "True";
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy asszociációról, hogy csak alapértelmezett értékkel //
|
||||
// rendelkezhet, vagy sem. //
|
||||
//***************************************************************************//
|
||||
proc IsDefaultonlyAssociation(MAssociation as ASSOCIATION)
|
||||
loop (ASSOCIATION -> TaggedValue where toLower([TaggedValue.tag]) == "defaultonly")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return "True";
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy vannak-e névnek tekintendő //
|
||||
// attribútumai, vagy sem. //
|
||||
// //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc HasNameAttribures(MClass as ENTITY)
|
||||
loop (ENTITY -> MAttribute as ATTRIBUTE where GetStereoTypeForAttribute([ATTRIBUTE]) == "DisplayName")
|
||||
return "True";
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy az névnek tekintendő-e vagy sem. //
|
||||
// //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsNameAttribute(MAttribute as ATTRIBUTE)
|
||||
if (GetStereoTypeForAttribute([ATTRIBUTE]) == "DisplayName")
|
||||
return "True";
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy műveletről, hogy vannak-e paraméterei, vagy sem. //
|
||||
// //
|
||||
// True, ha van legalább egy; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc HasParameters(MOperation as OPERATION)
|
||||
loop (OPERATION -> OpPara as PARAMETER)
|
||||
return "True";
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy műveletről, hogy van-e Object típusú paramétere, vagy sem. //
|
||||
// //
|
||||
// True, ha van legalább egy; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc HasObjectParameters(MOperation as OPERATION)
|
||||
loop (OPERATION -> OpPara as PARAMETER)
|
||||
if ([PARAMETER.type] == "Object")
|
||||
return "True";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy osztályról, hogy vannak-e műveletei, vagy sem. //
|
||||
// //
|
||||
// True, ha van legalább egy; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc HasOperations(MClass as ENTITY)
|
||||
local package;
|
||||
loop (ENTITY -> MOperation as OPERATION)
|
||||
[package] = getStereotype([OPERATION]);
|
||||
if (IsPackageAllowed([package]) == "True")
|
||||
return "True";
|
||||
end if
|
||||
end loop
|
||||
return "False";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy kötelezően kitöltött-e vagy sem. //
|
||||
// //
|
||||
// True, ha kötelezően kitöltött; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsAttributeRequired(MAttribute)
|
||||
loop (MAttribute -> TaggedValue where toLower([TaggedValue.tag]) == "required")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return _True();
|
||||
else
|
||||
return _False();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy stringattributumról, hogy unicode-e . //
|
||||
// //
|
||||
// False, ha nem; egyébként True. //
|
||||
//***************************************************************************//
|
||||
proc IsAttributeUnicode(MAttribute)
|
||||
if (toLower([MAttribute.type]) == "string")
|
||||
loop (MAttribute -> TaggedValue where toLower([TaggedValue.tag]) == "unicode")
|
||||
if (toLower([TaggedValue.value]) == "false")
|
||||
return "false";
|
||||
else
|
||||
return "true";
|
||||
end if
|
||||
end loop
|
||||
return "true";
|
||||
end if
|
||||
return "";
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy túl nagy hosszúság esetén kell-e vágni //
|
||||
// Ha false akkor exception túl nagy hossz esetén //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsAttributeTruncateable(MAttribute)
|
||||
loop (MAttribute -> TaggedValue where toLower([TaggedValue.tag]) == "truncateable")
|
||||
if (toLower([TaggedValue.value]) == "true")
|
||||
return _True();
|
||||
else
|
||||
return _False();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
proc SDA_GetTaggedValueOfType(typeName, taggedvalue)
|
||||
loop (Instances -> MClass Where toLower([MClass.name]) == toLower([typeName]) )
|
||||
loop (MClass -> TaggedValue Where toLower([TaggedValue.tag]) == toLower([taggedvalue]))
|
||||
return [TaggedValue.value];
|
||||
end loop
|
||||
end loop
|
||||
|
||||
switch (ToLower([typeName]))
|
||||
case "char": return "1";
|
||||
case "boolean": return "1";
|
||||
case "dictionaryitem": return SDA_GetTaggedValueOfType("ID", "length");
|
||||
end switch
|
||||
return "";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy osztályról, hogy szerepel-e asszociációban, mint //
|
||||
// asszociációs osztály. //
|
||||
// //
|
||||
// true, ha az osztály psszociációs osztály; egyébként false. //
|
||||
//***************************************************************************//
|
||||
proc IsAssociationClass(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" ))
|
||||
return "true";
|
||||
end loop
|
||||
end loop
|
||||
return "false";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megmondja, hogy egy típus az adatbázisbázisban lehet-e üres. //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
proc IsTypeNullable(type)
|
||||
// info = "\n IsTypeNullable() elavult...\n";
|
||||
switch (ToLower([type]))
|
||||
case "string": return "true";
|
||||
case "dictionaryitem": return "true";
|
||||
case "binary": return "true";
|
||||
case "datetime": return "true";
|
||||
end switch
|
||||
return "false";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszadja egy attribútum hosszát. //
|
||||
//***************************************************************************//
|
||||
proc GetAttributeLength(MAttribute)
|
||||
if ([MAttribute.type] == "LongString")
|
||||
return "2147483647"; // Ez itt kettőaharmicegyedikenmínuszegy...
|
||||
end if
|
||||
local taggedvalue = "";
|
||||
loop (MAttribute -> TaggedValue Where toLower([TaggedValue.tag]) == "length")
|
||||
[taggedvalue] = [TaggedValue.value];
|
||||
end loop
|
||||
|
||||
if ([taggedvalue] != "" )
|
||||
return [taggedvalue];
|
||||
else
|
||||
return SDA_GetTaggedValueOfType([MAttribute.type], "length");
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megnöveli eggyel a paraméterként kapott változó értékét. //
|
||||
//***************************************************************************//
|
||||
tcl_proc incr(val)
|
||||
return incr $val
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszadja egy osztály az ősosztályának a nevét. Ha nincs definiálva, //
|
||||
// az elapértelmezettel tér vissza. //
|
||||
//***************************************************************************//
|
||||
proc GetBaseClassName(MClass, defaultname)
|
||||
local bcl;
|
||||
[bcl] = "";
|
||||
loop(MClass -> SuperClass)
|
||||
[bcl] = [SuperClass.name];
|
||||
break;
|
||||
end loop
|
||||
if ([bcl] == "")
|
||||
[bcl] = [defaultname];
|
||||
end if
|
||||
return [bcl];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy osztály ősosztályának ősosztályának nevét. Ha nincs ilyen //
|
||||
// az UML-ben definiálva, akkor a megadott alapértelmezett értékkel tér //
|
||||
// vissza. //
|
||||
//***************************************************************************//
|
||||
proc GetBaseBaseClassName(MClass, defaultname)
|
||||
local bcl;
|
||||
[bcl] = "";
|
||||
loop(MClass -> SuperClass as baseclass)
|
||||
loop (baseclass -> SuperClass)
|
||||
[bcl] = [SuperClass.name];
|
||||
break;
|
||||
end loop
|
||||
end loop
|
||||
if ([bcl] == "")
|
||||
[bcl] = [defaultname];
|
||||
end if
|
||||
return [bcl];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A kimenetre generál, olyan commandline utasítást amlye az editort a //
|
||||
// parameterkent kapott azonosító alapján a megfelelő diagramra navigálja //
|
||||
//***************************************************************************//
|
||||
proc GenerateEditorNavigation(ModelElementGuid)
|
||||
out = "stpem.exe -ed stp -p " [stpreposdir] " -s " [stpprojname] " -C \"EditorQrlEval RTM_Navigate(\\\"" [ModelElementGuid]"\\\"); \n";
|
||||
out = "pause\n";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A parameterként kapott tokensetet végig nézi, és ha nem találja meg benne //
|
||||
// a paraméterként kapott erteket, akkor beleteszi. //
|
||||
//***************************************************************************//
|
||||
proc AddDistinctValueToTokenSet(tokenset, value)
|
||||
// belső változó, hogy figyeljem a
|
||||
// tokensetben benne van-e már az elem
|
||||
local IsInSet = _False();
|
||||
|
||||
// végig nézem, hogy az elem benne van-e a tokensetben
|
||||
loop(Instances -> TokenSet([tokenset]) )
|
||||
if ( [TokenSet.line] == [value] )
|
||||
[IsInSet] = _True();
|
||||
end if
|
||||
end loop
|
||||
// ha nem volt benne, akkor belerekom.
|
||||
if ( [IsInSet] == _False() )
|
||||
[tokenset] = [tokenset] [value] "\n";
|
||||
end if
|
||||
|
||||
return [tokenset];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott tokensetben keresi a paraméterként kapott elemet. //
|
||||
// Ha megtalálja igaz, ha nem találja hamis értékkel tér vissza. //
|
||||
//***************************************************************************//
|
||||
proc IsElementInTokenset(tokenset, element)
|
||||
loop(Instances -> TokenSet([tokenset]))
|
||||
if ( [TokenSet.line] == [element] )
|
||||
return _True();
|
||||
end if
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Hamis értéket ad vissza, ezt a függvényt érdemes használni, egységesíti //
|
||||
// a logikai hamis érték ábrázolását, eliminálja a gépelési hibát, mert //
|
||||
// szintaktikai ellenőrzést visz a rendszerbe! //
|
||||
//***************************************************************************//
|
||||
proc _False()
|
||||
return "false";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Igaz értéket ad vissza, ezt a függvényt érdemes használni, egységesíti //
|
||||
// a logikai igaz érték ábrázolását, eliminálja a gépelési hibát, mert //
|
||||
// szintaktikai ellenőrzést visz a rendszerbe! //
|
||||
//***************************************************************************//
|
||||
proc _True()
|
||||
return "true";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Név és típus alapján elkészíti az XML sztinggé alakítást. //
|
||||
//***************************************************************************//
|
||||
proc GenerateEntityWrapperSaveToXMLExpression(ADAPTERNAME, ATTRIBUTENAME, ATTRIBUTETYPE, VALUE, DICTIONARYITEMTYPE)
|
||||
switch (ToLower([ATTRIBUTETYPE]))
|
||||
case "integer": return [ADAPTERNAME] ".WriteIntegerField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "string": return [ADAPTERNAME] ".WriteStringField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "datetime": return [ADAPTERNAME] ".WriteDateTimeField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "boolean": return [ADAPTERNAME] ".WriteBooleanField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "char": return [ADAPTERNAME] ".WriteCharField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "double": return [ADAPTERNAME] ".WriteDoubleField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "float": return [ADAPTERNAME] ".WriteFloatField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "id": return [ADAPTERNAME] ".WriteIDField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "dictionaryitem": return [ADAPTERNAME] ".WriteDictionaryItemField(\"" [ATTRIBUTENAME] "\", " [VALUE] ", \"" [DICTIONARYITEMTYPE] "\");";
|
||||
case "binary": return [ADAPTERNAME] ".WriteBinaryField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "associationid": return [ADAPTERNAME] ".WriteAssociationID(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "associationname": return [ADAPTERNAME] ".WriteAssociationName(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "longstring": return [ADAPTERNAME] ".WriteLongStringField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
end switch
|
||||
return "/* ERROR Ismeretlen típus: " [ATTRIBUTETYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a kódtöredéket, ami elvégzi a DirectXML-es XML sztinggé //
|
||||
// alakítást. //
|
||||
//***************************************************************************//
|
||||
proc GenerateDirectXMLSaveToXMLExpression(ADAPTERNAME, ATTRIBUTENAME, ATTRIBUTETYPE, VALUE, DICTIONARYITEMTYPE)
|
||||
switch (ToLower([ATTRIBUTETYPE]))
|
||||
case "integer": return [ADAPTERNAME] ".WriteIntegerField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "string": return [ADAPTERNAME] ".WriteStringField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "datetime": return [ADAPTERNAME] ".WriteDateTimeField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "boolean": return [ADAPTERNAME] ".WriteBooleanField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "char": return [ADAPTERNAME] ".WriteCharField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "double": return [ADAPTERNAME] ".WriteDoubleField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "float": return [ADAPTERNAME] ".WriteFloatField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "id": return [ADAPTERNAME] ".WriteIDField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "dictionaryitem": return [ADAPTERNAME] ".WriteDictionaryItemField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++), \"" [DICTIONARYITEMTYPE] "\");";
|
||||
case "binary": return [ADAPTERNAME] ".WriteBinaryField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "associationid": return [ADAPTERNAME] ".WriteAssociationID(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "associationname": return [ADAPTERNAME] ".WriteAssociationName(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
case "longstring": return [ADAPTERNAME] ".WriteLongStringField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++));";
|
||||
|
||||
/*
|
||||
case "integer": return [ADAPTERNAME] ".WriteIntegerField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "string": return [ADAPTERNAME] ".WriteStringField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "datetime": return [ADAPTERNAME] ".WriteDateTimeField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "boolean": return [ADAPTERNAME] ".WriteBooleanField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "char": return [ADAPTERNAME] ".WriteCharField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "double": return [ADAPTERNAME] ".WriteDoubleField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "float": return [ADAPTERNAME] ".WriteFloatField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "id": return [ADAPTERNAME] ".WriteIDField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "dictionaryitem": return [ADAPTERNAME] ".WriteDictionaryItemField(\"" [ATTRIBUTENAME] "\", " [VALUE] ", \"" [DICTIONARYITEMTYPE] "\");";
|
||||
case "binary": return [ADAPTERNAME] ".WriteBinaryField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "associationid": return [ADAPTERNAME] ".WriteAssociationID(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "associationname": return [ADAPTERNAME] ".WriteAssociationName(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
|
||||
case "integer": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteIntegerField(\"" [ATTRIBUTENAME] "\", reader.GetDecimal(counter++)); } else { " [ADAPTERNAME] ".WriteIntegerField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
case "string": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteStringField(\"" [ATTRIBUTENAME] "\", reader.GetString(counter++)); } else { " [ADAPTERNAME] ".WriteStringField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
case "datetime": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteDateTimeField(\"" [ATTRIBUTENAME] "\", reader.GetDateTime(counter++)); } else { " [ADAPTERNAME] ".WriteDateTimeField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
case "boolean": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteBooleanField(\"" [ATTRIBUTENAME] "\", reader.GetString(counter++)); } else { " [ADAPTERNAME] ".WriteBooleanField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
case "char": return [ADAPTERNAME] ".WriteCharField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "double": return [ADAPTERNAME] ".WriteDoubleField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "float": return [ADAPTERNAME] ".WriteFloatField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "id": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteIDField(\"" [ATTRIBUTENAME] "\", reader.GetDecimal(counter++)); } else { " [ADAPTERNAME] ".WriteIDField(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
case "dictionaryitem": return [ADAPTERNAME] ".WriteDictionaryItemField(\"" [ATTRIBUTENAME] "\", " [VALUE] ", \"" [DICTIONARYITEMTYPE] "\");";
|
||||
case "binary": return [ADAPTERNAME] ".WriteBinaryField(\"" [ATTRIBUTENAME] "\", " [VALUE] ");";
|
||||
case "associationid": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteAssociationID(\"" [ATTRIBUTENAME] "\", reader.GetDecimal(counter++)); } else { " [ADAPTERNAME] ".WriteAssociationID(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
case "associationname": return "if (reader.IsDBNull(counter) == false) { " [ADAPTERNAME] ".WriteAssociationName(\"" [ATTRIBUTENAME] "\", reader.GetString(counter++)); } else { " [ADAPTERNAME] ".WriteAssociationName(\"" [ATTRIBUTENAME] "\", reader.GetValue(counter++)); }";
|
||||
*/
|
||||
end switch
|
||||
return "/* ERROR Ismeretlen típus: " [ATTRIBUTETYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja, hogy egy attribútum kicsinek tekintendő, vagy sem. Akkor //
|
||||
// tekintendő egy attribútum kicsinek, ha a hossza biztosan kisebb, mint //
|
||||
// 200 bájt. (karakterlánc esetén 200 karakter) //
|
||||
// //
|
||||
// true, ha kicsinek tekintendő; egyébként false. //
|
||||
//***************************************************************************//
|
||||
proc IsAttributeSmall(MAttribute as ATTRIBUTE)
|
||||
if ([ATTRIBUTE.type] == "Binary")
|
||||
return "false";
|
||||
end if
|
||||
if ([ATTRIBUTE.type] == "String")
|
||||
if (GetAttributeLength([ATTRIBUTE]) > 200)
|
||||
return "false";
|
||||
else
|
||||
return "true";
|
||||
end if
|
||||
end if
|
||||
return "true";
|
||||
end proc
|
||||
|
||||
|
399
Tools/CodeGeneration/Templates/Common/Converters.tdl
Normal file
399
Tools/CodeGeneration/Templates/Common/Converters.tdl
Normal file
|
@ -0,0 +1,399 @@
|
|||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvenciókank megfelelő //
|
||||
// indexnévvé konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToIndexName(targetTablename, str)
|
||||
return "NCI_" [targetTablename] "_" [str];
|
||||
end proc
|
||||
|
||||
proc ConvertNameToIndexNameOld(str)
|
||||
return toUpper(TruncateString("I_" ConvertNameToSQLTableScript([str]), 29) );
|
||||
end proc
|
||||
|
||||
proc ConvertNameToForeignKeyName(tablename, columnname, tablename2)
|
||||
return "FK_" [tablename] "_" [columnname] "_REF_" [tablename2];
|
||||
end proc
|
||||
|
||||
proc ConvertNameToUniqueIndexName(tablename, columnname)
|
||||
return "NCU_" [tablename] "_" [columnname];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott cél tábla nevét, és az asszociáció azonosítóját //
|
||||
// a névkonvencióknak megfelelő foregnkeyconstraint névvé konvertája. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToForeignKeyConstraint(targetTablename,Associd)
|
||||
return "FK_" [targetTablename] "_" [Associd];
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Kódtételhez táblanevet generál. //
|
||||
//***************************************************************************//
|
||||
proc ConvertDictItemTypeToItemTableName(dictItemType)
|
||||
return ConvertNameToSQLTableScript([dictItemType]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Kódtételhez fordítástábla nevet generál. //
|
||||
//***************************************************************************//
|
||||
proc ConvertDictItemTypeToTranslationTableName(dictItemType)
|
||||
return ConvertNameToSQLTableScript("TRANS_" [dictItemType] );
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az attributumhoz típusához tartozó kényszereket //
|
||||
//***************************************************************************//
|
||||
proc GetColumnModifyerOfAttribute(MAttribute)
|
||||
local required = GetTaggedValueOfAttribute([MAttribute], "required");
|
||||
if ( [required] == _True() )
|
||||
return "NOT NULL";
|
||||
else
|
||||
return "NULL";
|
||||
end if
|
||||
|
||||
// switch( [MAttribute.type] )
|
||||
// case "String" :
|
||||
// return "null";
|
||||
// case "Binary" :
|
||||
// return "null";
|
||||
// case "Integer" :
|
||||
// return "not null";
|
||||
// case "ID" :
|
||||
// return "null";
|
||||
// case "Float" :
|
||||
// return "not null";
|
||||
// case "DateTime":
|
||||
// return "not null";
|
||||
// case "Boolean" :
|
||||
// return "not null";
|
||||
// case "DictionaryItem" :
|
||||
// return "null";
|
||||
// case "Char" :
|
||||
// return "not null";
|
||||
// default:
|
||||
// return "UNKNOWN TYPE:" [MAttribute.type];
|
||||
// end switch
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Átalakítja az attributm leíró információit SQL típussá. Ezt a függvényt a //
|
||||
// más függvények használják. //
|
||||
// pl: ConvertAttributeToSQlType,ConvertUMLTypeToSQLType //
|
||||
//***************************************************************************//
|
||||
proc ConvertAttributeInfoToSQlType(attributetype, attributelength, attributeprecision, attributeunicode)
|
||||
|
||||
// attribute length vizsgalat
|
||||
if ([attributelength] == "" )
|
||||
[attributelength] = GetTaggedValueOfType([attributetype],"length");
|
||||
end if
|
||||
|
||||
// attribute precision vizsgalat
|
||||
if ([attributeprecision] == "" )
|
||||
[attributeprecision] = GetTaggedValueOfType([attributetype],"precision");
|
||||
end if
|
||||
|
||||
if ([attributeunicode] == "" )
|
||||
[attributeunicode] = GetTaggedValueOfType([attributetype],"unicode");
|
||||
end if
|
||||
|
||||
switch( [attributetype] )
|
||||
//String Type
|
||||
case "String" :
|
||||
if ([attributelength] <= "4000")
|
||||
if ([attributeunicode] == "false")
|
||||
return "varchar(" [attributelength] ")";
|
||||
else
|
||||
return "nvarchar(" [attributelength] ")";
|
||||
end if
|
||||
else
|
||||
if ([attributeunicode] == "false")
|
||||
return "varchar(max)";
|
||||
else
|
||||
return "nvarchar(max)";
|
||||
end if
|
||||
end if
|
||||
|
||||
case "FixString" :
|
||||
return "char(" [attributelength] ")";
|
||||
|
||||
// LongString type
|
||||
case "LongString" :
|
||||
if ([attributeunicode] == "false")
|
||||
return "varchar(max)";
|
||||
else
|
||||
return "nvarchar(max)";
|
||||
end if
|
||||
|
||||
// Binary Type
|
||||
case "Binary" :
|
||||
return "varbinary(max)";
|
||||
|
||||
// Integer Type
|
||||
case "Integer" :
|
||||
return "int";
|
||||
|
||||
// ID Type
|
||||
case "ID" :
|
||||
return "int";
|
||||
|
||||
// retk teszt
|
||||
// Float Type
|
||||
case "Float" :
|
||||
if ([CimbyTest_MSSQL] == "true")
|
||||
return "numeric(" [attributelength] "," [attributeprecision] ")";
|
||||
else
|
||||
return "numeric(" [attributelength] "," [attributeprecision] ")";
|
||||
end if
|
||||
|
||||
// DateTime Type
|
||||
case "DateTime":
|
||||
return "datetime";
|
||||
|
||||
// Boolean Type
|
||||
case "Boolean" :
|
||||
return "char(1)";
|
||||
|
||||
// DictionaryItem Type
|
||||
case "DictionaryItem" :
|
||||
if ([CimbyTest_MSSQL] == "true")
|
||||
return "int";
|
||||
else
|
||||
return "numeric(" GetTaggedValueOfType("ID","length") ")";
|
||||
end if
|
||||
|
||||
// Char Type
|
||||
case "Char" :
|
||||
return "nchar(1)";
|
||||
|
||||
// Guid Type
|
||||
case "Guid" :
|
||||
return "uniqueidentifier";
|
||||
|
||||
// Kivetel ag
|
||||
default :
|
||||
return "UNKNOWN TYPE:" [attributetype];
|
||||
end switch
|
||||
break;
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Átalakítja az Attribútumot SQL típussá. //
|
||||
//***************************************************************************//
|
||||
proc ConvertAttributeToSQlType(MAttribute)
|
||||
local attributelength = "";
|
||||
local attributeprecision = "";
|
||||
local attributeunicode = "";
|
||||
|
||||
[attributelength] = GetTaggedValueOfAttribute([MAttribute],"length");
|
||||
[attributeprecision] = GetTaggedValueOfAttribute([MAttribute],"precision");
|
||||
[attributeunicode] = GetTaggedValueOfAttribute([MAttribute],"unicode");
|
||||
|
||||
return ConvertAttributeInfoToSQlType([MAttribute.type], [attributelength], [attributeprecision], [attributeunicode]);
|
||||
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Átalakítja az UML modelben felvett és ismert alap típust SQL típussá //
|
||||
//***************************************************************************//
|
||||
proc ConvertUMLTypeToSQLType(attributetype)
|
||||
//default null-okkal hívom meg a convertálást
|
||||
//így a típushoz definiált tulajdonságok figyelembe
|
||||
// vételével történik a convertálás.
|
||||
return ConvertAttributeInfoToSQlType([attributetype],"","", "");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a név konvencióknak megfelelő SQL //
|
||||
// paraméter névvé konvertálja. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToSQLParamName(str)
|
||||
local parPrefix = "";
|
||||
switch ( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[parPrefix] = ":p";
|
||||
break;
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[parPrefix] = "@p";
|
||||
break;
|
||||
//DB2Type
|
||||
case "DB2" :
|
||||
[parPrefix] = ":p";
|
||||
break;
|
||||
end switch
|
||||
|
||||
return [parPrefix]toUpper([str]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvencióknak megfelelő oszlopnévvé //
|
||||
// konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToSQLColumnName(str)
|
||||
return toUpper(TruncateString("C_" [str], 29));
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvencióknak megfelelő táblanévvé //
|
||||
// konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToSQLTableScript(str)
|
||||
if (TruncateString([str], 3) == "DKT_")
|
||||
return toUpper("T_"[str]);
|
||||
end if
|
||||
return toUpper(TruncateString("T_"[str], 29));
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvencióknak megfelelő táblanévvé //
|
||||
// konvertálja Tanév független Intézmény függővé //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToSQLTableName(str)
|
||||
return ConvertNameToSQLTableScript([str]) "_OSSZES";
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvencióknak megfelelő táblanévvé //
|
||||
// konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToSQLDefaultTableName(str)
|
||||
return toUpper(TruncateString("D_"[str], 29));
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvencióknak megfelelő viewnévvé //
|
||||
// konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToSQLViewName(str)
|
||||
return toUpper(TruncateString("T_"[str], 29));
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvenciókank megfelelő //
|
||||
// primarykey constraint névvé konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToPrimaryKeyConstraintName(str)
|
||||
return "PK_" [str];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott asszociáció azonosítót a névkonvencióknak megfelelő//
|
||||
// uniquekeyconstraint névvé konvertálja. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToUniqueKeyConstraint(targetTablename, Associd)
|
||||
return toUpper("UQ_" TruncateString([targetTablename], 27) "_" [Associd]);
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott stringet a névkonvenciókank megfelelő //
|
||||
// check constraint névvé konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToCheckConstraintName(str)
|
||||
return toUpper(TruncateString("CK_" ConvertNameToSQLTableScript([str]), 29) );
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Meghatározza a paraméterként kapott asszociációsvégponthoz tartozó //
|
||||
// szerepkör nevét. Ha nincs a modelben beállított szerepkörnév akkor //
|
||||
// meghatároz egyet //
|
||||
//***************************************************************************//
|
||||
proc DefineRoleName(MAssociationEnd as StartRole)
|
||||
if ([StartRole.name]!="")
|
||||
return [StartRole.name];
|
||||
else
|
||||
loop (StartRole -> MClass)
|
||||
return [MClass.name];
|
||||
end loop
|
||||
end if
|
||||
end proc
|
||||
|
||||
proc GetRoleClassName(MAssociationEnd as StartRole)
|
||||
loop (StartRole -> MClass)
|
||||
return [MClass.name];
|
||||
end loop
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott Asszociációsvégponttot oszlopnévvé konvertája //
|
||||
//***************************************************************************//
|
||||
proc ConvertRoleToName( MAssociationEnd as StartRole )
|
||||
return DefineRoleName([StartRole]) "Id";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként kapott asszociációsvégpontokat kapcsolótábla névvé //
|
||||
// konvertálja //
|
||||
//***************************************************************************//
|
||||
proc ConvertAssociationRolesToSwitchTableName(MAssociationEnd as StartRole, MAssociationEnd as EndRole)
|
||||
if ([StartRole.id] < [EndRole.id])
|
||||
return DefineRoleName([StartRole]) "_" DefineRoleName([EndRole]);
|
||||
else
|
||||
return DefineRoleName([EndRole]) "_" DefineRoleName([StartRole]);
|
||||
end if
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Az SQL parancsok elválasztására szolgáló szeparátort adja vissza //
|
||||
//***************************************************************************//
|
||||
proc GetCommandSeparator()
|
||||
switch ( [SQL_DBType])
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
return "/";
|
||||
case "MSSQL" :
|
||||
return "GO";
|
||||
case "DB2" :
|
||||
return "";
|
||||
end switch
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Az egyes SQL függvények néveltéréseit kiküszöbölő függvény //
|
||||
//***************************************************************************//
|
||||
proc GetFunctionName( functionType )
|
||||
switch ( toUpper( [ functionType ] ))
|
||||
case "LENGTH" :
|
||||
switch ( [SQL_DBType])
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
return "LENGTH";
|
||||
case "MSSQL" :
|
||||
return "LEN";
|
||||
case "DB2" :
|
||||
return "LENGTH";
|
||||
end switch
|
||||
break;
|
||||
end switch
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Az egyes default dátum értékekek kezeléséhez használt függvény //
|
||||
//***************************************************************************//
|
||||
proc GetDefaultDateTimeString()
|
||||
switch ( [SQL_DBType])
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
return "DEFAULT SYSDATE";
|
||||
case "MSSQL" :
|
||||
return "DEFAULT GETDATE()";
|
||||
case "DB2" :
|
||||
return "";
|
||||
end switch
|
||||
end proc
|
||||
|
695
Tools/CodeGeneration/Templates/Common/DAUtil.tdl
Normal file
695
Tools/CodeGeneration/Templates/Common/DAUtil.tdl
Normal file
|
@ -0,0 +1,695 @@
|
|||
//***************************************************************************//
|
||||
// Nevet konvertál SQL szöveg névvé, a konvencióinknak megfelelően. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToCommandTextName(COMMANDNAME)
|
||||
return [COMMANDNAME] "CommandText";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Névből adatbázisművelethez paraméternevet generál. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToCommandParameterName(name)
|
||||
return TruncateString("p" ToUpper([name]), 29);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenrálja azt a kódtöredéket, ami egy DataReader objektumból kiolvassa //
|
||||
// az adatot, az adat típusának és az oszlop indexének megfelelően. //
|
||||
//***************************************************************************//
|
||||
proc GenerateReaderRead(type, column, readername)
|
||||
switch (ToLower([type]))
|
||||
case "integer": return "((int)" [readername] ".GetDecimal(" [column] "))";
|
||||
case "string": return [readername] ".GetString(" [column] ")";
|
||||
case "datetime": return [readername] ".GetDateTime(" [column] ")";
|
||||
case "boolean": return "(" [readername] ".GetString(" [column] ")[0] != 'F')";
|
||||
case "char": //return "(" [readername] ".GetString(" [column] ")[0])";
|
||||
return [readername] ".GetString(" [column] ")";
|
||||
case "double": return [readername] ".GetDouble(" [column] ")";
|
||||
case "float": return [readername] ".GetDouble(" [column] ")";
|
||||
case "id": return "((int)" [readername] ".GetDecimal(" [column] "))";
|
||||
case "dictionaryitem": return "((int)" [readername] ".GetDecimal(" [column] ")) /* XXX DictionaryItem */";
|
||||
case "binary": return "((Byte[])" [readername] ".GetValue(" [column] "))";
|
||||
case "longstring": return [readername] ".GetString(" [column] ")";
|
||||
case "guid": return "((Guid)" [readername] ".GetValue(" [column] "))";
|
||||
end switch
|
||||
return [readername] ".GetInt32(999) /* XXX Ismeretlen tipus: " [type] " */";
|
||||
end proc
|
||||
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitáshoz tartozó táblaneveket //
|
||||
// soroja fel, az ősosztályok tábláival együtt. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
proc GenerateSuperClassTableList(MClass)
|
||||
local result;
|
||||
[result] = "";
|
||||
if (GetInheritance([MClass]) == "tpc")
|
||||
return [result];
|
||||
end if
|
||||
loop (MClass -> SuperClass as MBaseClass)
|
||||
[result] = "inner join " ConvertNameToSQLTableName([MBaseClass.name]) " on (" ConvertNameToSQLTableName([MClass.name]) ".ID = " ConvertNameToSQLTableName([MBaseClass.name]) ".ID)";
|
||||
[result] = [result] " " GenerateSuperClassTableList([MBaseClass]);
|
||||
break;
|
||||
end loop
|
||||
|
||||
return [result];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás és az ősosztályainak //
|
||||
// tábláit kapcsolja össze az SQL where részében. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template SDA_GetSuperClassSelectFilter(MClass)
|
||||
[if (IsMasterEntity([MClass]) == "false")]
|
||||
"([ConvertNameToSQLTableName(GetBaseClassName([MClass], "/* XXX errorhiba van! */"))].ID = [ConvertNameToSQLTableName([MClass.name])].ID) "[if (GetBaseBaseClassName([MClass], "") != "")] +
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
"and " +
|
||||
[SDA_GetSuperClassSelectFilter([MBaseClass])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
//***************************************************************************//
|
||||
proc GetReadAttributeMethodName(ATTRIBUTETYPE)
|
||||
switch (ToLower([ATTRIBUTETYPE]))
|
||||
case "string": return "ReadStringAttribute";
|
||||
case "integer": return "ReadIntegerAttribute";
|
||||
case "datetime": return "ReadDateTimeAttribute";
|
||||
case "boolean": return "ReadBooleanAttribute";
|
||||
case "dictionaryitem": return "ReadIntegerAttribute";
|
||||
case "binary": return "ReadBinaryAttribute";
|
||||
case "float": return "ReadDoubleAttribute";
|
||||
case "char": return "ReadStringAttribute";
|
||||
case "longstring": return "ReadStringAttribute";
|
||||
case "double": return "ReadDoubleAttribute";
|
||||
case "id": return "ReadIntegerAttribute";
|
||||
case "guid": return "ReadGuidAttribute";
|
||||
end switch
|
||||
return "Ismeretlen /* XXX Ismeretlen tipus: " [type] " */";
|
||||
end proc
|
||||
|
||||
|
||||
template GenerateFieldLoadEntityCore(MClass, offset, entityname, readername)
|
||||
// [MClass.name] mezői
|
||||
[setVar("counter", [offset])]
|
||||
[loop (MClass -> MAttribute where [MAttribute.name] != [MClass.name])]
|
||||
|
||||
[if (IsAttributeRequired([MAttribute]) == _True())]
|
||||
[entityname].m_[MAttribute.name] = DAUtil.[GetReadAttributeMethodName([MAttribute.type])]([readername], [counter], [GetCSharpDefaultValueOfAttribute([MAttribute])]);
|
||||
[else]
|
||||
[entityname].m_[MAttribute.name] = DAUtil.[GetReadAttributeMethodName([MAttribute.type])]([readername], [counter]);
|
||||
[end if]
|
||||
|
||||
[setVar("counter", incr([counter]))]
|
||||
[end loop]
|
||||
[if (GetBaseClassName([MClass], [""]) != [""] )]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[GenerateFieldLoadEntityCore([MBaseClass], [counter], [entityname], [readername])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
template GenerateAssociationLoadEntityCore(MClass, offset, entityname, readername)
|
||||
// [MClass.name] kapcsoló mezői
|
||||
[setVar("counter", [offset])]
|
||||
[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")]
|
||||
DAUtil.ReadIDAttribute([readername], [counter], ref [entityname].m_[ConvertRoleToName([EndRole])], 0);
|
||||
[setVar("counter", incr([counter]))]
|
||||
[else]
|
||||
[if ([EndRole.multiplicity] == "0..1")]
|
||||
[if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))]
|
||||
DAUtil.ReadIDAttribute([readername], [counter], ref [entityname].m_[ConvertRoleToName([EndRole])], -1);
|
||||
[setVar("counter", incr([counter]))]
|
||||
[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" ))]
|
||||
DAUtil.ReadIDAttribute([readername], [counter], ref [entityname].m_[ConvertRoleToName([StartRole])], 0);
|
||||
[setVar("counter", incr([counter]))]
|
||||
DAUtil.ReadIDAttribute([readername], [counter], ref [entityname].m_[ConvertRoleToName([EndRole])], 0);
|
||||
[setVar("counter", incr([counter]))]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (GetBaseClassName([MClass], [""]) != [""] )]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[GenerateAssociationLoadEntityCore([MBaseClass], [counter], [entityname], [readername])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a ciklusmagot, amely egy DataReader-ből kiszippantja //
|
||||
// az entitás összes mezőjét. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadEntityCore(MClass, offset, entityname, readername)
|
||||
// [MClass.name] betöltése
|
||||
[setVar("counter", [offset])]
|
||||
[GenerateFieldLoadEntityCore([MClass], [counter], [entityname], [readername])]
|
||||
[GenerateAssociationLoadEntityCore([MClass], [counter], [entityname], [readername])]
|
||||
end template
|
||||
|
||||
template GenerateFieldDynamicLoadEntityCore(MClass, entityname, readername)
|
||||
// [MClass.name] mezői
|
||||
[loop (MClass -> MAttribute where [MAttribute.name] != [MClass.name])]
|
||||
if (((columnFilterMode == ColumnFilterMode.DEFAULT_ALLOWED) ^ (columns.Contains("[MAttribute.name]"))))
|
||||
{
|
||||
[if (IsAttributeRequired([MAttribute]) == _True())]
|
||||
[entityname].m_[MAttribute.name] = DAUtil.[GetReadAttributeMethodName([MAttribute.type])]([readername], index++, [GetCSharpDefaultValueOfAttribute([MAttribute])]);
|
||||
[else]
|
||||
[entityname].m_[MAttribute.name] = DAUtil.[GetReadAttributeMethodName([MAttribute.type])]([readername], index++);
|
||||
[end if]
|
||||
}
|
||||
[end loop]
|
||||
[if (GetBaseClassName([MClass], [""]) != [""] )]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[GenerateFieldDynamicLoadEntityCore([MBaseClass], [entityname], [readername])]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
template GenerateAssociationDynamicLoadEntityCore(MClass, entityname, readername)
|
||||
// [MClass.name] kapcsoló mezői
|
||||
[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")]
|
||||
DAUtil.ReadIDAttribute([readername], index++, ref [entityname].m_[ConvertRoleToName([EndRole])], 0);
|
||||
[else]
|
||||
[if ([EndRole.multiplicity] == "0..1")]
|
||||
[if (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))]
|
||||
DAUtil.ReadIDAttribute([readername], index++, ref [entityname].m_[ConvertRoleToName([EndRole])], -1);
|
||||
[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" ))]
|
||||
DAUtil.ReadIDAttribute([readername], index++, ref [entityname].m_[ConvertRoleToName([StartRole])], 0);
|
||||
DAUtil.ReadIDAttribute([readername], index++, ref [entityname].m_[ConvertRoleToName([EndRole])], 0);
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (GetBaseClassName([MClass], [""]) != [""] )]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[GenerateAssociationDynamicLoadEntityCore([MBaseClass], [entityname], [readername])]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a ciklusmagot, amely egy DataReader-ből kiszippantja //
|
||||
// az entitás összes mezőjét. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateDynamicLoadEntityCore(MClass, entityname, readername)
|
||||
// [MClass.name] betöltése
|
||||
[GenerateFieldDynamicLoadEntityCore([MClass], [entityname], [readername])]
|
||||
[GenerateAssociationDynamicLoadEntityCore([MClass], [entityname], [readername])]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás attribútumaihoz tartozó //
|
||||
// mezőket, és az asszociációs kapcsolómezőket tartalmazza. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateFieldListWithBaseClassFields(MClass, entityname)
|
||||
// [MClass.name] betöltése
|
||||
[GenerateAttributeFieldListWithBaseClassFields([MClass], [entityname])]
|
||||
[GenerateAssociationFieldListWithBaseClassFields([MClass], [entityname] )]
|
||||
[GenerateIdAndSerialFields([MClass], [entityname] )]
|
||||
end template
|
||||
|
||||
template GenerateIdAndSerialFields(MClass, entityname)
|
||||
[if (IsMasterEntity([MClass]) == "false")]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[if (GetInheritance([MClass]) == "tpc")]
|
||||
[GenerateIdAndSerialFields([MBaseClass], [entityname])][break]
|
||||
[else]
|
||||
[GenerateIdAndSerialFields([MBaseClass], [MBaseClass.name])][break]
|
||||
[end if]
|
||||
[end loop]
|
||||
[else]
|
||||
"[ConvertNameToSQLTableName([entityname])].TOROLT, " +
|
||||
"[ConvertNameToSQLTableName([entityname])].SERIAL, " +
|
||||
"[ConvertNameToSQLTableName([entityname])].CREATED, " +
|
||||
"[ConvertNameToSQLTableName([entityname])].CREATOR, " +
|
||||
"[ConvertNameToSQLTableName([entityname])].LASTCHANGED, " +
|
||||
"[ConvertNameToSQLTableName([entityname])].MODIFIER " +
|
||||
[end if]
|
||||
end template
|
||||
|
||||
template GenerateAssociationFieldListWithBaseClassFields(MClass, entityname)
|
||||
// [MClass.name] kapcsoló mezői
|
||||
[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([entityname])].[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([entityname])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + /* Opcionális asszociációs kapcsolómező */
|
||||
[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([entityname])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))], " + /* Asszociációs mező */
|
||||
"[ConvertNameToSQLTableName([entityname])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))], " + /* Asszociációs mező */
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([MClass]) == "false")]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[if (GetInheritance([MClass]) == "tpc")]
|
||||
[GenerateAssociationFieldListWithBaseClassFields([MBaseClass], [entityname])][break]
|
||||
[else]
|
||||
[GenerateAssociationFieldListWithBaseClassFields([MBaseClass], [MBaseClass.name])][break]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
template GenerateAttributeFieldListWithBaseClassFields(MClass, entityname)
|
||||
// [MClass.name] mezői
|
||||
[loop (MClass->MAttribute)]
|
||||
"[ConvertNameToSQLTableName([entityname])].[ConvertNameToSQLColumnName([MAttribute.name])], " +
|
||||
[end loop]
|
||||
[if (IsMasterEntity([MClass]) == "false")]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[if (GetInheritance([MClass]) == "tpc")]
|
||||
[GenerateAttributeFieldListWithBaseClassFields([MBaseClass], [entityname])][break]
|
||||
[else]
|
||||
[GenerateAttributeFieldListWithBaseClassFields([MBaseClass], [MBaseClass.name])][break]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
//********************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás alap attribútumaihoz tartozó //
|
||||
// mezőket, és az asszociációs kapcsolómezőket tartalmazza. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//********************************************************************************//
|
||||
template GenerateDynamicFieldListWithBaseClassFields(MClass, entityname)
|
||||
// [MClass.name] betöltése
|
||||
[GenerateAssociationFieldListWithBaseClassFields([MClass], [entityname])]
|
||||
[GenerateIdAndSerialFields([MClass], [entityname])]
|
||||
end template
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a DataAccess.csproj fájl szerelvény hivatkozási szekciójának //
|
||||
// azt a részét, ami az adatbáziskezelésre vonatkozik. Ez adatbázisonként //
|
||||
// más. //
|
||||
//***************************************************************************//
|
||||
template GenerateDataAccessAssemblyReferences()
|
||||
[if ([DBTYPE] == "UniDirect")]
|
||||
<Reference
|
||||
Name = "CoreLab.UniDirect"
|
||||
AssemblyName = "CoreLab.UniDirect"
|
||||
HintPath = "..\References\CoreLab.UniDirect.dll"
|
||||
/>
|
||||
[else][if ([DBTYPE] == "ODP")]
|
||||
<Reference
|
||||
Name = "Oracle.DataAccess"
|
||||
AssemblyName = "Oracle.DataAccess"
|
||||
HintPath = "..\References\Oracle.DataAccess.dll"
|
||||
AssemblyFolderKey = "hklm\dn\odp.net"
|
||||
/>
|
||||
[else][if ([DBTYPE] == "OracleClient")]
|
||||
<Reference
|
||||
Name = "System.Data.OracleClient"
|
||||
AssemblyName = "System.Data.OracleClient"
|
||||
HintPath = "..\References\System.Data.OracleClient.dll"
|
||||
/>
|
||||
[else][if ([DBTYPE] == "SDA")]
|
||||
<Reference
|
||||
Name = "SDA.DataProvider"
|
||||
AssemblyName = "SDA.DataProvider"
|
||||
HintPath = "..\References\SDA.DataProvider.dll"
|
||||
/>
|
||||
[end if][end if][end if][end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a kóddarabot, ami egy command obejktum inicializálását //
|
||||
// végzi. Ez adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
template GenerateCommandInit(COMMANDNAME)
|
||||
[if ([DBTYPE] == "SDA")]
|
||||
[COMMANDNAME].Connection = UserContext.Instance.SDAConnection;
|
||||
[COMMANDNAME].Transaction = UserContext.Instance.SDATransaction;
|
||||
[else]
|
||||
[COMMANDNAME].Connection = UserContext.Instance.DBConnection;
|
||||
[if ([DBTYPE] != "ODP")]
|
||||
[COMMANDNAME].Transaction = UserContext.Instance.Transaction;
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja a megadott típusnak megfelelő adatbázistípus nevét a C# nyelv //
|
||||
// és a .NET keretrendszernek megfelelően. Ez adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpDatasetType(type, isunicode)
|
||||
switch ([DBTYPE])
|
||||
case "SDA":
|
||||
switch(ToLower([type]))
|
||||
case "string":
|
||||
if ([isunicode] == "true")
|
||||
return "SDA.DataProvider.SDADBType.String";
|
||||
else
|
||||
return "SDA.DataProvider.SDADBType.NonUnicodeString";
|
||||
end if
|
||||
case "integer": return "SDA.DataProvider.SDADBType.Int";
|
||||
case "datetime": return "SDA.DataProvider.SDADBType.DateTime";
|
||||
case "boolean": return "SDA.DataProvider.SDADBType.Boolean /* Boolean */";
|
||||
case "dictionaryitem": return "SDA.DataProvider.SDADBType.Int /* DictionaryItem */";
|
||||
case "binary": return "SDA.DataProvider.SDADBType.Binary /* Binary */";
|
||||
case "float": return "SDA.DataProvider.SDADBType.Double";
|
||||
case "char": return "SDA.DataProvider.SDADBType.Char";
|
||||
case "id": return "SDA.DataProvider.SDADBType.Int";
|
||||
case "longstring": return "SDA.DataProvider.SDADBType.LongString";
|
||||
case "guid": return "SDA.DataProvider.SDADBType.Guid";
|
||||
|
||||
end switch
|
||||
return "0 /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
case "UniDirect":
|
||||
switch(ToLower([type]))
|
||||
case "string": return "System.Data.DbType.String";
|
||||
case "integer": return "System.Data.DbType.Int32";
|
||||
case "datetime": return "System.Data.DbType.DateTime";
|
||||
case "boolean": return "System.Data.DbType.Boolean";
|
||||
case "dictionaryitem": return "System.Data.DbType.Int32 /* DictionaryItem */";
|
||||
case "binary": return "System.Data.DbType.Binary /* Binary */";
|
||||
case "float": return "System.Data.DbType.Double";
|
||||
case "char": return "System.Data.DbType.StringFixedLength";
|
||||
case "id": return "System.Data.DbType.Int32";
|
||||
end switch
|
||||
return "0 /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
case "ODP":
|
||||
switch(ToLower([type]))
|
||||
case "string": return "Oracle.DataAccess.Client.OracleDbType.Varchar2";
|
||||
case "integer": return "Oracle.DataAccess.Client.OracleDbType.Int32";
|
||||
case "datetime": return "Oracle.DataAccess.Client.OracleDbType.Date";
|
||||
case "boolean": return "Oracle.DataAccess.Client.OracleDbType.Char";
|
||||
case "dictionaryitem": return "Oracle.DataAccess.Client.OracleDbType.Int32 /* DictionaryItem */";
|
||||
case "binary": return "Oracle.DataAccess.Client.OracleDbType.Raw /* Binary */";
|
||||
case "float": return "Oracle.DataAccess.Client.OracleDbType.Double";
|
||||
case "char": //return "Oracle.DataAccess.Client.OracleDbType.Char";
|
||||
return "Oracle.DataAccess.Client.OracleDbType.Varchar2";
|
||||
case "id": return "Oracle.DataAccess.Client.OracleDbType.Int32";
|
||||
end switch
|
||||
return "0 /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
case "OracleClient":
|
||||
switch(ToLower([type]))
|
||||
case "string": return "System.Data.OracleClient.OracleType.VarChar";
|
||||
case "integer": return "System.Data.OracleClient.OracleType.Number";
|
||||
case "datetime": return "System.Data.OracleClient.OracleType.DateTime";
|
||||
case "boolean": return "System.Data.OracleClient.OracleType.Char";
|
||||
case "dictionaryitem": return "System.Data.OracleClient.OracleType.Number /* DictionaryItem */";
|
||||
case "binary": return "System.Data.OracleClient.OracleType.Raw /* Binary */";
|
||||
case "float": return "System.Data.OracleClient.OracleType.Float";
|
||||
case "char": return "System.Data.OracleClient.OracleType.Char";
|
||||
case "id": return "System.Data.OracleClient.OracleType.Number";
|
||||
end switch
|
||||
return "System.Data.SqlDbType.Variant /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
end switch
|
||||
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# ID típus nevét. Ez adatbázisonként //
|
||||
// más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLIDType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDADBType.Int";
|
||||
case "UniDirect": return "System.Data.DbType.Int32";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleDbType.Int32";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleType.Number";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# ROWID típus nevét. Ez //
|
||||
// adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLRowIDType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDADBType.String";
|
||||
case "UniDirect": return "System.Data.DbType.String";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleDbType.Varchar2";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleType.VarChar";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# DBCommand típus nevét. Ez //
|
||||
// adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLCommandType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDACommand";
|
||||
case "UniDirect": return "CoreLab.UniDirect.UniCommand";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleCommand";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleCommand";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# CommandParameter típus nevét. Ez //
|
||||
// adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLCommandParameterType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDACommandParameter";
|
||||
case "UniDirect": return "CoreLab.UniDirect.UniParameter";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleParameter";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleParameter";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# DBConnection típus nevét. Ez //
|
||||
// adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLConnectionType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDAConnection";
|
||||
case "UniDirect": return "CoreLab.UniDirect.UniConnection";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleConnection";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleConnection";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# Transaction típus nevét. Ez //
|
||||
// adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLTransactionType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDATransaction";
|
||||
case "UniDirect": return "CoreLab.UniDirect.UniTransaction";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleTransaction";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleTransaction";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja az adatbázisspecifikus C# DataReader típus nevét. Ez //
|
||||
// adatbázisonként más. //
|
||||
//***************************************************************************//
|
||||
proc GetCSharpSQLDataReaderType()
|
||||
switch ([DBTYPE])
|
||||
case "SDA": return "SDA.DataProvider.SDADataReader";
|
||||
case "UniDirect": return "CoreLab.UniDirect.UniDataReader";
|
||||
case "ODP": return "Oracle.DataAccess.Client.OracleDataReader";
|
||||
case "OracleClient": return "System.Data.OracleClient.OracleDataReader";
|
||||
end switch
|
||||
return "/* Érvénytelen adatbázistípus: " [DBTYPE] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy művelethez tartozó SQL parancsobjektum nevét. //
|
||||
//***************************************************************************//
|
||||
proc ConvertNameToCommandName(operation)
|
||||
return [operation] "Command";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy művelethez tartozó SQL parancsobjektum //
|
||||
// megcsinálómetódusának a nevét. //
|
||||
//***************************************************************************//
|
||||
proc GenerateCommandCreatorName(CommandName)
|
||||
return "Create" [CommandName] "Command";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Egy SQL parancs típusú property-t generál. //
|
||||
//***************************************************************************//
|
||||
template GenerateCommandGetterProperty(COMMANDNAME)
|
||||
[if ([COMMANDCACHE] == "True")]
|
||||
private [GetCSharpSQLCommandType()] m_[ConvertNameToCommandName([COMMANDNAME])] = null;
|
||||
[end if]
|
||||
private [GetCSharpSQLCommandType()] [ConvertNameToCommandName([COMMANDNAME])]
|
||||
{
|
||||
get
|
||||
{
|
||||
[if ([COMMANDCACHE] == "True")]
|
||||
if (this.m_[ConvertNameToCommandName([COMMANDNAME])] == null)
|
||||
{
|
||||
this.m_[ConvertNameToCommandName([COMMANDNAME])] = this.[GenerateCommandCreatorName([COMMANDNAME])]();
|
||||
}
|
||||
|
||||
return this.m_[ConvertNameToCommandName([COMMANDNAME])];
|
||||
[else]
|
||||
return this.[GenerateCommandCreatorName([COMMANDNAME])]();
|
||||
[end if]
|
||||
}
|
||||
}
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy entitás SERIAL rendszeroszlopának SQL töredékét, teljesen //
|
||||
// minősített névvel. //
|
||||
//***************************************************************************//
|
||||
template GenerateSerialColumn(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateSerialColumn([BASECLASS])][break]
|
||||
[end loop]
|
||||
[else]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].SERIAL
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a kóddarabot, ami egy command obejktum inicializálását //
|
||||
// végzi. Ez adatbázisonként más. Szükség esetén a szűréket is réteszi az //
|
||||
// SQL parancsszövegre. //
|
||||
//***************************************************************************//
|
||||
template GenerateCommandInitialization(COMMANDNAME, COMMANDTEXTNAME, ENTITYNAME, OPERATIONNAME, APPLYFILTERS, MASTERNAME)
|
||||
[if ([DBTYPE] == "SDA")]
|
||||
[COMMANDNAME].Connection = UserContext.Instance.SDAConnection;
|
||||
[COMMANDNAME].Transaction = UserContext.Instance.SDATransaction;
|
||||
[if ([APPLYFILTERS] == "False")]
|
||||
[COMMANDNAME].CommandText = [ConvertNameToCommandTextName([COMMANDTEXTNAME])];
|
||||
[else]
|
||||
[COMMANDNAME].CommandText = [ConvertNameToCommandTextName([COMMANDTEXTNAME])];
|
||||
Kreta.Framework.FilterApplier.ApplyFilters([COMMANDNAME], "[ENTITYNAME]", "[MASTERNAME]");
|
||||
[end if]
|
||||
[else]
|
||||
[COMMANDNAME].Connection = UserContext.Instance.DBConnection;
|
||||
[if ([DBTYPE] != "ODP")]
|
||||
[COMMANDNAME].Transaction = UserContext.Instance.Transaction;
|
||||
[end if]
|
||||
[if ([APPLYFILTERS] == "False")]
|
||||
[COMMANDNAME].CommandText = [ConvertNameToCommandTextName([COMMANDTEXTNAME])];
|
||||
[else]
|
||||
[COMMANDNAME].CommandText = [ConvertNameToCommandTextName([COMMANDTEXTNAME])];
|
||||
Kreta.Framework.FilterApplier.ApplyFilters([COMMANDNAME], "[ENTITYNAME]", "[MASTERNAME]");
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
////***************************************************************************////
|
||||
////***************************************************************************////
|
||||
////***************************************************************************////
|
||||
//// ////
|
||||
//// Valószínüleg már nem használt kód ////
|
||||
//// ////
|
||||
////***************************************************************************////
|
||||
////***************************************************************************////
|
||||
////***************************************************************************////
|
||||
|
||||
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
//***************************************************************************//
|
||||
template GenerateDuoSelectWhere(MClass as CurrentClass, MAssociationEnd as StartRole, MAssociation as CurrentAssoc, MAssociationEnd as EndRole, MClass as PartnerClass, MClass as AssocClass)
|
||||
"([ConvertNameToSQLTableName([AssocClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = [ConvertNameToSQLParamName(ConvertRoleToName([StartRole]))]) " +
|
||||
[if (IsMasterEntity([PartnerClass]) == "true")]
|
||||
"and ([ConvertNameToSQLTableName([PartnerClass.name])].ID = [ConvertNameToSQLTableName([AssocClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))])"
|
||||
[else]
|
||||
"and ([ConvertNameToSQLTableName([PartnerClass.name])].ID = [ConvertNameToSQLTableName([AssocClass.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))]) " +
|
||||
"and " +
|
||||
[SDA_GetSuperClassSelectFilter([PartnerClass])]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
//***************************************************************************//
|
||||
template GenerateDuoSelectFrom(MClass as CurrentClass, MAssociationEnd as StartRole, MAssociation as CurrentAssoc, MAssociationEnd as EndRole, MClass as PartnerClass, MClass as AssociationClass)
|
||||
[/*
|
||||
"[ConvertNameToSQLTableName([AssociationClass.name])], " +
|
||||
"[ConvertNameToSQLTableName([PartnerClass.name])] " +
|
||||
*/]
|
||||
"[GenerateSuperClassTableList([AssociationClass])], " +
|
||||
"[GenerateSuperClassTableList([PartnerClass])] " +
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
//***************************************************************************//
|
||||
proc SDA_GetFieldLength(MAttribute)
|
||||
local result;
|
||||
[result] = GetAttributeLength([MAttribute]);
|
||||
if ([result] != "")
|
||||
[result] = ", " [result];
|
||||
end if
|
||||
return [result];
|
||||
end proc
|
||||
|
||||
|
||||
|
||||
|
||||
|
61
Tools/CodeGeneration/Templates/Common/DBUtil.tdl
Normal file
61
Tools/CodeGeneration/Templates/Common/DBUtil.tdl
Normal file
|
@ -0,0 +1,61 @@
|
|||
//***************************************************************************//
|
||||
// SQL table script formázott fejlézének elkészítéséhez használt függvény. //
|
||||
// a paraméterként kapott stringet kiegészíti 75 karakter hosszúra spacekkel //
|
||||
//***************************************************************************//
|
||||
proc FormatSQLHeader(str)
|
||||
return CompleteString( [str],75," ","post");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Az SQL table script oszlop kényszer értékét formázza meg //
|
||||
//***************************************************************************//
|
||||
proc FormatSQLColumnModifier(str)
|
||||
return [str];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Az SQL table script oszlop típus értékét formázza meg //
|
||||
//***************************************************************************//
|
||||
proc FormatSQLColumnType(str)
|
||||
return CompleteString( [str],32," ","post");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Az SQL table script oszlop név értékét formázza meg //
|
||||
//***************************************************************************//
|
||||
proc FormatColumnName(str)
|
||||
return CompleteString( [str],33," ","post");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Az DROP TABLE <TÁBLANÉV> utáni részt adja vissza. //
|
||||
//***************************************************************************//
|
||||
proc GetDropTableOptions()
|
||||
switch ( [SQL_DBType])
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
return "cascade constraints";
|
||||
case "MSSQL" :
|
||||
return "";
|
||||
case "DB2" :
|
||||
return "";
|
||||
end switch
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A paraméterként megadott elemhez tartozo Constraint értékét adja vissza //
|
||||
//***************************************************************************//
|
||||
proc getConstraint(MSemElement)
|
||||
loop(MSemElement->Note where [Note.type] == "UmlExtensibilityDefinition")
|
||||
loop(Note->Item where [Item.type] == "UmlConstraintItem")
|
||||
return [Item.value];
|
||||
end loop
|
||||
end loop
|
||||
return "";
|
||||
end proc
|
||||
|
73
Tools/CodeGeneration/Templates/Common/ModelDataRetreive.tdl
Normal file
73
Tools/CodeGeneration/Templates/Common/ModelDataRetreive.tdl
Normal file
|
@ -0,0 +1,73 @@
|
|||
//***************************************************************************//
|
||||
// Megmondja egy osztályról, hogy entitásból származik-e vagy sem //
|
||||
// visszatérési értékei [true | false] //
|
||||
//***************************************************************************//
|
||||
proc IsMasterEntity(MClass)
|
||||
loop (MClass -> SuperClass as super)
|
||||
if ( GetStereoType([super]) == "Entity" )
|
||||
return "false";
|
||||
else
|
||||
return "true";
|
||||
end if
|
||||
end loop
|
||||
return "true";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// visszaadja az attribútumhoz megadott taggedvalue értékét //
|
||||
//***************************************************************************//
|
||||
proc GetTaggedValueOfAttribute(MAttribute, taggedvaluename)
|
||||
local taggedvalue = "";
|
||||
loop (MAttribute -> TaggedValue Where toLower([TaggedValue.tag])==toLower([taggedvaluename]))
|
||||
[taggedvalue] = [TaggedValue.value];
|
||||
end loop
|
||||
|
||||
return [taggedvalue];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// visszaadja a megadott típusnévhez tartozó megadott taggedvalue értékért //
|
||||
//***************************************************************************//
|
||||
proc GetTaggedValueOfType(typeName,taggedvalue)
|
||||
loop (Instances -> MClass Where toLower([MClass.name]) == toLower([typeName]) )
|
||||
loop (MClass -> TaggedValue Where toLower([TaggedValue.tag]) == toLower([taggedvalue]))
|
||||
return [TaggedValue.value];
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Meghatározza, hogy a paraméterként kapott asszociációhoz tartozik-e //
|
||||
// asszociációs osztály, ha igen akkor az asszociációs osztály azonosítóját //
|
||||
// adja vissza, egyébként üres sztringet. //
|
||||
//***************************************************************************//
|
||||
proc HasAssociationClass(MAssociation as Ass)
|
||||
loop(Ass -> AssociationClass)
|
||||
return [AssociationClass.id];
|
||||
end loop
|
||||
return "";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Listában adja vissza a modelben definiált tipizált dictionary Item //
|
||||
// típusokat //
|
||||
//***************************************************************************//
|
||||
proc GetDictionaryItemTypes()
|
||||
if ([DI_CACHEINITIALIZED] == "true")
|
||||
return [DI_CACHE];
|
||||
end if
|
||||
local dictitems = "";
|
||||
loop (Instances -> MClass Where(GetStereoType([MClass]) == "Entity" ) )
|
||||
loop( MClass -> MAttribute Where ([MAttribute.type] == "DictionaryItem"))
|
||||
[dictitems] = AddDistinctValueToTokenSet([dictitems], [MAttribute.defaultValue]);
|
||||
end loop
|
||||
end loop
|
||||
[DI_CACHE] = [dictitems];
|
||||
[DI_CACHEINITIALIZED] = "true";
|
||||
return [dictitems];
|
||||
end proc
|
||||
|
99
Tools/CodeGeneration/Templates/Common/PascalUtil.tdl
Normal file
99
Tools/CodeGeneration/Templates/Common/PascalUtil.tdl
Normal file
|
@ -0,0 +1,99 @@
|
|||
//***************************************************************************//
|
||||
// Visszaadja egy művelet paraméterlistáját ay Object Pascal nyelv //
|
||||
// szintaktikájának és a saját jelölésbeli konvencióinknak megfelelően. //
|
||||
//***************************************************************************//
|
||||
proc GetPascalOperationParameters(MOperation as OPERATION)
|
||||
local ops;
|
||||
[ops] = "";
|
||||
loop (OPERATION -> OpPara as PARAMETER; setDelim(""); setDelim("; "))
|
||||
[ops] = [ops] delim() ToLower([PARAMETER.name]) ": " GetPascalType([PARAMETER.type]);
|
||||
end loop
|
||||
return [ops];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Pascal kommentet gyárt egy karakterláncból. //
|
||||
//***************************************************************************//
|
||||
template ConvertDescriptionToPascalComment(description)
|
||||
[if ([description] == "")]
|
||||
{
|
||||
nincs megjegyzés
|
||||
}
|
||||
[else]
|
||||
{
|
||||
[replace([description], "", "\n ")]
|
||||
}
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Pascal kommentet gyárt egy karakterláncból. //
|
||||
//***************************************************************************//
|
||||
template ConvertDescriptionToPascalSummary(description)
|
||||
[if ([description] == "")]
|
||||
(*
|
||||
* Nincs megjegyzés
|
||||
*)
|
||||
[else]
|
||||
(*
|
||||
* [replace([description], "", "\n * ")]
|
||||
*)
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszadja a megadott típushoz tartozó pascal tipust. //
|
||||
//***************************************************************************//
|
||||
proc GetPascalType(type)
|
||||
switch(ToLower([type]))
|
||||
case "integer": return "integer";
|
||||
case "string": return "string";
|
||||
case "boolean": return "boolean";
|
||||
case "float": return "double";
|
||||
case "char": return "char";
|
||||
case "datetime": return "TDateTime";
|
||||
case "id": return "integer";
|
||||
case "binary": return "TBase64String";
|
||||
case "dictionaryitem": return "integer";
|
||||
case "dataset": return "string";
|
||||
case "object": return "TXMLString";
|
||||
case "longstring": return "string";
|
||||
end switch
|
||||
return "TObject { ERROR Ismeretlen tipus: " [type] " }";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja a megadott típus alapértelmezett (kezdeti) értékét a pascal //
|
||||
// nyelv szintaktikájának megfelelően. //
|
||||
//***************************************************************************//
|
||||
proc GetPascalDefaultValueOfType(type)
|
||||
switch(ToLower([type]))
|
||||
case "integer": return "-1";
|
||||
case "string": return "''";
|
||||
case "boolean": return "false";
|
||||
case "float": return "0";
|
||||
case "char": return "''";
|
||||
case "datetime": return "Now";
|
||||
case "id": return "-1";
|
||||
case "binary": return "''";
|
||||
case "dictionaryitem": return "-1";
|
||||
case "dataset": return "''";
|
||||
case "object": return "''";
|
||||
case "longstring": return "''";
|
||||
end switch
|
||||
return "nil { ERROR Ismeretlen tipus: " [type] " }";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Osztály nevéből pascal unit nevet generál a konvencióinknak megfelelően. //
|
||||
//***************************************************************************//
|
||||
proc GenerateUnitName(classname)
|
||||
return "u" [classname];
|
||||
end proc
|
||||
|
||||
|
112
Tools/CodeGeneration/Templates/Common/ProviderUtil.tdl
Normal file
112
Tools/CodeGeneration/Templates/Common/ProviderUtil.tdl
Normal file
|
@ -0,0 +1,112 @@
|
|||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy kötelező-e. //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsRequired(MAttribute)
|
||||
return IsAttributeRequired([MAttribute]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy asszociációs végpontról, hogy navigálható-e. //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsNavigable(MAssociationEnd)
|
||||
if ([MAssociationEnd.isNavigable] == "TRUE")
|
||||
return "True";
|
||||
else
|
||||
return "False";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy csak alapértéket lehet neki értékül //
|
||||
// adni, vagy sem. //
|
||||
// True, ha igen; egyébként False. //
|
||||
//***************************************************************************//
|
||||
proc IsDefaultOnly(MAttribute)
|
||||
return IsDefaultonlyAttribute([MAttribute]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútumról, hogy csak olvasható-e vagy sem. //
|
||||
//***************************************************************************//
|
||||
proc IsReadOnly(MAttribute)
|
||||
return IsReadonlyAttribute([MAttribute]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// UML típust konvertál a Delphi-s TClientDataset XML formátumában megadandó //
|
||||
// típusra. //
|
||||
//***************************************************************************//
|
||||
proc GetMidasType(type)
|
||||
switch(ToLower([type]))
|
||||
case "integer": return "i4";
|
||||
case "string": return "string.uni";
|
||||
case "boolean": return "boolean";
|
||||
case "float": return "r8"; // XXX
|
||||
case "char": return "string.uni"; // XXX
|
||||
case "datetime": return "dateTime";
|
||||
case "id": return "i4";
|
||||
case "binary": return "bin.hex\" SUBTYPE=\"Binary";
|
||||
case "dictionaryitem": return "i4";
|
||||
case "longstring": return "bin.hex\" SUBTYPE=\"Binary"; // XXX
|
||||
end switch
|
||||
return "object /* ERROR Ismeretlen tipus: " [type] " */";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megdupláz egy számot. //
|
||||
//***************************************************************************//
|
||||
proc GetDoubleValue(value)
|
||||
return add([value], [value]);
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Visszaadja egy attribútum hosszát a Delphi-s TClientDataSet-nek //
|
||||
// megfelelően. //
|
||||
//***************************************************************************//
|
||||
proc GetMidasAttributeLength(MAttribute)
|
||||
if (([MAttribute.type] == "String") or ([MAttribute.type] == "Char"))
|
||||
return add(GetAttributeLength([MAttribute]), GetAttributeLength([MAttribute]));
|
||||
else
|
||||
return GetAttributeLength([MAttribute]);
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Generál egy Delphi-s karakterláncot, ami felsorolja egy adott entitás //
|
||||
// összes ősosztályát, $ -ral elválasztva. (homlokzat) //
|
||||
//***************************************************************************//
|
||||
template GenerateSuperProviderString(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateSuperProviderStringCore([ENTITY])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
''
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Generál egy Delphi-s karakterláncot, ami felsorolja egy adott entitás //
|
||||
// összes ősosztályát, $ -ral elválasztva. (mag) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateSuperProviderStringCore(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
'$[BASECLASS.name]' +
|
||||
[GenerateSuperProviderStringCore([BASECLASS])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
85
Tools/CodeGeneration/Templates/Common/StringUtil.tdl
Normal file
85
Tools/CodeGeneration/Templates/Common/StringUtil.tdl
Normal file
|
@ -0,0 +1,85 @@
|
|||
//***************************************************************************//
|
||||
//A kapott sztring első betűjét nagybetűvé alakítja. //
|
||||
//***************************************************************************//
|
||||
tcl_proc ToUpperFirst(str)
|
||||
return [string toupper [string index $str 0]][string range $str 1 end];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
//A kapott sztring első betűjét kisbetűvé alakítja. //
|
||||
//***************************************************************************//
|
||||
tcl_proc ToLowerFirst(str)
|
||||
return [string tolower [string index $str 0]][string range $str 1 end];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A kapott sztringet nagybetűssé alakítja. //
|
||||
//***************************************************************************//
|
||||
tcl_proc ToUpper(str)
|
||||
return [string toupper [string range $str 0 end]];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// A kapott sztringet kisbetűssé alakítja. //
|
||||
//***************************************************************************//
|
||||
tcl_proc ToLower(str)
|
||||
return [string tolower [string range $str 0 end]];
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Levágja a paraméterként kapott string jobb oldalát, úgy hogy a string //
|
||||
// a paraméterben kapott hosszúságú legyen. Ha a string röveidebb volt, mint //
|
||||
// a paraméterként megadott érték, akkor változatlan marad a string. //
|
||||
//***************************************************************************//
|
||||
tcl_proc TruncateString(str, length)
|
||||
return [string range $str 0 $length]
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// kiegészít egy sztringet töltelék karakterrel, hogy a string megadott //
|
||||
// hosszúságú legyen. //
|
||||
// str: a bejövő string //
|
||||
// length: a kivánt hossz //
|
||||
// delimitter: a töltelék karakter //
|
||||
// pos: string elé vagy mögé rakja a töltelék karaktereket //
|
||||
// értékei: [pre|post] //
|
||||
//***************************************************************************//
|
||||
tcl_proc CompleteString(str,length, delimitter, pos)
|
||||
set strLength [string length $str];
|
||||
|
||||
set res ""
|
||||
set dl $delimitter
|
||||
|
||||
if {$strLength >= $length } {
|
||||
return $str
|
||||
} else {
|
||||
while {$strLength < $length} {
|
||||
set res $res$dl
|
||||
incr strLength
|
||||
}
|
||||
}
|
||||
|
||||
if {$pos == "pre"} {
|
||||
return $res$str
|
||||
} else {
|
||||
if {$pos == "post"} {
|
||||
return $str$res
|
||||
}
|
||||
}
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// UID_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx formátumú GUID-ból //
|
||||
// xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx formátumú GUID-ot csinál. //
|
||||
// gyk: levágja az elejét //
|
||||
//***************************************************************************//
|
||||
tcl_proc TrimGUID(str)
|
||||
return [string range $str 4 end];
|
||||
end proc
|
||||
|
334
Tools/CodeGeneration/Templates/Common/std.tdl
Normal file
334
Tools/CodeGeneration/Templates/Common/std.tdl
Normal file
|
@ -0,0 +1,334 @@
|
|||
//*****************************************************************************
|
||||
// $RCSfile: std.tdl,v $
|
||||
// $Revision: 1.2 $
|
||||
// $Date: 2002/03/08 15:54:33 $
|
||||
// Author: Markus Kern
|
||||
//*****************************************************************************
|
||||
/*
|
||||
Contains language independent procedures and templates. These are used by the
|
||||
language dependent code generators.
|
||||
See the documentation for a description of these procedures and templates
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc setCount(count)
|
||||
[__COUNT__] = [count];
|
||||
end proc
|
||||
|
||||
proc addCount(number)
|
||||
[__COUNT__] = add([__COUNT__],[number]);
|
||||
end proc
|
||||
|
||||
proc getCount()
|
||||
return [__COUNT__];
|
||||
end proc
|
||||
|
||||
proc setDelim(delim)
|
||||
[__DELIM__] = [delim];
|
||||
end proc
|
||||
|
||||
proc delim()
|
||||
return [__DELIM__];
|
||||
end proc
|
||||
|
||||
proc setVar(varName, varValue)
|
||||
[[varName]] = [varValue];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc setString(init)
|
||||
[__INIT__] = [init];
|
||||
return [init];
|
||||
end proc
|
||||
|
||||
proc getString()
|
||||
local txt = [__INIT__];
|
||||
[__INIT__] = "";
|
||||
return [txt];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc add(num1, num2)
|
||||
return [expr $num1 + $num2]
|
||||
end proc
|
||||
|
||||
tcl_proc sub(num1, num2)
|
||||
return [expr $num1 - $num2]
|
||||
end proc
|
||||
|
||||
tcl_proc mul(num1, num2)
|
||||
return [expr $num1 * $num2]
|
||||
end proc
|
||||
|
||||
tcl_proc div(num1, num2)
|
||||
return [expr $num1 / $num2]
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc time()
|
||||
return [clock format [clock seconds] -format "%X"]
|
||||
end proc
|
||||
|
||||
tcl_proc date()
|
||||
return [clock format [clock seconds] -format "%x"]
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc hostname()
|
||||
return [info hostname]
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc replace(str, expr, subSpec)
|
||||
set ret "";
|
||||
regsub -all $expr $str $subSpec ret;
|
||||
return $ret;
|
||||
end proc
|
||||
|
||||
tcl_proc toUpper(str)
|
||||
return [string toupper $str];
|
||||
end proc
|
||||
|
||||
tcl_proc toLower(str)
|
||||
return [string tolower $str];
|
||||
end proc
|
||||
|
||||
tcl_proc getLength(str)
|
||||
return [string length $str];
|
||||
end proc
|
||||
|
||||
tcl_proc lsdir(dir)
|
||||
return [file dirname $dir];
|
||||
end proc
|
||||
|
||||
tcl_proc mkdir(dir)
|
||||
file mkdir $dir;
|
||||
end proc
|
||||
|
||||
tcl_proc dirName(file)
|
||||
set dirName [file dirname $file];
|
||||
if { $dirName == "" } { return "";}
|
||||
set delim "/"
|
||||
return $dirName$delim;
|
||||
end proc
|
||||
|
||||
tcl_proc fileName(file)
|
||||
set fileList [file split $file]
|
||||
return [lindex $fileList [ expr [llength $fileList] - 1]]
|
||||
end proc
|
||||
|
||||
tcl_proc regexp(str,reg)
|
||||
set ret ""
|
||||
regexp $reg $str ret;
|
||||
return $ret;
|
||||
end proc
|
||||
|
||||
tcl_proc createString(str,count)
|
||||
set x 0
|
||||
set ret ""
|
||||
while {$x < $count} {
|
||||
set ret $ret$str
|
||||
incr x
|
||||
}
|
||||
return $ret
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc invIdOrder(list)
|
||||
set invList "";
|
||||
set li [split $list " "];
|
||||
foreach {elem} $li {
|
||||
set invList [concat $elem $invList]
|
||||
}
|
||||
return $invList
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc isExternal(MClass)
|
||||
loop(MClass->Note->Item
|
||||
Where [Item.value] == "True" AND [Item.type] == "UmlClassIsImported")
|
||||
return TRUE;
|
||||
end loop
|
||||
return FALSE;
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc getStereotype(MSemElement)
|
||||
loop(MSemElement->Stereotype)
|
||||
return [Stereotype.name];
|
||||
end loop
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc getMultiplicity(multiplicity)
|
||||
|
||||
switch([multiplicity])
|
||||
case "":
|
||||
case "1":
|
||||
case "0..1":
|
||||
case "1..0":
|
||||
case "0..0":
|
||||
return "One";
|
||||
|
||||
case "*":
|
||||
case "1..*":
|
||||
case "n":
|
||||
case "N":
|
||||
return "Many";
|
||||
|
||||
case regexp([multiplicity],"[0-9]+"):
|
||||
return [multiplicity];
|
||||
|
||||
case regexp([multiplicity],"[0-9]+\.\.[0-9]+"):
|
||||
return split([multiplicity],".","T");
|
||||
|
||||
default:
|
||||
return "Many";
|
||||
|
||||
end switch
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc split(str,delim,pos)
|
||||
|
||||
set li [split $str $delim];
|
||||
switch $pos {
|
||||
"L" {
|
||||
return [lindex $li 0]
|
||||
}
|
||||
|
||||
"T" {
|
||||
return [lindex $li [ expr [llength $li] - 1]]
|
||||
}
|
||||
|
||||
default {
|
||||
return [lindex $li $pos]
|
||||
}
|
||||
}
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc setText(init)
|
||||
[__INIT__] = [init];
|
||||
return [init];
|
||||
end proc
|
||||
|
||||
proc getText()
|
||||
local txt = [__INIT__];
|
||||
[__INIT__] = "";
|
||||
return [txt];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc outText(text,delim1,delim2)
|
||||
local ret;
|
||||
loop(Instances->TokenSet([text]);setString([delim1]);setString("\n" [delim2]))
|
||||
[ret] = [ret] getString()[TokenSet.line];
|
||||
end loop
|
||||
return [ret];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc safeOutput(fileName)
|
||||
mkdir(lsdir([fileName]));
|
||||
setOutput([fileName]);
|
||||
|
||||
// This comes last, so that it holds the correct value during the insert/mark fixup process
|
||||
[ACT_OUTPUT_FILE] = [fileName];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc output(fileName)
|
||||
mkdir(lsdir([fileName]));
|
||||
setOutput(dirName([fileName])"_"fileName([fileName]));
|
||||
appendMergeFile([fileName]);
|
||||
|
||||
// This comes last, so that it holds the correct value during the insert/mark fixup process
|
||||
[ACT_OUTPUT_FILE] = [fileName];
|
||||
end proc
|
||||
|
||||
|
||||
proc getOutput()
|
||||
return [ACT_OUTPUT_FILE];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc setLanguage(language)
|
||||
[ACT_LANGUAGE] = [language];
|
||||
end proc
|
||||
|
||||
// Generate the id list for the class(es) with specified name.
|
||||
// Note that we normally expect a single MClass in the list.
|
||||
// This was introduced to improve the code generator performance.
|
||||
proc MClass_ids_by_name (name)
|
||||
|
||||
local x = "MClass_by_name_Cache_For_" [name];
|
||||
|
||||
if ([[x]] == "")
|
||||
loop(Instances -> MClass where [MClass.name] == [name])
|
||||
[[x]] = [[x]] " " [MClass.id];
|
||||
//T info = "MClass_ids_by_name #" [x]" -> "[[x]]"\n";
|
||||
end loop
|
||||
end if
|
||||
|
||||
//T info = "MClass_ids_by_name :" [x]" -> "[[x]]"\n";
|
||||
return [[x]];
|
||||
end proc
|
||||
|
||||
proc getDataType(type)
|
||||
loop(Instances->MClass(MClass_ids_by_name ([type]))->MDataType->TaggedValue
|
||||
Where [TaggedValue.tag] == [ACT_LANGUAGE])
|
||||
return [TaggedValue.value];
|
||||
end loop
|
||||
//info = "MClass_ids_by_name #" [ACT_LANGUAGE] "\n";
|
||||
return [type];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
template genLines(Lines)
|
||||
[loop(Instances->TokenSet([Lines]))]
|
||||
[TokenSet.line]
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
proc getUniqueId(MElement)
|
||||
loop (MElement->MSemElement where [MSemElement.guid] != "")
|
||||
return [MSemElement.guid];
|
||||
end loop
|
||||
return [MElement.id];
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc appendMergeFile(fileName)
|
||||
catch {
|
||||
set file [open "_acdGeneratedFiles.mrg" "a"];
|
||||
puts $file $fileName;
|
||||
close $file
|
||||
}
|
||||
end proc
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
tcl_proc delMergeFile()
|
||||
catch {
|
||||
file delete "_acdGeneratedFiles.mrg"
|
||||
}
|
||||
end proc
|
||||
|
||||
// ECR 5664 begin
|
||||
|
||||
tcl_proc substring(text, first, last)
|
||||
return [string range $text $first $last];
|
||||
end proc
|
||||
|
||||
tcl_proc searchstr(text, str, start)
|
||||
variable res
|
||||
set res [string first $str [string range $text $start end]]
|
||||
if {$res == -1} {
|
||||
return -1
|
||||
} else {
|
||||
return [expr $start + $res]
|
||||
}
|
||||
end proc
|
||||
|
||||
// ECR 5664 end
|
2056
Tools/CodeGeneration/Templates/Database/SQLGenerator.tdl
Normal file
2056
Tools/CodeGeneration/Templates/Database/SQLGenerator.tdl
Normal file
File diff suppressed because it is too large
Load diff
190
Tools/CodeGeneration/Templates/Database/SQL_AlterTableScript.tdl
Normal file
190
Tools/CodeGeneration/Templates/Database/SQL_AlterTableScript.tdl
Normal file
|
@ -0,0 +1,190 @@
|
|||
//***************************************************************************//
|
||||
// A használt fájlok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
info = "Skeleton DB Alter Table script generator STARTED at \t"time()"\n";
|
||||
GenerateAlterTableScript();
|
||||
info = "Skeleton DB Alter Table script generator STOPPED at \t"time()"\n";
|
||||
|
||||
info = "Skeleton DB Alter Table Check Constraint script generator STARTED at \t"time()"\n";
|
||||
GenerateAlterTableCheckScript();
|
||||
info = "Skeleton DB Alter Table Check Constraint script generator STOPPED at \t"time()"\n";
|
||||
|
||||
info = "Skeleton DB Alter Table Unique Constraint script generator STARTED at \t"time()"\n";
|
||||
GenerateAlterTableUniqueScript();
|
||||
info = "Skeleton DB Alter Table Unique Constraint script generator STOPPED at \t"time()"\n";
|
||||
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
local dbtag = "";
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
//mkdir([OutputDir]);
|
||||
|
||||
switch( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[dbtag] = ".ora";
|
||||
break;
|
||||
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[dbtag] = "";
|
||||
break;
|
||||
|
||||
//DB2 Type
|
||||
case "DB2" :
|
||||
[dbtag] = ".db2";
|
||||
break;
|
||||
end switch
|
||||
|
||||
setOutput( [OutputDir] "/" "alter.tables"[dbtag]".sql" );
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a kényszereket létrehozó SQL szkriptet: foreign key, unique //
|
||||
// key, check constraint //
|
||||
//***************************************************************************//
|
||||
proc GenerateAlterTableScript()
|
||||
local tablename = "";
|
||||
local localkey = "";
|
||||
local foreigntablename = "";
|
||||
local pkcname = "";
|
||||
local package = "";
|
||||
local fkname = "";
|
||||
local fknamepartial = "";
|
||||
local foreignschema = "dbo";
|
||||
local tpc = "false";
|
||||
|
||||
out = [BOM];
|
||||
out = "--/* Modell verzio: " GetModelVersion() " */\n\n\n";
|
||||
|
||||
out = "--/*DictionaryItemType és Entitás attributuma közötti FK*/\n";
|
||||
// A DictItemType és entitás táblák közötti
|
||||
// foreign key constraintek
|
||||
loop (Instances -> MClass Where(GetStereoType([MClass]) == "Entity" ) )
|
||||
loop( MClass -> MAttribute Where ([MAttribute.type] == "DictionaryItem"))
|
||||
// info = "Entity alter table script for DictItemTypeTranslatoin : "[MClass.name]" at \t"time()"\n";
|
||||
|
||||
[tablename] = ConvertNameToSQLTableScript([MClass.name]);
|
||||
if(IsMasterEntity([MClass]) == "true")
|
||||
[localkey] = ConvertNameToSQLColumnName([MAttribute.name]) ", C_INTEZMENYID, C_TANEVID";
|
||||
[fknamepartial] = [MAttribute.name] "_IntezmenyId_TanevId";
|
||||
else
|
||||
[localkey] = ConvertNameToSQLColumnName([MAttribute.name]) ", C_ALINTEZMENYID, C_ALTANEVID";
|
||||
[fknamepartial] = [MAttribute.name] "_AlintezmenyId_AltanevId";
|
||||
end if
|
||||
[pkcname] = ConvertNameToForeignKeyConstraint([MClass.name], "");
|
||||
[foreigntablename] = ConvertDictItemTypeToItemTableName([MAttribute.defaultValue]);
|
||||
if (TruncateString([foreigntablename], 4) == "T_DKT")
|
||||
[tpc] = "true";
|
||||
end if
|
||||
[package] = GetSchemaName([MClass]);
|
||||
[fkname] = ConvertNameToForeignKeyName([MClass.name], [fknamepartial], [MAttribute.defaultValue]);
|
||||
out = AddForeignKeyConstraint([package], [foreignschema], [tablename],[pkcname],[localkey], [foreigntablename], [fkname], "true", [tpc]);
|
||||
[tpc] = "false";
|
||||
end loop
|
||||
end loop
|
||||
|
||||
|
||||
out = "--/*Entitások egyébb FK*/\n";
|
||||
// Entitások foreign key konstraintjei.
|
||||
// öröklődés
|
||||
// asszociácios osztály nélküli asszociációk
|
||||
// ha ez az osztály maga asszociációs osztály
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
// info = "Entity alter table script: "[MClass.name]" at \t"time()"\n";
|
||||
GenerateAlterDefinitionsForClass( [MClass] );
|
||||
end loop
|
||||
|
||||
out = "--/*kapcsoló tábla FK*/\n";
|
||||
// az asszociacios osztalyokon kivuli, csak kapcsolotablaval reprezentalhato
|
||||
// relaciok eredmenyezte constraintek
|
||||
local AssocClassCount = "";
|
||||
loop (Instances -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity" ))
|
||||
loop ( CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where (GetStereoType([EndClass])=="Entity" and [StartRole.id]<[EndRole.id]) )
|
||||
[AssocClassCount] = HasAssociationClass([CurrentAssoc]);
|
||||
if ( [AssocClassCount] == "" )
|
||||
if (
|
||||
//0..1-0..1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="0..1") or
|
||||
//1..*-1..*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//1..*-*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//*-*
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..*")
|
||||
)
|
||||
// info = "Switch table alter table script for: ["[StartClass.name] "][" [EndClass.name]"] at \t"time()"\n";
|
||||
out = GenerateAlterDefinitonsForSwitchTable([StartClass],[StartRole],[EndClass],[EndRole], [CurrentAssoc]);
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a check constraint-eket létrehozó SQL szkriptet. //
|
||||
//***************************************************************************//
|
||||
proc GenerateAlterTableCheckScript()
|
||||
out = "\n--/*Entitások check constraintjei CK*/\n";
|
||||
// Entitások check konstraintjei.
|
||||
// öröklődés
|
||||
// asszociácios osztály nélküli asszociációk
|
||||
// ha ez az osztály maga asszociációs osztály
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
// info = "Entity alter table check constraint script: "[MClass.name]" at \t"time()"\n";
|
||||
GenerateAlterCheckDefinitionsForClass( [MClass] );
|
||||
end loop
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a unique key constraint-eket létrehozó SQL szkriptet. //
|
||||
//***************************************************************************//
|
||||
proc GenerateAlterTableUniqueScript()
|
||||
out = "\n--/*Entitások unique constraintjei UK*/\n";
|
||||
// Entitások unique konstraintjei.
|
||||
// öröklődés
|
||||
// asszociácios osztály nélküli asszociációk
|
||||
// ha ez az osztály maga asszociációs osztály
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
// info = "Entity alter table unique constraint script: "[MClass.name]" at \t"time()"\n";
|
||||
GenerateAlterUniqueDefinitionsForClass( [MClass] );
|
||||
end loop
|
||||
|
||||
if ( [SQL_DBType] == "ORACLE")
|
||||
out = "quit\n/";
|
||||
end if
|
||||
end proc
|
|
@ -0,0 +1,288 @@
|
|||
//***************************************************************************//
|
||||
// A használt fájlok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
info = "Skeleton DB Create Table Indexes script generator STARTED at \t"time()"\n";
|
||||
GenerateRenameIndexesScript();
|
||||
info = "Skeleton DB Create Table Indexes script generator STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
local dbtag = "";
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
//mkdir([OutputDir]);
|
||||
|
||||
switch( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[dbtag] = "ora";
|
||||
break;
|
||||
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[dbtag] = "mssql";
|
||||
break;
|
||||
|
||||
//DB2 Type
|
||||
case "DB2" :
|
||||
[dbtag] = "db2";
|
||||
break;
|
||||
end switch
|
||||
|
||||
setOutput( [OutputDir] "/" "create.rename.indexes."[dbtag]".sql" );
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az indexeket létrehozó SQL szkriptet //
|
||||
//***************************************************************************//
|
||||
proc GenerateRenameIndexesScript()
|
||||
local tablename = "";
|
||||
local localkey = "";
|
||||
local indexname = "";
|
||||
local package = "";
|
||||
local indexnameold = "";
|
||||
|
||||
out = [BOM];
|
||||
out = "--/* Modell verzio: " GetModelVersion() " */\n\n\n";
|
||||
|
||||
out = "--/*DictionaryItemType és Entitás attributuma közötti FK*/\n";
|
||||
// A DictItemType és entitás táblákhoz FK indexek
|
||||
loop (Instances -> MClass Where(GetStereoType([MClass]) == "Entity" ) )
|
||||
loop( MClass -> MAttribute Where ([MAttribute.type] == "DictionaryItem"))
|
||||
[package] = GetPackage([MClass]);
|
||||
|
||||
[tablename] = ConvertNameToSQLTableScript([MClass.name]);
|
||||
if(IsMasterEntity([MClass]) == "true")
|
||||
[localkey] = "C_INTEZMENYID, C_TANEVID, " ConvertNameToSQLColumnName([MAttribute.name]) ;
|
||||
[indexname] = ConvertNameToIndexName([MClass.name], "") "IntezmenyId_TanevId_" [MAttribute.name];
|
||||
else
|
||||
[localkey] = "C_ALINTEZMENYID, C_ALTANEVID, " ConvertNameToSQLColumnName([MAttribute.name]);
|
||||
[indexname] = ConvertNameToIndexName([MClass.name], "") "AlintezmenyId_AltanevId_" [MAttribute.name];
|
||||
end if
|
||||
[indexnameold] = ConvertNameToIndexNameOld([MClass.id]"_"[MAttribute.id]);
|
||||
|
||||
out = CreateIndexRename([tablename],[indexname],[indexnameold]);
|
||||
end loop
|
||||
end loop
|
||||
|
||||
out = "--/*Entitások egyébb FK*/\n";
|
||||
// Entitások foreign key indexei.
|
||||
// öröklődés
|
||||
// asszociácios osztály nélküli asszociációk
|
||||
// ha ez az osztály maga asszociációs osztály
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
GenerateTableRenameIndexesForClass( [MClass] );
|
||||
end loop
|
||||
|
||||
out = "--/*kapcsoló tábla FK*/\n";
|
||||
// az asszociacios osztalyokon kivuli, csak kapcsolotablaval reprezentalhato
|
||||
// relaciok eredmenyezte indexek
|
||||
local AssocClassCount = "";
|
||||
loop (Instances -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity" ))
|
||||
loop ( CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where (GetStereoType([EndClass])=="Entity" and [StartRole.id]<[EndRole.id]) )
|
||||
[AssocClassCount] = HasAssociationClass([CurrentAssoc]);
|
||||
if ( [AssocClassCount] == "" )
|
||||
if (
|
||||
//0..1-0..1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="0..1") or
|
||||
//1..*-1..*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//1..*-*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//*-*
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..*")
|
||||
)
|
||||
|
||||
[indexname] = ConvertNameToIndexName(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]), ConvertRoleToName([StartRole]));
|
||||
[indexnameold] = ConvertNameToIndexNameOld([StartRole.id]"_"[StartClass.id]);
|
||||
[tablename] = ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]));
|
||||
out = CreateIndexRename([tablename],[indexname],[indexnameold]);
|
||||
|
||||
[indexname] = ConvertNameToIndexName(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]), ConvertRoleToName([EndRole]));
|
||||
[indexnameold] = ConvertNameToIndexNameOld([EndRole.id]"_"[EndClass.id]);
|
||||
[tablename] = ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]));
|
||||
out = CreateIndexRename([tablename],[indexname],[indexnameold]);
|
||||
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
|
||||
// loop (Instances -> MClass as CLASS WHERE GetStereoType([CLASS]) == "Entity")
|
||||
// if (IsMasterEntity([CLASS]) == "true" )
|
||||
// out = CreateIndex(ConvertNameToSQLTableScript([CLASS.name]), ConvertNameToIndexName([CLASS.id]"_LSTCHNGD"), "LASTCHANGED");
|
||||
// end if
|
||||
// end loop
|
||||
|
||||
if ( [SQL_DBType] == "ORACLE")
|
||||
out = "quit\n/";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
proc GenerateTableRenameIndexesForClass(MClass)
|
||||
local res = "";
|
||||
local ident = " ";
|
||||
local HasAC = "";
|
||||
|
||||
local fieldName = "";
|
||||
local functionName = "";
|
||||
local complexIndex = "";
|
||||
local attributeNames = "";
|
||||
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE], "index")) == "1")
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE.name]) ")";
|
||||
end if
|
||||
out = CreateIndexRename(ConvertNameToSQLTableScript([MClass.name]),ConvertNameToIndexName([MClass.name], [ATTRIBUTE.name]),ConvertNameToIndexNameOld([ATTRIBUTE.id]));
|
||||
// out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([ATTRIBUTE.id]), [fieldName] );
|
||||
// out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([MClass.name], [ATTRIBUTE.name]), [fieldName] );
|
||||
end loop
|
||||
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE], "index1")) == "1" )
|
||||
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE.name]) ")";
|
||||
end if
|
||||
|
||||
[complexIndex] = [fieldName];
|
||||
[attributeNames] = [ATTRIBUTE.name];
|
||||
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE2 Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE2], "index1")) == "2" )
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE2], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE2.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE2.name]) ")";
|
||||
end if
|
||||
|
||||
[complexIndex] = [complexIndex] "," [fieldName];
|
||||
[attributeNames] = [attributeNames] "_"[ATTRIBUTE2.name];
|
||||
|
||||
end loop
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE2 Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE2], "index1")) == "3" )
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE2], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE2.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE2.name]) ")";
|
||||
end if
|
||||
|
||||
[complexIndex] = [complexIndex] "," [fieldName];
|
||||
[attributeNames] = [attributeNames] "_"[ATTRIBUTE2.name];
|
||||
end loop
|
||||
out = CreateIndexRename(ConvertNameToSQLTableScript([MClass.name]),ConvertNameToIndexName([MClass.name], ""),ConvertNameToIndexNameOld([MClass.id] "_1"));
|
||||
//out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([MClass.name], "") toUpper([attributeNames]), [complexIndex] );
|
||||
end loop
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE], "index2")) == "1" )
|
||||
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE.name]) ")";
|
||||
end if
|
||||
|
||||
[complexIndex] = [fieldName];
|
||||
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE2 Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE2], "index2")) == "2" )
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE2], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE2.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE2.name]) ")";
|
||||
end if
|
||||
|
||||
[complexIndex] = [complexIndex] "," [fieldName];
|
||||
end loop
|
||||
loop ( MClass -> MAttribute as ATTRIBUTE2 Where toLower(GetTaggedValueOfAttribute([ATTRIBUTE2], "index2")) == "3" )
|
||||
[functionName] = GetTaggedValueOfAttribute([ATTRIBUTE2], "index_function");
|
||||
if ([functionName] == "")
|
||||
[fieldName] = ConvertNameToSQLColumnName([ATTRIBUTE2.name]);
|
||||
else
|
||||
[fieldName] = [functionName] "(" ConvertNameToSQLColumnName([ATTRIBUTE2.name]) ")";
|
||||
end if
|
||||
|
||||
[complexIndex] = [complexIndex] "," [fieldName];
|
||||
end loop
|
||||
out = CreateIndexRename(ConvertNameToSQLTableScript([MClass.name]),ConvertNameToIndexName([MClass.name], [MClass.id] "_2"),ConvertNameToIndexNameOld([MClass.id] "_2"));
|
||||
// out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([MClass.name], [MClass.id] "_2"), [complexIndex] );
|
||||
end loop
|
||||
|
||||
loop (MClass->Role as StartRole ->MAssociation as CurentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (([StartRole.id]!=[EndRole.id]) and GetStereoType([PartnerClass]) == "Entity"))
|
||||
[HasAC] = HasAssociationClass([CurentAssoc]);
|
||||
// csak ha nincs a relaciohoz asszociacios osztaly rendelve
|
||||
// akkor kell ennel az osztalynal felvenni az oszlopokat.
|
||||
if ([HasAC] == "")
|
||||
|
||||
if (
|
||||
//0..1-1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="1") or
|
||||
//1..*-1
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1") or
|
||||
//*-1
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1") or
|
||||
//1..*-0..1
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..1") or
|
||||
//*-0..1
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..1") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..1")
|
||||
)
|
||||
//tablename,indexname,localkey
|
||||
out = CreateIndexRename(ConvertNameToSQLTableScript([MClass.name]),ConvertNameToIndexName([MClass.name], ConvertRoleToName([EndRole])),ConvertNameToIndexNameOld([EndRole.id]"_"[CurentAssoc.id]));
|
||||
// out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([MClass.name], ConvertRoleToName([EndRole])), ConvertNameToSQLColumnName(ConvertRoleToName([EndRole])));
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
//Asszociacios osztaly relaciok
|
||||
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" ))
|
||||
// foreign kulcsokra index
|
||||
out = CreateIndexRename(ConvertNameToSQLTableScript([MClass.name]),ConvertNameToIndexName([MClass.name], ConvertRoleToName([StartRole])),ConvertNameToIndexNameOld([StartRole.id]"_"[CurrentAssoc.id]));
|
||||
//out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([MClass.name], ConvertRoleToName([StartRole])), ConvertNameToSQLColumnName(ConvertRoleToName([StartRole])) );
|
||||
|
||||
out = CreateIndexRename(ConvertNameToSQLTableScript([MClass.name]),ConvertNameToIndexName([MClass.name], ConvertRoleToName([EndRole])),ConvertNameToIndexNameOld([EndRole.id]"_"[CurrentAssoc.id]));
|
||||
//out = CreateIndex(GetPackage([MClass]), ConvertNameToSQLTableScript([MClass.name]), ConvertNameToIndexName([MClass.name], ConvertRoleToName([EndRole])), ConvertNameToSQLColumnName(ConvertRoleToName([EndRole])) );
|
||||
end loop
|
||||
end loop
|
||||
|
||||
return [res];
|
||||
end proc
|
||||
|
|
@ -0,0 +1,141 @@
|
|||
//***************************************************************************//
|
||||
// A használt fájlok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
info = "Skeleton DB Create Table Indexes script generator STARTED at \t"time()"\n";
|
||||
GenerateCreateTableIndexesScript();
|
||||
info = "Skeleton DB Create Table Indexes script generator STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
local dbtag = "";
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
//mkdir([OutputDir]);
|
||||
|
||||
switch( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[dbtag] = ".ora";
|
||||
break;
|
||||
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[dbtag] = "";
|
||||
break;
|
||||
|
||||
//DB2 Type
|
||||
case "DB2" :
|
||||
[dbtag] = ".db2";
|
||||
break;
|
||||
end switch
|
||||
|
||||
setOutput( [OutputDir] "/" "create.indexes"[dbtag]".sql" );
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az indexeket létrehozó SQL szkriptet //
|
||||
//***************************************************************************//
|
||||
proc GenerateCreateTableIndexesScript()
|
||||
local tablename = "";
|
||||
local localkey = "";
|
||||
local indexname = "";
|
||||
local package = "";
|
||||
|
||||
out = [BOM];
|
||||
out = "--/* Modell verzio: " GetModelVersion() " */\n\n\n";
|
||||
|
||||
out = "--/*DictionaryItemType és Entitás attributuma közötti FK*/\n";
|
||||
// A DictItemType és entitás táblákhoz FK indexek
|
||||
loop (Instances -> MClass Where(GetStereoType([MClass]) == "Entity" ) )
|
||||
loop( MClass -> MAttribute Where ([MAttribute.type] == "DictionaryItem"))
|
||||
[package] = GetPackage([MClass]);
|
||||
|
||||
[tablename] = ConvertNameToSQLTableScript([MClass.name]);
|
||||
if(IsMasterEntity([MClass]) == "true")
|
||||
[localkey] = "C_INTEZMENYID, C_TANEVID, " ConvertNameToSQLColumnName([MAttribute.name]) ;
|
||||
[indexname] = ConvertNameToIndexName([MClass.name], "") "IntezmenyId_TanevId_" [MAttribute.name];
|
||||
else
|
||||
[localkey] = "C_ALINTEZMENYID, C_ALTANEVID, " ConvertNameToSQLColumnName([MAttribute.name]);
|
||||
[indexname] = ConvertNameToIndexName([MClass.name], "") "AlintezmenyId_AltanevId_" [MAttribute.name];
|
||||
end if
|
||||
|
||||
out = CreateIndex([package], [tablename],[indexname],[localkey]);
|
||||
end loop
|
||||
end loop
|
||||
|
||||
out = "--/*Entitások egyébb FK*/\n";
|
||||
// Entitások foreign key indexei.
|
||||
// öröklődés
|
||||
// asszociácios osztály nélküli asszociációk
|
||||
// ha ez az osztály maga asszociációs osztály
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
GenerateTableIndexesForClass( [MClass] );
|
||||
end loop
|
||||
|
||||
out = "--/*kapcsoló tábla FK*/\n";
|
||||
// az asszociacios osztalyokon kivuli, csak kapcsolotablaval reprezentalhato
|
||||
// relaciok eredmenyezte indexek
|
||||
local AssocClassCount = "";
|
||||
loop (Instances -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity" ))
|
||||
loop ( CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where (GetStereoType([EndClass])=="Entity" and [StartRole.id]<[EndRole.id]) )
|
||||
[AssocClassCount] = HasAssociationClass([CurrentAssoc]);
|
||||
if ( [AssocClassCount] == "" )
|
||||
if (
|
||||
//0..1-0..1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="0..1") or
|
||||
//1..*-1..*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//1..*-*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//*-*
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..*")
|
||||
)
|
||||
|
||||
[package] = GetPackage([StartClass]);
|
||||
out = CreateIndex([package],ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole])), ConvertNameToIndexName(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]), ConvertRoleToName([StartRole])), ConvertNameToSQLColumnName(ConvertRoleToName([StartRole])));
|
||||
out = CreateIndex([package],ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole])), ConvertNameToIndexName(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]), ConvertRoleToName([EndRole])), ConvertNameToSQLColumnName(ConvertRoleToName([EndRole])));
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
|
||||
// loop (Instances -> MClass as CLASS WHERE GetStereoType([CLASS]) == "Entity")
|
||||
// if (IsMasterEntity([CLASS]) == "true" )
|
||||
// out = CreateIndex(ConvertNameToSQLTableScript([CLASS.name]), ConvertNameToIndexName([CLASS.id]"_LSTCHNGD"), "LASTCHANGED");
|
||||
// end if
|
||||
// end loop
|
||||
|
||||
if ( [SQL_DBType] == "ORACLE")
|
||||
out = "quit\n/";
|
||||
end if
|
||||
end proc
|
|
@ -0,0 +1,114 @@
|
|||
//***************************************************************************//
|
||||
// A használt fájlok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
info = "Skeleton DB Create Table script generator STARTED at \t"time()"\n";
|
||||
GenerateCreateTableScript();
|
||||
info = "Skeleton DB Create Table script generator STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
local dbtag = "";
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
//mkdir([OutputDir]);
|
||||
|
||||
switch( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[dbtag] = ".ora";
|
||||
break;
|
||||
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[dbtag] = "";
|
||||
[CimbyTest_MSSQL] = "true";
|
||||
break;
|
||||
|
||||
//DB2 Type
|
||||
case "DB2" :
|
||||
[dbtag] = ".db2";
|
||||
break;
|
||||
end switch
|
||||
|
||||
setOutput( [OutputDir] "/" "create.tables"[dbtag]".sql" );
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a táblákat létrehozó SQL szkriptet. //
|
||||
//***************************************************************************//
|
||||
proc GenerateCreateTableScript()
|
||||
|
||||
out = [BOM];
|
||||
// sémák generálása
|
||||
loop (Instances -> MPackage WHERE IsPackageAllowed([MPackage.name]) == "True" and [MPackage.name] != [ProjectName])
|
||||
out = CreateExtendedSchema([MPackage.name]);
|
||||
end loop
|
||||
|
||||
// az entity stereotipiaval ellatott osztalyok
|
||||
// tabla szerkezetenek elkeszitese
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
out = ConvertClassToTable( [MClass] );
|
||||
end loop
|
||||
|
||||
// az asszociacios osztalyokon kivuli, csak kapcsolotablaval reprezentalhato
|
||||
// relaciok eredmenyezte tabla definiciok.
|
||||
local AssocClassCount = "";
|
||||
loop (Instances -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity" ))
|
||||
loop ( CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where (GetStereoType([EndClass])=="Entity" and [StartRole.id]<[EndRole.id]) )
|
||||
[AssocClassCount] = HasAssociationClass([CurrentAssoc]);
|
||||
if ( [AssocClassCount] == "" )
|
||||
if (
|
||||
//0..1-0..1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="0..1") or
|
||||
//1..*-1..*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//1..*-*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//*-*
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..*")
|
||||
)
|
||||
out = ConvertAssociationToSwitchTable([StartRole],[EndRole],[StartClass],[EndClass]);
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
|
||||
if ( [SQL_DBType] == "ORACLE")
|
||||
out = "quit\n/";
|
||||
end if
|
||||
|
||||
// view szerkezetenek elkeszitese
|
||||
// loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
// out = ConvertClassToView( [MClass] );
|
||||
// end loop
|
||||
end proc
|
134
Tools/CodeGeneration/Templates/Database/SQL_CreateViewScript.tdl
Normal file
134
Tools/CodeGeneration/Templates/Database/SQL_CreateViewScript.tdl
Normal file
|
@ -0,0 +1,134 @@
|
|||
//***************************************************************************//
|
||||
// A használt fájlok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
info = "Skeleton DB Create View script generator STARTED at \t"time()"\n";
|
||||
GenerateCreateViewScript();
|
||||
info = "Skeleton DB Create View script generator STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
local dbtag = "";
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
|
||||
switch( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[dbtag] = "ora";
|
||||
break;
|
||||
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[dbtag] = "mssql";
|
||||
break;
|
||||
|
||||
//DB2 Type
|
||||
case "DB2" :
|
||||
[dbtag] = "db2";
|
||||
break;
|
||||
end switch
|
||||
|
||||
setOutput( [OutputDir] "/" "sp_Global_CreateSchemaViews.sql" );
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a view-kat létrehozó SQL szkriptet. //
|
||||
//***************************************************************************//
|
||||
proc GenerateCreateViewScript()
|
||||
|
||||
out = [BOM];
|
||||
out = "-- =============================================\n";
|
||||
out = "-- Description: Schema View-kat generáló script\n";
|
||||
out = "-- =============================================\n";
|
||||
out = "\n";
|
||||
out = "SET ANSI_NULLS ON\n";
|
||||
out = "GO\n";
|
||||
out = "SET QUOTED_IDENTIFIER ON\n";
|
||||
out = "GO\n";
|
||||
out = "\n";
|
||||
out = "IF OBJECT_ID('dbo.sp_Global_CreateSchemaViews') IS NOT NULL\n";
|
||||
out = "BEGIN\n";
|
||||
out = " DROP PROCEDURE [dbo].[sp_Global_CreateSchemaViews]\n";
|
||||
out = "END\n";
|
||||
out = "GO\n";
|
||||
out = "\n";
|
||||
out = "CREATE PROCEDURE [dbo].[sp_Global_CreateSchemaViews]\n";
|
||||
out = " @IntezmenyId int,\n";
|
||||
out = " @IntezmenyAzonosito nvarchar(30),\n";
|
||||
out = " @TanevId int\n";
|
||||
out = "AS\n";
|
||||
out = "BEGIN\n";
|
||||
out = "DECLARE @IntezmenyTemplate nvarchar(50) = 'KR_'+@IntezmenyAzonosito\n";
|
||||
out = "DECLARE @Schema nvarchar(50) = @IntezmenyTemplate+'_Schema'\n";
|
||||
out = "DECLARE @SchemaUser nvarchar(50) = @IntezmenyTemplate + '_user'\n";
|
||||
out = "DECLARE @AktivTanev nvarchar(500)\n";
|
||||
out = "DECLARE @Sql nvarchar(max)\n";
|
||||
|
||||
// az entity stereotipiaval ellatott osztalyok
|
||||
// tabla szerkezetenek elkeszitese
|
||||
loop (Instances->MClass WHERE GetStereoType([MClass]) == "Entity" )
|
||||
if(GetPackage([MClass]) != "stage")
|
||||
out = ConvertClassToView( [MClass] );
|
||||
end if
|
||||
end loop
|
||||
|
||||
// az asszociacios osztalyokon kivuli, csak kapcsolotablaval reprezentalhato
|
||||
// relaciok eredmenyezte tabla definiciok.
|
||||
local AssocClassCount = "";
|
||||
local tableName = "";
|
||||
loop (Instances -> MAssociation as CurrentAssoc -> MAssociationEnd as StartRole -> MClass as StartClass where (GetStereoType([StartClass])=="Entity" ))
|
||||
loop ( CurrentAssoc -> MAssociationEnd as EndRole -> MClass as EndClass where (GetStereoType([EndClass])=="Entity" and [StartRole.id]<[EndRole.id]) )
|
||||
[AssocClassCount] = HasAssociationClass([CurrentAssoc]);
|
||||
if ( [AssocClassCount] == "" )
|
||||
if (
|
||||
//0..1-0..1
|
||||
([StartRole.multiplicity]=="0..1" and [EndRole.multiplicity]=="0..1") or
|
||||
//1..*-1..*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//1..*-*
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="1..*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="1..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="1..*") or
|
||||
//*-*
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="*" and [EndRole.multiplicity]=="0..*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="*") or
|
||||
([StartRole.multiplicity]=="0..*" and [EndRole.multiplicity]=="0..*")
|
||||
)
|
||||
|
||||
if(GetPackage([StartClass]) != "stage")
|
||||
[tableName] = ConvertNameToSQLTableScript(ConvertAssociationRolesToSwitchTableName([StartRole],[EndRole]));
|
||||
out = "/* VIEW: " [tableName] " */\n";
|
||||
out = ConvertAssociatedClassToView([tableName]);
|
||||
end if
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
out = "END\n";
|
||||
end proc
|
|
@ -0,0 +1,184 @@
|
|||
//***************************************************************************//
|
||||
// A használt fájlok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
// info = "";
|
||||
if ([SQL_DBType] == "MSSQL")
|
||||
out = MultiLanguageViews_Mssql();
|
||||
else
|
||||
if ([SQL_DBType] == "ORACLE")
|
||||
out = MultiLanguageViews_Oracle();
|
||||
end if
|
||||
end if
|
||||
// info = "";
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
local dbtag = "";
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
//mkdir([OutputDir]);
|
||||
|
||||
switch( [SQL_DBType] )
|
||||
//ORACLE Type
|
||||
case "ORACLE" :
|
||||
[dbtag] = "ora";
|
||||
break;
|
||||
|
||||
//MSSQL Type
|
||||
case "MSSQL" :
|
||||
[dbtag] = "mssql";
|
||||
break;
|
||||
|
||||
//DB2 Type
|
||||
case "DB2" :
|
||||
[dbtag] = "db2";
|
||||
break;
|
||||
end switch
|
||||
|
||||
setOutput( [OutputDir] "/" "create.multilang." [dbtag] ".sql");
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
|
||||
template MultiLanguageViews_Oracle()
|
||||
[BOM]
|
||||
[loop (Instances -> MClass as ENTITY where GetStereoType([ENTITY]) == "Entity" and HasMultiLanguageAttributes([ENTITY]) == _True())]
|
||||
[GenerateMultiLanguageView_Oracle([ENTITY], 1)]
|
||||
/
|
||||
|
||||
[GenerateMultiLanguageView_Oracle([ENTITY], 2)]
|
||||
/
|
||||
|
||||
[GenerateMultiLanguageView_Oracle([ENTITY], 3)]
|
||||
/
|
||||
|
||||
[GenerateMultiLanguageView_Oracle([ENTITY], 4)]
|
||||
/
|
||||
|
||||
[end loop]
|
||||
QUIT
|
||||
|
||||
end template
|
||||
|
||||
|
||||
template GenerateMultiLanguageView_Oracle(MClass as ENTITY, LANGUAGEINDEX)
|
||||
create or replace view [ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX] as
|
||||
select
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[if (IsMultiLanguage([ATTRIBUTE]) == _True() and GetLanguageIndex([ATTRIBUTE]) == 0)]
|
||||
nvl([ConvertNameToSQLColumnName([ATTRIBUTE.name])]_[LANGUAGEINDEX], [ConvertNameToSQLColumnName([ATTRIBUTE.name])]) "[ConvertNameToSQLColumnName([ATTRIBUTE.name])]",
|
||||
[else]
|
||||
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[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") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[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" ))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
SERIAL,
|
||||
LASTCHANGED,
|
||||
MODIFIER,
|
||||
CREATED,
|
||||
CREATOR,
|
||||
[end if]
|
||||
ID
|
||||
from
|
||||
[ConvertNameToSQLTableName([ENTITY.name])]
|
||||
end template
|
||||
|
||||
|
||||
template MultiLanguageViews_Mssql()
|
||||
[BOM]
|
||||
[loop (Instances -> MClass as ENTITY where GetStereoType([ENTITY]) == "Entity" and HasMultiLanguageAttributes([ENTITY]) == _True())]
|
||||
[GenerateMultiLanguageView_Mssql([ENTITY], 1)]
|
||||
go
|
||||
|
||||
[GenerateMultiLanguageView_Mssql([ENTITY], 2)]
|
||||
go
|
||||
|
||||
[GenerateMultiLanguageView_Mssql([ENTITY], 3)]
|
||||
go
|
||||
|
||||
[GenerateMultiLanguageView_Mssql([ENTITY], 4)]
|
||||
go
|
||||
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
|
||||
template GenerateMultiLanguageView_Mssql(MClass as ENTITY, LANGUAGEINDEX)
|
||||
if exists ( select name from sysobjects where name = '[ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX]' and type = 'V')
|
||||
drop view [ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX]
|
||||
go
|
||||
|
||||
create view [ConvertNameToSQLTableName([ENTITY.name])]_[LANGUAGEINDEX] as
|
||||
select
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[if (IsMultiLanguage([ATTRIBUTE]) == _True() and GetLanguageIndex([ATTRIBUTE]) == 0)]
|
||||
isnull([ConvertNameToSQLColumnName([ATTRIBUTE.name])]_[LANGUAGEINDEX], [ConvertNameToSQLColumnName([ATTRIBUTE.name])]) "[ConvertNameToSQLColumnName([ATTRIBUTE.name])]",
|
||||
[else]
|
||||
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[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") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[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" ))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
SERIAL,
|
||||
LASTCHANGED,
|
||||
MODIFIER,
|
||||
CREATED,
|
||||
CREATOR,
|
||||
[end if]
|
||||
ID
|
||||
from
|
||||
[ConvertNameToSQLTableName([ENTITY.name])]
|
||||
end template
|
||||
|
||||
|
||||
proc HasMultiLanguageAttributes(MClass as ENTITY)
|
||||
loop (ENTITY -> MAttribute as ATTRIBUTE where IsMultiLanguage([ATTRIBUTE]) == _True())
|
||||
return _True();
|
||||
end loop
|
||||
return _False();
|
||||
end proc
|
||||
|
||||
|
|
@ -0,0 +1,134 @@
|
|||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllEntityAssociationsIDToEntityState(MClass as ENTITY, COUNTERNAME, ENTITYSTATENAME, READERNAME)
|
||||
// [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 ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
|
||||
[if (HasAssociationClass([CURRENTASSOCIATION]) == "")]
|
||||
[ENTITYSTATENAME].[ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))].[ConvertNameToEntityStateAttributeName("ID")] = [READERNAME].GetValue([COUNTERNAME]++);
|
||||
[else]
|
||||
// XXX [GetRoleName([ENDROLE])] ez az asszociáció asszociációs osztállyal rendelkezik, és még nincs megvalósítva, lásd GenerateLoadAllAttributesAndEntityAssociationsIDToEntityState
|
||||
[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"))]
|
||||
[ENTITYSTATENAME].[ConvertNameToEntityStateAttributeName(GetRoleName([STARTROLE]))].[ConvertNameToEntityStateAttributeName("ID")] = [READERNAME].GetValue([COUNTERNAME]++);
|
||||
[ENTITYSTATENAME].[ConvertNameToEntityStateAttributeName(GetRoleName([ENDROLE]))].[ConvertNameToEntityStateAttributeName("ID")] = [READERNAME].GetValue([COUNTERNAME]++);
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesAndEntityAssociationsIDToEntityState([BASECLASS], [COUNTERNAME], [ENTITYSTATENAME], [READERNAME])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL parancsot, ami felhozza az adatbázisból egy adott //
|
||||
// entitás összes asszociációs partnerének azonosítóját. //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDCommand(MClass as ENTITY)
|
||||
select
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].ID,
|
||||
[GenerateLoadAllAssociationIDCommandColumns([ENTITY])]
|
||||
[GenerateSerialColumn([ENTITY])]
|
||||
from
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
[GenerateLoadAllAssociationIDCommandJoin([ENTITY])]
|
||||
where
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].SERIAL >= 0)
|
||||
[else]
|
||||
[GenerateLoadAllAttributesCommandWhere([ENTITY])]
|
||||
[end if]
|
||||
and (rownum < 1000)
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az asszociációs partnerek tábláinak join-jait. (SQL töredék) //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDCommandJoin(MClass as ENTITY)
|
||||
[GenerateLoadAllAssociationIDCommandJoinCore([ENTITY], [ENTITY])]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az asszociációs partnerek tábláinak join-jait. (SQL töredék) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDCommandJoinCore(MClass as ENTITY, MClass as MASTER)
|
||||
[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] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
left join [ConvertNameToSQLTableName([PARTNER.name])] on [ConvertNameToSQLTableName([PARTNER.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([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAssociationIDCommandJoinCore([BASECLASS], [MASTER])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az asszociációs partnerek azonosító oszlopait (SQL töredék) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDCommandColumns(MClass as ENTITY)
|
||||
-- [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")]
|
||||
[ConvertNameToSQLTableName([ENTITY.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([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))], -- Opcionális asszociációs kapcsolómező
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
[ConvertNameToSQLTableName([PARTNER.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]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
|
||||
-- XXX [GetRoleName([ENDROLE])] ez az asszociáció asszociációs osztállyal rendelkezik, és még nincs megvalósítva, lásd GenerateLoadAllAttributesAndEntityAssociationsIDToEntityState
|
||||
[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"))]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))], -- Asszociációs mező
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))], -- Asszociációs mező
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAssociationIDCommandColumns([BASECLASS])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
|
@ -0,0 +1,124 @@
|
|||
/* A fájlban lévő sablonokat szinkronban kell tartani a szelekt generáló sablonokkal! */
|
||||
/* Később kell egy kis refaktoring is! */
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a ciklusmagot, amely egy DataReader-ből kiszippantja //
|
||||
// az entitás összes attribútumát. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesToEntityState(MClass as ENTITY, COUNTERNAME, ENTITYSTATENAME, READERNAME)
|
||||
// [GetEntityName([ENTITY])] attribútumai
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[ENTITYSTATENAME].[ConvertNameToEntityStateAttributeName(GetAttributeName([ATTRIBUTE]))] = [READERNAME].GetValue([COUNTERNAME]++);
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesToEntityState([BASECLASS], [COUNTERNAME], [ENTITYSTATENAME], [READERNAME])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL parancsot helyőrzőkkel, ami felhozza az //
|
||||
// adatbázisból egy entitás összes attribútumát. //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommand(MClass as ENTITY)
|
||||
select
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].ID,
|
||||
[GenerateLoadAllAttributesCommandColumns([ENTITY])]
|
||||
[GenerateSerialColumn([ENTITY])]
|
||||
from
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
{0}
|
||||
where
|
||||
[GenerateLoadAllAttributesCommandWhere([ENTITY])]
|
||||
{1}
|
||||
end template
|
||||
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a SERIAL rendszeroszlop minősített nevét //
|
||||
//***************************************************************************//
|
||||
template GenerateSerialColumn(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateSerialColumn([BASECLASS])][break]
|
||||
[end loop]
|
||||
[else]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].SERIAL
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás összes attribútumát //
|
||||
// tartalmazza. (a rendszerattribútumokat nem generálja le!) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandColumns(MClass as ENTITY)
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesCommandColumns([BASECLASS])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás lekérdezéséhez //
|
||||
// felsorolja annak tábláit. (join-ok nélkül!) //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandTables(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesCommandTablesCore([BASECLASS])]
|
||||
[end loop]
|
||||
[end if]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás lekérdezéséhez //
|
||||
// felsorolja annak tábláit. (join-ok nélkül!) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandTablesCore(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesCommandTablesCore([BASECLASS])]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])],[break]
|
||||
[end loop]
|
||||
[else]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])],
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás tábláit összekapcsolja. //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandWhere(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
([ConvertNameToSQLTableName(GetBaseClassName([ENTITY], "qqq"))].ID = [ConvertNameToSQLTableName([ENTITY.name])].ID)
|
||||
[if (GetBaseBaseClassName([ENTITY], "") != "")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
and
|
||||
[GenerateLoadAllAttributesCommandWhere([BASECLASS])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
|
@ -0,0 +1,31 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja azt a ciklusmagot, amely egy DataReader-ből kiszippantja //
|
||||
// az entitás összes attribútumát és entitás típusú asszociációjának az //
|
||||
// azonosítóját. //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesAndEntityAssociationsIDToEntityState(MClass as ENTITY, COUNTERNAME, ENTITYSTATENAME, READERNAME)
|
||||
[GenerateLoadAllAttributesToEntityState([ENTITY], [COUNTERNAME], [ENTITYSTATENAME], [READERNAME])]
|
||||
[GenerateLoadAllEntityAssociationsIDToEntityState([ENTITY], [COUNTERNAME], [ENTITYSTATENAME], [READERNAME])]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL parancsot, ami lekérdez egy entitás alaphalmazás. //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesAndEntityAssociationsIDCommand(MClass as ENTITY)
|
||||
select
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].ID,
|
||||
[GenerateLoadAllAttributesCommandColumns([ENTITY])]
|
||||
[GenerateLoadAllAssociationIDCommandColumns([ENTITY])]
|
||||
[GenerateSerialColumn([ENTITY])]
|
||||
from
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
[GenerateLoadAllAssociationIDCommandJoin([ENTITY])]
|
||||
where
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].SERIAL >= 0)
|
||||
[else]
|
||||
[GenerateLoadAllAttributesCommandWhere([ENTITY])]
|
||||
[end if]
|
||||
and (rownum < 1000)
|
||||
end template
|
|
@ -0,0 +1,49 @@
|
|||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
template GenerateInsertEntityCommand(MClass as ENTITY)
|
||||
begin
|
||||
[GenerateInsertEntityCommandCore([ENTITY])]
|
||||
end;
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Megjegyzés? //
|
||||
// //
|
||||
// VALÓSZÍNŰLEG MÁR ELAVULT, ÉS NEM HASZNÁLT! //
|
||||
//***************************************************************************//
|
||||
template GenerateInsertEntityCommandCore(MClass as ENTITY)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
insert into [ConvertNameToSQLTableName([ENTITY.name])] (
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[end loop]
|
||||
ID
|
||||
)
|
||||
values (
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
:[ConvertNameToCommandParameterName([ATTRIBUTE.name])],
|
||||
[end loop]
|
||||
:[ConvertNameToCommandParameterName("ID")]
|
||||
);
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateInsertEntityCommandCore([BASECLASS])][break]
|
||||
[end loop]
|
||||
[else]
|
||||
insert into [ConvertNameToSQLTableName([ENTITY.name])] (
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[end loop]
|
||||
ID, SERIAL
|
||||
)
|
||||
values (
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
:[ConvertNameToCommandParameterName([ATTRIBUTE.name])],
|
||||
[end loop]
|
||||
:[ConvertNameToCommandParameterName("ID")], :[ConvertNameToCommandParameterName("Serial")]
|
||||
);
|
||||
[end if]
|
||||
end template
|
|
@ -0,0 +1,505 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás összes attribútumát //
|
||||
// tartalmazza. (a rendszerattribútumokat nem generálja le!) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandColumns(MClass as ENTITY, PREFIX)
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName([ATTRIBUTE.name])] ""[PREFIX][ATTRIBUTE.name]"",
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesCommandColumns([BASECLASS], [PREFIX])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy entitás összes név oszlopát, minősített nevekkel. //
|
||||
// (SQL töredék) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadNameColumns(MClass as ENTITY, ENTITYALIAS, PREFIX)
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE where GetStereoTypeForAttribute([ATTRIBUTE]) == "DisplayName")]
|
||||
[ConvertNameToSQLTableName([ENTITYALIAS] "_" [ENTITY.id])].[ConvertNameToSQLColumnName([ATTRIBUTE.name])] ""[PREFIX]a[ENTITYALIAS]_[ATTRIBUTE.name]"",
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadNameColumns([BASECLASS], [ENTITYALIAS], [PREFIX])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás összes attribútumát, //
|
||||
// asszociációs partnereinek azonosítóját és neveit tartalmazza. //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDAndNameColumns(MClass as ENTITY, PREFIX)
|
||||
[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")]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[GenerateLoadNameColumns([PARTNER], [ENDROLE.id], [PREFIX])]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[GenerateLoadNameColumns([PARTNER], [ENDROLE.id], [PREFIX])]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
[ConvertNameToSQLTableName([PARTNER.name])].ID as [ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[GenerateLoadNameColumns([PARTNER], [ENDROLE.id], [PREFIX])]
|
||||
[else]
|
||||
[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[GenerateLoadNameColumns([PARTNER], [ENDROLE.id], [PREFIX])]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
|
||||
[/*-- XXX [GetRoleName([ENDROLE])] ez az asszociáció asszociációs osztállyal rendelkezik, és még nincs megvalósítva, lásd GenerateLoadAllAttributesAndEntityAssociationsIDToEntityState*/]
|
||||
[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"))]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))],
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAssociationIDCommandColumns([BASECLASS])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az asszociációs partnerek azonosító oszlopait (SQL töredék) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDCommandColumns(MClass as ENTITY)
|
||||
[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")]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
[ConvertNameToSQLTableName([PARTNER.name])].ID as [ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[else]
|
||||
[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
|
||||
[/*-- XXX [GetRoleName([ENDROLE])] ez az asszociáció asszociációs osztállyal rendelkezik, és még nincs megvalósítva, lásd GenerateLoadAllAttributesAndEntityAssociationsIDToEntityState*/]
|
||||
[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"))]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))],
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAssociationIDCommandColumns([BASECLASS])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás lekérdezéséhez //
|
||||
// felsorolja annak tábláit. (join-ok nélkül!) //
|
||||
//***************************************************************************//
|
||||
template GenerateJoinedLoadAllAttributesCommandTables(MClass as ENTITY, MClass as BASE, MAssociationEnd as STARTROLE)
|
||||
inner join [ConvertNameToSQLTableName([ENTITY.name])] on ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([BASE.name])].ID) [/*--4*/]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesCommandTablesCore([BASECLASS], [ENTITY])]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás lekérdezéséhez //
|
||||
// felsorolja annak tábláit. (join-ok nélkül!) //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandTables(MClass as ENTITY)
|
||||
[ConvertNameToSQLTableName([ENTITY.name])]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAttributesCommandTablesCore([BASECLASS], [ENTITY])]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami egy entitás lekérdezéséhez //
|
||||
// felsorolja annak tábláit. (join-ok nélkül!) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesCommandTablesCore(MClass as ENTITY, MClass as BASE)
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
inner join [ConvertNameToSQLTableName([ENTITY.name])] on ([ConvertNameToSQLTableName([BASE.name])].ID = [ConvertNameToSQLTableName([ENTITY.name])].ID) [/*--1*/]
|
||||
[GenerateLoadAllAttributesCommandTablesCore([BASECLASS], [ENTITY])]
|
||||
[break]
|
||||
[end loop]
|
||||
[else]
|
||||
inner join [ConvertNameToSQLTableName([ENTITY.name])] on ([ConvertNameToSQLTableName([BASE.name])].ID = [ConvertNameToSQLTableName([ENTITY.name])].ID) [/*--2*/]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy entitás asszociációs partner azonosító alapján való //
|
||||
// lekérdezéséhez szükséges kapcsolótáblákat. //
|
||||
// (SQL töredék a from szekcióban) //
|
||||
//***************************************************************************//
|
||||
template GenerateSwitchTablesByAssociation(MClass as ENTITY, MClass as PARTNER, MAssociationEnd as STARTROLE, MAssociationEnd as ENDROLE)
|
||||
[if ([ENTITY.name] != [PARTNER.name])]
|
||||
[if ([ENDROLE.multiplicity] == "1")]
|
||||
[end if]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
[ConvertNameToSQLTableName([PARTNER.name])] T_T_PARTNER,
|
||||
[else]
|
||||
[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] T_T_SWITCH,
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[if (([ENDROLE.multiplicity] == "1..*") or ([ENDROLE.multiplicity] == "*") or ([ENDROLE.multiplicity] == "0..*"))]
|
||||
[if (([STARTROLE.multiplicity] == "1") or ([STARTROLE.multiplicity] == "0..1"))]
|
||||
[ConvertNameToSQLTableName([PARTNER.name])] T_T_PARTNER,
|
||||
[else]
|
||||
[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] T_T_SWITCH,
|
||||
[end if]
|
||||
[end if]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1" or [STARTROLE.multiplicity] == "0..1")]
|
||||
[ConvertNameToSQLTableName([PARTNER.name])] T_T_PARTNER,
|
||||
[else]
|
||||
[ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] T_T_SWITCH,
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami összekapcsolja az entitás //
|
||||
// asszociációinak tábláit, az entitás táblái nélkül. //
|
||||
// (from szekció az SQL-ben) //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDAndNameColumnsCommandJoin(MClass as ENTITY)
|
||||
[GenerateLoadAllAssociationIDAndNameColumnsCommandJoinCore([ENTITY], [ENTITY])]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami összekapcsolja az entitás //
|
||||
// asszociációinak tábláit, az entitás táblái nélkül. //
|
||||
// (from szekció az SQL-ben) //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDAndNameColumnsCommandJoinCore(MClass as ENTITY, MClass as MASTER)
|
||||
[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")]
|
||||
[GenerateLoadNameColumnsCommandJoinCore([PARTNER], [MASTER], [STARTROLE], [ENDROLE])]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
[GenerateLoadNameColumnsCommandJoinCore([PARTNER], [MASTER], [STARTROLE], [ENDROLE])]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
left join [ConvertNameToSQLTableName([PARTNER.name])] on [ConvertNameToSQLTableName([PARTNER.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([MASTER.name])].ID
|
||||
[GenerateLoadNameColumnsCommandJoinCore([PARTNER], [MASTER], [STARTROLE], [ENDROLE])]
|
||||
[else]
|
||||
left join [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))] on [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([MASTER.name])].ID
|
||||
[GenerateLoadNameColumnsCommandJoinCore([PARTNER], [MASTER], [STARTROLE], [ENDROLE])]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAssociationIDCommandJoinCore([BASECLASS], [MASTER])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az asszociációs partnerek tábláinak join-jait. (SQL töredék) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAssociationIDCommandJoinCore(MClass as ENTITY, MClass as MASTER)
|
||||
[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] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
left join [ConvertNameToSQLTableName([PARTNER.name])] on [ConvertNameToSQLTableName([PARTNER.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([MASTER.name])].ID
|
||||
[else]
|
||||
left join [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))] on [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([MASTER.name])].ID
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
[loop (ENTITY -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadAllAssociationIDCommandJoinCore([BASECLASS], [MASTER])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt az SQL töredéket, ami összekapcsolja az entitás //
|
||||
// asszociációinak tábláit, az entitás táblái nélkül. Csak azokat az //
|
||||
// asszociációs partner táblákat kapcsolja hozzá, amelyek rendelkeznek név //
|
||||
// attribútummal! //
|
||||
// (from szekció az SQL-ben) //
|
||||
// //
|
||||
// REKURZÍV! //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadNameColumnsCommandJoinCore(MClass as PARTNER, MClass as MASTER, MAssociationEnd as STARTROLE, MAssociationEnd as ENDROLE)
|
||||
[if (HasNameAttribures([PARTNER]) == "True")]
|
||||
[if ([ENDROLE.multiplicity] == "1")]
|
||||
inner join [ConvertNameToSQLTableName([PARTNER.name])] [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])] on [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])].ID = [ConvertNameToSQLTableName([MASTER.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
left join [ConvertNameToSQLTableName([PARTNER.name])] [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])] on [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])].ID = [ConvertNameToSQLTableName([MASTER.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
left join [ConvertNameToSQLTableName([PARTNER.name])] [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])] on [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([MASTER.name])].ID
|
||||
[else]
|
||||
left join [ConvertNameToSQLTableName([PARTNER.name])] [ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])] on
|
||||
([ConvertNameToSQLTableName([ENDROLE.id] "_" [PARTNER.id])].ID = [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))])
|
||||
and
|
||||
([ConvertNameToSQLTableName([MASTER.name])].ID = [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE],[STARTROLE]))].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[if (IsMasterEntity([PARTNER]) == "false")]
|
||||
[loop (PARTNER -> SuperClass as BASECLASS)]
|
||||
[GenerateLoadNameColumnsCommandJoinCore([BASECLASS], [MASTER], [STARTROLE], [ENDROLE])][break]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
//***************************************************************************//
|
||||
// A where szekciót generálja le egy SQL-hez, ami egy adott entitást kérdez //
|
||||
// le asszociációs partnerek alapján. //
|
||||
//***************************************************************************//
|
||||
template GenerateAssociationJoinByAssociationWhere(MClass as ENTITY, MClass as PARTNER, MAssociationEnd as STARTROLE, MAssociationEnd as ENDROLE)
|
||||
and
|
||||
[if ([ENTITY.name] != [PARTNER.name])]
|
||||
[if ([ENDROLE.multiplicity] == "1")]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[end if]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1")]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].ID = T_T_PARTNER.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
and
|
||||
(T_T_PARTNER.ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[else]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].ID = T_T_SWITCH.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
and
|
||||
(T_T_SWITCH.[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[if (([ENDROLE.multiplicity] == "1..*") or ([ENDROLE.multiplicity] == "*") or ([ENDROLE.multiplicity] == "0..*"))]
|
||||
[if (([STARTROLE.multiplicity] == "1") or ([STARTROLE.multiplicity] == "0..1"))]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].ID = T_T_PARTNER.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
and
|
||||
(T_T_PARTNER.ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[else]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].ID = T_T_SWITCH.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
and
|
||||
(T_T_SWITCH.[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[end if]
|
||||
[end if]
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "1" or [ENDROLE.multiplicity] == "0..1")]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "1" or [STARTROLE.multiplicity] == "0..1")]
|
||||
(T_T_PARTNER.ID = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
and
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].ID = T_T_PARTNER.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
[else]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].ID = T_T_SWITCH.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))])
|
||||
and
|
||||
(T_T_SWITCH.[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Entitás verziójának felhozása //
|
||||
//***************************************************************************//
|
||||
template GenerateGetSerialCommand(MClass as ENTITY)
|
||||
select
|
||||
[GenerateSerialColumn([ENTITY])]
|
||||
from
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
where
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
([ConvertNameToSQLTableName([ENTITY.name])].SERIAL >= 0)
|
||||
[else]
|
||||
[end if]
|
||||
and ([ConvertNameToSQLTableName([ENTITY.name])].ID = :[ConvertNameToCommandParameterName("ID")])
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja azt a teljes SQL-t helyőrzőkkel, ami egy entitást tölt fel //
|
||||
// az asszociációs partnereinek azonosítóival együtt. //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesAndEntityAssociationsIDCommand(MClass as ENTITY, MAXLASTCHANGEDONLY)
|
||||
select /*+ {QID}{FID} {HINT} */
|
||||
[if ([MAXLASTCHANGEDONLY] == "True")]
|
||||
GETDATE(), COUNT(*)
|
||||
[else]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].ID ""ID"",
|
||||
[GenerateLoadAllAttributesCommandColumns([ENTITY], "")]
|
||||
[GenerateLoadAllAssociationIDAndNameColumns([ENTITY], "")]
|
||||
[GenerateSerialColumn([ENTITY])]
|
||||
[end if]
|
||||
from
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
[GenerateLoadAllAssociationIDAndNameColumnsCommandJoin([ENTITY])]
|
||||
{INNERFILTERS}
|
||||
where
|
||||
([ConvertNameToSQLTableName(GetMasterEntityNameOf([ENTITY]))].SERIAL >= 0)
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
[else]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Entitás feltöltése partner alapján (SQL töredék) //
|
||||
//***************************************************************************//
|
||||
/* nem használt
|
||||
template GenerateLoadAllAttributesAndEntityAssociationsIDByAssociationCommand(MClass as ENTITY, MClass as PARTNER, MAssociationEnd as STARTROLE, MAssociationEnd as ENDROLE, MAXLASTCHANGEDONLY)
|
||||
select
|
||||
[if ([MAXLASTCHANGEDONLY] == "True")]
|
||||
GETDATE(), COUNT(*)
|
||||
[else]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].ID ""ID"",
|
||||
[GenerateLoadAllAttributesCommandColumns([ENTITY], "")]
|
||||
[GenerateLoadAllAssociationIDAndNameColumns([ENTITY], "")]
|
||||
[GenerateSerialColumn([ENTITY])]
|
||||
[end if]
|
||||
from
|
||||
[GenerateSwitchTablesByAssociation([ENTITY], [PARTNER], [STARTROLE], [ENDROLE])]
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
[GenerateLoadAllAssociationIDAndNameColumnsCommandJoin([ENTITY])]
|
||||
{INNERFILTERS}
|
||||
where
|
||||
([ConvertNameToSQLTableName(GetMasterEntityNameOf([ENTITY]))].SERIAL >= 0)
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
[else]
|
||||
[end if]
|
||||
[GenerateAssociationJoinByAssociationWhere([ENTITY], [PARTNER], [STARTROLE], [ENDROLE])]
|
||||
end template
|
||||
*/
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Entitás feltöltése partner alapján asszociációs osztállyal együtt //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadAllAttributesAndEntityAssociationsIDByAssociationCommandWithAssociationClass(MClass as ENTITY, MClass as PARTNER, MClass as ASSOCIATIONCLASS, MAssociationEnd as STARTROLE, MAssociationEnd as ENDROLE, MAXLASTCHANGEDONLY)
|
||||
select /*+ {QID}{FID} {HINT} */
|
||||
[if ([MAXLASTCHANGEDONLY] == "True")]
|
||||
GETDATE(), COUNT(*)
|
||||
[else]
|
||||
[ConvertNameToSQLTableName([ENTITY.name])].ID ""ID"",
|
||||
[GenerateLoadAllAttributesCommandColumns([ENTITY], "")]
|
||||
[GenerateLoadAllAssociationIDAndNameColumns([ENTITY], "")]
|
||||
[GenerateSerialColumn([ENTITY])],
|
||||
|
||||
[ConvertNameToSQLTableName([ASSOCIATIONCLASS.name])].ID ""_ID"",
|
||||
[GenerateLoadAllAttributesCommandColumns([ASSOCIATIONCLASS], "_")]
|
||||
[GenerateLoadAllAssociationIDAndNameColumns([ASSOCIATIONCLASS], "_")]
|
||||
[GenerateSerialColumn([ASSOCIATIONCLASS])]
|
||||
[end if]
|
||||
from
|
||||
[GenerateLoadAllAttributesCommandTables([ENTITY])]
|
||||
[GenerateLoadAllAssociationIDAndNameColumnsCommandJoin([ENTITY])]
|
||||
[GenerateJoinedLoadAllAttributesCommandTables([ASSOCIATIONCLASS], [ENTITY], [STARTROLE])]
|
||||
[GenerateLoadAllAssociationIDAndNameColumnsCommandJoin([ASSOCIATIONCLASS])]
|
||||
{INNERFILTERS}
|
||||
where
|
||||
([ConvertNameToSQLTableName(GetMasterEntityNameOf([ENTITY]))].SERIAL >= 0)
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
[else]
|
||||
[end if]
|
||||
and
|
||||
([ConvertNameToSQLTableName(GetMasterEntityNameOf([ASSOCIATIONCLASS]))].SERIAL >= 0)
|
||||
[if (IsMasterEntity([ASSOCIATIONCLASS]) == "true")]
|
||||
[else]
|
||||
[end if]
|
||||
and
|
||||
([ConvertNameToSQLTableName([ASSOCIATIONCLASS.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))])
|
||||
end template
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
//***************************************************************************//
|
||||
// Under constuction... //
|
||||
//***************************************************************************//
|
|
@ -0,0 +1,65 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DataAccessInterfaces.csproj fájl tartalmát. //
|
||||
//***************************************************************************//
|
||||
template KretaGenerateDataAccessIterfaceProject()
|
||||
[BOM]<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{68318C3F-0779-4755-848E-B270F6BAC40B}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Kreta.DataAccess.Interfaces</RootNamespace>
|
||||
<AssemblyName>Kreta.DataAccess.Interfaces</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\Tools\SharedAssemblyInfo.cs">
|
||||
<Link>Properties\SharedAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="IEntity.cs" />
|
||||
<Compile Include="IAssociatedCollection.cs" />
|
||||
[loop (Instances -> MClass where GetStereoType([MClass]) == "Entity")]
|
||||
<Compile Include="I[MClass.name].cs" />
|
||||
[end loop]
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
end template
|
|
@ -0,0 +1,85 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DataAccess.csproj fájl tartalmát. //
|
||||
//***************************************************************************//
|
||||
template KretaGenerateDataAccessProject()
|
||||
[BOM]<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProductVersion>9.0.21022</ProductVersion>
|
||||
<SchemaVersion>2.0</SchemaVersion>
|
||||
<ProjectGuid>{B91833B5-0BA0-4E8B-9159-B991F15D3FC4}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>[ProjectName]</RootNamespace>
|
||||
<AssemblyName>Kreta.DataAccessGenerated</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>4096</FileAlignment>
|
||||
<SccProjectName>SAK</SccProjectName>
|
||||
<SccLocalPath>SAK</SccLocalPath>
|
||||
<SccAuxPath>SAK</SccAuxPath>
|
||||
<SccProvider>SAK</SccProvider>
|
||||
<ProjectType>Local</ProjectType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugSymbols>false</DebugSymbols>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<RunCodeAnalysis>false</RunCodeAnalysis>
|
||||
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
|
||||
<UseVSHostingProcess>true</UseVSHostingProcess>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Kreta.DataAccessInterfaceGenerated\Kreta.DataAccess.Interfaces.csproj">
|
||||
<Project>{68318c3f-0779-4755-848e-b270f6bac40b}</Project>
|
||||
<Name>Kreta.DataAccess.Interfaces</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Sda.DataProvider\Sda.DataProvider.csproj">
|
||||
<Project>{9ac4fd13-81f5-48ac-aa21-ba774c4dc771}</Project>
|
||||
<Name>Sda.DataProvider</Name>
|
||||
</ProjectReference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<ProjectReference Include="..\Framework\Kreta.Framework.csproj">
|
||||
<Name>Kreta.Framework</Name>
|
||||
<Project>{320EF478-7155-441D-B1E9-47EC3E57FB45}</Project>
|
||||
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\Tools\SharedAssemblyInfo.cs">
|
||||
<Link>Properties\SharedAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<!-- BEGIN Generated file list -->
|
||||
[loop (Instances -> MClass where GetStereoType([MClass]) == "Entity")]
|
||||
<Compile Include="Entities\\[MClass.name].cs" />
|
||||
<Compile Include="DataAccessors\\[MClass.name]DA.cs" />
|
||||
[end loop]
|
||||
[loop (Instances -> MClass as ENTITY where IsClassView([ENTITY]) == "View")]
|
||||
<Compile Include="View\\[ENTITY.name].cs" />
|
||||
[end loop]
|
||||
<!-- END Generated file list -->
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
end template
|
|
@ -0,0 +1,74 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a megadott entitás törlését elvégzo DA muveletet. //
|
||||
//***************************************************************************//
|
||||
template GenerateDeleteEntity(MClass as ENTITY)
|
||||
#region DeleteEntity
|
||||
|
||||
private const string m_FizikaiDeleteCommandText = @"DELETE FROM [ConvertNameToSQLTableName([ENTITY.name])] WHERE (ID = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
private const string m_LogikaiDeleteCommandText = @"
|
||||
UPDATE [ConvertNameToSQLTableName([ENTITY.name])]
|
||||
SET TOROLT = 'T' ,
|
||||
SERIAL = SERIAL + 1,
|
||||
[if(GetTaggedValue([ENTITY], "dkt") == "true")]
|
||||
DELETER = :[ConvertNameToCommandParameterName("Deleter")],
|
||||
DELETED = :[ConvertNameToCommandParameterName("Deleted")],
|
||||
[end if]
|
||||
LASTCHANGED = :[ConvertNameToCommandParameterName("LastChanged")],
|
||||
MODIFIER = :[ConvertNameToCommandParameterName("Modifier")]
|
||||
WHERE (ID = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
|
||||
public override void DeleteEntity([ENTITY.name] entity, bool logikai = true)
|
||||
{
|
||||
var _deleteCommandText = logikai ? m_LogikaiDeleteCommandText : m_FizikaiDeleteCommandText;
|
||||
using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(_deleteCommandText))
|
||||
{
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]).Value = entity.ID;
|
||||
|
||||
if (logikai)
|
||||
{
|
||||
DateTime lastchanged = DateTime.Now;
|
||||
var modifier = UserContext.Instance.UniqueIdentifier;
|
||||
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("LastChanged")]", [GetCSharpDatasetType("DateTime", "")]).Value = lastchanged;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Modifier")]", [GetCSharpSQLIDType()]).Value = modifier;
|
||||
[if(GetTaggedValue([ENTITY], "dkt") == "true")]
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Deleted")]", [GetCSharpDatasetType("DateTime", "")]).Value = lastchanged;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Deleter")]", [GetCSharpSQLIDType()]).Value = modifier;
|
||||
[end if]
|
||||
}
|
||||
|
||||
if (command.ExecuteNonQuery() != 1)
|
||||
{
|
||||
throw new EntityNotFoundException("[ENTITY.name]", entity.ID);
|
||||
}
|
||||
}
|
||||
|
||||
[if (IsMasterEntity([ENTITY]) == "false" && GetInheritance([ENTITY]) != "tpc")]
|
||||
|
||||
entity.InheritedDA.DeleteEntity(entity, logikai);
|
||||
[end if]
|
||||
}
|
||||
|
||||
[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"))]
|
||||
private const string m_DeleteBy[DefineRoleName([STARTROLE])]And[DefineRoleName([ENDROLE])]CommandText = @"
|
||||
delete from [ConvertNameToSQLTableName([ENTITY.name])]
|
||||
where
|
||||
([ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))])
|
||||
and
|
||||
([ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]) ";
|
||||
|
||||
public void DeleteBy[DefineRoleName([STARTROLE])]And[DefineRoleName([ENDROLE])](int [ConvertRoleToName([STARTROLE])], int [ConvertRoleToName([ENDROLE])])
|
||||
{
|
||||
using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_DeleteBy[DefineRoleName([STARTROLE])]And[DefineRoleName([ENDROLE])]CommandText))
|
||||
{
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = [ConvertRoleToName([STARTROLE])];
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", [GetCSharpSQLIDType()]).Value = [ConvertRoleToName([ENDROLE])];
|
||||
command.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
[end loop]
|
||||
[end loop]
|
||||
#endregion
|
||||
end template
|
|
@ -0,0 +1,268 @@
|
|||
//***************************************************************************//
|
||||
// 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
|
||||
|
||||
|
|
@ -0,0 +1,385 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a magadott osztályhoz tartozó DataAccessor tejles //
|
||||
// forráskódját //
|
||||
//***************************************************************************//
|
||||
template GenerateEntityDA(MClass as ENTITY)
|
||||
[BOM]using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using Kreta.Framework;
|
||||
using Kreta.Framework.Collections;
|
||||
using Kreta.Framework.Collections.Generic;
|
||||
using Kreta.Framework.Entities;
|
||||
using Kreta.Framework.Entities.Associations;
|
||||
using Kreta.Framework.Entities.Generic;
|
||||
|
||||
namespace SDA.[ProjectName].Entities
|
||||
{
|
||||
[GenerateDBHelper([ENTITY])]
|
||||
|
||||
internal class [ENTITY.name]DA : EntityDataAccessor<[ENTITY.name]>
|
||||
{
|
||||
private static [ENTITY.name]DBHelper m_dbhelper = new [ENTITY.name]DBHelper();
|
||||
|
||||
protected override IEntityDBHelper<[ENTITY.name]> dbhelper
|
||||
{
|
||||
get { return m_dbhelper; }
|
||||
}
|
||||
|
||||
#region Load
|
||||
|
||||
[GenerateLoadByID([ENTITY])]
|
||||
|
||||
[GenerateLoadBaseSet([ENTITY])]
|
||||
|
||||
#endregion
|
||||
|
||||
[GenerateInsertEntity([ENTITY])]
|
||||
|
||||
[GenerateUpdateEntity([ENTITY])]
|
||||
|
||||
[GenerateDeleteEntity([ENTITY])]
|
||||
|
||||
[GenerateUpdateAssociations([ENTITY])]
|
||||
|
||||
#region Asszociációkkal kapcsolatos adatbázisműveletek (entitásspecifikus)
|
||||
|
||||
[GenerateEntityLoaders([ENTITY])]
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
[GenerateEntityCollectionDAs([ENTITY])]
|
||||
}
|
||||
|
||||
end template
|
||||
|
||||
template GenerateDynamicColums(MClass, entityname)
|
||||
[loop (MClass->MAttribute)]
|
||||
{ "[MAttribute.name]", "[ConvertNameToSQLTableName([entityname])].[ConvertNameToSQLColumnName([MAttribute.name])]" },
|
||||
[end loop]
|
||||
[if (IsMasterEntity([MClass]) == "false")]
|
||||
[loop (MClass -> SuperClass as MBaseClass)]
|
||||
[if (GetInheritance([MClass]) == "tpc")]
|
||||
[GenerateDynamicColums([MBaseClass], [MClass.name])][break]
|
||||
[else]
|
||||
[GenerateDynamicColums([MBaseClass], [MBaseClass.name])][break]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
//***************************************************************************//
|
||||
//***************************************************************************//
|
||||
template GenerateDBHelper(MClass as ENTITY)
|
||||
internal sealed class [ENTITY.name]DBHelper : EntityDBHelper<[ENTITY.name]>
|
||||
{
|
||||
private Dictionary<string, string> dynamicColumns = new Dictionary<string, string>()
|
||||
{
|
||||
[GenerateDynamicColums([ENTITY], [ENTITY.name])]
|
||||
};
|
||||
|
||||
private const string dynamicQueryCommandText =
|
||||
"select " +
|
||||
"[ConvertNameToSQLTableName([ENTITY.name])].ID, " +
|
||||
"{COLUMNS}" +
|
||||
[GenerateDynamicFieldListWithBaseClassFields([ENTITY], [ENTITY.name])]
|
||||
"from " +
|
||||
"[ConvertNameToSQLTableName([ENTITY.name])] " +
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
"[GenerateSuperClassTableList([ENTITY])] " +
|
||||
[break]
|
||||
[end loop]
|
||||
"where " +
|
||||
"(1 = 1) ";
|
||||
|
||||
private const string emptyQueryCommandText =
|
||||
"select " +
|
||||
"[ConvertNameToSQLTableName([ENTITY.name])].ID, " +
|
||||
[GenerateFieldListWithBaseClassFields([ENTITY], [ENTITY.name])]
|
||||
"from " +
|
||||
"[ConvertNameToSQLTableName([ENTITY.name])] " +
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
"[GenerateSuperClassTableList([ENTITY])] " +
|
||||
[break]
|
||||
[end loop]
|
||||
"where " +
|
||||
"(1 = 1) ";
|
||||
|
||||
public override string EmptyQueryCommandText
|
||||
{
|
||||
get
|
||||
{
|
||||
return emptyQueryCommandText;
|
||||
}
|
||||
}
|
||||
|
||||
public override string DynamicQueryCommandText
|
||||
{
|
||||
get
|
||||
{
|
||||
return dynamicQueryCommandText;
|
||||
}
|
||||
}
|
||||
|
||||
public override IDictionary<string, string> DynamicColumns
|
||||
{
|
||||
get
|
||||
{
|
||||
return dynamicColumns;
|
||||
}
|
||||
}
|
||||
|
||||
protected override [ENTITY.name] CreateEntityInstance()
|
||||
{
|
||||
return [ENTITY.name].GiveAnInstance();
|
||||
}
|
||||
|
||||
#region Lekérdezés
|
||||
|
||||
public override void LoadEntityFields([ENTITY.name] entity, [GetCSharpSQLDataReaderType()] reader)
|
||||
{
|
||||
[GenerateLoadEntityCore([ENTITY], 1, "entity", "reader")]
|
||||
}
|
||||
|
||||
public override void LoadEntityFields([ENTITY.name] entity, [GetCSharpSQLDataReaderType()] reader, ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
|
||||
{
|
||||
int index = 1;
|
||||
if (columns == null)
|
||||
{
|
||||
columns = new List<string>(index);
|
||||
}
|
||||
[GenerateDynamicLoadEntityCore([ENTITY], "entity", "reader")]
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Paraméter kötés
|
||||
|
||||
public override void BindAttributes([ENTITY.name] entity, [GetCSharpSQLCommandType()] command)
|
||||
{
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [MBaseClass.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
|
||||
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false);
|
||||
[else]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null);
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])]
|
||||
|
||||
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false);
|
||||
[else]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null);
|
||||
[end if]
|
||||
[end loop]
|
||||
}
|
||||
|
||||
public override void DynamicBindAttributes([ENTITY.name] entity, [GetCSharpSQLCommandType()] command)
|
||||
{
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [MBaseClass.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
if (entity.HasChangedas("[ATTRIBUTE.name]"))
|
||||
{
|
||||
sb.Append("[ConvertNameToSQLColumnName([ATTRIBUTE.name])] = :[ConvertNameToCommandParameterName([ATTRIBUTE.name])],");
|
||||
|
||||
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false);
|
||||
[else]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null);
|
||||
[end if]
|
||||
}
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
|
||||
if (entity.HasChanged("[ATTRIBUTE.name]"))
|
||||
{
|
||||
sb.Append("[ConvertNameToSQLColumnName([ATTRIBUTE.name])] = :[ConvertNameToCommandParameterName([ATTRIBUTE.name])],");
|
||||
|
||||
[if (IsAttributeRequired([ATTRIBUTE]) == _True())]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], false);
|
||||
[else]
|
||||
DAUtil.BindParameter(command, "[ConvertNameToCommandParameterName([ATTRIBUTE.name])]", [GetCSharpDatasetType([ATTRIBUTE.type],IsAttributeUnicode([ATTRIBUTE]))][SDA_GetFieldLength([ATTRIBUTE])], entity.m_[ATTRIBUTE.name], entity.m_[ATTRIBUTE.name] == null);
|
||||
[end if]
|
||||
|
||||
}
|
||||
[end if]
|
||||
[end loop]
|
||||
command.CommandText = command.CommandText.Replace("{COLUMNS}", sb.ToString());
|
||||
}
|
||||
|
||||
public override void BindAssociations([ENTITY.name] entity, [GetCSharpSQLCommandType()] command)
|
||||
{
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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")]
|
||||
DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]);
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]);
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[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")]
|
||||
DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]);
|
||||
[else]
|
||||
[if ([ENDROLE.multiplicity] == "0..1")]
|
||||
[if (([STARTROLE.multiplicity] == "1..*") or ([STARTROLE.multiplicity] == "*") or ([STARTROLE.multiplicity] == "0..*"))]
|
||||
DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.Internal[ConvertRoleToName([ENDROLE])]);
|
||||
[end if]
|
||||
[end if]
|
||||
[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" ))]
|
||||
DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", entity.[ConvertRoleToName([ENDROLE])]);
|
||||
DAUtil.BindIdParameter(command, "[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", entity.[ConvertRoleToName([STARTROLE])]);
|
||||
[end loop]
|
||||
[end loop]
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja egy adott entitás lekérdezéseit, összerendeléseit, //
|
||||
// szétkapcsolásait. //
|
||||
//***************************************************************************//
|
||||
template GenerateEntityLoaders(MClass as ENTITY)
|
||||
#region Mint asszociációs osztály
|
||||
[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 (([STARTROLE.multiplicity] == "0..1") or ([STARTROLE.multiplicity] == "1"))]
|
||||
private const string m_LoadBy[DefineRoleName([ENDROLE])]Filter = @" and ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
|
||||
\[Obsolete("Teszteletlen, Cimby-t értesíteni kell erről, de azonnal!")\]
|
||||
public bool LoadBy[DefineRoleName([ENDROLE])]([ENDCLASS.name] partner, [ENTITY.name] entity)
|
||||
{
|
||||
return dbhelper.LoadByPartnerId(entity, m_LoadBy[ConvertRoleToName([ENDROLE])]Filter, partner.ID);
|
||||
}
|
||||
|
||||
[end if]
|
||||
[if (([ENDROLE.multiplicity] == "0..1") or ([ENDROLE.multiplicity] == "1"))]
|
||||
private const string m_LoadBy[DefineRoleName([STARTROLE])]Filter = @" and ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
|
||||
public bool LoadBy[DefineRoleName([STARTROLE])]([STARTCLASS.name] partner, [ENTITY.name] entity)
|
||||
{
|
||||
return dbhelper.LoadByPartnerId(entity, m_LoadBy[DefineRoleName([STARTROLE])]Filter, partner.ID);
|
||||
}
|
||||
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
#endregion
|
||||
|
||||
[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 ([STARTROLE.multiplicity] == "1" or [STARTROLE.multiplicity] == "0..1")]
|
||||
[if ([ENDROLE.multiplicity] == "1")]
|
||||
// a kapcsolómező nálunk van
|
||||
private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and ([ConvertNameToSQLTableName([ENTITY.name])].[ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
[else]
|
||||
[if ([STARTROLE.multiplicity] == "0..1" and ([ENDROLE.multiplicity] == "0..1"))]
|
||||
// kapcsolótábla van
|
||||
private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and (exists (select 1 from [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))] where [ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([ENTITY.name])].ID and [ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName("ID")])) ";
|
||||
[else]
|
||||
[if ([ENTITY.name] != [PARTNERCLASS.name])]
|
||||
// kapcsolómező a másik táblában van, és nem önmagára mutat
|
||||
private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and (exists (select 1 from [ConvertNameToSQLTableName([PARTNERCLASS.name])] where [ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([ENTITY.name])].ID and [ConvertNameToSQLTableName([PARTNERCLASS.name])].ID = :[ConvertNameToCommandParameterName("ID")])) ";
|
||||
[else]
|
||||
// önmagára mutat
|
||||
private const string m_LoadBy[ConvertRoleToName([ENDROLE])]Filter = @" and (exists (select 1 from [ConvertNameToSQLTableName([PARTNERCLASS.name])] T_TEMP where T_TEMP.[ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = [ConvertNameToSQLTableName([ENTITY.name])].ID and T_TEMP.ID = :[ConvertNameToCommandParameterName("ID")])) ";
|
||||
[end if]
|
||||
[end if]
|
||||
[end if]
|
||||
|
||||
public bool LoadBy[ConvertRoleToName([ENDROLE])](int id, [ENTITY.name] entity)
|
||||
{
|
||||
return dbhelper.LoadByPartnerId(entity, m_LoadBy[ConvertRoleToName([ENDROLE])]Filter, id);
|
||||
}
|
||||
|
||||
[if (([STARTROLE.multiplicity] == "0..1") and ([ENDROLE.multiplicity] == "0..1"))]
|
||||
private const string m_Associate[DefineRoleName([ENDROLE])]CommandText = @"
|
||||
insert into [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))]
|
||||
( [ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))], [ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] )
|
||||
values ( :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))], :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))] )";
|
||||
|
||||
public void Associate[DefineRoleName([ENDROLE])]([ENTITY.name] entity, [PARTNERCLASS.name] partner)
|
||||
{
|
||||
using([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_Associate[DefineRoleName([ENDROLE])]CommandText))
|
||||
{
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = entity.ID;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", [GetCSharpSQLIDType()]).Value = partner.ID;
|
||||
command.ExecuteNonQuery(); // EntityDA.tdl 207
|
||||
}
|
||||
}
|
||||
|
||||
private const string m_DeAssociate[DefineRoleName([ENDROLE])]CommandText = @"
|
||||
delete from [ConvertNameToSQLTableName(ConvertAssociationRolesToSwitchTableName([ENDROLE], [STARTROLE]))]
|
||||
where ([ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))])";
|
||||
|
||||
public void DeAssociate[DefineRoleName([ENDROLE])]([ENTITY.name] entity)
|
||||
{
|
||||
using([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_DeAssociate[DefineRoleName([ENDROLE])]CommandText))
|
||||
{
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = entity.ID;
|
||||
command.ExecuteNonQuery(); // EntityDA.tdl 219
|
||||
}
|
||||
}
|
||||
|
||||
[end if]
|
||||
[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" ))]
|
||||
public bool LoadBy[DefineRoleName([STARTROLE])]([STARTCLASS.name] start, [ENDCLASS.name] end, [ENTITY.name] entity)
|
||||
{
|
||||
using ([GetCSharpSQLCommandType()] command = dbhelper.CreateEmptyQueryCommand())
|
||||
{
|
||||
command.CommandText += @" and ([ConvertNameToSQLColumnName(ConvertRoleToName([STARTROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]) and ([ConvertNameToSQLColumnName(ConvertRoleToName([ENDROLE]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]) ";
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([STARTROLE]))]", [GetCSharpSQLIDType()]).Value = start.ID;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName(ConvertRoleToName([ENDROLE]))]", [GetCSharpSQLIDType()]).Value = end.ID;
|
||||
|
||||
return dbhelper.LoadSingleEntity(entity, command); // EntityDA.tdl 457
|
||||
}
|
||||
}
|
||||
|
||||
public bool LoadBy[DefineRoleName([ENDROLE])]([ENDCLASS.name] start, [STARTCLASS.name] end, [ENTITY.name] entity)
|
||||
{
|
||||
return this.LoadBy[DefineRoleName([STARTROLE])](end, start, entity);
|
||||
}
|
||||
|
||||
[end loop]
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,163 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DA-hoz az insert művelet megvalósítását. //
|
||||
//***************************************************************************//
|
||||
template GenerateInsertEntity(MClass as ENTITY)
|
||||
#region InsertEntity
|
||||
|
||||
private const string m_InsertCommandText = @"
|
||||
insert into [ConvertNameToSQLTableName([ENTITY.name])] (
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [MBaseClass.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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" ))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
[ConvertNameToSQLColumnName([ATTRIBUTE.name])],
|
||||
[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") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[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" ))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))],
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
TOROLT,
|
||||
SERIAL,
|
||||
CREATED,
|
||||
[if (IsMasterEntity([ENTITY]) == "true" || GetInheritance([ENTITY]) == "tpc")]
|
||||
CREATOR)
|
||||
[else]
|
||||
CREATOR,
|
||||
ID)
|
||||
[end if]
|
||||
values (
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [MBaseClass.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
:[ConvertNameToCommandParameterName([ATTRIBUTE.name])],
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
||||
:[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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" ))]
|
||||
:[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
:[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE where [ATTRIBUTE.name] != [ENTITY.name])]
|
||||
[if (IsComputedAttribute([ATTRIBUTE]) == _False())]
|
||||
:[ConvertNameToCommandParameterName([ATTRIBUTE.name])],
|
||||
[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") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity] == "*") or ([StartRole.multiplicity] == "0..*"))))]
|
||||
:[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
[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" ))]
|
||||
:[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
:[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
:[ConvertNameToCommandParameterName("Torolt")],
|
||||
:[ConvertNameToCommandParameterName("Serial")],
|
||||
:[ConvertNameToCommandParameterName("Created")],
|
||||
[if (IsMasterEntity([ENTITY]) == "true" || GetInheritance([ENTITY]) == "tpc")]
|
||||
:[ConvertNameToCommandParameterName("Creator")]);
|
||||
|
||||
SELECT SCOPE_IDENTITY() as ID;
|
||||
[else]
|
||||
:[ConvertNameToCommandParameterName("Creator")],
|
||||
:[ConvertNameToCommandParameterName("ID")] ) -- Leszármaztatott entitás ID-ja
|
||||
[end if]
|
||||
|
||||
";
|
||||
|
||||
public override void InsertEntity([ENTITY.name] entity)
|
||||
{
|
||||
[if (IsMasterEntity([ENTITY]) == "false" && GetInheritance([ENTITY]) != "tpc")]
|
||||
entity.InheritedDA.InsertEntity(entity);
|
||||
[else]
|
||||
entity.Serial = 0;
|
||||
[if (GetTaggedValue([ENTITY], "anonymous") == "all" || GetTaggedValue([ENTITY], "anonymous") == "insert")]
|
||||
SetEntityCreator(entity, DateTime.Now, "??????");
|
||||
[else]
|
||||
SetEntityCreator(entity, DateTime.Now, UserContext.Instance.UniqueIdentifier);
|
||||
[end if]
|
||||
[end if]
|
||||
|
||||
using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_InsertCommandText))
|
||||
{
|
||||
dbhelper.BindAttributes(entity, command);
|
||||
dbhelper.BindAssociations(entity, command);
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Torolt")]", [GetCSharpDatasetType("Boolean", "")]).Value = false;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Serial")]", [GetCSharpDatasetType("Integer", "")]).Value = 0;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Created")]", [GetCSharpDatasetType("DateTime", "")]).Value = entity.EntityCreated;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Creator")]", [GetCSharpDatasetType("ID", "")]).Value = entity.EntityCreator;
|
||||
[if (IsMasterEntity([ENTITY]) == "true" || GetInheritance([ENTITY]) == "tpc")]
|
||||
|
||||
entity.ID = Convert.ToInt32(command.ExecuteScalar());
|
||||
[else]
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpDatasetType("ID", "")]).Value = entity.ID; // leszármaztatott entitás ID-ja
|
||||
|
||||
command.ExecuteNonQuery();
|
||||
[end if]
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
|
@ -0,0 +1,26 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DA-hoz az alaphalmaz lekérdezését megvalósító műveletet. //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadBaseSet(MClass as ENTITY)
|
||||
\[Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")\]
|
||||
public override void LoadWithFilter(IEntityCollection<[ENTITY.name]> collection, string filter, Dictionary<string, object> commandParameters = null)
|
||||
{
|
||||
using (SDA.DataProvider.SDACommand command = dbhelper.CreateEmptyQueryCommand())
|
||||
{
|
||||
command.CommandText += filter;
|
||||
dbhelper.CreateParameterBinding(command, commandParameters);
|
||||
dbhelper.LoadEntityCollection(collection, command);
|
||||
}
|
||||
}
|
||||
|
||||
\[Obsolete("Ezt ne használjátok, mert mindenhova bele kellene fogalmazni a tanév szűrést is! Meg fog majd szűnni!")\]
|
||||
public override void LoadWithFilter(IEntityCollection<[ENTITY.name]> collection, string filter, ColumnFilterMode columnFilterMode, IEnumerable<string> columns, Dictionary<string, object> commandParameters = null)
|
||||
{
|
||||
using (SDA.DataProvider.SDACommand command = dbhelper.CreateDynamicQueryCommand(columnFilterMode, columns))
|
||||
{
|
||||
command.CommandText += filter;
|
||||
dbhelper.CreateParameterBinding(command, commandParameters);
|
||||
dbhelper.LoadEntityCollection(collection, command, columnFilterMode, columns);
|
||||
}
|
||||
}
|
||||
end template
|
|
@ -0,0 +1,34 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DA rétegbe egy entitás lekérdezését azonosító alapján //
|
||||
//***************************************************************************//
|
||||
template GenerateLoadByID(MClass as ENTITY)
|
||||
public override bool LoadEntity([ENTITY.name] entity, int entityId)
|
||||
{
|
||||
return LoadById(entity, entityId);
|
||||
}
|
||||
|
||||
public override bool FilteredLoadEntity([ENTITY.name] entity, int entityId, ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
|
||||
{
|
||||
return LoadById(entity, entityId, columnFilterMode, columns);
|
||||
}
|
||||
|
||||
public bool LoadById([ENTITY.name] entity, int entityId)
|
||||
{
|
||||
using (SDA.DataProvider.SDACommand command = dbhelper.CreateEmptyQueryCommand())
|
||||
{
|
||||
command.CommandText += " and ([ConvertNameToSQLTableName([ENTITY.name])].ID = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]).Value = entityId;
|
||||
return dbhelper.LoadSingleEntity(entity, command);
|
||||
}
|
||||
}
|
||||
|
||||
public bool LoadById([ENTITY.name] entity, int entityId, ColumnFilterMode columnFilterMode, IEnumerable<string> columns)
|
||||
{
|
||||
using (SDA.DataProvider.SDACommand command = dbhelper.CreateDynamicQueryCommand(columnFilterMode, columns))
|
||||
{
|
||||
command.CommandText += " and ([ConvertNameToSQLTableName([ENTITY.name])].ID = :[ConvertNameToCommandParameterName("ID")]) ";
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]).Value = entityId;
|
||||
return dbhelper.LoadSingleEntity(entity, command, columnFilterMode, columns);
|
||||
}
|
||||
}
|
||||
end template
|
|
@ -0,0 +1,132 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DA-hoz a zárolási műveletet. //
|
||||
//***************************************************************************//
|
||||
template GenerateNoWaitForLock(ENTITYNAME)
|
||||
#region No wait for lock
|
||||
|
||||
private string GetNoWaitForLockCommandText()
|
||||
{
|
||||
string result = null;
|
||||
switch (SDAServer.Instance.Configuration.DataBaseType)
|
||||
{
|
||||
case DataBaseType.MSSQL:
|
||||
{
|
||||
result = "select SERIAL from [ConvertNameToSQLTableName([ENTITYNAME])] with(updlock) where ID = :[ConvertNameToCommandParameterName("ID")] {0} ";
|
||||
break;
|
||||
}
|
||||
case DataBaseType.ORACLE:
|
||||
case DataBaseType.NATIVEORACLE:
|
||||
{
|
||||
result = "select SERIAL from [ConvertNameToSQLTableName([ENTITYNAME])] where ID = :[ConvertNameToCommandParameterName("ID")] {0} for update nowait ";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw new NotSupportedException(SDAServer.Instance.Configuration.DataBaseType.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
result = String.Format(result, "");
|
||||
return result;
|
||||
}
|
||||
|
||||
public int NoWaitForLock([ENTITYNAME] entity)
|
||||
{
|
||||
//Console.WriteLine("*** NoWaitForLock 35");
|
||||
using ([GetCSharpSQLCommandType()] command = DataAccessor.CreateCommand(this.GetNoWaitForLockCommandText()))
|
||||
{
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]).Value = entity.ID;
|
||||
int result = -1;
|
||||
using ([GetCSharpSQLDataReaderType()] reader = command.ExecuteReader())
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
result = Convert.ToInt32(reader.GetValue(0));
|
||||
if (reader.Read())
|
||||
{
|
||||
throw new Kreta.Framework.DataIntegrityException("Egyediség megsértése: [ENTITYNAME].");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Kreta.Framework.Exceptions.EntityNotFoundException("[ENTITYNAME]", entity.ID);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* REFACTOR
|
||||
template GenerateNoWaitForLock(classname)
|
||||
#region No wait for lock
|
||||
[GenerateCommandGetterProperty("NoWaitForLock")]
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns>A műveletet elvégző SQL parancs.</returns>
|
||||
private [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("NoWaitForLock")]()
|
||||
{
|
||||
[GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()]();
|
||||
result.CommandType = CommandType.Text;
|
||||
result.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]);
|
||||
switch (SDAServer.Instance.Configuration.DataBaseType)
|
||||
{
|
||||
case DataBaseType.MSSQL:
|
||||
{
|
||||
result.CommandText = "select SERIAL from [ConvertNameToSQLTableName([classname])] with(updlock) where ID = :[ConvertNameToCommandParameterName("ID")] ";
|
||||
break;
|
||||
}
|
||||
case DataBaseType.ORACLE:
|
||||
case DataBaseType.NATIVEORACLE:
|
||||
{
|
||||
result.CommandText = "select SERIAL from [ConvertNameToSQLTableName([classname])] where ID = :[ConvertNameToCommandParameterName("ID")] ";
|
||||
result.CommandText += " for update nowait";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
throw new NotSupportedException(SDAServer.Instance.Configuration.DataBaseType.ToString());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int NoWaitForLock([classname] entity)
|
||||
{
|
||||
[GetCSharpSQLDataReaderType()] reader = null;
|
||||
[GetCSharpSQLCommandType()] command = this.[ConvertNameToCommandName("NoWaitForLock")];
|
||||
[GenerateCommandInit("command")]
|
||||
command.Parameters\["[ConvertNameToCommandParameterName("ID")]"\].Value = entity.ID;
|
||||
|
||||
int result = -1;
|
||||
using (reader = command.ExecuteReader())
|
||||
{
|
||||
if (reader.Read())
|
||||
{
|
||||
result = Convert.ToInt32(reader.GetValue(0));
|
||||
System.Diagnostics.Debug.Assert(reader.Read() == false, "Több ilyen entitást találtam az adatbázisban..."); // XXX
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new Kreta.Framework.Exceptions.EntityNotFoundException("[classname]", entity.ID);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
||||
*/
|
|
@ -0,0 +1,89 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja egy entitás asszociációinak módosítóműveletét a DA-ban //
|
||||
//***************************************************************************//
|
||||
template GenerateUpdateAssociations(MClass as ENTITY)
|
||||
#region UpdateAssociations
|
||||
|
||||
private const string m_UpdateAssociationCommandText = @"
|
||||
update [ConvertNameToSQLTableName([ENTITY.name])]
|
||||
set
|
||||
[if (GetInheritance([ENTITY]) == "tpc")]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity]=="*") or ([StartRole.multiplicity]=="0..*"))))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[loop (ENTITY -> SuperClass as MBaseClass)]
|
||||
[loop (MBaseClass -> 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" ))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end loop]
|
||||
[end if]
|
||||
[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") or (([EndRole.multiplicity] == "0..1") and (([StartRole.multiplicity] == "1..*") or ([StartRole.multiplicity]=="*") or ([StartRole.multiplicity]=="0..*"))))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
[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" ))]
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([EndRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([EndRole]))],
|
||||
[ConvertNameToSQLColumnName(ConvertRoleToName([StartRole]))] = :[ConvertNameToCommandParameterName(ConvertRoleToName([StartRole]))],
|
||||
[end loop]
|
||||
[end loop]
|
||||
SERIAL = ISNULL(SERIAL,0) + 1,
|
||||
LASTCHANGED = :[ConvertNameToCommandParameterName("LastChanged")],
|
||||
MODIFIER = :[ConvertNameToCommandParameterName("Modifier")]
|
||||
where
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
(ID = :[ConvertNameToCommandParameterName("ID")]) and (ISNULL(SERIAL,0) = :[ConvertNameToCommandParameterName("Serial")])
|
||||
[else]
|
||||
(ID = :[ConvertNameToCommandParameterName("ID")])
|
||||
[end if]
|
||||
";
|
||||
|
||||
public override bool UpdateAssociations([ENTITY.name] entity)
|
||||
{
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
if (entity.InheritedDA.UpdateAssociations(entity) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
[end if]
|
||||
|
||||
using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_UpdateAssociationCommandText))
|
||||
{
|
||||
dbhelper.BindAssociations(entity, command);
|
||||
|
||||
DateTime lastchanged = DateTime.Now;
|
||||
var modifier = UserContext.Instance.UniqueIdentifier;
|
||||
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpDatasetType("ID", "")]).Value = entity.ID;
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Serial")]", [GetCSharpDatasetType("Integer", "")]).Value = entity.Serial;
|
||||
[end if]
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("LastChanged")]", [GetCSharpDatasetType("DateTime", "")]).Value = lastchanged;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Modifier")]", [GetCSharpDatasetType("ID", "")]).Value = modifier;
|
||||
|
||||
bool result = (command.ExecuteNonQuery() == 1);
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
if (result == true)
|
||||
{
|
||||
entity.Serial++;
|
||||
SetEntityModifier(entity, lastchanged, modifier);
|
||||
}
|
||||
[end if]
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
|
@ -0,0 +1,64 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja egy entitás módosító műveletét a DA-ban //
|
||||
//***************************************************************************//
|
||||
template GenerateUpdateEntity(MClass as ENTITY)
|
||||
#region UpdateEntity
|
||||
|
||||
private const string m_UpdateAttributesCommandText = @"
|
||||
update [ConvertNameToSQLTableName([ENTITY.name])]
|
||||
set
|
||||
{COLUMNS}
|
||||
SERIAL = ISNULL(SERIAL,0) + 1,
|
||||
LASTCHANGED = :[ConvertNameToCommandParameterName("LastChanged")],
|
||||
MODIFIER = :[ConvertNameToCommandParameterName("Modifier")],
|
||||
TOROLT = :[ConvertNameToCommandParameterName("Torolt")]
|
||||
where
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
(ID = :[ConvertNameToCommandParameterName("ID")]) and (ISNULL(SERIAL,0) = :[ConvertNameToCommandParameterName("Serial")])
|
||||
[else]
|
||||
(ID = :[ConvertNameToCommandParameterName("ID")])
|
||||
[end if]
|
||||
";
|
||||
|
||||
public override bool UpdateEntity([ENTITY.name] entity)
|
||||
{
|
||||
[if (IsMasterEntity([ENTITY]) == "false")]
|
||||
if (entity.InheritedDA.UpdateEntity(entity) == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
[end if]
|
||||
using ([GetCSharpSQLCommandType()] command = DAUtil.CreateCommand(m_UpdateAttributesCommandText))
|
||||
{
|
||||
bool result = true;
|
||||
dbhelper.DynamicBindAttributes(entity, command);
|
||||
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
[if (GetTaggedValue([ENTITY], "anonymous") == "all" || GetTaggedValue([ENTITY], "anonymous") == "update")]
|
||||
SetEntityModifier(entity, DateTime.Now, "??????");
|
||||
[else]
|
||||
SetEntityModifier(entity, DateTime.Now, UserContext.Instance.UniqueIdentifier);
|
||||
[end if]
|
||||
[end if]
|
||||
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpDatasetType("ID", "")]).Value = entity.ID;
|
||||
[if (IsMasterEntity([ENTITY]) == "true")]
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Serial")]", [GetCSharpDatasetType("Integer", "")]).Value = entity.Serial;
|
||||
[end if]
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("LastChanged")]", [GetCSharpDatasetType("DateTime", "")]).Value = entity.EntityLastChanged;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Modifier")]", [GetCSharpDatasetType("ID", "")]).Value = entity.EntityModifier;
|
||||
command.Parameters.Add("[ConvertNameToCommandParameterName("Torolt")]", [GetCSharpDatasetType("Boolean", "")]).Value = entity.Torolt;
|
||||
|
||||
result = (command.ExecuteNonQuery() == 1);
|
||||
[if(IsMasterEntity([ENTITY]) == "true")]
|
||||
if (result == true)
|
||||
entity.Serial++;
|
||||
[end if]
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
|
@ -0,0 +1,47 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DA-hoz a zárolási műveletet. //
|
||||
// //
|
||||
// NINCS HASZNÁLVA! //
|
||||
//***************************************************************************//
|
||||
template GenerateWaitForLock(classname)
|
||||
#region Wait for lock
|
||||
[GenerateCommandGetterProperty("WaitForLock")]
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns>A műveletet elvégző SQL parancs.</returns>
|
||||
private [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("WaitForLock")]()
|
||||
{
|
||||
[GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()]();
|
||||
result.CommandType = CommandType.Text;
|
||||
result.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]);
|
||||
result.Parameters.Add("[ConvertNameToCommandParameterName("TimeOut")]", [GetCSharpSQLIDType()]);// XXX nem hasznalt parameter!
|
||||
result.CommandText =
|
||||
"select " +
|
||||
"SERIAL " +
|
||||
"from " +
|
||||
"[ConvertNameToSQLTableName([classname])] " +
|
||||
"where " +
|
||||
"ID = :[ConvertNameToCommandParameterName("ID")] " +
|
||||
"for update";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void WaitForLock([classname] entity, int timeout)
|
||||
{
|
||||
[GetCSharpSQLCommandType()] command = this.[ConvertNameToCommandName("WaitForLock")];
|
||||
[GenerateCommandInit("command")]
|
||||
command.Parameters\["[ConvertNameToCommandParameterName("ID")]"\].Value = entity.ID;
|
||||
command.Parameters\["[ConvertNameToCommandParameterName("TimeOut")]"\].Value = timeout;
|
||||
|
||||
command.ExecuteNonQuery(); // XXX nincs rendesen kigyurva!
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a DA-hoz a zárolási műveletet. //
|
||||
// //
|
||||
// NINCS HASZNÁLVA! //
|
||||
//***************************************************************************//
|
||||
template GenerateWaitLock(classname)
|
||||
#region Wait lock
|
||||
[GenerateCommandGetterProperty("WaitLock")]
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns>A műveletet elvégző SQL parancs.</returns>
|
||||
private [GetCSharpSQLCommandType()] [GenerateCommandCreatorName("WaitLock")]()
|
||||
{
|
||||
[GetCSharpSQLCommandType()] result = new [GetCSharpSQLCommandType()]();
|
||||
result.CommandType = CommandType.Text;
|
||||
result.Parameters.Add("[ConvertNameToCommandParameterName("ID")]", [GetCSharpSQLIDType()]);
|
||||
result.CommandText =
|
||||
"select " +
|
||||
"SERIAL " +
|
||||
"from " +
|
||||
"[ConvertNameToSQLTableName([classname])] " +
|
||||
"where " +
|
||||
"ID = :[ConvertNameToCommandParameterName("ID")] " +
|
||||
"for update";
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public void WaitLock([classname] entity)
|
||||
{
|
||||
[GetCSharpSQLCommandType()] command = this.[ConvertNameToCommandName("WaitLock")];
|
||||
[GenerateCommandInit("command")]
|
||||
command.Parameters\["[ConvertNameToCommandParameterName("ID")]"\].Value = entity.ID;
|
||||
|
||||
command.ExecuteNonQuery(); // XXX nincs rendesen kigyurva!
|
||||
}
|
||||
|
||||
#endregion
|
||||
end template
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
proc GenerateViewAttributeLoad(TYPE, VALUE)
|
||||
switch (ToLower([TYPE]))
|
||||
case "integer": return "Convert.ToInt32(" [VALUE] ")";
|
||||
case "string": return "Convert.ToString(" [VALUE] ")";
|
||||
case "datetime": return "Convert.ToDateTime(" [VALUE] ")";
|
||||
case "boolean": return "(" [VALUE] ".ToString() == \"T\")";
|
||||
case "char": return "Convert.ToString(" [VALUE] ")";
|
||||
case "double": return "Convert.ToDouble(" [VALUE] ")";
|
||||
case "float": return "Convert.ToDouble(" [VALUE] ")";
|
||||
case "id": return "Convert.ToInt32(" [VALUE] ")";
|
||||
case "dictionaryitem": return "Convert.ToInt32(" [VALUE] ")";
|
||||
case "binary": return "(byte[])(" [VALUE] ")";
|
||||
case "longstring": return "Convert.ToString(" [VALUE] ")";
|
||||
end switch
|
||||
end proc
|
||||
|
||||
|
||||
template GenerateViewBase(MClass as VIEW)
|
||||
[BOM]using System;
|
||||
using System.Collections;
|
||||
using System.Data;
|
||||
using Kreta.Framework;
|
||||
|
||||
namespace SDA.[ProjectName].Entities
|
||||
{
|
||||
[GenerateViewCollection([VIEW])]
|
||||
|
||||
public class [VIEW.name] : ViewBase
|
||||
{
|
||||
[loop (VIEW -> MAttribute as ATTRIBUTE)]
|
||||
protected [GetCSharpType([ATTRIBUTE.type])] m_[ATTRIBUTE.name] = [GetCSharpDefaultValueOfAttribute([ATTRIBUTE])];
|
||||
protected bool m_Is[ATTRIBUTE.name]Null = true;
|
||||
[end loop]
|
||||
|
||||
#region Tulajdonságok
|
||||
|
||||
[loop (VIEW -> MAttribute as ATTRIBUTE)]
|
||||
public virtual [GetCSharpType([ATTRIBUTE.type])] [ATTRIBUTE.name]
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_[ATTRIBUTE.name];
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool Is[ATTRIBUTE.name]Null
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_Is[ATTRIBUTE.name]Null;
|
||||
}
|
||||
}
|
||||
|
||||
[end loop]
|
||||
#endregion
|
||||
|
||||
#region Betöltés
|
||||
|
||||
internal void InternalLoadFromReader([GetCSharpSQLDataReaderType()] reader)
|
||||
{
|
||||
LoadFromReader(reader);
|
||||
}
|
||||
|
||||
protected override void LoadFromReader([GetCSharpSQLDataReaderType()] reader)
|
||||
{
|
||||
[loop (VIEW -> MAttribute as ATTRIBUTE)]
|
||||
int [ToLower([ATTRIBUTE.name])]ordinal = reader.GetOrdinal("[ATTRIBUTE.name]");
|
||||
[end loop]
|
||||
|
||||
[loop (VIEW -> MAttribute as ATTRIBUTE)]
|
||||
if (reader.IsDBNull([ToLower([ATTRIBUTE.name])]ordinal) == false)
|
||||
{
|
||||
m_Is[ATTRIBUTE.name]Null = false;
|
||||
m_[ATTRIBUTE.name] = [GenerateViewAttributeLoad([ATTRIBUTE.type], "reader.GetValue(" ToLower([ATTRIBUTE.name]) "ordinal" ")")];
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Is[ATTRIBUTE.name]Null = true;
|
||||
}
|
||||
[end loop]
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
end template
|
||||
|
||||
|
||||
template GenerateViewCollection(MClass as VIEW)
|
||||
public class [VIEW.name]Collection : ViewCollectionBase
|
||||
{
|
||||
protected override void LoadFromReader([GetCSharpSQLDataReaderType()] reader)
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
[VIEW.name] item = new [VIEW.name]();
|
||||
item.InternalLoadFromReader(reader);
|
||||
Add(item);
|
||||
}
|
||||
}
|
||||
|
||||
protected void Add([VIEW.name] item)
|
||||
{
|
||||
m_Items.Add(item);
|
||||
}
|
||||
|
||||
public [VIEW.name] this\[int index\]
|
||||
{
|
||||
get
|
||||
{
|
||||
return ([VIEW.name])m_Items\[index\];
|
||||
}
|
||||
}
|
||||
}
|
||||
end template
|
||||
|
354
Tools/CodeGeneration/Templates/Server/MetaModel/BaseClasses.tdl
Normal file
354
Tools/CodeGeneration/Templates/Server/MetaModel/BaseClasses.tdl
Normal file
|
@ -0,0 +1,354 @@
|
|||
template GenerateBaseClasses()
|
||||
abstract class MetaElementBase : IMetaDataBase
|
||||
{
|
||||
readonly string _id;
|
||||
readonly Guid _guid;
|
||||
readonly TagedValueCollection _tagedValues;
|
||||
|
||||
public string ID { get { return _id; } }
|
||||
|
||||
public Guid GUID { get { return _guid; } }
|
||||
|
||||
public TagedValueCollection TagedValues { get { return _tagedValues; } }
|
||||
|
||||
public string Name { get; set; }
|
||||
|
||||
public string Description { get; set; }
|
||||
|
||||
protected MetaElementBase(int id, string guid)
|
||||
{
|
||||
_id = id.ToString(CultureInfo.InvariantCulture);
|
||||
_guid = new Guid(guid);
|
||||
_tagedValues = new TagedValueCollection();
|
||||
Name = Description = "";
|
||||
}
|
||||
}
|
||||
|
||||
sealed class MetaPaletteLink : IMetaPaletteLink
|
||||
{
|
||||
public string Name { get; private set; }
|
||||
|
||||
public MetaPaletteCollection PartnerPalettes { get; private set; }
|
||||
|
||||
public IMetaPalette OwnerPalette { get; private set; }
|
||||
|
||||
public IMetaPaletteAssociation Association { get; private set; }
|
||||
|
||||
void SelectChildPalettes(IMetaPalette curentPalette)
|
||||
{
|
||||
foreach (IMetaPalette child in curentPalette.InheritedMetaPalettes.Values)
|
||||
{
|
||||
PartnerPalettes.Add(child.Name, child);
|
||||
SelectChildPalettes(child);
|
||||
}
|
||||
}
|
||||
|
||||
public MetaPaletteLink(IMetaPaletteRole targetRole, IMetaPalette ownerPalette)
|
||||
{
|
||||
OwnerPalette = ownerPalette;
|
||||
Association = targetRole.Association;
|
||||
IMetaPalette endMetaPalette = targetRole.OwnerMetaPalette;
|
||||
IMetaPalette startMetaPalette = targetRole.Association.AssociatedRoles.Values
|
||||
.First(startRole => startRole.ID != targetRole.ID)
|
||||
.OwnerMetaPalette;
|
||||
// név beállítása
|
||||
if (startMetaPalette == OwnerPalette) // sima link, megyezik az asszociációval
|
||||
{
|
||||
Name = string.IsNullOrEmpty(targetRole.Name) ?
|
||||
endMetaPalette.Name : // nincs role definiálva
|
||||
targetRole.Name; // van role definiálva
|
||||
}
|
||||
else // ez a link egy asszociációs osztály szemszögéből látja az asszociációt
|
||||
{
|
||||
Name = string.IsNullOrEmpty(targetRole.Name) ?
|
||||
endMetaPalette.Name + OwnerPalette.Name : // nincs role definiálva
|
||||
targetRole.Name + OwnerPalette.Name; // van role definiálva
|
||||
}
|
||||
// elkészítem a partner paletták listáját
|
||||
PartnerPalettes = new MetaPaletteCollection { { targetRole.OwnerMetaPalette.Name, targetRole.OwnerMetaPalette } };
|
||||
SelectChildPalettes(targetRole.OwnerMetaPalette);
|
||||
// normál asszociációs link
|
||||
if( OwnerPalette != startMetaPalette || Association.AssociationMetaPalette == null )
|
||||
{
|
||||
return;
|
||||
}
|
||||
PartnerPalettes.Add(Association.AssociationMetaPalette.Name, Association.AssociationMetaPalette);
|
||||
SelectChildPalettes(Association.AssociationMetaPalette);
|
||||
}
|
||||
}
|
||||
|
||||
sealed class MetaPalette : MetaElementBase, IMetaPalette
|
||||
{
|
||||
public string DBTableName { get; set; }
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Local
|
||||
internal string BaseMetaPaletteName { get; set; }
|
||||
|
||||
readonly Lazy<IMetaPalette> _baseMetaPalette;
|
||||
|
||||
IMetaPalette GetBaseMetaPalette()
|
||||
{
|
||||
IMetaPalette baseMetaPalette;
|
||||
if (BaseMetaPaletteName != null &&
|
||||
_palettes.TryGetValue(BaseMetaPaletteName, out baseMetaPalette))
|
||||
{
|
||||
return baseMetaPalette;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IMetaPalette BaseMetaPalette { get { return BaseMetaPaletteName == null ? null : _baseMetaPalette.Value; } }
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Local
|
||||
internal string AssociationID { get; set; }
|
||||
|
||||
readonly Lazy<IMetaPaletteAssociation> _association;
|
||||
|
||||
IMetaPaletteAssociation GetAssociation()
|
||||
{
|
||||
IMetaPaletteAssociation association;
|
||||
if (AssociationID != null &&
|
||||
_associations.TryGetValue(AssociationID, out association))
|
||||
{
|
||||
return association;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IMetaPaletteAssociation Association { get { return AssociationID == null ? null : _association.Value; } }
|
||||
|
||||
readonly Lazy<MetaPaletteCollection> _inheritedMetaPalettes;
|
||||
|
||||
MetaPaletteCollection GetInheritedMetaPalettes()
|
||||
{
|
||||
var inheritedMetaPalettes = new MetaPaletteCollection();
|
||||
foreach (IMetaPalette palette in
|
||||
_palettes.Values
|
||||
.Where(p => p.BaseMetaPalette == this))
|
||||
{
|
||||
inheritedMetaPalettes.Add(palette.Name, palette);
|
||||
}
|
||||
return inheritedMetaPalettes;
|
||||
}
|
||||
|
||||
public MetaPaletteCollection InheritedMetaPalettes { get { return _inheritedMetaPalettes.Value; } }
|
||||
|
||||
readonly Lazy<MetaPaletteFieldCollection> _fields;
|
||||
|
||||
MetaPaletteFieldCollection GetAttributes()
|
||||
{
|
||||
var fields = new MetaPaletteFieldCollection();
|
||||
foreach (IMetaPaletteField field in
|
||||
_attributes.Values
|
||||
.Where(f => f.OwnerMetaPalette == this))
|
||||
{
|
||||
fields.Add(field.Name, field);
|
||||
}
|
||||
return fields;
|
||||
}
|
||||
|
||||
public MetaPaletteFieldCollection Attributes { get { return _fields.Value; } }
|
||||
|
||||
readonly Lazy<MetaPaletteFieldCollection> _allFields;
|
||||
|
||||
MetaPaletteFieldCollection GetAllAttributes()
|
||||
{
|
||||
var allFields = new MetaPaletteFieldCollection();
|
||||
for (IMetaPalette current = this; current != null; current = current.BaseMetaPalette)
|
||||
{
|
||||
foreach (IMetaPaletteField field in current.Attributes.Values)
|
||||
{
|
||||
allFields.Add(field.Name, field);
|
||||
}
|
||||
}
|
||||
return allFields;
|
||||
}
|
||||
|
||||
public MetaPaletteFieldCollection AllAttributes { get { return _allFields.Value; } }
|
||||
|
||||
readonly Lazy<MetaPaletteLinkCollection> _links;
|
||||
|
||||
MetaPaletteLinkCollection GetLinks()
|
||||
{
|
||||
var links = new MetaPaletteLinkCollection();
|
||||
for (IMetaPalette current = this; current != null; current = current.BaseMetaPalette)
|
||||
{
|
||||
// ReSharper disable once AccessToModifiedClosure
|
||||
foreach (MetaPaletteLink mpl in
|
||||
current.Roles.Values
|
||||
.Select(startRole => new MetaPaletteLink(
|
||||
startRole.Association.AssociatedRoles.Values.First(endRole => startRole.ID != endRole.ID),
|
||||
current)))
|
||||
{
|
||||
links.Add(mpl.Name, mpl);
|
||||
}
|
||||
if (current.Association == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
// ReSharper disable once AccessToModifiedClosure
|
||||
foreach (MetaPaletteLink mpl in
|
||||
current.Association.AssociatedRoles.Values
|
||||
.Select(role => new MetaPaletteLink(role, current)))
|
||||
{
|
||||
links.Add(mpl.Name, mpl);
|
||||
}
|
||||
}
|
||||
return links;
|
||||
}
|
||||
|
||||
public MetaPaletteLinkCollection Links { get { return _links.Value; } }
|
||||
|
||||
readonly Lazy<MetaPaletteRoleCollection> _connectedRoles;
|
||||
|
||||
MetaPaletteRoleCollection GetRoles()
|
||||
{
|
||||
var connectedRoles = new MetaPaletteRoleCollection();
|
||||
foreach (IMetaPaletteRole role in
|
||||
_roles.Values
|
||||
.Where(r => r.OwnerMetaPalette == this))
|
||||
{
|
||||
connectedRoles.Add(role.ID, role);
|
||||
}
|
||||
return connectedRoles;
|
||||
}
|
||||
|
||||
// ReSharper disable once MemberHidesStaticFromOuterClass
|
||||
public MetaPaletteRoleCollection Roles { get { return _connectedRoles.Value; } }
|
||||
|
||||
public MetaPalette(int id, string guid)
|
||||
: base(id, guid)
|
||||
{
|
||||
_baseMetaPalette = new Lazy<IMetaPalette>(GetBaseMetaPalette);
|
||||
_association = new Lazy<IMetaPaletteAssociation>(GetAssociation);
|
||||
_inheritedMetaPalettes = new Lazy<MetaPaletteCollection>(GetInheritedMetaPalettes);
|
||||
_fields = new Lazy<MetaPaletteFieldCollection>(GetAttributes);
|
||||
_allFields = new Lazy<MetaPaletteFieldCollection>(GetAllAttributes);
|
||||
_links = new Lazy<MetaPaletteLinkCollection>(GetLinks);
|
||||
_connectedRoles = new Lazy<MetaPaletteRoleCollection>(GetRoles);
|
||||
}
|
||||
}
|
||||
|
||||
sealed class MetaPaletteField : MetaElementBase, IMetaPaletteField
|
||||
{
|
||||
public AttributeType Type { get; set; }
|
||||
|
||||
public string DBFieldName { get; set; }
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Local
|
||||
internal string OwnerMetaPaletteName { get; set; }
|
||||
|
||||
readonly Lazy<IMetaPalette> _ownerMetaPalette;
|
||||
|
||||
IMetaPalette GetOwnerMetaPalette()
|
||||
{
|
||||
IMetaPalette ownerMetaPalette;
|
||||
if (OwnerMetaPaletteName != null &&
|
||||
_palettes.TryGetValue(OwnerMetaPaletteName, out ownerMetaPalette))
|
||||
{
|
||||
return ownerMetaPalette;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IMetaPalette OwnerMetaPalette { get { return OwnerMetaPaletteName == null ? null : _ownerMetaPalette.Value; } }
|
||||
|
||||
public MetaPaletteField(int id, string guid)
|
||||
: base(id, guid)
|
||||
{
|
||||
_ownerMetaPalette = new Lazy<IMetaPalette>(GetOwnerMetaPalette);
|
||||
}
|
||||
}
|
||||
|
||||
sealed class MetaPaletteRole : MetaElementBase, IMetaPaletteRole
|
||||
{
|
||||
public string Multiplicity { get; set; }
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Local
|
||||
internal string OwnerMetaPaletteName { get; set; }
|
||||
|
||||
readonly Lazy<IMetaPalette> _ownerMetaPalette;
|
||||
|
||||
IMetaPalette GetOwnerMetaPalette()
|
||||
{
|
||||
IMetaPalette ownerMetaPalette;
|
||||
if (OwnerMetaPaletteName != null &&
|
||||
_palettes.TryGetValue(OwnerMetaPaletteName, out ownerMetaPalette))
|
||||
{
|
||||
return ownerMetaPalette;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IMetaPalette OwnerMetaPalette { get { return OwnerMetaPaletteName == null ? null : _ownerMetaPalette.Value; } }
|
||||
|
||||
// ReSharper disable once MemberCanBePrivate.Local
|
||||
internal string MetaPaletteAssociationName { get; set; }
|
||||
|
||||
readonly Lazy<IMetaPaletteAssociation> _association;
|
||||
|
||||
IMetaPaletteAssociation GetAssociation()
|
||||
{
|
||||
IMetaPaletteAssociation association;
|
||||
if (MetaPaletteAssociationName != null &&
|
||||
_associations.TryGetValue(MetaPaletteAssociationName, out association))
|
||||
{
|
||||
return association;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IMetaPaletteAssociation Association { get { return MetaPaletteAssociationName == null ? null : _association.Value; } }
|
||||
|
||||
public MetaPaletteRole(int id, string guid)
|
||||
: base(id, guid)
|
||||
{
|
||||
_ownerMetaPalette = new Lazy<IMetaPalette>(GetOwnerMetaPalette);
|
||||
_association = new Lazy<IMetaPaletteAssociation>(GetAssociation);
|
||||
}
|
||||
}
|
||||
|
||||
sealed class MetaPaletteAssociation : MetaElementBase, IMetaPaletteAssociation
|
||||
{
|
||||
// ReSharper disable once MemberCanBePrivate.Local
|
||||
internal string AssociationMetaPaletteName { get; set; }
|
||||
|
||||
readonly Lazy<IMetaPalette> _associationMetaPalette;
|
||||
|
||||
IMetaPalette GetAssociationMetaPalette()
|
||||
{
|
||||
IMetaPalette associationMetaPalette;
|
||||
if (AssociationMetaPaletteName != null &&
|
||||
_palettes.TryGetValue(AssociationMetaPaletteName, out associationMetaPalette))
|
||||
{
|
||||
return associationMetaPalette;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IMetaPalette AssociationMetaPalette { get { return AssociationMetaPaletteName == null ? null : _associationMetaPalette.Value; } }
|
||||
|
||||
readonly Lazy<MetaPaletteRoleCollection> _associatedMetaPaletteRoles;
|
||||
|
||||
MetaPaletteRoleCollection GetAssociatedRoles()
|
||||
{
|
||||
var associatedMetaPaletteRoles = new MetaPaletteRoleCollection();
|
||||
foreach (IMetaPaletteRole role in
|
||||
_roles.Values
|
||||
.Where(r => r.Association == this))
|
||||
{
|
||||
associatedMetaPaletteRoles.Add(role.ID, role);
|
||||
}
|
||||
return associatedMetaPaletteRoles;
|
||||
}
|
||||
|
||||
public MetaPaletteRoleCollection AssociatedRoles { get { return _associatedMetaPaletteRoles.Value; } }
|
||||
|
||||
public MetaPaletteAssociation(int id, string guid)
|
||||
: base(id, guid)
|
||||
{
|
||||
_associationMetaPalette = new Lazy<IMetaPalette>(GetAssociationMetaPalette);
|
||||
_associatedMetaPaletteRoles = new Lazy<MetaPaletteRoleCollection>(GetAssociatedRoles);
|
||||
}
|
||||
}
|
||||
end template
|
|
@ -0,0 +1,250 @@
|
|||
//***************************************************************************//
|
||||
// Legenerálja a metamodell teljes forráskódját. //
|
||||
//***************************************************************************//
|
||||
template GenerateMetaModel()
|
||||
[BOM]using System;
|
||||
using SDA.Framework.MetaPaletteShema;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
|
||||
namespace SDA.[ProjectName].MetaPaletteShema
|
||||
{
|
||||
public sealed class [ProjectName]MetaPaletteStructure : AbstractMetaPaletteStructure
|
||||
{
|
||||
#region Base classes
|
||||
|
||||
[GenerateBaseClasses()]
|
||||
|
||||
#endregion Base classes
|
||||
|
||||
#region Static variables
|
||||
|
||||
[loop (Instances -> MClass Where( GetStereoType([MClass]) == "Entity" ))]
|
||||
[GenerateMetaPalette([MClass])]
|
||||
[GenerateMetaPaletteField([MClass])]
|
||||
[GenerateMetaPaletteRole([MClass])]
|
||||
[GenerateMetaPaletteAssociation([MClass])]
|
||||
[end loop]
|
||||
|
||||
static readonly MetaPaletteCollection _palettes = new MetaPaletteCollection();
|
||||
static readonly MetaPaletteFieldCollection _attributes = new MetaPaletteFieldCollection();
|
||||
static readonly MetaPaletteRoleCollection _roles = new MetaPaletteRoleCollection();
|
||||
static readonly MetaPaletteAssociationCollection _associations = new MetaPaletteAssociationCollection();
|
||||
|
||||
#endregion Static variables
|
||||
|
||||
static [ProjectName]MetaPaletteStructure()
|
||||
{
|
||||
IMetaPalette palette;
|
||||
IMetaPaletteField field;
|
||||
IMetaPaletteRole role;
|
||||
IMetaPaletteAssociation association;
|
||||
foreach (var value in
|
||||
typeof([ProjectName]MetaPaletteStructure)
|
||||
.GetFields(BindingFlags.Static|BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.DeclaredOnly)
|
||||
.Select(f => f.GetValue(null)))
|
||||
{
|
||||
if ((palette = value as IMetaPalette) != null)
|
||||
{
|
||||
_palettes.Add(palette.Name, palette);
|
||||
}
|
||||
if ((field = value as IMetaPaletteField) != null)
|
||||
{
|
||||
_attributes.Add(field.ID, field);
|
||||
}
|
||||
if ((role = value as IMetaPaletteRole) != null)
|
||||
{
|
||||
_roles.Add(role.ID, role);
|
||||
}
|
||||
if ((association = value as IMetaPaletteAssociation) != null)
|
||||
{
|
||||
_associations.Add(association.ID, association);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Abstract members
|
||||
|
||||
public override MetaPaletteCollection Palettes { get { return _palettes; } }
|
||||
|
||||
public override MetaPaletteFieldCollection Attributes { get { return _attributes; } }
|
||||
|
||||
public override MetaPaletteRoleCollection AssociationRoles { get { return _roles; } }
|
||||
|
||||
public override MetaPaletteAssociationCollection Associations { get { return _associations; } }
|
||||
|
||||
#endregion Abstract members
|
||||
}
|
||||
}
|
||||
end template
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Egy listat keszit a dictionaryitemekrol //
|
||||
//***************************************************************************//
|
||||
template DictionaryItemList()
|
||||
[loop (Instances -> MClass)]
|
||||
[if (IsEntity([MClass]) == "True")]
|
||||
[if (IsProtectedDictionaryItem([MClass]) == "True")]
|
||||
[GetEntityName([MClass])];[ConvertNameToSQLTableScript(GetEntityName([MClass]))];[IsProtectedDictionaryItem([MClass])];[GetPackage([MClass])]
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
|
||||
template GenerateMetaPalette(MClass)
|
||||
public static readonly IMetaPalette [MClass.name] = new MetaPalette([MClass.id], "[split([MClass.guid], "_", 1)]")
|
||||
{
|
||||
Name = @"[MClass.name]",
|
||||
[if ([MClass.description]!="")]
|
||||
Description = "[replace([MClass.description],"\"","\\\"")]",
|
||||
[end if]
|
||||
[setVar("hastag", "")]
|
||||
[loop (MClass -> TaggedValue)]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"[TaggedValue.tag]", @"[TaggedValue.value]" },
|
||||
[end loop]
|
||||
[if ([hastag]!="")]
|
||||
},
|
||||
[end if]
|
||||
DBTableName = @"[ConvertNameToSQLTableName([MClass.name])]",
|
||||
[setVar("scn","")]
|
||||
[loop (MClass -> SuperClass as sc)]
|
||||
[setVar("scn",[sc.name])]
|
||||
[end loop]
|
||||
[if ([scn]!="")]
|
||||
BaseMetaPaletteName = @"[scn]",
|
||||
[end if]
|
||||
[setVar("associd", "")]
|
||||
[loop (MClass -> MAssociation as assoc )]
|
||||
[setVar("associd", [assoc.id])]
|
||||
[end loop]
|
||||
[if ([associd]!="")]
|
||||
AssociationID = "[associd]",
|
||||
[end if]
|
||||
};
|
||||
end template
|
||||
|
||||
|
||||
template GenerateMetaPaletteField(MClass)
|
||||
[loop (MClass -> MAttribute)]
|
||||
internal static readonly IMetaPaletteField Attribute[MAttribute.id] = new MetaPaletteField([MAttribute.id], "[split([MAttribute.guid], "_", 1)]")
|
||||
{
|
||||
OwnerMetaPaletteName = @"[MClass.name]",
|
||||
Name = @"[MAttribute.name]",
|
||||
Type = AttributeType.[MAttribute.type],
|
||||
[if ([MAttribute.description]!="")]
|
||||
Description = "[replace([MAttribute.description],"\"","\\\"")]",
|
||||
[end if]
|
||||
[setVar("hastag", "")]
|
||||
[loop (MAttribute -> TaggedValue)]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"[TaggedValue.tag]", @"[TaggedValue.value]" },
|
||||
[end loop]
|
||||
[if ([MAttribute.type]=="DictionaryItem")]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"DictionaryItemType", @"[MAttribute.defaultValue]" },
|
||||
[else]
|
||||
[if ([MAttribute.defaultValue]!="")]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"_DefaultValue_", @"[replace([MAttribute.defaultValue],"\"","\"\"")]" },
|
||||
[end if]
|
||||
[end if]
|
||||
[if (GetStereoTypeForAttribute([MAttribute])=="DisplayName")]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"_DisplayName_", @"true" },
|
||||
[end if]
|
||||
[if ([hastag]!="")]
|
||||
},
|
||||
[end if]
|
||||
DBFieldName = @"[ConvertNameToSQLColumnName([MAttribute.name])]",
|
||||
};
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
|
||||
template GenerateMetaPaletteRole(MClass)
|
||||
[loop (MClass -> Role as StartRole -> MAssociation -> MAssociationEnd as EndRole -> MClass as EndClass Where( ( GetStereoType([EndClass]) == "Entity" ) and ( [StartRole.id] != [EndRole.id] ) ))]
|
||||
internal static readonly IMetaPaletteRole Role[StartRole.id] = new MetaPaletteRole([StartRole.id], "[split([StartRole.guid], "_", 1)]")
|
||||
{
|
||||
OwnerMetaPaletteName = @"[MClass.name]",
|
||||
[if ([StartRole.name]!="")]
|
||||
Name = @"[StartRole.name]",
|
||||
[end if]
|
||||
[if ([StartRole.description]!="")]
|
||||
Description = "[replace([StartRole.description],"\"","\\\"")]",
|
||||
[end if]
|
||||
[setVar("hastag", "")]
|
||||
[loop (StartRole -> TaggedValue)]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"[TaggedValue.tag]", @"[TaggedValue.value]" },
|
||||
[end loop]
|
||||
[if ([hastag]!="")]
|
||||
},
|
||||
[end if]
|
||||
Multiplicity = "[StartRole.multiplicity]",
|
||||
MetaPaletteAssociationName = "[MAssociation.id]",
|
||||
};
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
|
||||
template GenerateMetaPaletteAssociation(MClass)
|
||||
[loop (MClass -> Role as StartRole -> MAssociation -> MAssociationEnd as EndRole -> MClass as EndClass Where( ( GetStereoType([EndClass]) == "Entity" ) and ( [StartRole.id] < [EndRole.id] ) ) )]
|
||||
internal static readonly IMetaPaletteAssociation Association[MAssociation.id] = new MetaPaletteAssociation([MAssociation.id], "[split([MAssociation.guid], "_", 1)]")
|
||||
{
|
||||
[if ([MAssociation.name]!="")]
|
||||
Name = @"[MAssociation.name]",
|
||||
[end if]
|
||||
[if ([MAssociation.description]!="")]
|
||||
Description = "[replace([MAssociation.description],"\"","\\\"")]",
|
||||
[end if]
|
||||
[setVar("hastag", "")]
|
||||
[loop (MAssociation -> TaggedValue)]
|
||||
[if ([hastag]=="")]
|
||||
TagedValues =
|
||||
{
|
||||
[setVar("hastag", "X")]
|
||||
[end if]
|
||||
{ @"[TaggedValue.tag]", @"[TaggedValue.value]" },
|
||||
[end loop]
|
||||
[if ([hastag]!="")]
|
||||
},
|
||||
[end if]
|
||||
[setVar("assocclassname","")]
|
||||
[loop (MAssociation -> AssociationClass)]
|
||||
[setVar("assocclassname",[AssociationClass.name])]
|
||||
[end loop]
|
||||
[if ([assocclassname]!="")]
|
||||
AssociationMetaPaletteName = @"[assocclassname]",
|
||||
[end if]
|
||||
};
|
||||
[end loop]
|
||||
end template
|
211
Tools/CodeGeneration/Templates/Server/Run/DataAccessMain.tdl
Normal file
211
Tools/CodeGeneration/Templates/Server/Run/DataAccessMain.tdl
Normal file
|
@ -0,0 +1,211 @@
|
|||
//***************************************************************************//
|
||||
// Project fájl
|
||||
//***************************************************************************//
|
||||
USES Server/DataAccess/DataAccessProject;
|
||||
// USES Server/DataAccess/DataAccessInterfaceProject;
|
||||
|
||||
//***************************************************************************//
|
||||
// Entitással kapcsolatos dolgok //
|
||||
//***************************************************************************//
|
||||
USES Server/DataAccess/Entity/Entity;
|
||||
USES Server/DataAccess/Entity/EntityCollection;
|
||||
|
||||
|
||||
USES Server/DataAccess/Entity/General;
|
||||
USES Server/DataAccess/Entity/Pooling;
|
||||
USES Server/DataAccess/Entity/Property;
|
||||
USES Server/DataAccess/Entity/XMLSupport;
|
||||
USES Server/DataAccess/Entity/Validate;
|
||||
|
||||
USES Server/DataAccess/Entity/ZeroTypeAssociation;
|
||||
USES Server/DataAccess/Entity/EntityTypeAssociation;
|
||||
USES Server/DataAccess/Entity/EntityCollectionTypeAssociation;
|
||||
|
||||
USES Server/DataAccess/Entity/Midas;
|
||||
|
||||
USES Server/DataAccess/Entity/EntityState;
|
||||
|
||||
//***************************************************************************//
|
||||
// Entitás Interface -hez tartozó dolgok //
|
||||
//***************************************************************************//
|
||||
USES Server/DataAccess/Entity/InterfaceBase;
|
||||
USES Server/DataAccess/Entity/EntityInterface;
|
||||
|
||||
//***************************************************************************//
|
||||
// Adathozzáférési réteghez (DA) tartozó dolgok //
|
||||
//***************************************************************************//
|
||||
USES Server/DataAccess/DataAccessor/EntityDA;
|
||||
USES Server/DataAccess/DataAccessor/EntityCollectionDA;
|
||||
USES Server/DataAccess/DataAccessor/LoadByID;
|
||||
USES Server/DataAccess/DataAccessor/LoadBaseSet;
|
||||
USES Server/DataAccess/DataAccessor/InsertEntity;
|
||||
USES Server/DataAccess/DataAccessor/UpdateEntity;
|
||||
USES Server/DataAccess/DataAccessor/DeleteEntity;
|
||||
USES Server/DataAccess/DataAccessor/NoWaitForLock;
|
||||
USES Server/DataAccess/DataAccessor/WaitForLock;
|
||||
USES Server/DataAccess/DataAccessor/WaitLock;
|
||||
USES Server/DataAccess/DataAccessor/UpdateAssociations;
|
||||
USES Server/DataAccess/View/ViewBase;
|
||||
|
||||
//USES Server/DataAccess/DAUtil/AllAttributes;
|
||||
//USES Server/DataAccess/DAUtil/AllAttributesAndAssociationID;
|
||||
//USES Server/DataAccess/DAUtil/AllAssociationID;
|
||||
USES Server/DataAccess/DBCommands/LoadCommands;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Egyéb segéd dolgok //
|
||||
//***************************************************************************//
|
||||
USES Common/Converters;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DAUtil;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/CSharpUtil;
|
||||
USES Common/std;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
Init();
|
||||
GenerateProjectFile();
|
||||
GenerateEntities();
|
||||
GenerateViews();
|
||||
GenerateDAs();
|
||||
// GenerateCollections();
|
||||
// GenerateDirectXMLDAs();
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
// Nyelv
|
||||
setLanguage("csharp");
|
||||
|
||||
setVar("COMMANDCACHE", "False");
|
||||
setVar("QUERY_MAX_RECORDS", "2000");
|
||||
|
||||
// Adatbázis
|
||||
setVar("DBTYPE", "SDA");
|
||||
|
||||
//info = "Application Name: " [ProjectName] "\n";
|
||||
|
||||
// Célkönyvtárak
|
||||
setVar("SOURCE_DIR", [OutputDir]);
|
||||
setVar("PROJECTFILE_DIR", "/Kreta.DataAccessGenerated");
|
||||
setVar("INTERFACEPROJECTFILE_DIR", "/Kreta.DataAccessInterfaceGenerated");
|
||||
setVar("COLLECTION_DIR", "/Kreta.DataAccessGenerated/Collections");
|
||||
setVar("DATAACCESSOR_DIR", "/Kreta.DataAccessGenerated/DataAccessors");
|
||||
setVar("ENTITYBEAN_DIR", "/Kreta.DataAccessGenerated/Entities");
|
||||
setVar("VIEW_DIR", "/Kreta.DataAccessGenerated/View");
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a project fájlt (DataAccess.csproj) //
|
||||
// A generálás engedélyezéséhez a GENERATEPROJECTFILE globális változó //
|
||||
// értékének True -nak kell lennie! //
|
||||
//***************************************************************************//
|
||||
proc GenerateProjectFile()
|
||||
if ([GENERATEPROJECTFILE] == "True")
|
||||
info = "Generating project file...\t\t\t";
|
||||
|
||||
setOutput( [SOURCE_DIR] [PROJECTFILE_DIR] "/" "Kreta.DataAccessGenerated.csproj" );
|
||||
out = KretaGenerateDataAccessProject();
|
||||
|
||||
// setOutput( [SOURCE_DIR] [INTERFACEPROJECTFILE_DIR] "/" "Kreta.DataAccess.Interfaces.csproj" );
|
||||
// out = KretaGenerateDataAccessIterfaceProject();
|
||||
|
||||
info = "DONE.\n";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a dataaccessorokat az összes entitáshoz. //
|
||||
// A generálás engedélyezéséhez a DATAACCESSOR globális változó értékének //
|
||||
// True -nak kell lennie! //
|
||||
//***************************************************************************//
|
||||
proc GenerateDAs()
|
||||
if ([DATAACCESSOR] == "True")
|
||||
info = "Generating DA for MClass...";
|
||||
loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
//info = "Generating DA for " [MClass.name] "...\t\t";
|
||||
setOutput( [SOURCE_DIR] [DATAACCESSOR_DIR] "/" [MClass.name] "DA.cs" );
|
||||
out = GenerateEntityDA( [MClass] );
|
||||
//info = "DONE.\n";
|
||||
end loop
|
||||
info = "DONE.\n";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja a tipizált listákat az összes entitáshoz. //
|
||||
// A generálás engedélyezéséhez a ENTITYCOLLECTION globális változó //
|
||||
// értékének True -nak kell lennie! //
|
||||
//***************************************************************************//
|
||||
proc GenerateCollections()
|
||||
if ([ENTITYCOLLECTION] == "True")
|
||||
// loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
info = "Generating EntityCollections.cs";
|
||||
setOutput( [SOURCE_DIR] [COLLECTION_DIR] "/" "EntityCollections.cs" );
|
||||
// out = GenerateEntityCollection( [MClass] );
|
||||
out = GenerateEntityCollection();
|
||||
info = "DONE.\n";
|
||||
// end loop
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Legenerálja az összes entitás forráskódját. (Teszteszabásukkal együtt!) //
|
||||
// A generálás engedélyezéséhez az ENTITY globális változó értékének True //
|
||||
// -nak kell lennie! //
|
||||
//***************************************************************************//
|
||||
proc GenerateEntities()
|
||||
if ([ENTITY] == "True")
|
||||
info = "Generating Entity... ";
|
||||
|
||||
setOutput( [SOURCE_DIR] [INTERFACEPROJECTFILE_DIR] "/IEntity.cs" );
|
||||
out = GenerateIEntityBaseClass();
|
||||
|
||||
setOutput( [SOURCE_DIR] [INTERFACEPROJECTFILE_DIR] "/IAssociatedCollection.cs" );
|
||||
out = GenerateIAssociatedCollection();
|
||||
|
||||
loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
//info = "Generating Entity " [MClass.name] "...\t\t";
|
||||
|
||||
setOutput( [SOURCE_DIR] [ENTITYBEAN_DIR] "/" [MClass.name] ".cs" );
|
||||
out = GenerateEntity( [MClass] );
|
||||
|
||||
setOutput( [SOURCE_DIR] [INTERFACEPROJECTFILE_DIR] "/I"[MClass.name] ".cs" );
|
||||
out = GenerateEntityInterface( [MClass] );
|
||||
|
||||
//info = "DONE.\n";
|
||||
end loop
|
||||
info = "DONE.\n";
|
||||
end if
|
||||
end proc
|
||||
|
||||
|
||||
|
||||
proc GenerateViews()
|
||||
if ([ENTITY] == "True" or [VIEW] == "True")
|
||||
info = "Generating view...";
|
||||
loop (Instances -> MClass as ENTITY where IsClassView([ENTITY]) == "View")
|
||||
//info = "Generating view " [ENTITY.name] "...\t\t";
|
||||
setOutput( [SOURCE_DIR] [VIEW_DIR] "/" [ENTITY.name] ".cs" );
|
||||
out = GenerateViewBase([ENTITY]);
|
||||
//info = "DONE.\n";
|
||||
end loop
|
||||
info = "DONE.\n";
|
||||
end if
|
||||
end proc
|
|
@ -0,0 +1,42 @@
|
|||
//***************************************************************************//
|
||||
// A MetaModel dolgai //
|
||||
//***************************************************************************//
|
||||
USES Server/MetaModel/MetaModelGenerator;
|
||||
USES Server/MetaModel/BaseClasses;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Egyéb segéd dolgok //
|
||||
//***************************************************************************//
|
||||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ActionUtil;
|
||||
|
||||
|
||||
//***************************************************************************//
|
||||
// Belépési pont //
|
||||
//***************************************************************************//
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
setOutput( [OutputDir] "/" "DictionaryItems.txt" );
|
||||
// Ide nem rakom be a BOM-ot, mert elrontja a generálást
|
||||
// out = [BOM];
|
||||
out = DictionaryItemList();
|
||||
end proc
|
||||
|
||||
//***************************************************************************//
|
||||
// Általános inicializálás //
|
||||
//***************************************************************************//
|
||||
proc Init()
|
||||
//current language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
|
||||
// UTF-8 BOM bájtok
|
||||
setVar("BOM", "\xEF\xBB\xBF");
|
||||
end proc
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DBUtil;
|
||||
|
||||
USES Database/SQLGenerator;
|
||||
|
||||
proc main()
|
||||
// initialize the output and other context information
|
||||
Init();
|
||||
CreateMissionDescriptionList();
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
setOutput([OUTFILE]);
|
||||
end proc
|
||||
|
||||
proc CreateMissionDescriptionList()
|
||||
out = "Entitások:\n";
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
if ( string_trim(ConvertDescriptionToString([MClass.description])) == "" )
|
||||
out = " " [MClass.name] "\n";
|
||||
end if
|
||||
end loop
|
||||
out = "Attribútumok:\n";
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
loop ( MClass -> MAttribute )
|
||||
if ( string_trim(ConvertDescriptionToString([MAttribute.description])) == "" )
|
||||
out = " " [MClass.name] "." [MAttribute.name] "\n";
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
out = "Asszociációk:\n";
|
||||
loop ( Instances -> MClass where GetStereoType([MClass]) == "Entity" )
|
||||
loop ( MClass -> Role as StartRole ->MAssociation as CurrentAssoc ->MAssociationEnd as EndRole -> MClass as PartnerClass where (GetStereoType([PartnerClass]) == "Entity") )
|
||||
if ( [StartRole.id] != [EndRole.id] )
|
||||
if ( string_trim(ConvertDescriptionToString([CurrentAssoc.description])) == "" )
|
||||
out = " " [MClass.name] "->" DefineRoleName([EndRole]) " (" [PartnerClass.name] ")\n";
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
||||
|
||||
tcl_proc string_trim(str)
|
||||
return [string trim $str];
|
||||
end proc
|
||||
|
||||
proc ConvertDescriptionToString(description)
|
||||
return replace([description], "", "\n");
|
||||
end proc
|
46
Tools/CodeGeneration/Templates/Tools/PrintAttributes.tdl
Normal file
46
Tools/CodeGeneration/Templates/Tools/PrintAttributes.tdl
Normal file
|
@ -0,0 +1,46 @@
|
|||
USES Common/Converters;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DAUtil;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/CSharpUtil;
|
||||
USES Common/std;
|
||||
|
||||
proc main()
|
||||
setOutput( "attributes.info" );
|
||||
PrintAttributes();
|
||||
end proc
|
||||
|
||||
proc PrintAttributes()
|
||||
loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
out = CheckAttributes( [MClass] );
|
||||
end loop
|
||||
end proc
|
||||
|
||||
template CheckAttributes(MClass as ENTITY)
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[PrintStringAttribute([ENTITY], [ATTRIBUTE])]
|
||||
[PrintLongStringAttribute([ENTITY], [ATTRIBUTE])]
|
||||
[PrintBinaryAttribute([ENTITY], [ATTRIBUTE])]
|
||||
[end loop]
|
||||
end template
|
||||
|
||||
template PrintStringAttribute(MClass as ENTITY, MAttribute as ATTRIBUTE)
|
||||
[if (ToLower([ATTRIBUTE.type]) == "string")]
|
||||
[if (GetTaggedValueOfAttribute([ATTRIBUTE],"length") == "4000")]
|
||||
String: [ENTITY.name].[ATTRIBUTE.name]
|
||||
[end if]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
template PrintLongStringAttribute(MClass as ENTITY, MAttribute as ATTRIBUTE)
|
||||
[if (ToLower([ATTRIBUTE.type]) == "longstring")]
|
||||
LongString: [ENTITY.name].[ATTRIBUTE.name]
|
||||
[end if]
|
||||
end template
|
||||
|
||||
template PrintBinaryAttribute(MClass as ENTITY, MAttribute as ATTRIBUTE)
|
||||
[if (ToLower([ATTRIBUTE.type]) == "binary")]
|
||||
Binary: [ENTITY.name].[ATTRIBUTE.name]
|
||||
[end if]
|
||||
end template
|
24
Tools/CodeGeneration/Templates/Tools/ProtectedDictItems.tdl
Normal file
24
Tools/CodeGeneration/Templates/Tools/ProtectedDictItems.tdl
Normal file
|
@ -0,0 +1,24 @@
|
|||
USES Common/Converters;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DAUtil;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/CSharpUtil;
|
||||
USES Common/std;
|
||||
|
||||
proc main()
|
||||
setOutput( "protecteddi.info" );
|
||||
PrintSingleCharAttributes();
|
||||
end proc
|
||||
|
||||
proc PrintSingleCharAttributes()
|
||||
loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
out = CheckAttributes( [MClass] );
|
||||
end loop
|
||||
end proc
|
||||
|
||||
template CheckAttributes(MClass as ENTITY)
|
||||
[if (GetBaseClassName([ENTITY], "") == "DictionaryItemBase" && IsProtectedDictionaryItem([ENTITY])=="True")]
|
||||
[ENTITY.name]
|
||||
[end if]
|
||||
end template
|
|
@ -0,0 +1,36 @@
|
|||
USES Common/Converters;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/DAUtil;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/StringUtil;
|
||||
USES Common/CSharpUtil;
|
||||
USES Common/std;
|
||||
|
||||
proc main()
|
||||
setOutput( "attributes.info" );
|
||||
PrintSingleCharAttributes();
|
||||
end proc
|
||||
|
||||
proc PrintSingleCharAttributes()
|
||||
loop (Instances -> MClass WHERE GetStereoType([MClass]) == "Entity")
|
||||
out = CheckAttributes( [MClass] );
|
||||
end loop
|
||||
end proc
|
||||
|
||||
template CheckAttributes(MClass as ENTITY)
|
||||
[loop (ENTITY -> MAttribute as ATTRIBUTE)]
|
||||
[if (ToLower([ATTRIBUTE.type]) == "string")]
|
||||
[if (GetTaggedValueOfAttribute([ATTRIBUTE],"length") == "1")]
|
||||
SingleCharString: [ENTITY.name].[ATTRIBUTE.name]
|
||||
[end if]
|
||||
[end if]
|
||||
[if (ToLower([ATTRIBUTE.type]) == "char")]
|
||||
Char: [ENTITY.name].[ATTRIBUTE.name]
|
||||
[end if]
|
||||
[if (ToLower([ATTRIBUTE.type]) == "fixstring")]
|
||||
[if (GetTaggedValueOfAttribute([ATTRIBUTE],"length") == "1")]
|
||||
FixString: [ENTITY.name].[ATTRIBUTE.name]
|
||||
[end if]
|
||||
[end if]
|
||||
[end loop]
|
||||
end template
|
|
@ -0,0 +1,33 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
AssocWithoutDescriptoins();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "AssocWithoutDescriptoins.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "AssocWithoutDescriptoins.bat\n";
|
||||
end proc
|
||||
|
||||
proc AssocWithoutDescriptoins()
|
||||
out = "@echo off\n";
|
||||
loop (Instances -> MClass as StartClass Where( getStereotype([StartClass]) == "Entity" ) )
|
||||
loop (StartClass -> Role as StartRole -> MAssociation as Assoc where ([Assoc.description] == "") )
|
||||
loop (Assoc -> MAssociationEnd as EndRole -> MClass as PartnerClass Where ([StartRole.id] < [EndRole.id]) and (getStereotype([PartnerClass])== "Entity") )
|
||||
info = "Assoc between [" [StartClass.name] "]{"[StartRole.name] "} [" [PartnerClass.name] "]{"[EndRole.name]"}\n";
|
||||
out = "echo between [" [StartClass.name] "]{"[StartRole.name] "} [" [PartnerClass.name] "]{"[EndRole.name]"}\n";
|
||||
GenerateEditorNavigation([Assoc.guid]);
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,34 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
USES Common/DBUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
AttributesWithConstraints();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "AttributesWithConstraints.bat" );
|
||||
info = "Output generating into: " [OutputDir] "/" "AttributesWithConstraints.bat\n";
|
||||
|
||||
end proc
|
||||
|
||||
proc AttributesWithConstraints()
|
||||
loop (Instances -> MClass as Entity Where(getStereotype([Entity]) == "Entity" ) )
|
||||
loop ( Entity -> MAttribute )
|
||||
if ( getConstraint([MAttribute]) != "" )
|
||||
info = [Entity.name]"."[MAttribute.name] ":\n" getConstraint([MAttribute]) "\n";
|
||||
out = "echo " [Entity.name]"."[MAttribute.name]"\n";
|
||||
GenerateEditorNavigation([MAttribute.guid]);
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,41 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
AttributesWithoutTaggedValue();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "AttributesWithoutTaggedValue.bat" );
|
||||
info = "Output generating into: " [OutputDir] "/" "AttributesWithoutTaggedValue.bat\n";
|
||||
|
||||
end proc
|
||||
|
||||
proc AttributesWithoutTaggedValue()
|
||||
local totalCount = 0;
|
||||
loop (Instances -> MClass as Entity Where(getStereotype([Entity]) == "Entity" ) )
|
||||
loop ( Entity -> MAttribute
|
||||
Where ( ( [MAttribute.type] != "DictionaryItem" )
|
||||
and ( [MAttribute.type] != "DateTime" )
|
||||
and ( [MAttribute.type] != "Boolean" )
|
||||
)
|
||||
)
|
||||
if ( loopCount (MAttribute -> TaggedValue ) == 0 )
|
||||
[totalCount] = incr([totalCount]);
|
||||
info = [Entity.name]"."[MAttribute.name] [taggedvalue] ":\n" ;
|
||||
out = "echo " [Entity.name]"."[MAttribute.name] "\n";
|
||||
GenerateEditorNavigation([MAttribute.guid]);
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
info = "Totally " [totalCount] " attributes found.\n";
|
||||
end proc
|
|
@ -0,0 +1,29 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
ClassesWithoutStereotype();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "ClassesWithoutStereotype.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "ClassesWithoutStereotype.bat\n";
|
||||
end proc
|
||||
|
||||
proc ClassesWithoutStereotype()
|
||||
out = "@echo off\n";
|
||||
loop (Instances -> MClass Where (getStereotype([MClass]) == "") )
|
||||
info = "Class [" [MClass.name] "]{" getStereotype([MClass]) "}{" [MClass.id] "}\n";
|
||||
out = "echo Class [" [MClass.name] "]\n";
|
||||
GenerateEditorNavigation([MClass.guid]);
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,36 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
EntitiesWithoutAttributes();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "EntitiesWithoutAttributes.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "EntitiesWithoutAttributes.bat\n";
|
||||
end proc
|
||||
|
||||
proc EntitiesWithoutAttributes()
|
||||
out = "@echo off\n";
|
||||
loop (Instances -> MClass Where getStereotype([MClass]) == "Entity" )
|
||||
local attribCount = 0;
|
||||
loop (MClass -> MAttribute )
|
||||
[attribCount] = incr([attribCount]);
|
||||
end loop
|
||||
|
||||
if ( [attribCount] == "0" )
|
||||
info = [MClass.name] "\n";
|
||||
out = "echo " [MClass.name] "\n";
|
||||
GenerateEditorNavigation([MClass.guid]);
|
||||
end if
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,40 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
AssocWithoutDescriptoins();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "MissingAssocMultiplicites.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "MissingAssocMultiplicites.bat\n";
|
||||
end proc
|
||||
|
||||
proc AssocWithoutDescriptoins()
|
||||
out = "@echo off\n";
|
||||
loop (Instances -> MClass as StartClass Where( getStereotype([StartClass]) == "Entity" ) )
|
||||
loop (StartClass -> Role as StartRole -> MAssociation as Assoc where ([Assoc.description] == "") )
|
||||
loop (Assoc -> MAssociationEnd as EndRole -> MClass as PartnerClass Where ([StartRole.id] < [EndRole.id]) and (getStereotype([PartnerClass])== "Entity") )
|
||||
if ( [StartRole.multiplicity] == "" )
|
||||
info = "Assoc between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
out = "echo between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
GenerateEditorNavigation([StartRole.guid]);
|
||||
end if
|
||||
if ( [EndRole.multiplicity] == "" )
|
||||
info = "Assoc between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
out = "echo between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
GenerateEditorNavigation([EndRole.guid]);
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,40 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
AssocWithoutDescriptoins();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "MissingRoleNames.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "MissingRoleNames.bat\n";
|
||||
end proc
|
||||
|
||||
proc AssocWithoutDescriptoins()
|
||||
out = "@echo off\n";
|
||||
loop (Instances -> MClass as StartClass Where( getStereotype([StartClass]) == "Entity" ) )
|
||||
loop (StartClass -> Role as StartRole -> MAssociation as Assoc where ([Assoc.description] == "") )
|
||||
loop (Assoc -> MAssociationEnd as EndRole -> MClass as PartnerClass Where ([StartRole.id] < [EndRole.id]) and (getStereotype([PartnerClass])== "Entity") )
|
||||
if ( [StartRole.name] == "" )
|
||||
info = "Assoc between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
out = "echo between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
GenerateEditorNavigation([StartRole.guid]);
|
||||
end if
|
||||
if ( [EndRole.name] == "" )
|
||||
info = "Assoc between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
out = "echo between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
GenerateEditorNavigation([EndRole.guid]);
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
44
Tools/CodeGeneration/Templates/UML/UMLCheck/TrachItems.tdl
Normal file
44
Tools/CodeGeneration/Templates/UML/UMLCheck/TrachItems.tdl
Normal file
|
@ -0,0 +1,44 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
TrashItems();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "TrashItems.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "TrashItems.bat\n";
|
||||
|
||||
end proc
|
||||
|
||||
proc TrashItems()
|
||||
loop (Instances -> MClass as Entity Where(getStereotype([Entity]) == "Entity" ) )
|
||||
loop ( Entity -> Role as eRole -> MAssociation as Assoc where(getStereotype([Assoc])=="Uses" ) )
|
||||
loop ( Assoc -> MAssociationEnd as rRole -> MClass as ROService where (getStereotype([ROService])=="ROService" ) )
|
||||
local rolecount = 0;
|
||||
local isAssocClass = _False();
|
||||
loop ( Entity -> MAssociation )
|
||||
[isAssocClass] = _True();
|
||||
end loop
|
||||
loop ( Entity -> Role)
|
||||
[rolecount] = incr([rolecount]);
|
||||
end loop
|
||||
if ( [rolecount] == "1" )
|
||||
if ( [isAssocClass] == _False() )
|
||||
info = "[Entity:" [Entity.name] "][ROService:"[ROService.name]"]{"getStereotype([Assoc])"}\n";
|
||||
GenerateEditorNavigation([Entity.guid]);
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
41
Tools/CodeGeneration/Templates/UML/UMLCheck/UMLBug.tdl
Normal file
41
Tools/CodeGeneration/Templates/UML/UMLCheck/UMLBug.tdl
Normal file
|
@ -0,0 +1,41 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
UMLBug();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
// mkdir([OutputDir]);
|
||||
// setOutput( [OutputDir] "/" "UMLBug.bat" );
|
||||
// info = "Output generatig into: " [OutputDir] "/" "ClassesWithoutStereotype.bat\n";
|
||||
end proc
|
||||
|
||||
proc UMLBug()
|
||||
// out = "@echo off\n";
|
||||
local classesInvestigated = "";
|
||||
loop (Instances -> MClass as c)
|
||||
if ( IsElementInTokenset([classesInvestigated], [c.name]) == _False() )
|
||||
local count = 0;
|
||||
local o = "";
|
||||
loop (Instances -> MPackage-> MClass as alias Where( [alias.name] == [c.name]))
|
||||
[count] = incr([count]);
|
||||
[o] = [o] [MPackage.name] "::[" [alias.name] "]{" getStereotype([alias]) "}{" [alias.id] "}("[alias.stereotype]")\n";
|
||||
end loop
|
||||
if ( [count] != "1")
|
||||
info = [o];
|
||||
end if
|
||||
[count] = 0;
|
||||
[o] = "";
|
||||
[classesInvestigated] = [classesInvestigated] [c.name] "\n";
|
||||
end if
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,31 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
UnspecifiedDictionaryItems();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "UnSpecifiedDictionaryItems.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "UnSpecifiedDictionaryItems.bat\n";
|
||||
|
||||
end proc
|
||||
|
||||
proc UnspecifiedDictionaryItems()
|
||||
loop (Instances -> MClass Where(getStereotype([MClass]) == "Entity" ) )
|
||||
loop( MClass -> MAttribute Where (([MAttribute.type] == "DictionaryItem") and ([MAttribute.defaultValue] == "") ) )
|
||||
info = [MClass.name] "." [MAttribute.name] ":" [MAttribute.defaultValue]"\n";
|
||||
out = "echo " [MClass.name] "." [MAttribute.name] "\n";
|
||||
GenerateEditorNavigation([MAttribute.guid]);
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,50 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
CustomMultiplicityCheck();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
// setOutput( [OutputDir] "/" "CustomMultiplicityCheck.bat" );
|
||||
end proc
|
||||
|
||||
proc CustomMultiplicityCheck()
|
||||
info = "Start Roele multiplicity: "[StartRoleMultiplicity]"\n";
|
||||
info = "End Roele multiplicity: "[EndRoleMultiplicity]"\n";
|
||||
info = "Assoc Class indicator parameter: " [HasAssocClass] "\n";
|
||||
|
||||
if ( [HasAssocClass] != _False() and [HasAssocClass] != _True() )
|
||||
[HasAssocClass] = _False();
|
||||
end if
|
||||
info = "Assoc Class indicator: " [HasAssocClass] "\n";
|
||||
|
||||
info = "/////////////////////////////////////////////////////\n";
|
||||
|
||||
loop(Instances -> MClass as StartClass Where (getStereotype([StartClass])=="Entity" ) )
|
||||
loop( StartClass -> Role as StartRole Where([StartRole.multiplicity] == [StartRoleMultiplicity] ) )
|
||||
loop ( StartRole -> MAssociation as Assoc -> MAssociationEnd as EndRole Where ( ([EndRole.multiplicity] == [EndRoleMultiplicity]) and [StartRole.id] < [EndRole.id] ) )
|
||||
loop ( EndRole -> MClass as EndClass Where( getStereotype([EndClass]) == "Entity" ) )
|
||||
if ( [HasAssocClass] == _False() )
|
||||
if ( HasAssociationClass([Assoc]) == "" )
|
||||
info = "[" [StartClass.name] "{" [StartRole.name] ":" [StartRole.multiplicity] "}]" "[" [EndClass.name] "{" [EndRole.name]":" [EndRole.multiplicity] "}]\n";
|
||||
end if
|
||||
else
|
||||
if ( HasAssociationClass([Assoc]) != "" )
|
||||
info = "[" [StartClass.name] "{" [StartRole.name] ":" [StartRole.multiplicity] "}]" "["[Assoc.name]"]" "[" [EndClass.name] "{" [EndRole.name]":" [EndRole.multiplicity] "}]\n";
|
||||
end if
|
||||
end if
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
end proc
|
|
@ -0,0 +1,39 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
DictionaryItems();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
setOutput( [OutputDir] "/" "DictionaryItems.bat" );
|
||||
info = "Output generatig into: " [OutputDir] "/" "DictionaryItems.bat\n";
|
||||
|
||||
end proc
|
||||
|
||||
proc DictionaryItems()
|
||||
info = "Dictionary Item tipusú oszlopok listája.\n";
|
||||
loop (Instances -> MClass Where(getStereotype([MClass]) == "Entity" ) )
|
||||
loop( MClass -> MAttribute Where ([MAttribute.type] == "DictionaryItem"))
|
||||
info = ConvertNameToSQLTableName([MClass.name]) "." ConvertNameToSQLColumnName([MAttribute.name]) ":" [MAttribute.defaultValue] "\n";
|
||||
end loop
|
||||
end loop
|
||||
|
||||
local dictitems = GetDictionaryItemTypes();
|
||||
local itemcount = 0;
|
||||
info = "Dictionary Item típusok listája:\n";
|
||||
loop (Instances -> TokenSet([dictitems]) )
|
||||
[itemcount] = incr([itemcount]);
|
||||
info = [TokenSet.line] "\n";
|
||||
end loop
|
||||
info = "Dictionary Item típusok száma:" [itemcount] "\n";
|
||||
end proc
|
|
@ -0,0 +1,51 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
ManyMultiplicityCheck();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
// setOutput( [OutputDir] "/" "EntitiesWithoutAttributes.bat" );
|
||||
end proc
|
||||
|
||||
proc ManyMultiplicityCheck()
|
||||
local many = 0;
|
||||
local zeromany = 0;
|
||||
// out = "@echo off\n";
|
||||
loop (Instances -> MClass as StartClass Where( getStereotype([StartClass]) == "Entity" ) )
|
||||
loop (StartClass -> Role as StartRole -> MAssociation as Assoc )
|
||||
loop (Assoc -> MAssociationEnd as EndRole -> MClass as PartnerClass Where ([StartRole.id] < [EndRole.id]) and (getStereotype([PartnerClass])== "Entity") )
|
||||
if ( [StartRole.multiplicity] == "*" )
|
||||
[many] = incr([many]);
|
||||
end if
|
||||
if ( [StartRole.multiplicity] == "0..*" )
|
||||
[zeromany] = incr([zeromany]);
|
||||
end if
|
||||
|
||||
if ( [EndRole.multiplicity] == "*" )
|
||||
[many] = incr([many]);
|
||||
end if
|
||||
if ( [EndRole.multiplicity] == "0..*" )
|
||||
[zeromany] = incr([zeromany]);
|
||||
end if
|
||||
// info = "Assoc between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
// out = "echo between [" [StartClass.name] "] [" [PartnerClass.name] "]\n";
|
||||
// GenerateEditorNavigation([Assoc.guid]);
|
||||
end loop
|
||||
end loop
|
||||
end loop
|
||||
|
||||
// info = "* :" [many] "\n";
|
||||
// info = "0..* :" [zeromany] "\n";
|
||||
end proc
|
|
@ -0,0 +1,35 @@
|
|||
USES Common/std;
|
||||
USES Common/Converters;
|
||||
USES Common/CommonUtil;
|
||||
USES Common/ModelDataRetreive;
|
||||
USES Common/StringUtil;
|
||||
|
||||
|
||||
proc main()
|
||||
Init();
|
||||
info = "UML check STARTED at \t"time()"\n";
|
||||
Szamossagok();
|
||||
info = "UML check STOPPED at \t"time()"\n";
|
||||
end proc
|
||||
|
||||
proc Init()
|
||||
//Language
|
||||
setLanguage("SQL");
|
||||
mkdir([OutputDir]);
|
||||
// setOutput( [OutputDir] "/" "Szamossagok.bat" );
|
||||
end proc
|
||||
|
||||
proc Szamossagok()
|
||||
local count = 0;
|
||||
loop ( Instances -> MClass Where ( getStereotype([MClass]) == "Entity" ) )
|
||||
local associd = "";
|
||||
loop ( MClass -> MAssociation )
|
||||
[associd] = [MAssociation.id];
|
||||
end loop
|
||||
|
||||
if ( [associd] != "" )
|
||||
[count] = incr([count]);
|
||||
end if
|
||||
end loop
|
||||
info = "Asszociációs osztályok száma: " [count] "\n";
|
||||
end proc
|
1
Tools/CodeGeneration/Templates/_acdGeneratedFiles.mrg
Normal file
1
Tools/CodeGeneration/Templates/_acdGeneratedFiles.mrg
Normal file
|
@ -0,0 +1 @@
|
|||
SDA_MergeConfig.cfg
|
Loading…
Add table
Add a link
Reference in a new issue