From ce4349ea7362d7f748eb9b293fe70a83cfce5c25 Mon Sep 17 00:00:00 2001 From: Gabriel Schade Date: Fri, 6 Apr 2018 17:22:57 -0300 Subject: [PATCH] :gem: biblioteca Rest (#522) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 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; --- core/build.gradle | 11 +- .../portugol/nucleo/bibliotecas/Objetos.java | 438 ++++++++++++++---- .../nucleo/bibliotecas/ServicosWeb.java | 247 ++++++++++ .../base/GerenciadorBibliotecas.java | 3 +- .../nucleo/bibliotecas/objetos/Objeto.java | 62 ++- .../nucleo/bibliotecas/web/RestClient.java | 145 ++++++ ide/.jpg | Bin 0 -> 27150 bytes ide/.png | Bin 0 -> 72522 bytes 8 files changed, 816 insertions(+), 90 deletions(-) create mode 100644 core/src/main/java/br/univali/portugol/nucleo/bibliotecas/ServicosWeb.java create mode 100644 core/src/main/java/br/univali/portugol/nucleo/bibliotecas/web/RestClient.java create mode 100644 ide/.jpg create mode 100644 ide/.png diff --git a/core/build.gradle b/core/build.gradle index a175516c7..ee5b5ca80 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -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' diff --git a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/Objetos.java b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/Objetos.java index 80082eddc..147b161c4 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/Objetos.java +++ b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/Objetos.java @@ -5,12 +5,21 @@ 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.DocumentacaoConstante; 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.graficos.CacheImagens; +import br.univali.portugol.nucleo.bibliotecas.graficos.JanelaGraficaImpl; import br.univali.portugol.nucleo.bibliotecas.objetos.CacheObjetos; import br.univali.portugol.nucleo.bibliotecas.objetos.Objeto; +import br.univali.portugol.nucleo.programa.Programa; +import com.fasterxml.jackson.core.JsonProcessingException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -21,185 +30,456 @@ descricao = "Esta biblioteca contém uma série de funções para criar e trabalhar com objetos", versao = "1.0" ) -public final class Objetos extends Biblioteca -{ +public final class Objetos extends Biblioteca { + + @Override + public void finalizar() throws ErroExecucaoBiblioteca, InterruptedException { + cacheObjetos.liberar(); + } + private final CacheObjetos cacheObjetos; - public Objetos() - { + + public Objetos() { cacheObjetos = CacheObjetos.criar(); } + @DocumentacaoConstante( + descricao = "Constante para definir o tipo inteiro" + ) + public static final int TIPO_INTEIRO = 1; + + @DocumentacaoConstante( + descricao = "Constante para definir o tipo cadeia" + ) + public static final int TIPO_CADEIA = 2; + + @DocumentacaoConstante( + descricao = "Constante para definir o tipo caracter" + ) + public static final int TIPO_CARACTER = 3; + + @DocumentacaoConstante( + descricao = "Constante para definir o tipo real" + ) + public static final int TIPO_REAL = 4; + + @DocumentacaoConstante( + descricao = "Constante para definir o tipo logico" + ) + public static final int TIPO_LOGICO = 5; + @DocumentacaoConstante( + descricao = "Constante para definir o tipo objeto" + ) + public static final int TIPO_OBJETO = 6; + @DocumentacaoConstante( + descricao = "Constante para definir o tipo vetor" + ) + public static final int TIPO_VETOR = 7; + + @DocumentacaoFuncao( + descricao = "Realiza a criação de um objeto a partir de uma cadeia no formato JSON (JavaScript Object Notation)", + parametros + = { + @DocumentacaoParametro(nome = "json", descricao = "texto no formato JSON para criar o objeto") + }, + referencia = "https://pt.wikipedia.org/wiki/JSON", + retorno = "O endereço de memória no qual o objeto foi carregada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public int criar_objeto_via_json(String json) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.criarObjeto(new Objeto(json)); + } + @DocumentacaoFuncao( descricao = "Realiza a criação de um objeto vazio em memória", retorno = "O endereço de memória no qual o objeto foi carregada", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public int criar_objeto() throws ErroExecucaoBiblioteca, InterruptedException - { + public int criar_objeto() throws ErroExecucaoBiblioteca, InterruptedException { return cacheObjetos.criarObjeto(new Objeto()); } @DocumentacaoFuncao( descricao = "Realiza a atribuição de uma propriedade do objeto no endereço informado", - parametros = - { - @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), - @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor alterado"), - @DocumentacaoParametro(nome = "valor", descricao = "o valor que será atribuido para a propriedade"), - }, - autores = - { + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor alterado") + , + @DocumentacaoParametro(nome = "valor", descricao = "o valor que será atribuido para a propriedade"),}, + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public void atribuir_propriedade(int endereco, String propriedade, Object valor) throws ErroExecucaoBiblioteca, InterruptedException - { + public void atribuir_propriedade(int endereco, String propriedade, Object valor) throws ErroExecucaoBiblioteca, InterruptedException { cacheObjetos.obterObjeto(endereco).atribuirPropriedade(propriedade, valor); } @DocumentacaoFuncao( descricao = "Obtém o valor de uma propriedade do tipo inteiro no objeto do endereço informado", - parametros = - { + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"),}, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public int obter_propriedade_tipo_inteiro(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.obterObjeto(endereco).obterPropriedadeInteiro(propriedade); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de uma propriedade do tipo real no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"),}, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public double obter_propriedade_tipo_real(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.obterObjeto(endereco).obterPropriedadeReal(propriedade); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de uma propriedade do tipo logico no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"),}, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public boolean obter_propriedade_tipo_logico(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.obterObjeto(endereco).obterPropriedadeLogico(propriedade); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de uma propriedade do tipo caracter no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"),}, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public char obter_propriedade_tipo_caracter(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.obterObjeto(endereco).obterPropriedadeCaracter(propriedade); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de uma propriedade do tipo cadeia no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"),}, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public String obter_propriedade_tipo_cadeia(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.obterObjeto(endereco).obterPropriedadeCadeia(propriedade); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de uma propriedade do tipo objeto no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"),}, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public int obter_propriedade_tipo_objeto(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + try { + String objetoAninhadoJson + = cacheObjetos.obterObjeto(endereco).obterPropriedadeObjeto(propriedade); + + return cacheObjetos.criarObjeto(new Objeto(objetoAninhadoJson)); + } catch (JsonProcessingException ex) { + throw new ErroExecucaoBiblioteca("Não foi possível obter a propriedade deste objeto."); + } + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de um vetor armazenado no objeto do endereço informado", + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"), + @DocumentacaoParametro(nome = "indice", descricao = "o índice do elemento do vetor que será obtido"), }, retorno = "o valor da propriedade informada", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public int obter_valor_propriedade_tipo_inteiro(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException - { - return cacheObjetos.obterObjeto(endereco).obterPropriedadeInteiro(propriedade); + public int obter_propriedade_em_vetor_tipo_objeto(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca, InterruptedException { + HashMap map = (HashMap) obter_propriedade_em_vetor(endereco, propriedade, indice); + return cacheObjetos.criarObjeto(new Objeto(map)); } @DocumentacaoFuncao( descricao - = "Obtém o valor de uma propriedade do tipo real no objeto do endereço informado", - parametros = - { + = "Obtém o valor de um vetor armazenado no objeto do endereço informado", + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"), + @DocumentacaoParametro(nome = "indice", descricao = "o índice do elemento do vetor que será obtido"), }, retorno = "o valor da propriedade informada", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public double obter_valor_propriedade_tipo_real(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException - { - return cacheObjetos.obterObjeto(endereco).obterPropriedadeReal(propriedade); + public char obter_propriedade_em_vetor_tipo_caracter(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca, InterruptedException { + return ((String) obter_propriedade_em_vetor(endereco, propriedade, indice)).charAt(0); } - + @DocumentacaoFuncao( descricao - = "Obtém o valor de uma propriedade do tipo logico no objeto do endereço informado", - parametros = - { + = "Obtém o valor de um vetor armazenado no objeto do endereço informado", + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"), + @DocumentacaoParametro(nome = "indice", descricao = "o índice do elemento do vetor que será obtido"), }, retorno = "o valor da propriedade informada", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public boolean obter_valor_propriedade_tipo_logico(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException - { - return cacheObjetos.obterObjeto(endereco).obterPropriedadeLogico(propriedade); + public boolean obter_propriedade_em_vetor_tipo_logico(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca, InterruptedException { + return (boolean) obter_propriedade_em_vetor(endereco, propriedade, indice); } @DocumentacaoFuncao( descricao - = "Obtém o valor de uma propriedade do tipo caracter no objeto do endereço informado", - parametros = - { + = "Obtém o valor de um vetor armazenado no objeto do endereço informado", + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"), + @DocumentacaoParametro(nome = "indice", descricao = "o índice do elemento do vetor que será obtido"), }, retorno = "o valor da propriedade informada", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public char obter_valor_propriedade_tipo_caracter(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException - { - return cacheObjetos.obterObjeto(endereco).obterPropriedadeCaracter(propriedade); + public double obter_propriedade_em_vetor_tipo_real(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca, InterruptedException { + return (double) obter_propriedade_em_vetor(endereco, propriedade, indice); } @DocumentacaoFuncao( descricao - = "Obtém o valor de uma propriedade do tipo cadeia no objeto do endereço informado", - parametros = - { + = "Obtém o valor de um vetor armazenado no objeto do endereço informado", + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"), + @DocumentacaoParametro(nome = "indice", descricao = "o índice do elemento do vetor que será obtido"), }, retorno = "o valor da propriedade informada", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public String obter_valor_propriedade_tipo_cadeia(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException - { - return cacheObjetos.obterObjeto(endereco).obterPropriedadeCadeia(propriedade); + public int obter_propriedade_em_vetor_tipo_inteiro(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca, InterruptedException { + return (int) obter_propriedade_em_vetor(endereco, propriedade, indice); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o valor de um vetor armazenado no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido"), + @DocumentacaoParametro(nome = "indice", descricao = "o índice do elemento do vetor que será obtido"), + }, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public String obter_propriedade_em_vetor_tipo_cadeia(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca, InterruptedException { + return (String) obter_propriedade_em_vetor(endereco, propriedade, indice); + } + + @DocumentacaoFuncao( + descricao + = "Obtém o tamanho de um vetor armazenado no objeto do endereço informado", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado"), + @DocumentacaoParametro(nome = "propriedade", descricao = "a descrição da propriedade que terá o valor obtido") + }, + retorno = "o valor da propriedade informada", + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public int obter_tamanho_vetor_propriedade(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return ((ArrayList) cacheObjetos.obterObjeto(endereco).obterPropriedade(propriedade)).size(); } @DocumentacaoFuncao( descricao = "Libera o objeto do endereço informado da memória", - parametros = - { + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") }, - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public void liberar_objeto(int endereco) throws ErroExecucaoBiblioteca, InterruptedException - { + public void liberar_objeto(int endereco) throws ErroExecucaoBiblioteca, InterruptedException { cacheObjetos.liberarObjeto(endereco); } - + @DocumentacaoFuncao( descricao = "Libera todos os objetos previamente armazenados na memória", - autores = - { + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public void liberar() throws ErroExecucaoBiblioteca, InterruptedException - { + public void liberar() throws ErroExecucaoBiblioteca, InterruptedException { cacheObjetos.liberar(); } - + @DocumentacaoFuncao( descricao - = "Obtém o objeto inteiro no formato JSON (JavaScript Object Notation)", - parametros = - { + = "Obtém a cadeia que representa o objeto inteiro no formato JSON (JavaScript Object Notation)", + parametros + = { @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") }, - autores = - { + referencia = "https://pt.wikipedia.org/wiki/JSON", + autores + = { @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") } ) - public String obter_json(int endereco) throws ErroExecucaoBiblioteca, InterruptedException - { - return cacheObjetos.obterObjeto(endereco).obterJson(); + public String obter_json(int endereco) throws ErroExecucaoBiblioteca, InterruptedException { + try { + return cacheObjetos.obterObjeto(endereco).obterJson(); + } catch (JsonProcessingException ex) { + throw new ErroExecucaoBiblioteca("Não foi possível obter o JSON deste objeto."); + } + } + + @DocumentacaoFuncao( + descricao + = "Identifica se o objeto contém ou não a propriedade informada", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "propriedade utilizada para verificação") + }, + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public boolean contem_propriedade(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + return cacheObjetos.obterObjeto(endereco).contemPropriedade(propriedade); + } + + @DocumentacaoFuncao( + descricao + = "Identifica o tipo da propriedade informada", + parametros + = { + @DocumentacaoParametro(nome = "endereco", descricao = "o endereço onde o objeto foi armazenado") + , + @DocumentacaoParametro(nome = "propriedade", descricao = "propriedade utilizada para verificação") + }, + autores + = { + @Autor(nome = "Gabriel Schade", email = "gabrielschade@univali.br") + } + ) + public int tipo_propriedade(int endereco, String propriedade) throws ErroExecucaoBiblioteca, InterruptedException { + int tipo = 0; + Object valor = cacheObjetos.obterObjeto(endereco).obterPropriedade(propriedade); + + if (valor instanceof String) { + if(((String) valor).length() == 1) + tipo = TIPO_CARACTER; + else + tipo = TIPO_CADEIA; + } else if (valor instanceof Integer) { + tipo = TIPO_INTEIRO; + } else if (valor instanceof Double) { + tipo = TIPO_REAL; + } else if (valor instanceof Boolean) { + tipo = TIPO_LOGICO; + }else if (valor instanceof HashMap) { + tipo = TIPO_OBJETO; + }else if(valor instanceof ArrayList){ + tipo = TIPO_VETOR; + } + + return tipo; + } + + private Object obter_propriedade_em_vetor(int endereco, String propriedade, int indice) throws ErroExecucaoBiblioteca{ + ArrayList array = + (ArrayList) cacheObjetos.obterObjeto(endereco).obterPropriedade(propriedade); + return array.get(indice); } } diff --git a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/ServicosWeb.java b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/ServicosWeb.java new file mode 100644 index 000000000..27fdbfb25 --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/ServicosWeb.java @@ -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."); + } + } + + +} diff --git a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/base/GerenciadorBibliotecas.java b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/base/GerenciadorBibliotecas.java index a464ed5dd..f5bc08b45 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/base/GerenciadorBibliotecas.java +++ b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/base/GerenciadorBibliotecas.java @@ -83,7 +83,6 @@ public List listarBibliotecasDisponiveis() bibliotecasDisponiveis.add("Util"); bibliotecasDisponiveis.add("Graficos"); bibliotecasDisponiveis.add("Matematica"); - bibliotecasDisponiveis.add("Objetos"); bibliotecasDisponiveis.add("Teclado"); bibliotecasDisponiveis.add("Texto"); bibliotecasDisponiveis.add("Tipos"); @@ -92,6 +91,8 @@ public List listarBibliotecasDisponiveis() bibliotecasDisponiveis.add("Sons"); bibliotecasDisponiveis.add("Calendario"); bibliotecasDisponiveis.add("Internet"); + bibliotecasDisponiveis.add("Objetos"); + bibliotecasDisponiveis.add("ServicosWeb"); Collections.sort(bibliotecasDisponiveis); } diff --git a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/objetos/Objeto.java b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/objetos/Objeto.java index b5a249173..2f12046e3 100644 --- a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/objetos/Objeto.java +++ b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/objetos/Objeto.java @@ -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; + /** * @@ -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>(){}); + }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); } @@ -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); + } + } diff --git a/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/web/RestClient.java b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/web/RestClient.java new file mode 100644 index 000000000..7c522c135 --- /dev/null +++ b/core/src/main/java/br/univali/portugol/nucleo/bibliotecas/web/RestClient.java @@ -0,0 +1,145 @@ +/* + * 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.web; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +/** + * + * @author Gabriel Schade + */ +public class RestClient { + + + private static HttpURLConnection conexaoEmCache = null; + private static String parametroJsonEmCache = ""; + + private static HttpURLConnection criarConexao(String endereco) + throws MalformedURLException, IOException{ + URL url = new URL(endereco); + + HttpURLConnection conexao = (HttpURLConnection) url.openConnection(); + conexao.setRequestProperty("Accept", "application/json"); + conexao.setRequestProperty("Content-Type", "application/json"); + conexao.setDoOutput(true); + return conexao; + } + + private static String retornarErroHttp(int codigoHttp ){ + return "Requisição falhou: código HTTP: " + codigoHttp; + } + + private static String obterConteudoHttp(HttpURLConnection conexao) throws IOException{ + BufferedReader reader = + new BufferedReader(new InputStreamReader(conexao.getInputStream())); + + StringBuilder resposta = new StringBuilder(); + String linha; + while ((linha = reader.readLine()) != null) + resposta.append(linha); + + return resposta.toString(); + } + +private static String execucaoInternaChamadaServico(HttpURLConnection conexao, String metodo,String json) throws IOException + { + int codigoHttp; + String retorno; + try { + conexao.setRequestMethod(metodo); + conexao = json.equals("")? + conexao + :incluirParametrosNaRequisicao(conexao, json); + + codigoHttp = conexao.getResponseCode(); + retorno = codigoHttp == 200 ? + obterConteudoHttp(conexao) + : retornarErroHttp(codigoHttp); + + } catch (IOException e) { + throw e; + }finally{ + if(conexao != null) + conexao.disconnect(); + } + return retorno; + } + + public static HttpURLConnection incluirCabecalhoNaRequisicao(HttpURLConnection conexao, String chave, String valor){ + conexao.addRequestProperty(chave, valor); + return conexao; + } + + private static HttpURLConnection incluirParametrosNaRequisicao(HttpURLConnection conexao, String json) throws IOException + { + OutputStream outputStream = conexao.getOutputStream(); + outputStream.write(json.getBytes()); + outputStream.flush(); + + return conexao; + } + + + + public static String get(String endereco) throws IOException{ + return get(criarConexao(endereco)); + } + + public static String post(String endereco, String objeto) throws IOException{ + return post(criarConexao(endereco),objeto); + } + + public static String put(String endereco, String objeto) throws IOException{ + return put(criarConexao(endereco), objeto); + } + + public static String delete(String endereco) throws IOException{ + return delete(criarConexao(endereco)); + } + + public static String get(HttpURLConnection conexao) throws IOException{ + return execucaoInternaChamadaServico(conexao,"GET", ""); + } + + public static String post(HttpURLConnection conexao) throws IOException{ + return execucaoInternaChamadaServico(conexao,"POST", parametroJsonEmCache); + } + + public static String post(HttpURLConnection conexao, String objeto) throws IOException{ + return execucaoInternaChamadaServico(conexao,"POST", objeto); + } + + public static String put(HttpURLConnection conexao) throws IOException{ + return execucaoInternaChamadaServico(conexao,"PUT", parametroJsonEmCache); + } + + public static String put(HttpURLConnection conexao, String objeto) throws IOException{ + return execucaoInternaChamadaServico(conexao,"PUT", objeto); + } + + public static String delete(HttpURLConnection conexao) throws IOException{ + return execucaoInternaChamadaServico(conexao,"DELETE",""); + } + + public static void abrirConexao(String endereco) throws IOException{ + conexaoEmCache = criarConexao(endereco); + } + + public static HttpURLConnection obterConexaoEmCache(){ + return conexaoEmCache; + } + + public static void adicionarParametroNaConexao(String objeto){ + parametroJsonEmCache = objeto; + } + +} diff --git a/ide/.jpg b/ide/.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8e02db8e927e13a6557dc41de7c4fdce795aae0 GIT binary patch literal 27150 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 literal 0 HcmV?d00001 diff --git a/ide/.png b/ide/.png new file mode 100644 index 0000000000000000000000000000000000000000..6a2e300f019b0f407d594107dc71c5e3869d560e GIT binary patch literal 72522 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 z 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

ke()k0oePyu>i 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