Commit 33e1ab0b authored by Erika Segatto's avatar Erika Segatto

Inclui geração de classe hibernate JPA

parent 90c8807f
...@@ -75,6 +75,7 @@ type ...@@ -75,6 +75,7 @@ type
fMetaModelPersistenceMap: acMetaModelPersistenceMapSQL; fMetaModelPersistenceMap: acMetaModelPersistenceMapSQL;
function FindLostClasses(out poLostClasses: TStringList): integer; function FindLostClasses(out poLostClasses: TStringList): integer;
procedure PutMessage(piMessage: string; piElement: IElement; piMessageType: integer = 0); procedure PutMessage(piMessage: string; piElement: IElement; piMessageType: integer = 0);
function ObterTipoAtributoJava(piTipoCurio: string): string;
public public
constructor Create; constructor Create;
destructor Destroy; override; destructor Destroy; override;
...@@ -5075,39 +5076,95 @@ end; ...@@ -5075,39 +5076,95 @@ end;
function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string; function TUtil.GerarClassPreview_JavaHibernate(piClass: IUMLClass): string;
function ObterTipoAtributo(piTipoCurio: string): string; procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False; piLista: Boolean = False);
begin
if piTipoCurio = 'acString' then Result := 'String'
else if piTipoCurio = 'acText' then Result := 'String'
else if piTipoCurio = 'acBlob' then Result := 'bynary[]'
else if piTipoCurio = 'acGraphic' then Result := 'bynary[]'
else if piTipoCurio = 'acDateTime' then Result := 'OffsetDateTime'
else if piTipoCurio = 'acInt' then Result := 'Integer'
else if piTipoCurio = 'acCurrency' then Result := 'BigDecimal'
else if piTipoCurio = 'acDouble' then Result := 'BigDecimal'
else if piTipoCurio = 'acBoolean' then Result := 'boolean'
else Result := piTipoCurio;
end;
procedure EscreveGetterSetterClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piApenasGetter: Boolean = False);
begin begin
//Escreve getter and setter //Escreve getter and setter
if not piLista then
begin
piCodigoClasse.WriteLine('public ' + piTipoAtributo+' get'+piNomeAtributo+'() { return '+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+') { '+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 EscreverInicializacaoAtributo(const piCodigoClasse: PStringWriter; piNomeAtributo: String; const piMultiplicity: Integer);
begin
if (piNomeAtributo <> '') then
begin
if piMultiplicity = 1 then
piCodigoClasse.WriteLine(piNomeAtributo + ' = pi' + piNomeAtributo + ';')
else
begin
piCodigoClasse.WriteLine(piNomeAtributo + ' = new ArrayList<>();');
piCodigoClasse.WriteLine('if (pi'+piNomeAtributo+' != null) { '+piNomeAtributo + '.addAll(pi'+piNomeAtributo+'); }');
end;
end;
end;
procedure IncluirImports(const piCodigoClasse: PStringWriter; piClassTicket: acClassTicket; const piTipoId: string);
var
lAttributeTicket: acAttributeTicket;
lHasImport: array[0..3] of Boolean;
index: integer;
lsTipoAttribute: string;
begin
piCodigoClasse.WriteLine('import javax.persistence.*;');
piCodigoClasse.WriteLine('import java.util.List;');
piCodigoClasse.WriteLine('import java.util.ArrayList;');
for index := 0 to 3 do
lHasImport[index] := False;
if piTipoId = 'Long' then
begin
piCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end;
for index := 0 to piClassTicket.Attributes.Count - 1 do
begin
lAttributeTicket := piClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
if (lsTipoAttribute = 'BigDecimal') and (not lHasImport[0]) then
begin
piCodigoClasse.WriteLine('import java.math.BigDecimal;');
lHasImport[0] := True;
end
else if (lsTipoAttribute = 'Long') and (not lHasImport[1]) then
begin
piCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end
else if (lsTipoAttribute = 'OffsetDateTime') and (not lHasImport[2]) then
begin
piCodigoClasse.WriteLine('import java.time.OffsetDateTime;');
lHasImport[2] := True;
end
else if (lsTipoAttribute = 'Boolean') and (not lHasImport[3]) then
begin
piCodigoClasse.WriteLine('import java.lang.Boolean;');
lHasImport[2] := True;
end;
end;
end;
const const
_NomeId = 'Id';
_DBTipoId = 'Long'; _DBTipoId = 'Long';
var var
lsNomeClasse, lsNomeClasseDominio,
lsNomeClasseDB,
lsNomeTabela, lsNomeTabela,
lsNomeGeneratorId, lsNomeGeneratorId,
lsAtributo, lsAtributo,
lsTipoAttribute: string; lsTipoAttribute: string;
index: integer; index: integer;
lClassTicket: acClassTicket; lClassTicket,
lClassTicketPai: acClassTicket;
lAttributeTicket: acAttributeTicket; lAttributeTicket: acAttributeTicket;
lMetaModelPersistenceMapSQL: acMetaModelPersistenceMapSQL; lMetaModelPersistenceMapSQL: acMetaModelPersistenceMapSQL;
lClassToDBMapTicket: acClassToDBMapTicket; lClassToDBMapTicket: acClassToDBMapTicket;
...@@ -5117,58 +5174,30 @@ var ...@@ -5117,58 +5174,30 @@ var
lRelation: acRelationTicket; lRelation: acRelationTicket;
lRelationPersistenceMapTicket: acRelationSQLPersistenceMapTicket; lRelationPersistenceMapTicket: acRelationSQLPersistenceMapTicket;
lColumnTicket: acDBColumnMapTicket; lColumnTicket: acDBColumnMapTicket;
lHasImport: array[0..2] of Boolean;
lEhClasseHerdada: Boolean; lEhClasseHerdada: Boolean;
lListaChamadaSuper: TStringList;
begin begin
Result := ''; Result := '';
lParamsConstrutor := ''; lParamsConstrutor := '';
lsNomeClasse := piClass.Name; lsNomeClasseDominio := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasse); lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket); lEhClasseHerdada := Assigned(lClassTicket.ParentClassTicket);
for index := 0 to 2 do lsNomeClasseDB := lsNomeClasseDominio + 'Entity';
lHasImport[index] := False; // Obter ticket do banco
lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL;
lClassToDBMapTicket := lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket);
lListaChamadaSuper := TStringList.Create;
lCodigoClasse := PStringWriter.Create; lCodigoClasse := PStringWriter.Create;
try try
lCodigoClasse.WriteLine('package adapters.persistence.entities;'); //lCodigoClasse.WriteLine('package adapters.persistence.entities;');
lCodigoClasse.WriteLine(''); //lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('import javax.persistence.*;');
lCodigoClasse.WriteLine('import java.util.List;');
// Imports de tipos // Imports de tipos
if _DBTipoId = 'Long' then IncluirImports(lCodigoClasse, lClassTicket, _DBTipoId);
begin
lCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end;
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lAttributeTicket := lClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsTipoAttribute := ObterTipoAtributo(lAttributeTicket.AttributeType);
if (lsTipoAttribute = 'BigDecimal') and (not lHasImport[0]) then
begin
lCodigoClasse.WriteLine('import java.math.BigDecimal;');
lHasImport[0] := True;
end
else if (lsTipoAttribute = 'Long') and (not lHasImport[1]) then
begin
lCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end
else if (lsTipoAttribute = 'OffsetDateTime') and (not lHasImport[2]) then
begin
lCodigoClasse.WriteLine('import java.time.OffsetDateTime;');
lHasImport[2] := True;
end;
end;
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
// Obter ticket do banco
lsNomeTabela := Uppercase(Copy(lsNomeClasse, 0, 2)) + 'U' + Copy(lsNomeClasse, 3, Length(lsNomeClasse)-2);
lMetaModelPersistenceMapSQL := fMetaModelPersistenceMap as acMetaModelPersistenceMapSQL;
lClassToDBMapTicket := lMetaModelPersistenceMapSQL.GetClassToDBMapTicket(lClassTicket);
// Incio da classe // Incio da classe
lsNomeGeneratorId := 'gen' + RightStr(lsNomeClasse, Length(lsNomeClasse)-2); lsNomeGeneratorId := 'gen' + RightStr(lsNomeClasseDominio, Length(lsNomeClasseDominio)-2);
lsNomeTabela := lClassToDBMapTicket.TableName; lsNomeTabela := lClassToDBMapTicket.TableName;
lsNomeClasse := lsNomeClasse + 'Entity';
lCodigoClasse.WriteLine('@Entity'); lCodigoClasse.WriteLine('@Entity');
lCodigoClasse.WriteLine('@TableGenerator(name = "'+lsNomeGeneratorId+'", table = "SISBTNUMER", valueColumnName = "SISBNONUME",'); lCodigoClasse.WriteLine('@TableGenerator(name = "'+lsNomeGeneratorId+'", table = "SISBTNUMER", valueColumnName = "SISBNONUME",');
lCodigoClasse.WriteLine(' pkColumnName = "SISBDSNUME", pkColumnValue = "'+lsNomeTabela+'", allocationSize = 1)'); lCodigoClasse.WriteLine(' pkColumnName = "SISBDSNUME", pkColumnValue = "'+lsNomeTabela+'", allocationSize = 1)');
...@@ -5184,9 +5213,13 @@ begin ...@@ -5184,9 +5213,13 @@ begin
lCodigoClasse.WriteLine('@PrimaryKeyJoinColumn(name = "'+lClassToDBMapTicket.IdoDBMapTicket.GetIDOColumns+'")'); lCodigoClasse.WriteLine('@PrimaryKeyJoinColumn(name = "'+lClassToDBMapTicket.IdoDBMapTicket.GetIDOColumns+'")');
end; end;
lCodigoClasse.WriteLine('@Table(name = "'+lsNomeTabela+'")'); lCodigoClasse.WriteLine('@Table(name = "'+lsNomeTabela+'")');
if lClassTicket.HasDescendants
then lCodigoClasse.Write('public abstract ')
else lCodigoClasse.Write('public final ');
lCodigoClasse.Write('class ' + lsNomeClasseDB);
if lEhClasseHerdada if lEhClasseHerdada
then lCodigoClasse.WriteLine('public abstract class ' + lsNomeClasse + ' extends '+ lClassTicket.ParentClassTicket.DisplayName+'Entity {') then lCodigoClasse.WriteLine(' extends '+ lClassTicket.ParentClassTicket.DisplayName+'Entity {')
else lCodigoClasse.WriteLine('public abstract class ' + lsNomeClasse + ' {'); else lCodigoClasse.WriteLine(' {');
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
...@@ -5196,31 +5229,7 @@ begin ...@@ -5196,31 +5229,7 @@ begin
lCodigoClasse.WriteLine('@Id'); lCodigoClasse.WriteLine('@Id');
lCodigoClasse.WriteLine('@Column(name = "'+lClassToDBMapTicket.IdoDBMapTicket.GetIDOColumns+'")'); lCodigoClasse.WriteLine('@Column(name = "'+lClassToDBMapTicket.IdoDBMapTicket.GetIDOColumns+'")');
lCodigoClasse.WriteLine('@GeneratedValue(generator = "'+lsNomeGeneratorId+'")'); lCodigoClasse.WriteLine('@GeneratedValue(generator = "'+lsNomeGeneratorId+'")');
lCodigoClasse.WriteLine('private '+_DBTipoId+' id;'); lCodigoClasse.WriteLine('private '+_DBTipoId+' '+_NomeId+';');
end;
// Obtem parametros da classe pai
if lEhClasseHerdada then
begin
for index := 0 to lClassTicket.ParentClassTicket.Attributes.Count - 1 do
begin
lAttributeTicket := lClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsAtributo := lClassTicket.Attributes.Strings[index];
lsTipoAttribute := ObterTipoAtributo(lAttributeTicket.AttributeType);
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
end;
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
if (lRelation.DestinationPropertyName <> '') then
begin
lsAtributo := lRelation.DestinationPropertyName;
if lRelation.DestinationMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
end;
end;
end; end;
// DECLARAO ATRIBUTOS: Percorre atributos da classe // DECLARAO ATRIBUTOS: Percorre atributos da classe
...@@ -5228,8 +5237,7 @@ begin ...@@ -5228,8 +5237,7 @@ begin
begin 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 := ObterTipoAtributo(lAttributeTicket.AttributeType); lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
lColumnTicket := acDBColumnMapTicket(lClassToDBMapTicket.Columns.ValueOf(UpCase(lsAtributo))); lColumnTicket := acDBColumnMapTicket(lClassToDBMapTicket.Columns.ValueOf(UpCase(lsAtributo)));
if lAttributeTicket.DBType = 'VARCHAR' if lAttributeTicket.DBType = 'VARCHAR'
...@@ -5245,24 +5253,26 @@ begin ...@@ -5245,24 +5253,26 @@ begin
if (lRelation.DestinationPropertyName <> '') then if (lRelation.DestinationPropertyName <> '') then
begin begin
lsAtributo := lRelation.DestinationPropertyName; lsAtributo := lRelation.DestinationPropertyName;
if lRelation.DestinationMaxMultiplicity > 1 lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
then lsTipoAttribute := 'List<'+ lRelation.OriginClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lRelation.DestinationMaxMultiplicity = 1 then if lRelation.DestinationMaxMultiplicity = 1 then
begin begin
if lRelation.OriginMaxMultiplicity = 1 if lRelation.OriginMaxMultiplicity = 1
then lCodigoClasse.WriteLine('@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)') then lCodigoClasse.WriteLine('@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)')
else lCodigoClasse.WriteLine('@OneToMany(cascade = CascadeType.ALL)'); else lCodigoClasse.WriteLine('@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)');
end end
else else
begin begin
lsTipoAttribute := 'final List<'+ lsTipoAttribute +'>';
if lRelation.OriginMaxMultiplicity = 1 if lRelation.OriginMaxMultiplicity = 1
then lCodigoClasse.WriteLine('@ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)') then lCodigoClasse.WriteLine('@OneToMany(cascade = CascadeType.ALL)')
else lCodigoClasse.WriteLine('@ManyToMany(cascade = CascadeType.ALL)'); else lCodigoClasse.WriteLine('@ManyToMany(cascade = CascadeType.ALL)');
end; end;
if lRelationPersistenceMapTicket is acDirectDBRelationMapTicket if lRelationPersistenceMapTicket is acDirectDBRelationMapTicket
then lCodigoClasse.WriteLine('@JoinColumn(name = "'+acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName+'")'); then lCodigoClasse.WriteLine('@JoinColumn(name = "'+acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName+'")')
else lCodigoClasse.WriteLine('@JoinTable(name = "'+ acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).TableName + '"'+
', joinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKOrigemName+'") }'+
', inverseJoinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKDestinoName+'")'+
'} )');
lCodigoClasse.WriteLine('private '+lsTipoAttribute+' '+lsAtributo + ';'); lCodigoClasse.WriteLine('private '+lsTipoAttribute+' '+lsAtributo + ';');
end; end;
end; end;
...@@ -5273,95 +5283,184 @@ begin ...@@ -5273,95 +5283,184 @@ begin
if (lRelation.OriginPropertyName <> '') then if (lRelation.OriginPropertyName <> '') then
begin begin
lsAtributo := lRelation.OriginPropertyName; lsAtributo := lRelation.OriginPropertyName;
if lRelation.OriginMaxMultiplicity > 1 lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
then lsTipoAttribute := 'List<'+ lRelation.DestinationClassTicket.DisplayName +'Entity>'
else lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
if lRelation.OriginMaxMultiplicity = 1 then if lRelation.OriginMaxMultiplicity = 1 then
begin begin
if lRelation.DestinationMaxMultiplicity = 1 if lRelation.DestinationMaxMultiplicity = 1
then lCodigoClasse.Write('@OneToOne(cascade = CascadeType.ALL') then lCodigoClasse.Write('@OneToOne(cascade = CascadeType.ALL')
else lCodigoClasse.Write('@OneToMany(cascade = CascadeType.ALL'); else lCodigoClasse.Write('@ManyToOne(cascade = CascadeType.ALL');
end end
else else
begin begin
lsTipoAttribute := 'final List<'+ lsTipoAttribute +'>';
if lRelation.DestinationMaxMultiplicity = 1 if lRelation.DestinationMaxMultiplicity = 1
then lCodigoClasse.Write('@ManyToOne(cascade = CascadeType.ALL') then lCodigoClasse.Write('@OneToMany(cascade = CascadeType.ALL')
else lCodigoClasse.Write('@ManyToMany(cascade = CascadeType.ALL'); else lCodigoClasse.Write('@ManyToMany(cascade = CascadeType.ALL');
end; end;
if lRelation.DestinationPropertyName <> '' if lRelation.DestinationPropertyName <> ''
then lCodigoClasse.WriteLine(', mappedby = "'+lRelation.DestinationPropertyName+'")') then lCodigoClasse.WriteLine(', mappedBy = "'+lRelation.DestinationPropertyName+'")')
else lCodigoClasse.WriteLine(')'); else
begin
lCodigoClasse.WriteLine(')');
if (lRelationPersistenceMapTicket is acDirectDBRelationMapTicket) and (acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName <> '') then if (lRelationPersistenceMapTicket is acDirectDBRelationMapTicket) and (acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName <> '') then
lCodigoClasse.WriteLine('@JoinColumn(name = "'+acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName+'")'); lCodigoClasse.WriteLine('@JoinColumn(name = "'+acDirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKColumnName+'")')
else if (lRelationPersistenceMapTicket is acIndirectDBRelationMapTicket) and (acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).TableName <> '') then
lCodigoClasse.WriteLine('@JoinTable(name = "'+ acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).TableName + '"'+
', joinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKDestinoName+'") }'+
', inverseJoinColumns = { @JoinColumn(name = "'+acIndirectDBRelationMapTicket(lRelationPersistenceMapTicket).FKOrigemName+'")'+
'} )');
end;
lCodigoClasse.WriteLine('private '+lsTipoAttribute+' '+lsAtributo + ';'); lCodigoClasse.WriteLine('private '+lsTipoAttribute+' '+lsAtributo + ';');
end; end;
end; end;
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
// GETTER/SETTER: Percorre atributos da classe // GETTER/SETTER: Percorre atributos da classe
if not lEhClasseHerdada then
EscreveGetterSetterClasse(lCodigoClasse, _NomeId, _DBTipoId, True);
for index := 0 to lClassTicket.Attributes.Count - 1 do for index := 0 to lClassTicket.Attributes.Count - 1 do
begin 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 := ObterTipoAtributo(lAttributeTicket.AttributeType); lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute); EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute);
end; end;
// GETTER/SETTER: Percorre relacionamentos // GETTER/SETTER: Percorre relacionamentos
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 +'Entity>'
else lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
if lRelation.DestinationMaxMultiplicity = 1 then
begin begin
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute); lsTipoAttribute := lRelation.OriginClassTicket.DisplayName + 'Entity';
end; if lRelation.DestinationMaxMultiplicity = 1
then EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute)
else EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, true, true);
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
lsTipoAttribute := lRelation.DestinationClassTicket.DisplayName + 'Entity';
if lRelation.OriginMaxMultiplicity = 1
then EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute)
else EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, true, true);
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);
lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
if lClassTicketPai.ID <> lClassTicket.ID then
lListaChamadaSuper.Add('pi' + lsAtributo);
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
if lRelation.DestinationMaxMultiplicity > 1
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);
end;
end;
for index := 0 to lClassTicketPai.RelationTicketsOut.Count - 1 do
begin begin
lRelation := (lClassTicketPai.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName; lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') then
begin
if lRelation.OriginMaxMultiplicity > 1 if lRelation.OriginMaxMultiplicity > 1
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';
if lRelation.OriginMaxMultiplicity = 1 then lParamsConstrutor := lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
begin if lClassTicketPai.ID <> lClassTicket.ID then
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute); lListaChamadaSuper.Add('pi' + lsAtributo);
end; end;
end; end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end; end;
// Escrever mtodos // Escrever mtodos
// Escrever construtor vazio // Escrever construtor vazio
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'() { }'); lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'() {');
lCodigoClasse.Indent();
for index := 0 to lClassTicket.RelationTicketsIn.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsIn.Objects[index] as acRelationTicket);
lsAtributo := lRelation.DestinationPropertyName;
if (lsAtributo <> '') and (lRelation.DestinationMaxMultiplicity > 1) then
lCodigoClasse.WriteLine(lsAtributo + ' = new ArrayList<>();');
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
lsAtributo := lRelation.OriginPropertyName;
if (lsAtributo <> '') and (lRelation.OriginMaxMultiplicity > 1) then
lCodigoClasse.WriteLine(lsAtributo + ' = new ArrayList<>();');
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
// Escrever construtor sem id com relacionamentos // Escrever construtor sem id com relacionamentos
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {'); lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
if lEhClasseHerdada then
lCodigoClasse.WriteLine('super(' + lListaChamadaSuper.CommaText + ');');
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 + ' = pi' + lsAtributo + ';'); EscreverInicializacaoAtributo(lCodigoClasse, lsAtributo, 1);
end; end;
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 EscreverInicializacaoAtributo(lCodigoClasse, lRelation.DestinationPropertyName, lRelation.DestinationMaxMultiplicity);
end;
for index := 0 to lClassTicket.RelationTicketsOut.Count - 1 do
begin begin
lsAtributo := lRelation.DestinationPropertyName; lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
if lRelation.DestinationMaxMultiplicity = 1 then EscreverInicializacaoAtributo(lCodigoClasse, lRelation.OriginPropertyName, lRelation.OriginMaxMultiplicity);
end;
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
// Escrever construtor com id com relacionamentos
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasseDB+'('+_DBTipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
lCodigoClasse.Indent();
if lEhClasseHerdada then
lCodigoClasse.WriteLine('super(piId, ' + lListaChamadaSuper.CommaText + ');')
else
lCodigoClasse.WriteLine(_NomeId+' = piId;');
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin begin
lCodigoClasse.WriteLine(lsAtributo + ' = pi' + lsAtributo + ';'); lsAtributo := lClassTicket.Attributes.Strings[index];
EscreverInicializacaoAtributo(lCodigoClasse, lsAtributo, 1);
end; 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; 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; end;
lCodigoClasse.Outdent(); lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}'); lCodigoClasse.WriteLine('}');
...@@ -5371,9 +5470,9 @@ begin ...@@ -5371,9 +5470,9 @@ begin
lCodigoClasse.WriteLine('@Override'); lCodigoClasse.WriteLine('@Override');
lCodigoClasse.WriteLine('public String toString() {'); lCodigoClasse.WriteLine('public String toString() {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lCodigoClasse.WriteLine('return "'+lsNomeClasse+'{ " +'); lCodigoClasse.WriteLine('return "'+lsNomeClasseDB+'{ " +');
if not lEhClasseHerdada then if not lEhClasseHerdada then
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];
...@@ -5391,26 +5490,12 @@ begin ...@@ -5391,26 +5490,12 @@ begin
Result := lCodigoClasse.AsString; Result := lCodigoClasse.AsString;
finally finally
lCodigoClasse.Free; lCodigoClasse.Free;
lListaChamadaSuper.Free;
end; end;
end; end;
function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string; function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
function ObterTipoAtributo(piTipoCurio: string): string;
begin
if piTipoCurio = 'acString' then Result := 'String'
else if piTipoCurio = 'acText' then Result := 'String'
else if piTipoCurio = 'acBlob' then Result := 'bynary[]'
else if piTipoCurio = 'acGraphic' then Result := 'bynary[]'
else if piTipoCurio = 'acDateTime' then Result := 'OffsetDateTime'
else if piTipoCurio = 'acInt' then Result := 'Integer'
else if piTipoCurio = 'acCurrency' then Result := 'BigDecimal'
else if piTipoCurio = 'acDouble' then Result := 'BigDecimal'
else if piTipoCurio = 'acBoolean' then Result := 'boolean'
else Result := piTipoCurio;
end;
procedure EscreveAtributoClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piVisibility: Integer); procedure EscreveAtributoClasse(const piCodigoClasse: PStringWriter; piNomeAtributo, piTipoAtributo: String; piVisibility: Integer);
begin begin
//Escreve atributo //Escreve atributo
...@@ -5432,6 +5517,43 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string; ...@@ -5432,6 +5517,43 @@ function TUtil.GerarClassPreview_JavaDomain(piClass: IUMLClass): string;
piCodigoClasse.WriteLine(''); piCodigoClasse.WriteLine('');
end; end;
procedure IncluirImports(const piCodigoClasse: PStringWriter; piClassTicket: acClassTicket; const piTipoId: string);
var
lAttributeTicket: acAttributeTicket;
lHasImport: array[0..2] of Boolean;
index: integer;
lsTipoAttribute: string;
begin
piCodigoClasse.WriteLine('import java.util.List;');
for index := 0 to 2 do
lHasImport[index] := False;
if piTipoId = 'Long' then
begin
piCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end;
for index := 0 to piClassTicket.Attributes.Count - 1 do
begin
lAttributeTicket := piClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
if (lsTipoAttribute = 'BigDecimal') and (not lHasImport[0]) then
begin
piCodigoClasse.WriteLine('import java.math.BigDecimal;');
lHasImport[0] := True;
end
else if (lsTipoAttribute = 'Long') and (not lHasImport[1]) then
begin
piCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end
else if (lsTipoAttribute = 'OffsetDateTime') and (not lHasImport[2]) then
begin
piCodigoClasse.WriteLine('import java.time.OffsetDateTime;');
lHasImport[2] := True;
end;
end;
end;
const const
_TipoId = 'Long'; _TipoId = 'Long';
_NomeId = 'Id'; _NomeId = 'Id';
...@@ -5446,46 +5568,18 @@ var ...@@ -5446,46 +5568,18 @@ var
lCodigoClasse: PStringWriter; lCodigoClasse: PStringWriter;
lParamsConstrutor: string; lParamsConstrutor: string;
lRelation: acRelationTicket; lRelation: acRelationTicket;
lHasImport: array[0..2] of Boolean;
begin begin
Result := ''; Result := '';
lParamsConstrutor := ''; lParamsConstrutor := '';
lsNomeClasse := piClass.Name; lsNomeClasse := piClass.Name;
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasse); lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasse);
for index := 0 to 2 do
lHasImport[index] := False;
lCodigoClasse := PStringWriter.Create; lCodigoClasse := PStringWriter.Create;
try try
lCodigoClasse.WriteLine('package domain;'); //lCodigoClasse.WriteLine('package domain;');
lCodigoClasse.WriteLine(''); //lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('import java.util.List;');
// Imports de tipos // Imports de tipos
if _TipoId = 'Long' then IncluirImports(lCodigoClasse, lClassTicket, _TipoId);
begin
lCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end;
for index := 0 to lClassTicket.Attributes.Count - 1 do
begin
lAttributeTicket := lClassTicket.Attributes.Objects[index] as acAttributeTicket;
lsTipoAttribute := ObterTipoAtributo(lAttributeTicket.AttributeType);
if (lsTipoAttribute = 'BigDecimal') and (not lHasImport[0]) then
begin
lCodigoClasse.WriteLine('import java.math.BigDecimal;');
lHasImport[0] := True;
end
else if (lsTipoAttribute = 'Long') and (not lHasImport[1]) then
begin
lCodigoClasse.WriteLine('import java.lang.Long;');
lHasImport[1] := True;
end
else if (lsTipoAttribute = 'OffsetDateTime') and (not lHasImport[2]) then
begin
lCodigoClasse.WriteLine('import java.time.OffsetDateTime;');
lHasImport[2] := True;
end;
end;
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
// Incio da classe // Incio da classe
lCodigoClasse.WriteLine('public class ' + lsNomeClasse + ' {'); lCodigoClasse.WriteLine('public class ' + lsNomeClasse + ' {');
...@@ -5499,7 +5593,7 @@ begin ...@@ -5499,7 +5593,7 @@ begin
begin 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 := ObterTipoAtributo(lAttributeTicket.AttributeType); lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, lAttributeTicket.Visibility); EscreveAtributoClasse(lCodigoClasse, lsAtributo, lsTipoAttribute, lAttributeTicket.Visibility);
end; end;
...@@ -5536,7 +5630,7 @@ begin ...@@ -5536,7 +5630,7 @@ begin
begin 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 := ObterTipoAtributo(lAttributeTicket.AttributeType); lsTipoAttribute := ObterTipoAtributoJava(lAttributeTicket.AttributeType);
lParamsConstrutor:= lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', '; lParamsConstrutor:= lParamsConstrutor + lsTipoAttribute + ' pi'+ lsAtributo + ', ';
EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute); EscreveGetterSetterClasse(lCodigoClasse, lsAtributo, lsTipoAttribute);
...@@ -5559,7 +5653,6 @@ begin ...@@ -5559,7 +5653,6 @@ begin
lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket); lRelation := (lClassTicket.RelationTicketsOut.Objects[index] as acRelationTicket);
if (lRelation.OriginPropertyName <> '') then if (lRelation.OriginPropertyName <> '') then
begin begin
//Escreve atributo
lsAtributo := lRelation.OriginPropertyName; lsAtributo := lRelation.OriginPropertyName;
if lRelation.OriginMaxMultiplicity > 1 if lRelation.OriginMaxMultiplicity > 1
then lsTipoAttribute := 'List<'+lRelation.DestinationClassTicket.DisplayName+'>' then lsTipoAttribute := 'List<'+lRelation.DestinationClassTicket.DisplayName+'>'
...@@ -5573,7 +5666,7 @@ begin ...@@ -5573,7 +5666,7 @@ begin
lCodigoClasse.WriteLine(''); lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+_TipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {'); lCodigoClasse.WriteLine('public '+lsNomeClasse+'('+_TipoId+' piId, '+strutils.LeftStr(lParamsConstrutor, Length(lParamsConstrutor)-2)+') {');
lCodigoClasse.Indent(); lCodigoClasse.Indent();
lCodigoClasse.WriteLine('fId = piId;'); lCodigoClasse.WriteLine('f'+_NomeId+' = piId;');
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];
...@@ -5622,8 +5715,87 @@ begin ...@@ -5622,8 +5715,87 @@ begin
end; end;
function TUtil.GerarClassPreview_JavaMapper(piClass: IUMLClass): string; function TUtil.GerarClassPreview_JavaMapper(piClass: IUMLClass): string;
var
lsNomeClasseMapper,
lsNomeClasseDominio,
lsNomeClasseDB,
lsUltAtributo,
lsAttributo: string;
index: integer;
lClassTicket,
lClassTicketPai: acClassTicket;
lCodigoClasse: PStringWriter;
lRelation: acRelationTicket;
lAttributList: TStringList;
begin begin
Result := ''; Result := '';
lsNomeClasseDominio := piClass.Name;
lsNomeClasseDB := lsNomeClasseDominio + 'Entity';
lsNomeClasseMapper := RightStr(lsNomeClasseDominio, Length(lsNomeClasseDominio)-2) + 'Mapper';
lClassTicket := MetaModel.GetClassTicketByName(lsNomeClasseDominio);
lCodigoClasse := PStringWriter.Create;
try
lCodigoClasse.WriteLine('package adapters.persistence.mappers;');
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('import adapters.persistence.entities.'+lsNomeClasseDB+';');
lCodigoClasse.WriteLine('import domain.'+lsNomeClasseDominio+';');
lCodigoClasse.WriteLine('');
// Incio da classe
lCodigoClasse.WriteLine('public final class ' + lsNomeClasseMapper + ' {');
lCodigoClasse.WriteLine('');
lCodigoClasse.Indent();
// toDomain: Escrever mtodo toDomain
lCodigoClasse.WriteLine('');
lCodigoClasse.WriteLine('public static '+lsNomeClasseDominio+' toDomain('+lsNomeClasseDB + ' piDBObject) { ');
lCodigoClasse.Indent();
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
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
lAttributList.Add(Format('piDBObject.get%s()', [lRelation.DestinationPropertyName]));
end;
lClassTicketPai := lClassTicketPai.ParentClassTicket;
end;
// toDomain: escrever lista de atributos encontrados
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('}');
// Escrever mtodo fromDomain
//Fim
lCodigoClasse.Outdent();
lCodigoClasse.WriteLine('}');
Result := lCodigoClasse.AsString;
finally
lCodigoClasse.Free;
end;
end; end;
function TUtil.GerarClassPreview_Pascal(piClass : IUMLClass): string; function TUtil.GerarClassPreview_Pascal(piClass : IUMLClass): string;
...@@ -6081,7 +6253,6 @@ begin ...@@ -6081,7 +6253,6 @@ begin
end; end;
end; end;
procedure TUtil.CarregarMetodosNGU(pUMLClass: IUMLClass; pInstantCodeClass: TInstantCodeClass); procedure TUtil.CarregarMetodosNGU(pUMLClass: IUMLClass; pInstantCodeClass: TInstantCodeClass);
var var
lMetCont, liCont, liCont2, liParCount, liParIndex: integer; lMetCont, liCont, liCont2, liParCount, liParIndex: integer;
...@@ -6158,7 +6329,6 @@ begin ...@@ -6158,7 +6329,6 @@ begin
end; end;
procedure TUtil.ConvertXSDsToUseCaseXSD(piProgress: TFShowProgress); procedure TUtil.ConvertXSDsToUseCaseXSD(piProgress: TFShowProgress);
function XSDExiste(piXSDFile: utXSDFile; piXSD: string): string; function XSDExiste(piXSDFile: utXSDFile; piXSD: string): string;
...@@ -6397,7 +6567,6 @@ begin ...@@ -6397,7 +6567,6 @@ begin
result := lsResult; result := lsResult;
end; end;
procedure TUtil.Reversa(psNomePacote, psPrjPath, psSTARUMLprj: string); procedure TUtil.Reversa(psNomePacote, psPrjPath, psSTARUMLprj: string);
var var
lEnum: acEnumerator; lEnum: acEnumerator;
...@@ -6630,93 +6799,7 @@ begin ...@@ -6630,93 +6799,7 @@ begin
end; end;
end; end;
{
procedure TUtil.CriarUMLAttributes(piClassTicket: acClassTicket; piUMLClass: IUMLClass; piFactory: IUMLFactory);
var lindex, lNullable, llength, lprec, lscale: Integer;
lbVariable: boolean;
lAttribute: IUMLAttribute;
lsAttribute, lsTipoAttribute, lsDBTableName, lsDBTypeAttribute: String;
lClassToDBMapTicket: acClassToDBMapTicket;
lAttributeTicket: acAttributeTicket;
lAttributeVisibility: acAttributeVisibility;
qryUtil: TQuery;
begin
// ISQLMetaData.
qryUtil := TQuery.Create(nil);
qryUtil.DatabaseName := 'dbSGIES';
// Obtm classe responsvel por mapeamento OO-DB
lClassToDBMapTicket := (MetaModel.DefaultMetaModelPersistenceMap as acMetaModelPersistenceMapSQL).GetClassToDBMapTicket(piClassTicket);
lsDBTableName := lClassToDBMapTicket.TableName;
qryUtil.SQL.Text := 'select sysobjects.name as tablename,' +#13#10+
' syscolumns.name as columnname,' +#13#10+
' syscolumns.length,' +#13#10+
' syscolumns.xprec,' +#13#10+
' syscolumns.xscale,' +#13#10+
' syscolumns.isnullable,' +#13#10+
' systypes.name as typename,' +#13#10+
' systypes.variable as variable' +#13#10+
'from sysobjects, syscolumns, systypes' +#13#10+
'where sysobjects.id = syscolumns.id' +#13#10+
'and syscolumns.xtype = systypes.xtype' +#13#10+
'and sysobjects.type = ''U''' +#13#10+
'and sysobjects.name = '''+lsDBTableName+'''' +#13#10+
'and syscolumns.name = :column_name';
//Preenche a Classe UML criada com seus atributos
for lindex := 0 to (piClassTicket.Attributes.Count - 1) do
begin
lsAttribute := piClassTicket.Attributes.Strings[lindex];
lAttributeTicket := piClassTicket.Attributes.Objects[lindex] as acAttributeTicket;
lAttribute := piFactory.CreateAttribute(piUMLClass);
lAttribute.Name := lsAttribute;
// Obtm a string do tipo do atributo situado em ObjectClass de ClassTicket
lsTipoAttribute := piClassTicket.ObjectClass.GetPropType(lsAttribute).ClassName;
//*** lsTipoAttribute := lPropertyRegisterTicket.Tipo;
lAttributeVisibility := lAttributeTicket.Visibility;
// Atribui a string do tipo do atributo ao UML Atributo
lAttribute.SetType2(lsTipoAttribute);
case lAttributeVisibility of
pvPublic : lAttribute.Visibility := vkPublic;
pvProtected : lAttribute.Visibility := vkProtected;
pvPrivate : lAttribute.Visibility := vkPrivate;
else lAttribute.Visibility := vkPrivate;
end;
// Seta nome da coluna do BD como valor atribudo
lAttribute.SetTaggedValueAsString('DBMappings', 'DBAttributeMap', 'Name', lClassToDBMapTicket.ColumnTicket[lindex].ColumnName);
qryUtil.ParamByName('column_name').AsString := lClassToDBMapTicket.ColumnTicket[lindex].ColumnName;
qryUtil.Open;
if not qryUtil.IsEmpty then
begin
lNullable := qryUtil.FieldByName('isnullable').AsInteger;
if lNullable = 1 then
lAttribute.SetTaggedValueAsBoolean('DBMappings', 'DBAttributeMap', 'Mand', true)
else lAttribute.SetTaggedValueAsBoolean('DBMappings', 'DBAttributeMap', 'Mand', false);
llength := qryUtil.FieldByName('length').AsInteger;
lprec := qryUtil.FieldByName('xprec').AsInteger;
lscale := qryUtil.FieldByName('xscale').AsInteger;
lbVariable := qryUtil.FieldByName('variable').AsBoolean;
if lprec <> 0 then
begin
lAttribute.SetTaggedValueAsInteger('DBMappings', 'DBAttributeMap', 'FSize', lprec);
lAttribute.SetTaggedValueAsInteger('DBMappings', 'DBAttributeMap', 'VSize', lscale)
end else
begin
if lbVariable then
lAttribute.SetTaggedValueAsInteger('DBMappings', 'DBAttributeMap', 'VSize', llength)
else lAttribute.SetTaggedValueAsInteger('DBMappings', 'DBAttributeMap', 'FSize', llength);
end;
lsDBTypeAttribute := qryUtil.FieldByName('typename').AsString;
lAttribute.SetTaggedValueAsString('DBMappings', 'DBAttributeMap', 'Type', lsDBTypeAttribute);
end;
qryUtil.Close;
end;
end;
}
// Procedure responsvel por criar a estrutura de rvore de todo modelo (cria generalizaes e UML classes envolvidas) // Procedure responsvel por criar a estrutura de rvore de todo modelo (cria generalizaes e UML classes envolvidas)
procedure TUtil.CriarArvore(piIStarUMLApp: IStarUMLApplication; piUMLClass: IUMLClass; piUMLPackage: IUMLPackage; piClassTicket: acClassTicket); procedure TUtil.CriarArvore(piIStarUMLApp: IStarUMLApplication; piUMLClass: IUMLClass; piUMLPackage: IUMLPackage; piClassTicket: acClassTicket);
var var
...@@ -7123,6 +7206,20 @@ begin ...@@ -7123,6 +7206,20 @@ begin
gStarUMLApp.AddMessageItem(piMessageType, piMessage, piElement); gStarUMLApp.AddMessageItem(piMessageType, piMessage, piElement);
end; end;
function TUtil.ObterTipoAtributoJava(piTipoCurio: string): string;
begin
if piTipoCurio = 'acString' then Result := 'String'
else if piTipoCurio = 'acText' then Result := 'String'
else if piTipoCurio = 'acBlob' then Result := 'bynary[]'
else if piTipoCurio = 'acGraphic' then Result := 'bynary[]'
else if piTipoCurio = 'acDateTime' then Result := 'OffsetDateTime'
else if piTipoCurio = 'acInt' then Result := 'Integer'
else if piTipoCurio = 'acCurrency' then Result := 'BigDecimal'
else if piTipoCurio = 'acDouble' then Result := 'BigDecimal'
else if piTipoCurio = 'acBoolean' then Result := 'Boolean'
else Result := piTipoCurio;
end;
function TUtil.EncodeMultiplicity(piMultiplicity: Integer): string; function TUtil.EncodeMultiplicity(piMultiplicity: Integer): string;
begin begin
if (piMultiplicity = N) if (piMultiplicity = N)
......
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