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 ...@@ -2351,7 +2351,6 @@ begin
end; end;
end; end;
function TUtil.AlimentarMetamodelUseCase(poRootUseCase: IUMLUseCase; piBaseStateMachine: IUMLStateMachine; function TUtil.AlimentarMetamodelUseCase(poRootUseCase: IUMLUseCase; piBaseStateMachine: IUMLStateMachine;
piBaseSubmachineState: IUMLSubmachineState; poMetaModel: acMetaModel; piProgress: TFShowProgress): string; piBaseSubmachineState: IUMLSubmachineState; poMetaModel: acMetaModel; piProgress: TFShowProgress): string;
var var
...@@ -2412,8 +2411,6 @@ begin ...@@ -2412,8 +2411,6 @@ begin
end; end;
end; end;
function TUtil.GerarBodyRegisterMappings(piModelMappingsOptions: TModelMappingsOptions; const piInstantCodeConsts: TInstantCodeConsts; piProgress: TFShowProgress; piStartAt: Integer; piEndAt: Integer): string; function TUtil.GerarBodyRegisterMappings(piModelMappingsOptions: TModelMappingsOptions; const piInstantCodeConsts: TInstantCodeConsts; piProgress: TFShowProgress; piStartAt: Integer; piEndAt: Integer): string;
var lEnum: acEnumerator; var lEnum: acEnumerator;
lClassTicket: acClassTicket; lClassTicket: acClassTicket;
...@@ -5076,7 +5073,7 @@ end; ...@@ -5076,7 +5073,7 @@ end;
function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string; 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 begin
//Escreve getter and setter //Escreve getter and setter
if not piLista then if not piLista then
...@@ -5088,13 +5085,17 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string; ...@@ -5088,13 +5085,17 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
else else
begin begin
piCodigoClasse.WriteLine('public List<' + piTipoAtributo+'> get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }'); 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; end;
piCodigoClasse.WriteLine(''); piCodigoClasse.WriteLine('');
end; end;
procedure EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; piNomeAtributo: String; const piMultiplicity: Integer); 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 begin
if (piNomeAtributo <> '') then if (piNomeAtributo <> '') then
begin begin
...@@ -5102,7 +5103,7 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string; ...@@ -5102,7 +5103,7 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';') piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';')
else else
begin begin
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();'); EscreverCriacaoLista(piCodigoClasse, piNomeAtributo, piMultiplicity);
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }'); piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
end; end;
end; end;
...@@ -5161,7 +5162,8 @@ var ...@@ -5161,7 +5162,8 @@ var
lsNomeTabela, lsNomeTabela,
lsNomeGeneratorId, lsNomeGeneratorId,
lsAtributo, lsAtributo,
lsTipoAttribute: string; lsTipoAttribute,
lPackageRef: string;
index: integer; index: integer;
lClassTicket, lClassTicket,
lClassTicketPai: acClassTicket; lClassTicketPai: acClassTicket;
...@@ -5169,29 +5171,39 @@ var ...@@ -5169,29 +5171,39 @@ var
lMetaModelPersistenceMapSQL: acMetaModelPersistenceMapSQL; lMetaModelPersistenceMapSQL: acMetaModelPersistenceMapSQL;
lClassToDBMapTicket: acClassToDBMapTicket; lClassToDBMapTicket: acClassToDBMapTicket;
lCodigoClasse: PStringWriter; lCodigoClasse,
lParamsConstrutor: string; lCodigoConstrutor,
lCodigoConstrutorSemRelOut: PStringWriter;
lParamsConstrutor,
lParamsConstrutorSemRelOut: string;
lRelation: acRelationTicket; lRelation: acRelationTicket;
lRelationPersistenceMapTicket: acRelationSQLPersistenceMapTicket; lRelationPersistenceMapTicket: acRelationSQLPersistenceMapTicket;
lColumnTicket: acDBColumnMapTicket; lColumnTicket: acDBColumnMapTicket;
lEhClasseHerdada: Boolean; lEhClasseHerdada: Boolean;
lListaChamadaSuper: TStringList; lListaChamadaSuper,
lListaChamadaSuperSemRelOut: TStringList;
begin begin
Result := ''; Result := '';
lParamsConstrutorSemRelOut := '';
lParamsConstrutor := ''; lParamsConstrutor := '';
lsNomeClasseDominio := piClass.Name; lsNomeClasseDominio := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio); lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket); lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket);
lsNomeClasseDB := lsNomeClasseDominio + 'Entity'; lsNomeClasseDB := lsNomeClasseDominio + 'Entity';
lPackageRef := StarUMLApp.ProjectManager.Project.Documentation;
if lPackageRef <> '' then lPackageRef := lPackageRef + '.';
// Obter ticket do banco // Obter ticket do banco
lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL; lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL;
lClassToDBMapTicket := lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket); lClassToDBMapTicket := lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket);
lListaChamadaSuper := TStringList.Create; lListaChamadaSuper := TStringList.Create;
lListaChamadaSuperSemRelOut := TStringList.Create;
lCodigoConstrutor := PStringWriter.Create;
lCodigoConstrutorSemRelOut := PStringWriter.Create;
lCodigoClasse := PStringWriter.Create; lCodigoClasse := PStringWriter.Create;
try try
//lCodigoClasse.WriteLine('package adapters.persistence.entities;'); lCodigoClasse.WriteLine('package '+lPackageRef+'adapters.persistence.entities;');
//lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
// Imports de tipos // Imports de tipos
IncluirImports(lCodigoClasse, lClassTicket, _DBTipoId); IncluirImports(lCodigoClasse, lClassTicket, _DBTipoId);
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
...@@ -5214,7 +5226,7 @@ begin ...@@ -5214,7 +5226,7 @@ begin
end; end;
lCodigoClasse.WriteLine('@Table(name = "'+lsNomeTabela+'")'); lCodigoClasse.WriteLine('@Table(name = "'+lsNomeTabela+'")');
if lClassTicket.HasDescendants if lClassTicket.HasDescendants
then lCodigoClasse.Write('public abstract ') then lCodigoClasse.Write('public ') // abstract
else lCodigoClasse.Write('public final '); else lCodigoClasse.Write('public final ');
lCodigoClasse.Write('class ' + lsNomeClasseDB); lCodigoClasse.Write('class ' + lsNomeClasseDB);
if lEhClasseHerdada if lEhClasseHerdada
...@@ -5361,8 +5373,16 @@ begin ...@@ -5361,8 +5373,16 @@ begin
lsAtributo := lClassTicketPai.Attributes.Strings[index]; lsAtributo := lClassTicketPai.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType); lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', '; lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then lParamsConstrutorSemRelOut := lParamsConstrutorSemRelOut + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo); lListaChamadaSuper.Add('pi' + lsAtributo);
lListaChamadaSuperSemRelOut.Add('pi' + lsAtributo);
end
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lsAtributo, 1);
EscreverInicializacaoAtributo(lCodigoConstrutorSemRelOut, lsAtributo, 1);
end;
end; end;
for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do for index := 0 to lClassTicketPai.RelationTicketsIn.Count - 1 do
begin begin
...@@ -5374,8 +5394,14 @@ begin ...@@ -5374,8 +5394,14 @@ begin
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'Entity>' then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity'; else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', '; lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo); lListaChamadaSuper.Add('pi' + lsAtributo);
end
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
end; end;
end; end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
...@@ -5388,13 +5414,16 @@ begin ...@@ -5388,13 +5414,16 @@ begin
then lsTipoAttribute := 'List<'+ lRelation.DestinationClassTicket.DisplayName +'Entity>' then lsTipoAttribute := 'List<'+ lRelation.DestinationClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity'; else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', '; lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then if lClassTicketPai.ID <> lClassTicket.ID
lListaChamadaSuper.Add('pi' + lsAtributo); then lListaChamadaSuper.Add('pi' + lsAtributo)
else begin
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
end; end;
end; end;
lClassTicketPai := lClassTicketPai.ParentClassTicket; lClassTicketPai := lClassTicketPai.ParentClassTicket;
end; end;
// Escrever mtodos // Escrever mtodos
// Escrever construtor vazio // Escrever construtor vazio
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
...@@ -5412,7 +5441,7 @@ begin ...@@ -5412,7 +5441,7 @@ begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket); lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName; lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') and (lRelation.OriginMaxMultiplicity > 1) then if (lsAtributo <> '') and (lRelation.OriginMaxMultiplicity > 1) then
lCodigoClasse.WriteLine(lsAtributo + ' = new ArrayList<>();'); EscreverCriacaoLista(lCodigoClasse, lsAtributo, lRelation.OriginMaxMultiplicity);
end; end;
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
...@@ -5422,21 +5451,7 @@ begin ...@@ -5422,21 +5451,7 @@ begin
lCodigoClasse.Indent(); lCodigoClasse.Indent();
if lEhClasseHerdada then if lEhClasseHerdada then
lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');'); lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');');
for index := 0 to lClassTicket.Attributes.Count - 1 do lCodigoClasse.Append(lCodigoConstrutor);
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.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
// Escrever construtor com id com relacionamentos // Escrever construtor com id com relacionamentos
...@@ -5447,36 +5462,35 @@ begin ...@@ -5447,36 +5462,35 @@ begin
lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');') lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else else
lCodigoClasse.WriteLine(_NomeId+' = piId;'); lCodigoClasse.WriteLine(_NomeId+' = piId;');
for index := 0 to lClassTicket.Attributes.Count - 1 do lCodigoClasse.Append(lCodigoConstrutor);
begin lCodigoClasse.Outdent();
lsAtributo := lClassTicket.Attributes.Strings[index]; lCodigoClasse.WriteLine('}');
EscreverInicializacaoAtributo(lCodigoClasse, lsAtributo, 1); // Escrever construtor com id sem relacionamentos
end; lCodigoClasse.WriteLine('');
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do if lParamsConstrutorSemRelOut <> lParamsConstrutor then
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 begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket); lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+_DBTipoId+' piId, '+strutils.LeftStr(lParamsConstrutorSemRelOut, Length(lParamsConstrutorSemRelOut)-2)+') {');
EscreverInicializacaoAtributo(lCodigoClasse, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity); lCodigoClasse.Indent();
end; if lEhClasseHerdada
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuperSemRelOut.CommaText + ');')
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
lCodigoClasse.Append(lCodigoConstrutorSemRelOut);
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
lCodigoClasse.WriteLine('');
end;
// Escrever mtodo ToString // Escrever mtodo ToString
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('@Override'); lCodigoClasse.WriteLine('@Override');
lCodigoClasse.WriteLine('public String toString() {'); lCodigoClasse.WriteLine('public String toString() {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasseDB+'{ " +'); lCodigoClasse.WriteLine('return "'+lsNomeClasseDB+'{ " +');
if not lEhClasseHerdada then if not lEhClasseHerdada then
lCodigoClasse.WriteLine('"id="+ '+_NomeId+' +'); lCodigoClasse.WriteLine('"id="+ '+_NomeId+' + ", " +');
for index := 0 to lClassTicket.Attributes.Count - 1 do for index := 0 to lClassTicket.Attributes.Count - 1 do
begin begin
lsAtributo := lClassTicket.Attributes.Strings[index]; lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('" '+lsAtributo+'="+ '+lsAtributo+' +'); lCodigoClasse.WriteLine('" '+lsAtributo+'="+ '+lsAtributo+'+ ", " +');
end; end;
lCodigoClasse.WriteLine('"}";'); lCodigoClasse.WriteLine('"}";');
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
...@@ -5491,12 +5505,22 @@ begin ...@@ -5491,12 +5505,22 @@ begin
finally finally
lCodigoClasse.Free; lCodigoClasse.Free;
lListaChamadaSuper.Free; lListaChamadaSuper.Free;
lListaChamadaSuperSemRelOut.Free;
lCodigoConstrutor.Free;
lCodigoConstrutorSemRelOut.Free;
end; end;
end; end;
function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string; 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 begin
//Escreve atributo //Escreve atributo
case piVisibility of case piVisibility of
...@@ -5505,18 +5529,47 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string; ...@@ -5505,18 +5529,47 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
acAttributeVisibility.pvPrivate : piCodigoClasse.Write('private '); acAttributeVisibility.pvPrivate : piCodigoClasse.Write('private ');
else piCodigoClasse.Write('private '); else piCodigoClasse.Write('private ');
end; end;
piCodigoClasse.WriteLine(piTipoAtributo+' f'+piNomeAtributo+';'); piCodigoClasse.WriteLine(piTipoAtributo+' '+piNomeAtributo+';');
end; 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 begin
//Escreve getter and setter //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 if not piApenasGetter then
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { f'+piNomeAtributo+' = pi'+piNomeAtributo+'; }'); 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(''); piCodigoClasse.WriteLine('');
end; 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); procedure IncluirImports(const piCodigoClasse: PStringWriter; piClassTicket: acClassTicket; const piTipoId: string);
var var
lAttributeTicket: acAttributeTicket; lAttributeTicket: acAttributeTicket;
...@@ -5525,6 +5578,7 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string; ...@@ -5525,6 +5578,7 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
lsTipoAttribute: string; lsTipoAttribute: string;
begin begin
piCodigoClasse.WriteLine('import java.util.List;'); piCodigoClasse.WriteLine('import java.util.List;');
piCodigoClasse.WriteLine('import java.util.ArrayList;');
for index := 0 to 2 do for index := 0 to 2 do
lHasImport[index] := False; lHasImport[index] := False;
if piTipoId = 'Long' then if piTipoId = 'Long' then
...@@ -5560,30 +5614,56 @@ const ...@@ -5560,30 +5614,56 @@ const
var var
lsNomeClasse, lsNomeClasse,
lsAtributo, lsAtributo,
lsTipoAttribute: string; lsTipoAttribute,
lPackageRef: string;
index: integer; index: integer;
lClassTicket: acClassTicket; lClassTicket,
lClassTicketPai: acClassTicket;
lAttributeTicket: acAttributeTicket; lAttributeTicket: acAttributeTicket;
lCodigoClasse: PStringWriter; lCodigoClasse,
lParamsConstrutor: string; lCodigoConstrutor,
lCodigoConstrutorSemRelOut: PStringWriter;
lRelation: acRelationTicket; lRelation: acRelationTicket;
lListaParamsConstrutorSemRelOut,
lListaParamsConstrutor,
lListaChamadaSuper,
lListaChamadaSuperSemRelOut: TStringList;
lEhClasseHerdada: boolean;
begin begin
Result := ''; Result := '';
lParamsConstrutor := '';
lsNomeClasse := piClass.Name; lsNomeClasse := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasse); 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; lCodigoClasse := PStringWriter.Create;
lCodigoConstrutor := PStringWriter.Create;
lCodigoConstrutorSemRelOut := PStringWriter.Create;
try try
//lCodigoClasse.WriteLine('package domain;'); lListaParamsConstrutor.StrictDelimiter := true;
//lCodigoClasse.WriteLine(''); lListaParamsConstrutor.Delimiter := ',';
lListaParamsConstrutorSemRelOut.StrictDelimiter := true;
lListaParamsConstrutor.Delimiter := ',';
// Package
lCodigoClasse.WriteLine('package '+lPackageRef+'domain;');
lCodigoClasse.WriteLine('');
// Imports de tipos // Imports de tipos
IncluirImports(lCodigoClasse, lClassTicket, _TipoId); IncluirImports(lCodigoClasse, lClassTicket, _TipoId);
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
// Incio da classe // Incio da classe
lCodigoClasse.WriteLine('public class ' + lsNomeClasse + ' {'); if lClassTicket.HasDescendants
lCodigoClasse.WriteLine(''); 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(); lCodigoClasse.Indent();
// Escreve atributo id // Escreve atributo id
...@@ -5601,24 +5681,20 @@ begin ...@@ -5601,24 +5681,20 @@ begin
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket); lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsAtributo := lRelation.DestinationPropertyName; lsAtributo := lRelation.DestinationPropertyName;
if lRelation.DestinationMaxMultiplicity > 1 if (lsAtributo <> '') then
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'>' begin
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName; lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.DestinationMaxMultiplicity, lRelation.OriginClassTicket.DisplayName);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected); EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected);
end; end;
end; end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket); lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then
begin
lsAtributo := lRelation.OriginPropertyName; lsAtributo := lRelation.OriginPropertyName;
if lRelation.OriginMaxMultiplicity > 1 if (lsAtributo <> '') then
then lsTipoAttribute := 'List<'+lRelation.DestinationClassTicket.DisplayName+'>' begin
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName; lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.OriginMaxMultiplicity, lRelation.DestinationClassTicket.DisplayName);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected); EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected);
end; end;
end; end;
...@@ -5631,61 +5707,121 @@ begin ...@@ -5631,61 +5707,121 @@ begin
lAttributeTicket := lClassTicket.Attributes.Objects[index] as acAttributeTicket; lAttributeTicket := lClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsAtributo := lClassTicket.Attributes.Strings[index]; lsAtributo := lClassTicket.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType); lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lParamsConstrutor:= lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute); EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute);
end; end;
// GETTER/SETTER: Escrever RelationsPartnerShips // GETTER/SETTER: Escrever RelationsPartnerShips
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket); lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsAtributo := lRelation.DestinationPropertyName; lsAtributo := lRelation.DestinationPropertyName;
if lRelation.DestinationMaxMultiplicity > 1 if (lsAtributo <> '') then
then lsTipoAttribute := 'List<'+lRelation.OriginClassTicket.DisplayName+'>' begin
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName; lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute); EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, False, lRelation.DestinationMaxMultiplicity > 1);
end; end;
end; end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket); lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') then
begin 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; lsAtributo := lRelation.OriginPropertyName;
if lRelation.OriginMaxMultiplicity > 1 if (lsAtributo <> '') then
then lsTipoAttribute := 'List<'+lRelation.DestinationClassTicket.DisplayName+'>' begin
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName; lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.OriginMaxMultiplicity, lRelation.DestinationClassTicket.DisplayName);
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, lRelation.OriginMaxMultiplicity > 1); 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; end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
//Escrever mtodos //Escrever mtodos
//Escreve construtor com id //Escreve construtor sem id
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+_TipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {'); lCodigoClasse.WriteLine('public ' + lsNomeClasse + '(' + lListaParamsConstrutor.DelimitedText + ') {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lCodigoClasse.WriteLine('f'+_NomeId+' = piId;'); if lEhClasseHerdada
for index := 0 to lClassTicket.Attributes.Count - 1 do then lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');');
begin lCodigoClasse.Append(lCodigoConstrutor);
lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('f' + lsAtributo + ' = pi' + lsAtributo + ';');
end;
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
//Escreve construtor sem id //Escreve construtor com id
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {'); lCodigoClasse.WriteLine('public ' + lsNomeClasse + '(' +_TipoId + ' piId,' + lListaParamsConstrutor.DelimitedText + ') {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
//lCodigoClasse.WriteLine('fId = null;'); if lEhClasseHerdada
for index := 0 to lClassTicket.Attributes.Count - 1 do then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
//Escreve construtor com id e sem relacionamentos
lCodigoClasse.WriteLine('');
if lListaParamsConstrutorSemRelOut.Count <> lListaParamsConstrutor.Count then
begin begin
lsAtributo := lClassTicket.Attributes.Strings[index]; lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+_TipoId+' piId,'+lListaParamsConstrutorSemRelOut.DelimitedText+') {');
lCodigoClasse.WriteLine('f' + lsAtributo + ' = pi' + lsAtributo + ';'); lCodigoClasse.Indent();
end; if lEhClasseHerdada
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuperSemRelOut.CommaText + ');')
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
lCodigoClasse.Append(lCodigoConstrutorSemRelOut);
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
end;
//Escrever mtodo ToString //Escrever mtodo ToString
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
...@@ -5693,11 +5829,11 @@ begin ...@@ -5693,11 +5829,11 @@ begin
lCodigoClasse.WriteLine('public String toString() {'); lCodigoClasse.WriteLine('public String toString() {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasse+'{ " +'); lCodigoClasse.WriteLine('return "'+lsNomeClasse+'{ " +');
lCodigoClasse.WriteLine('"id="+ id +'); lCodigoClasse.WriteLine('"id="+ '+_NomeId+' + ", " +');
for index := 0 to lClassTicket.Attributes.Count - 1 do for index := 0 to lClassTicket.Attributes.Count - 1 do
begin begin
lsAtributo := lClassTicket.Attributes.Strings[index]; lsAtributo := lClassTicket.Attributes.Strings[index];
lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' +'); lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' + ", " +');
end; end;
lCodigoClasse.WriteLine('"}";'); lCodigoClasse.WriteLine('"}";');
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
...@@ -5711,52 +5847,191 @@ begin ...@@ -5711,52 +5847,191 @@ begin
Result := lCodigoClasse.AsString; Result := lCodigoClasse.AsString;
finally finally
lCodigoClasse.Free; lCodigoClasse.Free;
lCodigoConstrutor.Free;
lCodigoConstrutorSemRelOut.Free;
lListaParamsConstrutor.Free;
lListaParamsConstrutorSemRelOut.Free;
lListaChamadaSuper.Free;
lListaChamadaSuperSemRelOut.Free;
end; end;
end; end;
function TUtil.GerarClassPreview_JavaMapper(piClass: IUMLClass): string; 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 var
lsNomeClasseMapper, lsNomeClasseMapper,
lsNomeClasseDominio, lsNomeClasseDominio,
lsNomeClasseDB, lsNomeClasseDB,
lsUltAtributo, lsUltAtributo,
lsAttributo: string; lsAttributo,
lPackageRef,
lsTipoAttribute,
lOutParameters: string;
index: integer; index: integer;
lClassTicket, lClassTicket,
lClassTicketPai: acClassTicket; lClassTicketPai: acClassTicket;
lCodigoClasse: PStringWriter; lCodigoClasse: PStringWriter;
lRelation: acRelationTicket; lRelation: acRelationTicket;
lAttributList: TStringList; lAttributList,
lListOutParameters: TStringList;
begin begin
Result := ''; Result := '';
lsNomeClasseDominio := piClass.Name; lsNomeClasseDominio := piClass.Name;
lsNomeClasseDB := lsNomeClasseDominio + 'Entity'; lsNomeClasseDB := GetDBClassName(lsNomeClasseDominio);
lsNomeClasseMapper := RightStr(lsNomeClasseDominio, Length(lsNomeClasseDominio)-2) + 'Mapper'; lsNomeClasseMapper := GetMapperClassName(lsNomeClasseDominio);
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio); lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lPackageRef := StarUMLApp.ProjectManager.Project.Documentation;
if lPackageRef <> '' then lPackageRef := lPackageRef + '.';
lCodigoClasse := PStringWriter.Create; lCodigoClasse := PStringWriter.Create;
try try
lCodigoClasse.WriteLine('package adapters.persistence.mappers;'); lCodigoClasse.WriteLine('package '+lPackageRef+'adapters.persistence.mappers;');
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('import adapters.persistence.entities.'+lsNomeClasseDB+';'); lCodigoClasse.WriteLine('import '+lPackageRef+'adapters.persistence.entities.'+lsNomeClasseDB+';');
lCodigoClasse.WriteLine('import domain.'+lsNomeClasseDominio+';'); 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(''); lCodigoClasse.WriteLine('');
// Incio da classe // Incio da classe
lCodigoClasse.WriteLine('public final class ' + lsNomeClasseMapper + ' {'); lCodigoClasse.WriteLine('public final class ' + lsNomeClasseMapper + ' {');
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.Indent(); 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.WriteLine('public static '+lsNomeClasseDominio+' toDomain('+lsNomeClasseDB + ' piDBObject) { ');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lCodigoClasse.WriteLine('if (piDBObject == null) return null;');
lCodigoClasse.WriteLine('return new ' + lsNomeClasseDominio + '('); lCodigoClasse.WriteLine('return new ' + lsNomeClasseDominio + '(');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lAttributList := TStringList.Create; lAttributList := TStringList.Create;
try try
lAttributList.Add('piDBObject.getId()'); lAttributList.Add('piDBObject.getId()');
// toDomain: obter lista de atributos da classe atual + classe pai
lClassTicketPai := lClassTicket; lClassTicketPai := lClassTicket;
while Assigned(lClassTicketPai) do while Assigned(lClassTicketPai) do
begin begin
...@@ -5768,16 +6043,174 @@ begin ...@@ -5768,16 +6043,174 @@ begin
begin begin
lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket); lRelation := (lClassTicketPai.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then 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;
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('}');
// 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 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; end;
lClassTicketPai := lClassTicketPai.ParentClassTicket; lClassTicketPai := lClassTicketPai.ParentClassTicket;
end; end;
// toDomain: escrever lista de atributos encontrados
lsUltAtributo := lAttributList.Strings[lAttributList.Count - 1]; lsUltAtributo := lAttributList.Strings[lAttributList.Count - 1];
lAttributList.Delete(lAttributList.Count - 1); lAttributList.Delete(lAttributList.Count - 1);
for lsAttributo in lAttributList.CommaText.Split([',']) do for lsAttributo in lAttributList.CommaText.Split([',']) do
lCodigoClasse.WriteLine(lsAttributo + ','); lCodigoClasse.WriteLine(lsAttributo + ',');
lCodigoClasse.WriteLine(lsUltAtributo + ';'); lCodigoClasse.WriteLine(lsUltAtributo);
finally finally
lAttributList.Free; lAttributList.Free;
end; end;
...@@ -5786,7 +6219,6 @@ begin ...@@ -5786,7 +6219,6 @@ begin
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
// Escrever mtodo fromDomain
//Fim //Fim
lCodigoClasse.Outdent(); 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