Skip to content

Commit

Permalink
Merge pull request #99 from bomrafinha/bomrafinha
Browse files Browse the repository at this point in the history
JSON -> XML 93,33% concluído
  • Loading branch information
bomrafinha authored Apr 9, 2020
2 parents c1d8218 + cf4d342 commit 158c19e
Show file tree
Hide file tree
Showing 17 changed files with 792 additions and 76 deletions.
105 changes: 78 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
# Format Converter (Delphi)

>Conversor de formatos (JSON, XML, etc) para Delphi.
>
>Format converter (JSON, XML, etc.) for Delphi.
<br />

![Maintenance](https://img.shields.io/maintenance/yes/2020)
![Build](https://img.shields.io/badge/Build-1.1.15.271-brightgreen)
![Build](https://img.shields.io/badge/Build-1.2.29.300-brightgreen)
![GitHub release (latest by date)](https://img.shields.io/github/v/release/bomrafinha/FormatConverter)
![GitHub Release Date](https://img.shields.io/github/release-date/bomrafinha/FormatConverter)
![Github repo age](https://img.shields.io/github/issues/detail/age/bomrafinha/FormatConverter/1.svg?style=flat-square)
Expand Down Expand Up @@ -52,6 +54,56 @@

## Uso <a name="uso"></a>

- **TJSONtoXML**
* **stringToString:** Converte um JSON em forma de String em um XML em forma de string (string);
+ **Parametrização**
- *strContent:* JSON à converter (string);
* **stringToFile:** Converte um JSON em forma de String em um arquivo XML (boolean);
+ **Parametrização**
- *strContent:* JSON à converter (string);
- *filePathResult:* Caminho do arquivo XML à ser salvo (string);
* **stringToReturnType:** Converte um JSON em forma de String em um XML em forma de TXMLDocument (TXMLDocument);
+ **Parametrização**
- *strContent:* JSON à converter (string);
* **fileToString:** Converte um arquivo JSON em um XML em forma de string (string);
+ **Parametrização**
- *filePath:* Caminho do arquivo JSON à converter (string);
* **fileToFile:** Converte um arquivo JSON em um arquivo XML (boolean);
+ **Parametrização**
- *filePath:* Caminho do arquivo JSON à converter (string);
- *filePathResult:* Caminho do arquivo XML à ser salvo (string);
* **fileToReturnType:** Converte um arquivo JSON em um XML em forma de TXMLDocument (TXMLDocument);
+ **Parametrização**
- *filePath:* Caminho do arquivo JSON à converter (string);
* **originTypeToString:** Converte um JSON em forma de TJSONObject em um XML em forma de string (string);
+ **Parametrização**
- *content:* JSON à converter (TJSONObject);
* **originTypeToFile:** Converte um JSON em forma de TJSONObject em um arquivo XML (boolean);
+ **Parametrização**
- *content:* JSON à converter (TJSONObject);
- *filePathResult:* Caminho do arquivo XML à ser salvo (string);
* **originTypeToReturnType:** Converte um JSON em forma de TJSONObject em um XML em forma de TXMLDocument (TXMLDocument);
+ **Parametrização**
- *content:* JSON à converter (TJSONObject);
* **normalizeOrigin:** Converte um JSON em forma de String em um JSON em forma de TJSONObject (TJSONObject);
+ **Parametrização**
- *content:* JSON à normalizar (string);
* **normalizeOrigin:** Converte um JSON em forma de TJSONObject em um JSON em forma de TStringList (TStringList);
+ **Parametrização**
- *content:* JSON à normalizar (TJSONObject);
* **normalizeOrigin:** Converte um JSON em forma de TStringList em um JSON em forma de String (string);
+ **Parametrização**
- *content:* JSON à normalizar (TStringList);
* **normalizeReturn:** Converte um XML em forma de String em um XML em forma de TXMLDocument (TXMLDocument);
+ **Parametrização**
- *content:* XML à normalizar (string);
* **normalizeReturn:** Converte um XML em forma de TXMLDocument em um XML em forma de TStringList (TStringList);
+ **Parametrização**
- *content:* XML à normalizar (TXMLDocument);
* **normalizeReturn:** Converte um XML em forma de TStringList em um XML em forma de String (string);
+ **Parametrização**
- *content:* XML à normalizar (TStringList);

- **TXMLtoJSON**
* **stringToString:** Converte um XML em forma de String em um JSON em forma de string (string);
+ **Parametrização**
Expand Down Expand Up @@ -104,7 +156,7 @@

<br />

## [Sitemap](https://coggle.it/diagram/XmZ2-WVe0wuFMqlu/t/-) <a name="sitemap"></a>
## [Sitemap](https://coggle.it/diagram/XmZ2-WVe0wuFMqlu/t/formatconverter/8eab1c100cdfab7da57fd7b188f16250b46cd1b54f3256000d57bb42499f2147) <a name="sitemap"></a>
![Sitemap](documentation/images/sitemap.png)

<br />
Expand All @@ -119,7 +171,8 @@
+ **project:** Diretório com os projetos de cada pacote e testador;
+ **src:** Contém o fonte essencial para o funcionamento do(s) pacote(s);
- **OriginToReturn:** Contém a interface de que comanda a implementação dos pacotes;
- **XMLtoJSON:** Contém o pacote usado para conversão de XML para JSON;
- **JSONtoXML:** Contém o pacote usado para conversão de XML para JSON;
- **XMLtoJSON:** Contém o pacote usado para conversão de JSON para XML;
+ **vendor:** Contém os pacotes de terceiros;

<br />
Expand All @@ -143,7 +196,7 @@ Deve-se manter a ordem de compilação do projeto como na imagem.

## Contribuir <a name="contribuir"></a>
1. Faça um "fork" com base no master;
2. Faça "commit" de suas alterações (Caso estiver resolvento alguma "issue" não esqueça de na mensagem escrever "Fixed #numeroIssue");
2. Faça "commit" de suas alterações (Caso estiver resolvendo alguma "issue" não esqueça de na mensagem escrever "Fixed #numeroIssue");
3. Faça "push" de seus commits;
4. Solicite um "pull request" para o master do repositório principal.

Expand Down Expand Up @@ -214,10 +267,10 @@ Os *releases* do repositório serão feitos a cada vez que um módulo estiver 10
<br />

### Padrões adotados no projeto
Para um melhor entendimento do projeto foi-se adotado alguns padrões que facilitam a identificação de cada estrutura usada. São, basicamente, o uso de *camelcase*, com variações nas iniciais;
Para um melhor entendimento do projeto foi-se adotado alguns padrões que facilitam a identificação de cada estrutura usada. São, basicamente, o uso de *camelCase*, e *PascalCase*;

#### Variáveis de método
Variáveis locais devem ser *camelcase* iniciando em minúsculo.
Variáveis locais devem ser *camelCase*.

Observar o espaçamento entre a declaração de variáveis e o inicio do método.

Expand All @@ -226,12 +279,12 @@ Observar o espaçamento entre a declaração de variáveis e o inicio do método
#### Variáveis privadas
A declaração de váriaveis privadas deve ocorrer sempre dentro dos modificadores de acesso.

Devem começar sempre com "f" minúsculo, seguido por seu nome em *camelcase* com a inicial em maiúsculo.
Devem ser *camelCase* começando sempre com "f" seguido por seu nome.

![Variáveis privadas](documentation/images/padrao_variaveis_privadas.png)

#### Propriedades
Propriedades devem usar *camelcase* começando sempre com a inicial em maiúsculo.
Propriedades devem usar *PascalCase*.

Devem ter exatamente o nome de sua variável privada e/ou metodo de acesso, eliminando apenas o prefixo (f, get, set).

Expand All @@ -240,21 +293,23 @@ Devem ter exatamente o nome de sua variável privada e/ou metodo de acesso, elim
#### Métodos
A declaração de métodos deve ocorrer sempre dentro dos modificadores de acesso.

Métodos devem ser *camelcase* iniciando em minúsculo.
Métodos devem ser *camelCase*.

Os parâmetros do método devem ser *camelcase* iniciando em minúsculo.
Os parâmetros do método devem ser *camelCase* iniciando com "a".

Procurar, quando possível, usar prefixos *get*, *set*, *eh*, etc de acordo com a função do método e/ou seu retorno.

Ao serem chamados usar sempre parentesis em sua chamada, mesmo quando sem parâmetros. Ex: meuMetodo();

![Métodos](documentation/images/padrao_metodos.png)

#### Interfaces
Interfaces devem começar sempre com a letra "I" (maiúsculo), seguido por seu nome em *camelcase* com a inicial em maiúsculo também.
Interfaces devem começar sempre com a letra "I" (maiúsculo), seguido por seu nome em *PascalCase*.

![Interfaces](documentation/images/padrao_interfaces.png)

#### Classes
Classes devem começar sempre com a letra "T" (maiúsculo), seguido por seu nome em *camelcase* com a inicial em maiúsculo também.
Classes devem começar sempre com a letra "T" (maiúsculo), seguido por seu nome em *PascalCase*.

Classes que não extendem nenhuma outra classes em específico devem extender *TInterfacedObject*.

Expand Down Expand Up @@ -283,6 +338,15 @@ Separar declações de variáveis, métodos, construtores, destrutores e proprie

![Identação](documentation/images/padrao_identacao_01.png)

#### Chamada de métodos e variaveis internas da classe

Devem ser precedidas da palavra reservada *Self*, para facilitar a leitura do código.

![Self](documentation/images/padrao_self_01.png)

#### Palavras Reservadas
Dá-se preferência ao uso de iniciais minúsculas para palavras reservadas. Porém isso não é uma regra para o projeto tendo em vista que por serem reservadas a IDE às sinaliza, não atrapalhando, assim, a leitura do código.

#### Um código bem padronizado é muito mais fácil de ler, mesmo por programadores que utilizam outras linguagens.

<br />
Expand All @@ -293,23 +357,10 @@ Separar declações de variáveis, métodos, construtores, destrutores e proprie

+ Estrutura básica do código
- Pacotes com recursos visuais (arrastar e soltar)
- Remover métodos de normalização da interface *OriginToReturn* e adicioná-los à uma nova Inteface

+ Conversor JSON -> XML
- Entrada JSON -> Saída XML
- Entrada JSON -> Saída string
- Entrada JSON -> Saída arquivo
- Entrada string -> Saída XML
- Entrada string -> Saída string
- Entrada string -> Saída arquivo
- Entrada arquivo -> Saída XML
- Entrada arquivo -> Saída string
- Entrada arquivo -> Saída arquivo
- Normalizar origin String -> JSON
- Normalizar origin JSON -> TStringList
- Normalizar origin TStringList -> String
- Normalizar return String -> XML
- Normalizar return XML -> TStringList
- Normalizar return TStringList -> String
- Entrada JSON -> Saída XML

+ Conversor JSON -> CSV
- Entrada JSON -> Saída CSV
Expand Down
Binary file modified documentation/images/padrao_metodos.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added documentation/images/padrao_self_01.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified documentation/images/sitemap.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
46 changes: 41 additions & 5 deletions modules/Format_Converter/U_FormatConverter.View.pas
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ interface
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
FMX.Objects, FMX.Effects, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,
FMX.StdCtrls, U_XML.JSON, Xml.XMLDoc, System.JSON;
FMX.StdCtrls, U_XML.JSON, Xml.XMLDoc, System.JSON, U_JSON.XML;

type
TFormatConverter = class(TForm)
Expand Down Expand Up @@ -52,6 +52,7 @@ TFormatConverter = class(TForm)
private
var
XMLtoJSON : TXMLtoJSON;
JSONtoXML : TJSONtoXML;
procedure convertTest();

public
Expand Down Expand Up @@ -84,13 +85,49 @@ procedure TFormatConverter.bJSONtoCSVClick(Sender: TObject);
end;

procedure TFormatConverter.bJSONtoXMLClick(Sender: TObject);
var
xml : TXMLDocument;
list : TStringList;
json : TJSONObject;

begin
convertTest();
json := JSONtoXML.normalizeOrigin(memoOriginal.Text);
list := JSONtoXML.normalizeOrigin(json);
memoOriginal.Lines.Clear;
memoOriginal.Lines := list;

xml := JSONtoXML.originTypeToReturnType(json);

list := JSONtoXML.normalizeReturn(xml);

memoResultado.Lines.Clear;
memoResultado.lines := list;

end;

procedure TFormatConverter.bXMLtoCSVClick(Sender: TObject);
var
xml : TXMLDocument;
list : TStringList;
json : TJSONObject;
strXML : String;
strJSON : String;

begin
strJSON := '{"root" : "raiz", "objeto": {"sub01": "nível01"}, "vetor":["rafa", "rossa"], "footer": 1}';
json := JSONtoXML.normalizeOrigin(strJSON);

// strXML := JSONtoXML.originTypeToString(json);
JSONtoXML.originTypeToFile(json, 'D:\Users\Bomrafinha\Desktop\teste_02.xml');


// xml := JSONtoXML.fileToReturnType('D:\Users\Bomrafinha\Desktop\teste_02.json');
// list := JSONtoXML.normalizeReturn(xml);
//
// memoResultado.Lines.Clear;
// memoResultado.lines := list;


convertTest();

end;
Expand All @@ -103,15 +140,14 @@ procedure TFormatConverter.bXMLtoJSONClick(Sender: TObject);

begin
xml := XMLtoJSON.normalizeOrigin(memoOriginal.Text);
memoOriginal.Lines.Clear;
list := XMLtoJSON.normalizeOrigin(xml);
memoOriginal.Lines.Clear;
memoOriginal.Lines := list;

json := XMLtoJSON.originTypeToReturnType(xml);

memoResultado.Text := json.ToString;

list := XMLtoJSON.normalizeReturn(json);
memoResultado.Lines.Clear;
memoResultado.lines := list;

end;
Expand Down
20 changes: 10 additions & 10 deletions project/FormatConverter.groupproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<ProjectGuid>{3CB971E9-5EE1-4EDF-8D51-34890FA8EF95}</ProjectGuid>
</PropertyGroup>
<ItemGroup>
<Projects Include="OriginToReturn.dproj">
<Projects Include="Padronizacao.dproj">
<Dependencies/>
</Projects>
<Projects Include="CSVtoJSON.dproj">
Expand Down Expand Up @@ -35,14 +35,14 @@
<Default.Personality/>
</BorlandProject>
</ProjectExtensions>
<Target Name="OriginToReturn">
<MSBuild Projects="OriginToReturn.dproj"/>
<Target Name="Padronizacao">
<MSBuild Projects="Padronizacao.dproj"/>
</Target>
<Target Name="OriginToReturn:Clean">
<MSBuild Projects="OriginToReturn.dproj" Targets="Clean"/>
<Target Name="Padronizacao:Clean">
<MSBuild Projects="Padronizacao.dproj" Targets="Clean"/>
</Target>
<Target Name="OriginToReturn:Make">
<MSBuild Projects="OriginToReturn.dproj" Targets="Make"/>
<Target Name="Padronizacao:Make">
<MSBuild Projects="Padronizacao.dproj" Targets="Make"/>
</Target>
<Target Name="CSVtoJSON">
<MSBuild Projects="CSVtoJSON.dproj"/>
Expand Down Expand Up @@ -108,13 +108,13 @@
<MSBuild Projects="Format_Converter.dproj" Targets="Make"/>
</Target>
<Target Name="Build">
<CallTarget Targets="OriginToReturn;CSVtoJSON;CSVtoXML;JSONtoCSV;JSONtoXML;XMLtoCSV;XMLtoJSON;Format_Converter"/>
<CallTarget Targets="Padronizacao;CSVtoJSON;CSVtoXML;JSONtoCSV;JSONtoXML;XMLtoCSV;XMLtoJSON;Format_Converter"/>
</Target>
<Target Name="Clean">
<CallTarget Targets="OriginToReturn:Clean;CSVtoJSON:Clean;CSVtoXML:Clean;JSONtoCSV:Clean;JSONtoXML:Clean;XMLtoCSV:Clean;XMLtoJSON:Clean;Format_Converter:Clean"/>
<CallTarget Targets="Padronizacao:Clean;CSVtoJSON:Clean;CSVtoXML:Clean;JSONtoCSV:Clean;JSONtoXML:Clean;XMLtoCSV:Clean;XMLtoJSON:Clean;Format_Converter:Clean"/>
</Target>
<Target Name="Make">
<CallTarget Targets="OriginToReturn:Make;CSVtoJSON:Make;CSVtoXML:Make;JSONtoCSV:Make;JSONtoXML:Make;XMLtoCSV:Make;XMLtoJSON:Make;Format_Converter:Make"/>
<CallTarget Targets="Padronizacao:Make;CSVtoJSON:Make;CSVtoXML:Make;JSONtoCSV:Make;JSONtoXML:Make;XMLtoCSV:Make;XMLtoJSON:Make;Format_Converter:Make"/>
</Target>
<Import Project="$(BDS)\Bin\CodeGear.Group.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')"/>
</Project>
9 changes: 5 additions & 4 deletions project/Format_Converter.dproj
Original file line number Diff line number Diff line change
Expand Up @@ -298,14 +298,15 @@
<VerInfo_Locale>1046</VerInfo_Locale>
<VerInfo_Debug>true</VerInfo_Debug>
<VerInfo_AutoIncVersion>true</VerInfo_AutoIncVersion>
<VerInfo_Keys>CompanyName=Bomrafinha;FileDescription=$(MSBuildProjectName);FileVersion=1.1.15.271;InternalName=FormatConverter;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Build>271</VerInfo_Build>
<VerInfo_MinorVer>1</VerInfo_MinorVer>
<VerInfo_Release>15</VerInfo_Release>
<VerInfo_Keys>CompanyName=Bomrafinha;FileDescription=$(MSBuildProjectName);FileVersion=1.2.29.300;InternalName=FormatConverter;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Build>300</VerInfo_Build>
<VerInfo_MinorVer>2</VerInfo_MinorVer>
<VerInfo_Release>29</VerInfo_Release>
<DCC_UnitSearchPath>../app;../output;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
<Icon_MainIcon>..\images\icone\icon.ico</Icon_MainIcon>
<UWP_DelphiLogo44>..\images\icone\icon 44x44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>..\images\icone\icon 150x150.png</UWP_DelphiLogo150>
<DCC_DebugInfoInExe>false</DCC_DebugInfoInExe>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
Expand Down
4 changes: 3 additions & 1 deletion project/JSONtoXML.dpk
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ package JSONtoXML;
{$IMPLICITBUILD ON}

requires
rtl;
rtl,
fmx,
Padronizacao;

contains
U_JSON.XML in '..\src\JSONtoXML\U_JSON.XML.pas';
Expand Down
8 changes: 2 additions & 6 deletions project/JSONtoXML.dproj
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="fmx.dcp"/>
<DCCReference Include="Padronizacao.dcp"/>
<DCCReference Include="..\src\JSONtoXML\U_JSON.XML.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
Expand Down Expand Up @@ -172,12 +174,6 @@
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="..\app\JSONtoXML.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>JSONtoXML.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
Expand Down
5 changes: 3 additions & 2 deletions project/OriginToReturn.dpk → project/Padronizacao.dpk
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package OriginToReturn;
package Padronizacao;

{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
Expand Down Expand Up @@ -32,6 +32,7 @@ requires
xmlrtl;

contains
U_Origin.Return in '..\src\OriginToReturn\U_Origin.Return.pas';
U_Origin.Return in '..\src\Padronizacao\U_Origin.Return.pas',
U_Normalize in '..\src\Padronizacao\U_Normalize.pas';

end.
Loading

0 comments on commit 158c19e

Please sign in to comment.