Skip to content

Commit

Permalink
💎 biblioteca Rest (#522)
Browse files Browse the repository at this point in the history
* Integração da biblioteca de objetos com arquivos JSON.

* Inclusão da biblioteca REST para portugol

* Atualização da biblioteca de serviços web

Alteração do nome da biblioteca de Rest para Serviços Web;
Correção das chamadas aos métodos HTTP POST, PUT e DELETE.

* Incremento na biblioteca para requisições customizadas.

* Incremento da biblioteca Objetos

Inclusão das constantes para tipos;
Inclusão das funções para trabalhar com objetos aninhados;
Inclusão das funções para trabalhar com propriedades que são arrays;
Inclusão da funções para verificar o tipo de uma propriedade;
  • Loading branch information
gabrielschade authored and AlissonSteffens committed Apr 6, 2018
1 parent 2771c2e commit ce4349e
Show file tree
Hide file tree
Showing 8 changed files with 816 additions and 90 deletions.
11 changes: 10 additions & 1 deletion core/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,16 @@ dependencies {

// https://mvnrepository.com/artifact/org.apache.httpcomponents/fluent-hc
compile group: 'org.apache.httpcomponents', name: 'fluent-hc', version: '4.5.5'


//https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.5'

//https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.5'

//https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.5'

// Talvez possa ser substituído pela dependência abaixo
// https://mvnrepository.com/artifact/javax.media/jmf
//compile group: 'javax.media', name: 'jmf', version: 'fs-3.0'
Expand Down
438 changes: 359 additions & 79 deletions core/src/main/java/br/univali/portugol/nucleo/bibliotecas/Objetos.java

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.univali.portugol.nucleo.bibliotecas;

import static br.univali.portugol.nucleo.bibliotecas.base.TipoBiblioteca.*;
import br.univali.portugol.nucleo.bibliotecas.base.Biblioteca;
import br.univali.portugol.nucleo.bibliotecas.base.ErroExecucaoBiblioteca;
import br.univali.portugol.nucleo.bibliotecas.base.anotacoes.Autor;
import br.univali.portugol.nucleo.bibliotecas.base.anotacoes.DocumentacaoFuncao;
import br.univali.portugol.nucleo.bibliotecas.base.anotacoes.DocumentacaoParametro;
import br.univali.portugol.nucleo.bibliotecas.base.anotacoes.DocumentacaoBiblioteca;
import br.univali.portugol.nucleo.bibliotecas.base.anotacoes.DocumentacaoConstante;
import br.univali.portugol.nucleo.bibliotecas.base.anotacoes.PropriedadesBiblioteca;
import br.univali.portugol.nucleo.bibliotecas.web.RestClient;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Gabriel Schade
*/
@PropriedadesBiblioteca(tipo = COMPARTILHADA)
@DocumentacaoBiblioteca(
descricao = "Esta biblioteca contém uma série de funções para trabalhar com serviços web",
versao = "1.0"
)
public final class ServicosWeb extends Biblioteca{
public ServicosWeb()
{ }

private HttpURLConnection obterConexaoEmCache() throws ErroExecucaoBiblioteca{
HttpURLConnection conexao = RestClient.obterConexaoEmCache();
if(conexao == null)
throw new ErroExecucaoBiblioteca("É necessário criar uma conexão customizada antes de adicionar o cabeçalho");

return conexao;
}

@DocumentacaoConstante(
descricao = "Constante para definir o método HTTP GET",
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#GET"
)
public static final int OBTER = 1;
@DocumentacaoConstante(
descricao = "Constante para definir o método HTTP POST",
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#POST"
)
public static final int PUBLICAR = 2;
@DocumentacaoConstante(
descricao = "Constante para definir o método HTTP PUT",
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#PUT"
)
public static final int ATUALIZAR = 3;
@DocumentacaoConstante(
descricao = "Constante para definir o método HTTP DELETE",
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#DELETE"
)
public static final int EXCLUIR = 4;

@DocumentacaoFuncao(
descricao = "Realiza uma chamada HTTP GET para o endereço especificado, retornando uma cadeia no formato JSON como resposta",
parametros =
{
@DocumentacaoParametro(nome = "endereco", descricao = "endereço para o qual a requisição será feita")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#GET",
retorno = "a cadeia JSON contendo a resposta da requisição",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public String obter_dados(String endereco) throws ErroExecucaoBiblioteca, InterruptedException
{
try {
return RestClient.get(endereco);
} catch (IOException ex) {
throw new ErroExecucaoBiblioteca("Ocorreu um problema na requisição.");
}
}

@DocumentacaoFuncao(
descricao = "Realiza uma chamada HTTP DELETE para o endereço especificado, retornando uma cadeia no formato JSON como resposta",
parametros =
{
@DocumentacaoParametro(nome = "endereco", descricao = "endereço para o qual a requisição será feita")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#DELETE",
retorno = "a cadeia JSON contendo a resposta da requisição",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public String excluir_dados(String endereco) throws ErroExecucaoBiblioteca, InterruptedException
{
try {
return RestClient.delete(endereco);
} catch (IOException ex) {
throw new ErroExecucaoBiblioteca("Ocorreu um problema na requisição.");
}
}

@DocumentacaoFuncao(
descricao = "Realiza uma chamada HTTP POST para o endereço especificado, retornando uma cadeia no formato JSON como resposta",
parametros =
{
@DocumentacaoParametro(nome = "endereco", descricao = "endereço para o qual a requisição será feita"),
@DocumentacaoParametro(nome = "objeto", descricao = "objeto no formato JSON passado por parâmetro no corpo da requisição")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#POST",
retorno = "a cadeia JSON contendo a resposta da requisição",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public String publicar_dados(String endereco, String objeto) throws ErroExecucaoBiblioteca, InterruptedException
{
try {
return RestClient.post(endereco,objeto);
} catch (IOException ex) {
throw new ErroExecucaoBiblioteca("Ocorreu um problema na requisição.");
}
}

@DocumentacaoFuncao(
descricao = "Realiza uma chamada HTTP PUT para o endereço especificado, retornando uma cadeia no formato JSON como resposta",
parametros =
{
@DocumentacaoParametro(nome = "endereco", descricao = "endereço para o qual a requisição será feita"),
@DocumentacaoParametro(nome = "objeto", descricao = "objeto no formato JSON passado por parâmetro no corpo da requisição")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol#PUT",
retorno = "a cadeia JSON contendo a resposta da requisição",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public String atualizar_dados(String endereco, String objeto) throws ErroExecucaoBiblioteca, InterruptedException
{
try {
return RestClient.put(endereco,objeto);
} catch (IOException ex) {
throw new ErroExecucaoBiblioteca("Ocorreu um problema na requisição.");
}
}

@DocumentacaoFuncao(
descricao = "Abre uma conexão customizável com o endereço especificado.",
parametros =
{
@DocumentacaoParametro(nome = "endereco", descricao = "endereço para o qual a requisição será feita")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public void abrir_conexao(String endereco) throws ErroExecucaoBiblioteca, InterruptedException{
try {
RestClient.abrirConexao(endereco);
} catch (IOException ex) {
throw new ErroExecucaoBiblioteca("Ocorreu um problema na criação da requisição.");
}
}

@DocumentacaoFuncao(
descricao = "Adiciona um cabeçalho na conexão customizável, para utilizar esta função é necessário abrir uma conexão antes.",
parametros =
{
@DocumentacaoParametro(nome = "chave", descricao = "chave do cabeçalho que será incluído na conexão"),
@DocumentacaoParametro(nome = "valor", descricao = "valor do cabeçalho que será incluído na conexão")
},
referencia = "https://pt.wikipedia.org/wiki/Lista_de_campos_de_cabe%C3%A7alho_HTTP",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public void adicionar_cabecalho(String chave, String valor) throws ErroExecucaoBiblioteca, InterruptedException{
HttpURLConnection conexao = obterConexaoEmCache();
RestClient.incluirCabecalhoNaRequisicao( conexao,chave, valor);
}

@DocumentacaoFuncao(
descricao = "Adiciona um objeto no formato JSON na conexão customizável, para utilizar esta função é necessário abrir uma conexão antes. Esta função deve ser utilizada para informar os parâmetros dos métodos HTTP POST e PUT.",
parametros =
{
@DocumentacaoParametro(nome = "objeto", descricao = "objeto no formato JSON passado por parâmetro no corpo da requisição")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public void adicionar_parametros(String objeto) throws ErroExecucaoBiblioteca, InterruptedException{
RestClient.adicionarParametroNaConexao(objeto);
}

@DocumentacaoFuncao(
descricao = "Realiza uma chamada HTTP através de uma conexão customizada, retornando uma cadeia no formato JSON como resposta",
parametros =
{
@DocumentacaoParametro(nome = "metodoHttp", descricao = "Método HTTP que será utilizado nesta execução (GET, POST, PUT ou DELETE).")
},
referencia = "https://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol",
retorno = "a cadeia JSON contendo a resposta da requisição",
autores =
{
@Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br")
}
)
public String fazer_requisicao(int metodoHttp) throws ErroExecucaoBiblioteca, InterruptedException
{
try {
String retorno = "";
switch(metodoHttp){
case OBTER:
retorno = RestClient.get(obterConexaoEmCache());
break;
case PUBLICAR:
retorno = RestClient.post(obterConexaoEmCache());
break;
case ATUALIZAR:
retorno = RestClient.put(obterConexaoEmCache());
break;
case EXCLUIR:
retorno = RestClient.delete(obterConexaoEmCache());
break;
}
return retorno;
} catch (IOException ex) {
throw new ErroExecucaoBiblioteca("Ocorreu um problema na requisição.");
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ public List<String> listarBibliotecasDisponiveis()
bibliotecasDisponiveis.add("Util");
bibliotecasDisponiveis.add("Graficos");
bibliotecasDisponiveis.add("Matematica");
bibliotecasDisponiveis.add("Objetos");
bibliotecasDisponiveis.add("Teclado");
bibliotecasDisponiveis.add("Texto");
bibliotecasDisponiveis.add("Tipos");
Expand All @@ -92,6 +91,8 @@ public List<String> listarBibliotecasDisponiveis()
bibliotecasDisponiveis.add("Sons");
bibliotecasDisponiveis.add("Calendario");
bibliotecasDisponiveis.add("Internet");
bibliotecasDisponiveis.add("Objetos");
bibliotecasDisponiveis.add("ServicosWeb");

Collections.sort(bibliotecasDisponiveis);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,17 @@
*/
package br.univali.portugol.nucleo.bibliotecas.objetos;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.stream.Stream;


/**
*
Expand All @@ -14,15 +24,40 @@
public class Objeto {

private final HashMap objetoInterno;

private final ObjectMapper mapper;
public Objeto(){
objetoInterno = new HashMap();
mapper = new ObjectMapper();
}

public Objeto(HashMap objeto){
mapper = new ObjectMapper();
objetoInterno = objeto;
}

public Objeto(String json){
mapper = new ObjectMapper();
objetoInterno = criarViaJson(json);
}

private HashMap criarViaJson(String json) {
HashMap objeto;
try{
objeto = mapper.readValue(json, new TypeReference<Map<String, Object>>(){});
}catch(IOException ex){
objeto = new HashMap();
}
return objeto;
}

public void atribuirPropriedade(String propriedade, Object valor){
objetoInterno.put(propriedade, valor);
}

public Object obterPropriedade(String propriedade){
return objetoInterno.get(propriedade);
}

public int obterPropriedadeInteiro(String propriedade){
return (int) objetoInterno.get(propriedade);
}
Expand All @@ -36,19 +71,28 @@ public boolean obterPropriedadeLogico(String propriedade){
}

public char obterPropriedadeCaracter(String propriedade){
return (char) objetoInterno.get(propriedade);
return ((String) objetoInterno.get(propriedade)).charAt(0);
}

public double obterPropriedadeReal(String propriedade){
return (double) objetoInterno.get(propriedade);
}

public String obterJson(){
StringBuilder texto = new StringBuilder();
objetoInterno.keySet()
.forEach(key -> texto.append(key).append(": ").append(objetoInterno.get(key)).append("\n"));
return texto.toString();
public String obterPropriedadeObjeto(String propriedade) throws JsonProcessingException{
HashMap objetoAninhado = (HashMap) objetoInterno.get(propriedade);
return obterJson(objetoAninhado);
}

public boolean contemPropriedade(String propriedade){
return objetoInterno.keySet().contains(propriedade);
}

public String obterJson() throws JsonGenerationException, JsonProcessingException{
return obterJson(objetoInterno);
}

public String obterJson(HashMap objeto) throws JsonGenerationException, JsonProcessingException{
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(objeto);
}

}
Loading

0 comments on commit ce4349e

Please sign in to comment.