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

View file

@ -0,0 +1,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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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

View 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