Commit becd55ca authored by Erika Segatto's avatar Erika Segatto

Altera geração para exportar uma única classe java + melhorias na mesma

parent 37fa2646
......@@ -5126,21 +5126,23 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
procedure IncluirImports(const piCodigoClasse: PStringWriter; piClassTicket: acClassTicket; const piTipoId: string);
var
lAttributeTicket: acAttributeTicket;
lHasImport: array[0..3] of Boolean;
lHasImport: array[0..4] of Boolean;
index: integer;
lsTipoAttribute: string;
lClassTicketPai: acClassTicket;
lDone: Boolean;
begin
piCodigoClasse.WriteLine('import javax.persistence.*;');
piCodigoClasse.WriteLine('import java.util.List;');
piCodigoClasse.WriteLine('import java.util.ArrayList;');
for index := 0 to 3 do
for index := 0 to 4 do
lHasImport[index] := False;
if piTipoId = 'Long' then
begin
piCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end;
lDone := False;
lClassTicketPai := piClassTicket;
while Assigned(lClassTicketPai) do
begin
......@@ -5166,10 +5168,37 @@ function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
else if (lsTipoAttribute = 'Boolean') and (not lHasImport[3]) then
begin
piCodigoClasse.WriteLine('import java.lang.Boolean;');
lHasImport[2] := True;
lHasImport[3] := True;
end
else if ((not lDone) and lAttributeTicket.Mandatory) and (not lHasImport[4]) then
begin
piCodigoClasse.WriteLine('import javax.validation.constraints.NotNull;');
lHasImport[4] := True;
end;
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
lDone := True;
end;
end;
function ObterTipoHeranca(const piClassTicket: acClassTicket; const piNomeTabela: string): string;
var
lMetaModelPersistenceMapSQL: acMetaModelPersistenceMapSQL;
lPossuiUmFilhoJoined: Boolean;
index: Integer;
begin
lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL;
lPossuiUmFilhoJoined := False;
Result := 'InheritanceType.JOINED';
for index := 0 to piClassTicket.DirectDescendants.Count - 1 do
begin
if lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(piClassTicket.DirectDescendants[index] as acClassTicket).TableName = piNomeTabela
then Result := 'InheritanceType.SINGLE_TABLE'
else lPossuiUmFilhoJoined := True;
end;
if lPossuiUmFilhoJoined and (Result = 'InheritanceType.SINGLE_TABLE') then
begin
Result := 'Nao e possivel determinar o tipo de heranca da classe (InheritanceType.SINGLE_TABLE ou InheritanceType.JOINED).';
end;
end;
......@@ -5186,7 +5215,6 @@ var
lInheritanceType,
lPackageRef: string;
index: integer;
lPossuiUmFilhoJoined: Boolean;
lClassTicket,
lClassTicketPai: acClassTicket;
lAttributeTicket: acAttributeTicket;
......@@ -5202,6 +5230,7 @@ var
lRelationPersistenceMapTicket: acRelationSQLPersistenceMapTicket;
lColumnTicket: acDBColumnMapTicket;
lEhClasseHerdada: Boolean;
lListaChamadaConstr,
lListaChamadaSuper,
lListaChamadaSuperSemRelOut: TStringList;
begin
......@@ -5211,20 +5240,21 @@ begin
lsNomeClasseDominio := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket);
lsNomeClasseDB := lsNomeClasseDominio + 'Entity';
lsNomeClasseDB := lsNomeClasseDominio;
lPackageRef := StarUMLApp.ProjectManager.Project.Documentation;
if lPackageRef <> '' then lPackageRef := lPackageRef + '.';
// Obter ticket do banco
lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL;
lClassToDBMapTicket := lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket);
lListaChamadaConstr := TStringList.Create;
lListaChamadaSuper := TStringList.Create;
lListaChamadaSuperSemRelOut := TStringList.Create;
lCodigoConstrutor := PStringWriter.Create;
lCodigoConstrutorSemRelOut := PStringWriter.Create;
lCodigoClasse := PStringWriter.Create;
try
lCodigoClasse.WriteLine('package '+lPackageRef+'adapters.persistence.entities;');
lCodigoClasse.WriteLine('package '+lPackageRef+'domain;');
lCodigoClasse.WriteLine('');
// Imports de tipos
IncluirImports(lCodigoClasse, lClassTicket, _DBTipoId);
......@@ -5237,19 +5267,7 @@ begin
lCodigoClasse.WriteLine(' pkColumnName = "SISBDSNUME", pkColumnValue = "'+lsNomeTabela+'", allocationSize = 1)');
if lClassToDBMapTicket.TypeColumnName <> '' then
begin
lPossuiUmFilhoJoined := False;
lInheritanceType := 'InheritanceType.JOINED';
for index := 0 to lClassTicket.DirectDescendants.Count - 1 do
begin
if lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket.DirectDescendants[index] as acClassTicket).TableName = lsNomeTabela
then lInheritanceType := 'InheritanceType.SINGLE_TABLE'
else lPossuiUmFilhoJoined := True;
end;
if lPossuiUmFilhoJoined and (lInheritanceType = 'InheritanceType.SINGLE_TABLE') then
begin
Result := 'Nao e possivel determinar o tipo de heranca da classe (SINGLE_TABLE ou JOINED).';
Exit;
end;
lInheritanceType := ObterTipoHeranca(lClassTicket, lsNomeTabela);
lCodigoClasse.WriteLine('@Inheritance(strategy = '+lInheritanceType+')');
lCodigoClasse.WriteLine('@DiscriminatorColumn(name = "'+lClassToDBMapTicket.TypeColumnName+'")');
end
......@@ -5265,7 +5283,7 @@ begin
else lCodigoClasse.Write('public final ');
lCodigoClasse.Write('class ' + lsNomeClasseDB);
if lEhClasseHerdada
then lCodigoClasse.WriteLine(' extends '+ lClassTicket.ParentClassTicket.DisplayName+'Entity {')
then lCodigoClasse.WriteLine(' extends '+ lClassTicket.ParentClassTicket.DisplayName+' {')
else lCodigoClasse.WriteLine(' {');
lCodigoClasse.WriteLine('');
lCodigoClasse.Indent();
......@@ -5290,6 +5308,8 @@ begin
if lAttributeTicket.DBType = 'VARCHAR'
then lCodigoClasse.WriteLine('@Column(name = "' + lColumnTicket.ColumnName + '", length = ' + IntToStr(lAttributeTicket.VarSize) + ')')
else lCodigoClasse.WriteLine('@Column(name = "' + lColumnTicket.ColumnName + '")');
if lAttributeTicket.Mandatory
then lCodigoClasse.WriteLine('@NotNull');
EscreverDeclaracaoAtributo(lCodigoClasse, lsTipoAttribute, lsAtributo, lClassTicket.HasDescendants);
end;
// DECLARAO ATRIBUTOS: Percorre relacionamentos
......@@ -5300,20 +5320,23 @@ begin
if (lRelation.DestinationPropertyName <> '') then
begin
lsAtributo := lRelation.DestinationPropertyName;
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
if lRelation.DestinationMaxMultiplicity = 1 then
begin
if lRelation.OriginMaxMultiplicity = 1
then lCodigoClasse.WriteLine('@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)')
else lCodigoClasse.WriteLine('@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)');
then lCodigoClasse.Write('@OneToOne(fetch = FetchType.EAGER')
else lCodigoClasse.Write('@ManyToOne(fetch = FetchType.EAGER');
end
else
begin
lsTipoAttribute := 'final List<'+ lsTipoAttribute +'>';
if lRelation.OriginMaxMultiplicity = 1
then lCodigoClasse.WriteLine('@OneToMany(cascade = CascadeType.ALL)')
else lCodigoClasse.WriteLine('@ManyToMany(cascade = CascadeType.ALL)');
then lCodigoClasse.Write('@OneToMany(fetch = FetchType.LAZY')
else lCodigoClasse.Write('@ManyToMany(fetch = FetchType.LAZY');
end;
if lRelation.DestinationAggregation = acPropertyAggregation.pvComposite
then lCodigoClasse.WriteLine(', cascade = CascadeType.ALL)')
else lCodigoClasse.WriteLine(', cascade = CascadeType.DETACH)');
if lRelationPersistenceMapTicket is acDirectDBRelationMapTicket
then lCodigoClasse.WriteLine('@JoinColumn(name = "'+acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName+'")')
else lCodigoClasse.WriteLine('@JoinTable(name = "'+ acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).TableName + '"'+
......@@ -5330,22 +5353,25 @@ begin
if (lRelation.OriginPropertyName <> '') then
begin
lsAtributo := lRelation.OriginPropertyName;
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
if lRelation.OriginMaxMultiplicity = 1 then
begin
if lRelation.DestinationMaxMultiplicity = 1
then lCodigoClasse.Write('@OneToOne(cascade = CascadeType.ALL')
else lCodigoClasse.Write('@ManyToOne(cascade = CascadeType.ALL');
then lCodigoClasse.Write('@OneToOne(fetch = FetchType.LAZY')
else lCodigoClasse.Write('@ManyToOne(fetch = FetchType.LAZY');
end
else
begin
lsTipoAttribute := 'final List<'+ lsTipoAttribute +'>';
if lRelation.DestinationMaxMultiplicity = 1
then lCodigoClasse.Write('@OneToMany(cascade = CascadeType.ALL')
else lCodigoClasse.Write('@ManyToMany(cascade = CascadeType.ALL');
then lCodigoClasse.Write('@OneToMany(fetch = FetchType.LAZY')
else lCodigoClasse.Write('@ManyToMany(fetch = FetchType.LAZY');
end;
if lRelation.OriginAggregation = acPropertyAggregation.pvComposite
then lCodigoClasse.Write(', cascade = CascadeType.ALL')
else lCodigoClasse.Write(', cascade = CascadeType.DETACH');
if lRelation.DestinationPropertyName <> ''
then lCodigoClasse.WriteLine(', mappedBy = "'+lRelation.DestinationPropertyName+'")')
then lCodigoClasse.WriteLine(', mappedBy = "'+FirstLetterLowerCase(lRelation.DestinationPropertyName)+'")')
else
begin
lCodigoClasse.WriteLine(')');
......@@ -5379,7 +5405,7 @@ begin
lsAtributo := lRelation.DestinationPropertyName;
if (lsAtributo <> '') then
begin
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
if lRelation.DestinationMaxMultiplicity = 1
then EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute)
else EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, true, true);
......@@ -5391,7 +5417,7 @@ begin
lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') then
begin
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
if lRelation.OriginMaxMultiplicity = 1
then EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute)
else EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, true, true);
......@@ -5415,6 +5441,7 @@ begin
lListaChamadaSuperSemRelOut.Add('pi' + lsAtributo);
end
else begin
lListaChamadaConstr.Add('pi'+lsAtributo);
EscreverInicializacaoAtributo(lCodigoConstrutor, lsAtributo, 1);
EscreverInicializacaoAtributo(lCodigoConstrutorSemRelOut, lsAtributo, 1);
end;
......@@ -5426,14 +5453,15 @@ begin
if (lsAtributo <> '') then
begin
if lRelation.DestinationMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName;
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID
then begin
lListaChamadaSuper.Add('pi' + lsAtributo);
end
else begin
lListaChamadaConstr.Add('pi'+lsAtributo);
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
......@@ -5446,12 +5474,13 @@ begin
if (lsAtributo <> '') then
begin
if lRelation.OriginMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+ lRelation.DestinationClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
then lsTipoAttribute := 'List<'+ lRelation.DestinationClassTicket.DisplayName +'>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName;
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID
then lListaChamadaSuper.Add('pi' + lsAtributo)
else begin
lListaChamadaConstr.Add('pi'+lsAtributo);
EscreverInicializacaoAtributo(lCodigoConstrutor, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
EscreverCriacaoLista(lCodigoConstrutorSemRelOut, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
......@@ -5462,7 +5491,10 @@ begin
// Escrever mtodos
// Escrever construtor vazio
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'() {');
if lClassTicket.HasDescendants
then lCodigoClasse.Write('public ')
else lCodigoClasse.Write('private ');
lCodigoClasse.WriteLine(lsNomeClasseDB+'() {');
lCodigoClasse.Indent();
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
......@@ -5495,14 +5527,8 @@ begin
then lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+_DBTipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {')
else lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+_DBTipoId+' piId) {');
lCodigoClasse.Indent();
if lEhClasseHerdada
then begin
if lListaChamadaSuper.Count > 0
then lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else lCodigoClasse.WriteLine('super(piId);')
end
else lCodigoClasse.WriteLine(FirstLetterLowerCase(_NomeId)+' = piId;');
lCodigoClasse.Append(lCodigoConstrutor);
lCodigoClasse.WriteLine('this('+lListaChamadaConstr.CommaText+')');
lCodigoClasse.WriteLine(FirstLetterLowerCase(_NomeId)+' = piId;');
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
// Escrever construtor com id sem relacionamentos
......@@ -5557,6 +5583,7 @@ begin
lListaChamadaSuperSemRelOut.Free;
lCodigoConstrutor.Free;
lCodigoConstrutorSemRelOut.Free;
lListaChamadaConstr.Free;
end;
end;
......
......@@ -3172,6 +3172,7 @@ object PreviewClassCode: TPreviewClassCode
Caption = 'Java Dominio'
ClientHeight = 504
ClientWidth = 785
TabVisible = False
inline mem_ClassJavaDomain: TSynEdit
Left = 0
Height = 504
......@@ -3686,6 +3687,7 @@ object PreviewClassCode: TPreviewClassCode
Caption = 'Java Mapper'
ClientHeight = 504
ClientWidth = 785
TabVisible = False
inline mem_ClassJavaMapper: TSynEdit
Left = 0
Height = 504
......
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