Commit 16b4251a authored by Erika Segatto's avatar Erika Segatto

Inclui mais construtores nas classes para permitir mapeamento de relacionamento bidirecional

parent 33e1ab0b
......@@ -2351,7 +2351,6 @@ begin
end;
end;
function TUtil.AlimentarMetamodelUseCase(poRootUseCase: IUMLUseCase; piBaseStateMachine: IUMLStateMachine;
piBaseSubmachineState: IUMLSubmachineState; poMetaModel: acMetaModel; piProgress: TFShowProgress): string;
var
......@@ -2412,8 +2411,6 @@ begin
end;
end;
function TUtil.GerarBodyRegisterMappings(piModelMappingsOptions: TModelMappingsOptions; const piInstantCodeConsts: TInstantCodeConsts; piProgress: TFShowProgress; piStartAt: Integer; piEndAt: Integer): string;
var lEnum: acEnumerator;
lClassTicket: acClassTicket;
......@@ -5076,7 +5073,7 @@ end;
function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False; piLista: Boolean = False);
procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; const piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False; piLista: Boolean = False);
begin
//Escreve getter and setter
if not piLista then
......@@ -5088,13 +5085,17 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
else
begin
piCodigoClasse.WriteLine('public List<' + piTipoAtributo+'> get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }');
//piCodigoClasse.WriteLine('public void add'+piNomeAtributo+'('+piTipoAtributo+' piObject) { '+piNomeAtributo+'.add(piObject); }');
//piCodigoClasse.WriteLine('public void remove'+piNomeAtributo+'('+piTipoAtributo+' piObject) { '+piNomeAtributo+'.remove(piObject); }');
end;
piCodigoClasse.WriteLine('');
end;
procedure EscreverCriacaoLista(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
begin
if piMultiplicity > 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();');
end;
procedure EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; piNomeAtributo: String; const piMultiplicity: Integer);
procedure EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
begin
if (piNomeAtributo <> '') then
begin
......@@ -5102,7 +5103,7 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';')
else
begin
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();');
EscreverCriacaoLista(piCodigoClasse, piNomeAtributo, piMultiplicity);
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
end;
end;
......@@ -5161,7 +5162,8 @@ var
lsNomeTabela,
lsNomeGeneratorId,
lsAtributo,
lsTipoAttribute: string;
lsTipoAttribute,
lPackageRef: string;
index: integer;
lClassTicket,
lClassTicketPai: acClassTicket;
......@@ -5169,29 +5171,39 @@ var
lMetaModelPersistenceMapSQL: acMetaModelPersistenceMapSQL;
lClassToDBMapTicket: acClassToDBMapTicket;
lCodigoClasse: PStringWriter;
lParamsConstrutor: string;
lCodigoClasse,
lCodigoConstrutor,
lCodigoConstrutorSemRelOut: PStringWriter;
lParamsConstrutor,
lParamsConstrutorSemRelOut: string;
lRelation: acRelationTicket;
lRelationPersistenceMapTicket: acRelationSQLPersistenceMapTicket;
lColumnTicket: acDBColumnMapTicket;
lEhClasseHerdada: Boolean;
lListaChamadaSuper: TStringList;
lListaChamadaSuper,
lListaChamadaSuperSemRelOut: TStringList;
begin
Result := '';
lParamsConstrutorSemRelOut := '';
lParamsConstrutor := '';
lsNomeClasseDominio := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket);
lsNomeClasseDB := lsNomeClasseDominio + 'Entity';
lPackageRef := StarUMLApp.ProjectManager.Project.Documentation;
if lPackageRef <> '' then lPackageRef := lPackageRef + '.';
// Obter ticket do banco
lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL;
lClassToDBMapTicket := lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket);
lListaChamadaSuper := TStringList.Create;
lListaChamadaSuperSemRelOut := TStringList.Create;
lCodigoConstrutor := PStringWriter.Create;
lCodigoConstrutorSemRelOut := PStringWriter.Create;
lCodigoClasse := PStringWriter.Create;
try
//lCodigoClasse.WriteLine('package adapters.persistence.entities;');
//lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('package '+lPackageRef+'adapters.persistence.entities;');
lCodigoClasse.WriteLine('');
// Imports de tipos
IncluirImports(lCodigoClasse, lClassTicket, _DBTipoId);
lCodigoClasse.WriteLine('');
......@@ -5214,7 +5226,7 @@ begin
end;
lCodigoClasse.WriteLine('@Table(name = "'+lsNomeTabela+'")');
if lClassTicket.HasDescendants
then lCodigoClasse.Write('public abstract ')
then lCodigoClasse.Write('public ') // abstract
else lCodigoClasse.Write('public final ');
lCodigoClasse.Write('class ' + lsNomeClasseDB);
if lEhClasseHerdada
......@@ -5360,9 +5372,17 @@ begin
lAttributeTicket := lClassTicketPai.Attributes.Objects[index] as acAttributeTicket;
lsAtributo := lClassTicketPai.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then
lListaChamadaSuper.Add('pi' + lsAtributo);
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
lParamsConstrutorSemRelOut := lParamsConstrutorSemRelOut + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo);
lListaChamadaSuperSemRelOut.Add('pi' + lsAtributo);
end
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lsAtributo, 1);
EscreverInicializacaoAtributo(lCodigoConstrutorSemRelOut, lsAtributo, 1);
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
......@@ -5374,8 +5394,14 @@ begin
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then
lListaChamadaSuper.Add('pi' + lsAtributo);
if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo);
end
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
......@@ -5388,13 +5414,16 @@ begin
then lsTipoAttribute := 'List<'+ lRelation.DestinationClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then
lListaChamadaSuper.Add('pi' + lsAtributo);
if lClassTicketPai.ID <> lClassTicket.ID
then lListaChamadaSuper.Add('pi' + lsAtributo)
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
// Escrever mtodos
// Escrever construtor vazio
lCodigoClasse.WriteLine('');
......@@ -5412,7 +5441,7 @@ begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') and (lRelation.OriginMaxMultiplicity > 1) then
lCodigoClasse.WriteLine(lsAtributo + ' = new ArrayList<>();');
EscreverCriacaoLista(lCodigoClasse, lsAtributo, lRelation.OriginMaxMultiplicity);
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
......@@ -5421,24 +5450,10 @@ begin
lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
lCodigoClasse.Indent();
if lEhClasseHerdada then
lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
EscreverInicializacaoAtributo(lCodigoClasse, lsAtributo, 1);
end;
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
EscreverInicializacaoAtributo(lCodigoClasse, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
EscreverInicializacaoAtributo(lCodigoClasse, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
lCodigoClasse.WriteLine('}');
// Escrever construtor com id com relacionamentos
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+_DBTipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
......@@ -5447,36 +5462,35 @@ begin
lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else
lCodigoClasse.WriteLine(_NomeId+' = piId;');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
EscreverInicializacaoAtributo(lCodigoClasse, lsAtributo, 1);
end;
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
EscreverInicializacaoAtributo(lCodigoClasse, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
EscreverInicializacaoAtributo(lCodigoClasse, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
// Escrever construtor com id sem relacionamentos
lCodigoClasse.WriteLine('');
if lParamsConstrutorSemRelOut <> lParamsConstrutor then
begin
lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+_DBTipoId+' piId, '+strutils.LeftStr(lParamsConstrutorSemRelOut, Length(lParamsConstrutorSemRelOut)-2)+') {');
lCodigoClasse.Indent();
if lEhClasseHerdada
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuperSemRelOut.CommaText + ');')
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
lCodigoClasse.Append(lCodigoConstrutorSemRelOut);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
lCodigoClasse.WriteLine('');
end;
// Escrever mtodo ToString
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('@Override');
lCodigoClasse.WriteLine('public String toString() {');
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasseDB+'{ " +');
if not lEhClasseHerdada then
lCodigoClasse.WriteLine('"id="+ '+_NomeId+' +');
lCodigoClasse.WriteLine('"id="+ '+_NomeId+' + ", " +');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('" '+lsAtributo+'="+ '+lsAtributo+' +');
lCodigoClasse.WriteLine('" '+lsAtributo+'="+ '+lsAtributo+'+ ", " +');
end;
lCodigoClasse.WriteLine('"}";');
lCodigoClasse.Outdent();
......@@ -5491,12 +5505,22 @@ begin
finally
lCodigoClasse.Free;
lListaChamadaSuper.Free;
lListaChamadaSuperSemRelOut.Free;
lCodigoConstrutor.Free;
lCodigoConstrutorSemRelOut.Free;
end;
end;
function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
procedure EscreveAtributoClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piVisibility: Integer);
function ObterTipoAtributoRelacionamento(const piMultiplicity: Integer; const piPartnerAttributeName: string): string;
begin
if piMultiplicity > 1
then Result := 'List<'+ piPartnerAttributeName +'>'
else Result := piPartnerAttributeName;
end;
procedure EscreveAtributoClasse(const piCodigoClasse: PStringWriter; const piNomeAtributo, piTipoAtributo: String; piVisibility: Integer);
begin
//Escreve atributo
case piVisibility of
......@@ -5505,16 +5529,45 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
acAttributeVisibility.pvPrivate : piCodigoClasse.Write('private ');
else piCodigoClasse.Write('private ');
end;
piCodigoClasse.WriteLine(piTipoAtributo+' f'+piNomeAtributo+';');
piCodigoClasse.WriteLine(piTipoAtributo+' '+piNomeAtributo+';');
end;
procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False);
procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; const piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False; piLista: Boolean = False);
begin
if not piLista then
begin
//Escreve getter and setter
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+' f'+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }');
if not piApenasGetter then
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { f'+piNomeAtributo+' = pi'+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('');
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { '+piNomeAtributo+' = pi'+piNomeAtributo+'; }');
end
else
begin
piCodigoClasse.WriteLine('public List<' + piTipoAtributo+'> get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public void add'+piNomeAtributo+'('+piTipoAtributo+' piObject) { '+piNomeAtributo+'.add(piObject); }');
piCodigoClasse.WriteLine('public void remove'+piNomeAtributo+'('+piTipoAtributo+' piObject) { '+piNomeAtributo+'.remove(piObject); }');
end;
piCodigoClasse.WriteLine('');
end;
procedure EscreverCriacaoLista(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
begin
if piMultiplicity > 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();');
end;
procedure EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
begin
if (piNomeAtributo <> '') then
begin
if piMultiplicity = 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';')
else
begin
EscreverCriacaoLista(piCodigoClasse, piNomeAtributo, piMultiplicity);
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
end;
end;
end;
procedure IncluirImports(const piCodigoClasse: PStringWriter; piClassTicket: acClassTicket; const piTipoId: string);
......@@ -5523,8 +5576,9 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
lHasImport: array[0..2] of Boolean;
index: integer;
lsTipoAttribute: string;
begin
begin
piCodigoClasse.WriteLine('import java.util.List;');
piCodigoClasse.WriteLine('import java.util.ArrayList;');
for index := 0 to 2 do
lHasImport[index] := False;
if piTipoId = 'Long' then
......@@ -5560,30 +5614,56 @@ const
var
lsNomeClasse,
lsAtributo,
lsTipoAttribute: string;
lsTipoAttribute,
lPackageRef: string;
index: integer;
lClassTicket: acClassTicket;
lClassTicket,
lClassTicketPai: acClassTicket;
lAttributeTicket: acAttributeTicket;
lCodigoClasse: PStringWriter;
lParamsConstrutor: string;
lCodigoClasse,
lCodigoConstrutor,
lCodigoConstrutorSemRelOut: PStringWriter;
lRelation: acRelationTicket;
lListaParamsConstrutorSemRelOut,
lListaParamsConstrutor,
lListaChamadaSuper,
lListaChamadaSuperSemRelOut: TStringList;
lEhClasseHerdada: boolean;
begin
Result := '';
lParamsConstrutor := '';
lsNomeClasse := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasse);
lCodigoClasse := PStringWriter.Create;
lsNomeClasse := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasse);
lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket);
lPackageRef := StarUMLApp.ProjectManager.Project.Documentation;
if lPackageRef <> '' then lPackageRef := lPackageRef + '.';
lListaParamsConstrutor := TStringList.Create;
lListaParamsConstrutorSemRelOut := TStringList.Create;
lListaChamadaSuper := TStringList.Create;
lListaChamadaSuperSemRelOut := TStringList.Create;
lCodigoClasse := PStringWriter.Create;
lCodigoConstrutor := PStringWriter.Create;
lCodigoConstrutorSemRelOut := PStringWriter.Create;
try
//lCodigoClasse.WriteLine('package domain;');
//lCodigoClasse.WriteLine('');
lListaParamsConstrutor.StrictDelimiter := true;
lListaParamsConstrutor.Delimiter := ',';
lListaParamsConstrutorSemRelOut.StrictDelimiter := true;
lListaParamsConstrutor.Delimiter := ',';
// Package
lCodigoClasse.WriteLine('package '+lPackageRef+'domain;');
lCodigoClasse.WriteLine('');
// Imports de tipos
IncluirImports(lCodigoClasse, lClassTicket, _TipoId);
lCodigoClasse.WriteLine('');
// Incio da classe
lCodigoClasse.WriteLine('public class ' + lsNomeClasse + ' {');
lCodigoClasse.WriteLine('');
if lClassTicket.HasDescendants
then lCodigoClasse.Write('public ') // abstract
else lCodigoClasse.Write('public final ');
lCodigoClasse.Write('class ' + lsNomeClasse);
if lEhClasseHerdada
then lCodigoClasse.WriteLine(' extends '+ lClassTicket.ParentClassTicket.DisplayName+' {')
else lCodigoClasse.WriteLine(' {');
lCodigoClasse.Indent();
// Escreve atributo id
......@@ -5600,25 +5680,21 @@ begin
// DECLARAO ATRIBUTOS: Percorre relacionamentos
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
lsAtributo := lRelation.DestinationPropertyName;
if (lsAtributo <> '') then
begin
lsAtributo := lRelation.DestinationPropertyName;
if lRelation.DestinationMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.DestinationMaxMultiplicity, lRelation.OriginClassTicket.DisplayName);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected);
end;
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') then
begin
lsAtributo := lRelation.OriginPropertyName;
if lRelation.OriginMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+lRelation.DestinationClassTicket.DisplayName+'>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.OriginMaxMultiplicity, lRelation.DestinationClassTicket.DisplayName);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected);
end;
end;
......@@ -5631,61 +5707,121 @@ begin
lAttributeTicket := lClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsAtributo := lClassTicket.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lParamsConstrutor:= lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute);
end;
// GETTER/SETTER: Escrever RelationsPartnerShips
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
lsAtributo := lRelation.DestinationPropertyName;
if (lsAtributo <> '') then
begin
lsAtributo := lRelation.DestinationPropertyName;
if lRelation.DestinationMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+lRelation.OriginClassTicket.DisplayName+'>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute);
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, False, lRelation.DestinationMaxMultiplicity > 1);
end;
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, False, lRelation.OriginMaxMultiplicity > 1);
end;
end;
// Obter parametros para incluir no construtor
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.Attributes.Count - 1 do
begin
lAttributeTicket := lClassTicketPai.Attributes.Objects[index] as acAttributeTicket;
lsAtributo := lClassTicketPai.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lListaParamsConstrutor.Add(lsTipoAttribute + ' pi'+ lsAtributo);
lListaParamsConstrutorSemRelOut.Add(lsTipoAttribute + ' pi'+ lsAtributo);
if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo);
lListaChamadaSuperSemRelOut.Add('pi' + lsAtributo);
end
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lsAtributo, 1);
EscreverInicializacaoAtributo(lCodigoConstrutorSemRelOut, lsAtributo, 1);
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
lsAtributo := lRelation.DestinationPropertyName;
if (lsAtributo <> '') then
begin
lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.DestinationMaxMultiplicity, lRelation.OriginClassTicket.DisplayName);
lListaParamsConstrutor.Add(lsTipoAttribute + ' pi'+ lsAtributo);
if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo);
end
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName;
if lRelation.OriginMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+lRelation.DestinationClassTicket.DisplayName+'>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, lRelation.OriginMaxMultiplicity > 1);
if (lsAtributo <> '') then
begin
lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.OriginMaxMultiplicity, lRelation.DestinationClassTicket.DisplayName);
lListaParamsConstrutor.Add(lsTipoAttribute + ' pi'+ lsAtributo);
if lClassTicketPai.ID <> lClassTicket.ID
then lListaChamadaSuper.Add('pi' + lsAtributo)
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
//Escrever mtodos
//Escreve construtor sem id
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public ' + lsNomeClasse + '(' + lListaParamsConstrutor.DelimitedText + ') {');
lCodigoClasse.Indent();
if lEhClasseHerdada
then lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
//Escreve construtor com id
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+_TipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('f'+_NomeId+' = piId;');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('f' + lsAtributo + ' = pi' + lsAtributo + ';');
end;
lCodigoClasse.WriteLine('public ' + lsNomeClasse + '(' +_TipoId + ' piId,' + lListaParamsConstrutor.DelimitedText + ') {');
lCodigoClasse.Indent();
if lEhClasseHerdada
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
//Escreve construtor sem id
//Escreve construtor com id e sem relacionamentos
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
lCodigoClasse.Indent();
//lCodigoClasse.WriteLine('fId = null;');
for index := 0 to lClassTicket.Attributes.Count - 1 do
if lListaParamsConstrutorSemRelOut.Count <> lListaParamsConstrutor.Count then
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('f' + lsAtributo + ' = pi' + lsAtributo + ';');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+_TipoId+' piId,'+lListaParamsConstrutorSemRelOut.DelimitedText+') {');
lCodigoClasse.Indent();
if lEhClasseHerdada
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuperSemRelOut.CommaText + ');')
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
lCodigoClasse.Append(lCodigoConstrutorSemRelOut);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
//Escrever mtodo ToString
lCodigoClasse.WriteLine('');
......@@ -5693,11 +5829,11 @@ begin
lCodigoClasse.WriteLine('public String toString() {');
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasse+'{ " +');
lCodigoClasse.WriteLine('"id="+ id +');
lCodigoClasse.WriteLine('"id="+ '+_NomeId+' + ", " +');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' +');
lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' + ", " +');
end;
lCodigoClasse.WriteLine('"}";');
lCodigoClasse.Outdent();
......@@ -5711,52 +5847,191 @@ begin
Result := lCodigoClasse.AsString;
finally
lCodigoClasse.Free;
lCodigoConstrutor.Free;
lCodigoConstrutorSemRelOut.Free;
lListaParamsConstrutor.Free;
lListaParamsConstrutorSemRelOut.Free;
lListaChamadaSuper.Free;
lListaChamadaSuperSemRelOut.Free;
end;
end;
function TUtil.GerarClassPreview_JavaMapper(piClass: IUMLClass): string;
function GetMapperClassName(const piDomainClassName: string): string;
begin
Result := RightStr(piDomainClassName, Length(piDomainClassName)-2) + 'Mapper';
end;
function GetDBClassName(const piDomainClassName: string): string;
begin
Result := piDomainClassName + 'Entity';
end;
var
lsNomeClasseMapper,
lsNomeClasseDominio,
lsNomeClasseDB,
lsUltAtributo,
lsAttributo: string;
lsAttributo,
lPackageRef,
lsTipoAttribute,
lOutParameters: string;
index: integer;
lClassTicket,
lClassTicketPai: acClassTicket;
lCodigoClasse: PStringWriter;
lRelation: acRelationTicket;
lAttributList: TStringList;
lAttributList,
lListOutParameters: TStringList;
begin
Result := '';
lsNomeClasseDominio := piClass.Name;
lsNomeClasseDB := lsNomeClasseDominio + 'Entity';
lsNomeClasseMapper := RightStr(lsNomeClasseDominio, Length(lsNomeClasseDominio)-2) + 'Mapper';
lsNomeClasseDB := GetDBClassName(lsNomeClasseDominio);
lsNomeClasseMapper := GetMapperClassName(lsNomeClasseDominio);
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lPackageRef := StarUMLApp.ProjectManager.Project.Documentation;
if lPackageRef <> '' then lPackageRef := lPackageRef + '.';
lCodigoClasse := PStringWriter.Create;
try
lCodigoClasse.WriteLine('package adapters.persistence.mappers;');
try
lCodigoClasse.WriteLine('package '+lPackageRef+'adapters.persistence.mappers;');
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('import adapters.persistence.entities.'+lsNomeClasseDB+';');
lCodigoClasse.WriteLine('import domain.'+lsNomeClasseDominio+';');
lCodigoClasse.WriteLine('import '+lPackageRef+'adapters.persistence.entities.'+lsNomeClasseDB+';');
lCodigoClasse.WriteLine('import '+lPackageRef+'domain.'+lsNomeClasseDominio+';');
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
lCodigoClasse.WriteLine('import '+lPackageRef+'adapters.persistence.entities.'+GetDBClassName(lsTipoAttribute)+';');
lCodigoClasse.WriteLine('import '+lPackageRef+'domain.'+lsTipoAttribute+';');
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
lCodigoClasse.WriteLine('import '+lPackageRef+'adapters.persistence.entities.'+GetDBClassName(lsTipoAttribute)+';');
lCodigoClasse.WriteLine('import '+lPackageRef+'domain.'+lsTipoAttribute+';');
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
lCodigoClasse.WriteLine('import java.util.stream.Collectors;');
lCodigoClasse.WriteLine('import java.util.List;');
lCodigoClasse.WriteLine('');
// Incio da classe
lCodigoClasse.WriteLine('public final class ' + lsNomeClasseMapper + ' {');
lCodigoClasse.WriteLine('');
lCodigoClasse.Indent();
// toDomain: Escrever mtodo toDomain
lCodigoClasse.WriteLine('');
// Obter lista de parametros Out para metodo toDomain
lListOutParameters := TStringList.Create;
try
lListOutParameters.StrictDelimiter := true;
lListOutParameters.Delimiter := ',';
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
if lRelation.DestinationMaxMultiplicity = 1
then lListOutParameters.Add(Format('%s pi%s', [lsTipoAttribute, lRelation.DestinationPropertyName]))
else lListOutParameters.Add(Format('List<%s> pi%s', [lsTipoAttribute, lRelation.DestinationPropertyName]));
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
if lRelation.OriginMaxMultiplicity = 1
then lListOutParameters.Add(Format('%s pi%s', [lsTipoAttribute, lRelation.OriginPropertyName]))
else lListOutParameters.Add(Format('List<%s> pi%s', [lsTipoAttribute, lRelation.OriginPropertyName]));
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
lOutParameters := lListOutParameters.DelimitedText;
finally
lListOutParameters.Free;
end;
// toDomain: Escrever mtodo toDomain apenas relacionamento In
if lOutParameters <> '' then
begin
lCodigoClasse.WriteLine('public static '+lsNomeClasseDominio+' toDomain('+lsNomeClasseDB + ' piDBObject, '+lOutParameters+') { ');
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('if (piDBObject == null) return null;');
lCodigoClasse.WriteLine('return new ' + lsNomeClasseDominio + '(');
lCodigoClasse.Indent();
lAttributList := TStringList.Create;
try
lAttributList.Add('piDBObject.getId()');
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.Attributes.Count - 1 do
begin
lAttributList.Add('piDBObject.get%s()', [lClassTicketPai.Attributes.Strings[index]]);
end;
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lAttributList.Add(Format('pi%s', [lRelation.DestinationPropertyName]));
//lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
//if lRelation.DestinationMaxMultiplicity = 1
// then lAttributList.Add(Format('%s.toDomain(piDBObject.get%s())', [GetMapperClassName(lsTipoAttribute), lRelation.DestinationPropertyName]))
// else lAttributList.Add(Format('piDBObject.get%s().stream().map(%s::toDomain).collect(Collectors.toList())', [lRelation.DestinationPropertyName, GetMapperClassName(lsTipoAttribute)]));
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
lAttributList.Add(Format('pi%s', [lRelation.OriginPropertyName]));
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
lsUltAtributo := lAttributList.Strings[lAttributList.Count - 1];
lAttributList.Delete(lAttributList.Count - 1);
for lsAttributo in lAttributList.CommaText.Split([',']) do
lCodigoClasse.WriteLine(lsAttributo + ',');
lCodigoClasse.WriteLine(lsUltAtributo);
finally
lAttributList.Free;
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine(');');
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
end;
// toDomain: Escrever mtodo toDomain completo
lCodigoClasse.WriteLine('public static '+lsNomeClasseDominio+' toDomain('+lsNomeClasseDB + ' piDBObject) { ');
lCodigoClasse.Indent();
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('if (piDBObject == null) return null;');
lCodigoClasse.WriteLine('return new ' + lsNomeClasseDominio + '(');
lCodigoClasse.Indent();
lAttributList := TStringList.Create;
try
lAttributList.Add('piDBObject.getId()');
// toDomain: obter lista de atributos da classe atual + classe pai
lAttributList.Add('piDBObject.getId()');
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
......@@ -5768,25 +6043,182 @@ begin
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
lAttributList.Add(Format('piDBObject.get%s()', [lRelation.DestinationPropertyName]));
begin
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
if lRelation.DestinationMaxMultiplicity = 1
then lAttributList.Add(Format('%s.toDomain(piDBObject.get%s())', [GetMapperClassName(lsTipoAttribute), lRelation.DestinationPropertyName]))
else lAttributList.Add(Format('piDBObject.get%s().stream().map(%s::toDomain).collect(Collectors.toList())', [lRelation.DestinationPropertyName, GetMapperClassName(lsTipoAttribute)]));
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
if lRelation.OriginMaxMultiplicity = 1
then lAttributList.Add(Format('%s.toDomain(piDBObject.get%s())', [GetMapperClassName(lsTipoAttribute), lRelation.OriginPropertyName]))
else lAttributList.Add(Format('piDBObject.get%s().stream().map(%s::toDomain).collect(Collectors.toList())', [lRelation.OriginPropertyName, GetMapperClassName(lsTipoAttribute)]));
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
// toDomain: escrever lista de atributos encontrados
end;
lsUltAtributo := lAttributList.Strings[lAttributList.Count - 1];
lAttributList.Delete(lAttributList.Count - 1);
for lsAttributo in lAttributList.CommaText.Split([',']) do
lCodigoClasse.WriteLine(lsAttributo + ',');
lCodigoClasse.WriteLine(lsUltAtributo + ';');
lCodigoClasse.WriteLine(lsUltAtributo);
finally
lAttributList.Free;
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine(');');
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
lCodigoClasse.WriteLine('}');
// Obter lista de parametros para metodo fromDomain
lListOutParameters := TStringList.Create;
try
lListOutParameters.StrictDelimiter := true;
lListOutParameters.Delimiter := ',';
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
if lRelation.DestinationMaxMultiplicity = 1
then lListOutParameters.Add(Format('%s pi%s', [GetDBClassName(lsTipoAttribute), lRelation.DestinationPropertyName]))
else lListOutParameters.Add(Format('List<%s> pi%s', [GetDBClassName(lsTipoAttribute), lRelation.DestinationPropertyName]));
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
if lRelation.OriginMaxMultiplicity = 1
then lListOutParameters.Add(Format('%s pi%s', [GetDBClassName(lsTipoAttribute), lRelation.OriginPropertyName]))
else lListOutParameters.Add(Format('List<%s> pi%s', [GetDBClassName(lsTipoAttribute), lRelation.OriginPropertyName]));
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
lOutParameters := lListOutParameters.DelimitedText;
finally
lListOutParameters.Free;
end;
// Escrever mtodo fromDomain apenas relacionamentos In
if lOutParameters <> '' then
begin
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public static '+lsNomeClasseDB+' fromDomain('+lsNomeClasseDominio + ' piDmObject, '+lOutParameters+') { ');
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('if (piDmObject == null) return null;');
lCodigoClasse.WriteLine('return new ' + lsNomeClasseDB + '(');
lCodigoClasse.Indent();
lAttributList := TStringList.Create;
try
lAttributList.Add('piDmObject.getId()');
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.Attributes.Count - 1 do
begin
lAttributList.Add('piDmObject.get%s()', [lClassTicketPai.Attributes.Strings[index]]);
end;
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lAttributList.Add(Format('pi%s', [lRelation.DestinationPropertyName]));
//lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
//if lRelation.DestinationMaxMultiplicity = 1
// then lAttributList.Add(Format('%s.fromDomain(piDmObject.get%s())', [GetMapperClassName(lsTipoAttribute), lRelation.DestinationPropertyName]))
// else lAttributList.Add(Format('piDmObject.get%s().stream().map(%s::fromDomain).collect(Collectors.toList())', [lRelation.DestinationPropertyName, GetMapperClassName(lsTipoAttribute)]));
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
lAttributList.Add(Format('pi%s', [lRelation.OriginPropertyName]));
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
lsUltAtributo := lAttributList.Strings[lAttributList.Count - 1];
lAttributList.Delete(lAttributList.Count - 1);
for lsAttributo in lAttributList.CommaText.Split([',']) do
lCodigoClasse.WriteLine(lsAttributo + ',');
lCodigoClasse.WriteLine(lsUltAtributo);
finally
lAttributList.Free;
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine(');');
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
end;
// Escrever mtodo fromDomain
// Escrever mtodo fromDomain completo
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public static '+lsNomeClasseDB+' fromDomain('+lsNomeClasseDominio + ' piDmObject) { ');
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('if (piDmObject == null) return null;');
lCodigoClasse.WriteLine('return new ' + lsNomeClasseDB + '(');
lCodigoClasse.Indent();
lAttributList := TStringList.Create;
try
lAttributList.Add('piDmObject.getId()');
lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do
begin
for index := 0 to lClassTicketPai.Attributes.Count - 1 do
begin
lAttributList.Add('piDmObject.get%s()', [lClassTicketPai.Attributes.Strings[index]]);
end;
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
if lRelation.DestinationMaxMultiplicity = 1
then lAttributList.Add(Format('%s.fromDomain(piDmObject.get%s())', [GetMapperClassName(lsTipoAttribute), lRelation.DestinationPropertyName]))
else lAttributList.Add(Format('piDmObject.get%s().stream().map(%s::fromDomain).collect(Collectors.toList())', [lRelation.DestinationPropertyName, GetMapperClassName(lsTipoAttribute)]));
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
if lRelation.OriginMaxMultiplicity = 1
then lAttributList.Add(Format('%s.fromDomain(piDmObject.get%s())', [GetMapperClassName(lsTipoAttribute), lRelation.OriginPropertyName]))
else lAttributList.Add(Format('piDmObject.get%s().stream().map(%s::fromDomain).collect(Collectors.toList())', [lRelation.OriginPropertyName, GetMapperClassName(lsTipoAttribute)]));
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
lsUltAtributo := lAttributList.Strings[lAttributList.Count - 1];
lAttributList.Delete(lAttributList.Count - 1);
for lsAttributo in lAttributList.CommaText.Split([',']) do
lCodigoClasse.WriteLine(lsAttributo + ',');
lCodigoClasse.WriteLine(lsUltAtributo);
finally
lAttributList.Free;
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine(');');
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
//Fim
lCodigoClasse.Outdent();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment