Commit 37fa2646 authored by Erika Segatto's avatar Erika Segatto

Melhoria e correção de bug na geração de código java hibernate

parent 6a6ad98d
......@@ -185,6 +185,14 @@ implementation
uses dialogs, uDBAttributeParameters, acuFramework, Forms, DelphiAddInObj,
Controls, strutils, utuMessage, utuXSD, acuModelMapping, acuUseCaseStateMachine;
function FirstLetterLowerCase(const piString: string): string;
begin
if piString.Length > 0 then
Result := ((piString.ToLower)[1]) + piString.Remove(0, 1)
else
Result := '';
end;
function InitializeAddIn(AApplicationHandle: THandle; AStarUMLApplication: TObject): Integer; {$IFDEF MSWINDOWS} stdcall; {$ELSE} cdecl; {$ENDIF}
begin
// Application.Handle := AApplicationHandle;
......@@ -5078,21 +5086,27 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
//Escreve getter and setter
if not piLista then
begin
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+FirstLetterLowerCase(piNomeAtributo)+'; }');
if not piApenasGetter then
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { '+piNomeAtributo+' = pi'+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { '+FirstLetterLowerCase(piNomeAtributo)+' = pi'+piNomeAtributo+'; }');
end
else
begin
piCodigoClasse.WriteLine('public List<' + piTipoAtributo+'> get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public List<' + piTipoAtributo+'> get'+piNomeAtributo+'() { return '+FirstLetterLowerCase(piNomeAtributo)+'; }');
end;
piCodigoClasse.WriteLine('');
end;
procedure EscreverDeclaracaoAtributo(const piCodigoClasse: PStringWriter; const piTipoAtributo: String; const piNomeAtributo: String; piHasDescendants: Boolean);
begin
if piHasDescendants then piCodigoClasse.Write('protected ') else piCodigoClasse.Write('private ');
piCodigoClasse.WriteLine(piTipoAtributo+' '+FirstLetterLowerCase(piNomeAtributo)+';');
end;
procedure EscreverCriacaoLista(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
begin
if piMultiplicity > 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();');
piCodigoClasse.WriteLine(FirstLetterLowerCase(piNomeAtributo) + ' = new ArrayList<>();');
end;
procedure EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
......@@ -5100,11 +5114,11 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
if (piNomeAtributo <> '') then
begin
if piMultiplicity = 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';')
piCodigoClasse.WriteLine(FirstLetterLowerCase(piNomeAtributo) + ' = pi' + piNomeAtributo + ';')
else
begin
EscreverCriacaoLista(piCodigoClasse, piNomeAtributo, piMultiplicity);
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+FirstLetterLowerCase(piNomeAtributo) + '.addAll(pi'+piNomeAtributo+'); }');
end;
end;
end;
......@@ -5262,7 +5276,7 @@ begin
lCodigoClasse.WriteLine('@Id');
lCodigoClasse.WriteLine('@Column(name = "'+lClassToDBMapTicket.IdoDBMapTicket.GetIDOColumns+'")');
lCodigoClasse.WriteLine('@GeneratedValue(generator = "'+lsNomeGeneratorId+'")');
lCodigoClasse.WriteLine('private '+_DBTipoId+' '+_NomeId+';');
EscreverDeclaracaoAtributo(lCodigoClasse, _DBTipoId, _NomeId, lClassTicket.HasDescendants);
end;
// DECLARAO ATRIBUTOS: Percorre atributos da classe
......@@ -5276,7 +5290,7 @@ begin
if lAttributeTicket.DBType = 'VARCHAR'
then lCodigoClasse.WriteLine('@Column(name = "' + lColumnTicket.ColumnName + '", length = ' + IntToStr(lAttributeTicket.VarSize) + ')')
else lCodigoClasse.WriteLine('@Column(name = "' + lColumnTicket.ColumnName + '")');
lCodigoClasse.WriteLine('private ' + lsTipoAttribute + ' ' + lsAtributo + ';');
EscreverDeclaracaoAtributo(lCodigoClasse, lsTipoAttribute, lsAtributo, lClassTicket.HasDescendants);
end;
// DECLARAO ATRIBUTOS: Percorre relacionamentos
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
......@@ -5306,7 +5320,7 @@ begin
', joinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKOrigemName+'") }'+
', inverseJoinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKDestinoName+'")'+
'} )');
lCodigoClasse.WriteLine('private '+lsTipoAttribute+' '+lsAtributo + ';');
EscreverDeclaracaoAtributo(lCodigoClasse, lsTipoAttribute, lsAtributo, lClassTicket.HasDescendants);
end;
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
......@@ -5343,7 +5357,7 @@ begin
', inverseJoinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKOrigemName+'")'+
'} )');
end;
lCodigoClasse.WriteLine('private '+lsTipoAttribute+' '+lsAtributo + ';');
EscreverDeclaracaoAtributo(lCodigoClasse, lsTipoAttribute, lsAtributo, lClassTicket.HasDescendants);
end;
end;
lCodigoClasse.WriteLine('');
......@@ -5487,7 +5501,7 @@ begin
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else lCodigoClasse.WriteLine('super(piId);')
end
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
else lCodigoClasse.WriteLine(FirstLetterLowerCase(_NomeId)+' = piId;');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
......@@ -5501,11 +5515,11 @@ begin
lCodigoClasse.Indent();
if lEhClasseHerdada
then begin
if lListaChamadaSuper.Count > 0
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
if lListaChamadaSuperSemRelOut.Count > 0
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuperSemRelOut.CommaText + ');')
else lCodigoClasse.WriteLine('super(piId);')
end
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
else lCodigoClasse.WriteLine(FirstLetterLowerCase(_NomeId)+' = piId;');
lCodigoClasse.Append(lCodigoConstrutorSemRelOut);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
......@@ -5518,11 +5532,11 @@ begin
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasseDB+'{ " +');
if not lEhClasseHerdada
then lCodigoClasse.WriteLine('"id="+ '+_NomeId+' + ", " +')
then lCodigoClasse.WriteLine('"id="+ '+FirstLetterLowerCase(_NomeId)+' + ", " +')
else lCodigoClasse.WriteLine('"id="+ this.get'+_NomeId+'() + ", " +');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lsAtributo := FirstLetterLowerCase(lClassTicket.Attributes.Strings[index]);
if index < lClassTicket.Attributes.Count - 1
then lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' + ", " +')
else lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' +');
......@@ -5555,32 +5569,35 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
else Result := piPartnerAttributeName;
end;
procedure EscreveAtributoClasse(const piCodigoClasse: PStringWriter; const piNomeAtributo, piTipoAtributo: String; piVisibility: Integer);
procedure EscreveAtributoClasse(const piCodigoClasse: PStringWriter; const piNomeAtributo, piTipoAtributo: String; piVisibility: Integer; piHasDescedents: Boolean);
begin
//Escreve atributo
case piVisibility of
acAttributeVisibility.pvPublic : piCodigoClasse.WriteLine('public ');
acAttributeVisibility.pvProtected : piCodigoClasse.Write('protected ');
acAttributeVisibility.pvPrivate : piCodigoClasse.Write('private ');
else piCodigoClasse.Write('private ');
acAttributeVisibility.pvPrivate : if piHasDescedents then piCodigoClasse.Write('protected ') else piCodigoClasse.Write('private ');
acAttributeVisibility.pvPublished : piCodigoClasse.WriteLine('');
end;
piCodigoClasse.WriteLine(piTipoAtributo+' '+piNomeAtributo+';');
piCodigoClasse.WriteLine(piTipoAtributo+' '+FirstLetterLowerCase(piNomeAtributo)+';');
end;
procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; const piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False; piLista: Boolean = False);
var
lNomeAtributo: string;
begin
lNomeAtributo := FirstLetterLowerCase(piNomeAtributo);
if not piLista then
begin
//Escreve getter and setter
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+lNomeAtributo+'; }');
if not piApenasGetter then
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { '+piNomeAtributo+' = pi'+piNomeAtributo+'; }');
piCodigoClasse.WriteLine('public void set'+piNomeAtributo+'('+piTipoAtributo+' pi'+piNomeAtributo+') { '+lNomeAtributo+' = 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); }');
piCodigoClasse.WriteLine('public List<' + piTipoAtributo+'> get'+piNomeAtributo+'() { return '+lNomeAtributo+'; }');
piCodigoClasse.WriteLine('public void add'+piNomeAtributo+'('+piTipoAtributo+' piObject) { '+lNomeAtributo+'.add(piObject); }');
piCodigoClasse.WriteLine('public void remove'+piNomeAtributo+'('+piTipoAtributo+' piObject) { '+lNomeAtributo+'.remove(piObject); }');
end;
piCodigoClasse.WriteLine('');
end;
......@@ -5588,19 +5605,22 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
procedure EscreverCriacaoLista(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
begin
if piMultiplicity > 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();');
piCodigoClasse.WriteLine(FirstLetterLowerCase(piNomeAtributo) + ' = new ArrayList<>();');
end;
procedure EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; const piNomeAtributo: String; const piMultiplicity: Integer);
var
lNomeAtributo: string;
begin
if (piNomeAtributo <> '') then
begin
lNomeAtributo := FirstLetterLowerCase(piNomeAtributo);
if piMultiplicity = 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';')
piCodigoClasse.WriteLine(lNomeAtributo + ' = pi' + piNomeAtributo + ';')
else
begin
EscreverCriacaoLista(piCodigoClasse, piNomeAtributo, piMultiplicity);
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+lNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
end;
end;
end;
......@@ -5708,7 +5728,8 @@ begin
lCodigoClasse.Indent();
// Escreve atributo id
EscreveAtributoClasse(lCodigoClasse, _NomeId, _TipoId, acAttributeVisibility.pvPrivate);
if not lEhClasseHerdada then
EscreveAtributoClasse(lCodigoClasse, _NomeId, _TipoId, acAttributeVisibility.pvPrivate, lClassTicket.HasDescendants);
// DECLARAO ATRIBUTOS: Percorre atributos da classe
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
......@@ -5716,7 +5737,7 @@ begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, lAttributeTicket.Visibility);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, lAttributeTicket.Visibility, lClassTicket.HasDescendants);
end;
// DECLARAO ATRIBUTOS: Percorre relacionamentos
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
......@@ -5726,7 +5747,7 @@ begin
if (lsAtributo <> '') then
begin
lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.DestinationMaxMultiplicity, lRelation.OriginClassTicket.DisplayName);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected, lClassTicket.HasDescendants);
end;
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
......@@ -5736,12 +5757,13 @@ begin
if (lsAtributo <> '') then
begin
lsTipoAttribute := ObterTipoAtributoRelacionamento(lRelation.OriginMaxMultiplicity, lRelation.DestinationClassTicket.DisplayName);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, acAttributeVisibility.pvProtected, lClassTicket.HasDescendants);
end;
end;
lCodigoClasse.WriteLine('');
// GETTER/SETTER: Percorre relacionamentos
if not lEhClasseHerdada then
EscreveGetterSetterClasse(lCodigoClasse, _NomeId, _TipoId, True);
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
......@@ -5852,7 +5874,7 @@ begin
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else lCodigoClasse.WriteLine('super(piId);')
end
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
else lCodigoClasse.WriteLine(FirstLetterLowerCase(_NomeId)+' = piId;');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
......@@ -5866,11 +5888,11 @@ begin
lCodigoClasse.Indent();
if lEhClasseHerdada
then begin
if lListaChamadaSuper.Count > 0
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
if lListaChamadaSuperSemRelOut.Count > 0
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuperSemRelOut.CommaText + ');')
else lCodigoClasse.WriteLine('super(piId);')
end
else lCodigoClasse.WriteLine(_NomeId+' = piId;');
else lCodigoClasse.WriteLine(FirstLetterLowerCase(_NomeId)+' = piId;');
lCodigoClasse.Append(lCodigoConstrutorSemRelOut);
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
......@@ -5883,11 +5905,11 @@ begin
lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasse+'{ " +');
if lClassTicket.Attributes.Count > 0
then lCodigoClasse.WriteLine('"id="+ '+_NomeId+' + ", " +')
else lCodigoClasse.WriteLine('"id="+ '+_NomeId+' +');
then lCodigoClasse.WriteLine('"id="+ '+FirstLetterLowerCase(_NomeId)+' + ", " +')
else lCodigoClasse.WriteLine('"id="+ '+FirstLetterLowerCase(_NomeId)+' +');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lsAtributo := lClassTicket.Attributes.Strings[index];
lsAtributo := FirstLetterLowerCase(lClassTicket.Attributes.Strings[index]);
if index < lClassTicket.Attributes.Count - 1
then lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' + ", " +')
else lCodigoClasse.WriteLine('"'+lsAtributo+'="+ '+lsAtributo+' +');
......
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