com.miki.webapp.webservicerestful.MikiWsObjectTools.java Source code

Java tutorial

Introduction

Here is the source code for com.miki.webapp.webservicerestful.MikiWsObjectTools.java

Source

/*
 * 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 com.miki.webapp.webservicerestful;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.ParameterizedType;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.OutputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Arrays;

/**
 *
 * @author Mikel
 * @param <T> constructeur : new MikiWsTools&lt;&gt;(T.class);
 */
public class MikiWsObjectTools<T extends Object> {

    private final Class<T> type;

    public MikiWsObjectTools() {
        ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
        this.type = (Class<T>) genericSuperclass.getActualTypeArguments()[0];
    }

    public MikiWsObjectTools(Class<T> type) {
        this.type = type;
    }

    /**
     * Cette methode permet de retourner une liste d'objet (type d'objet pass en parametre  la classe) resultants de l'url pass en parametre
     * @param urlWebservice url du webservice (pas besoin de paramtre path)
     * @return liste de l'objet pass en parametre au constructeur de la classe
     * MikiWsTools ou null s'il ya erreur
     */
    public List<T> ListeObjetFromUrl(String urlWebservice) {
        final Gson gson = new GsonBuilder().create();
        final List<T> values = new ArrayList<T>();
        try {

            URL url = new URL(urlWebservice);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");

            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Erreur -> HTTP code : " + conn.getResponseCode());
            }

            BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

            String output;
            String output2 = "";
            while ((output = br.readLine()) != null) {
                output2 += output;
            }

            final JsonReader jsonReader = new JsonReader(new StringReader(output2));
            final JsonParser jsonParser = new JsonParser();
            final JsonArray jsonArray = jsonParser.parse(jsonReader).getAsJsonArray();

            for (final JsonElement element : jsonArray) {
                final T value = gson.fromJson(element, type);
                values.add(value);
            }

            jsonReader.close();

            conn.disconnect();

            return values;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;

        } catch (RuntimeException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Cette methode permet de retourner une liste d'objet (type d'objet pass en parametre  la classe) resultants du json pass en paramtre
     * @param json String contenant le json pass en paramtre(le json en question doit renferm une liste de l'objet)
     * @return liste de l'objet pass en parametre au constructeur de la classe
     * MikiWsTools ou null s'il ya erreur
     */
    public List<T> ListeObjet(String json) {
        final Gson gson = new GsonBuilder().create();
        final List<T> values = new ArrayList<T>();
        try {

            final JsonReader jsonReader = new JsonReader(new StringReader(json));
            final JsonParser jsonParser = new JsonParser();
            final JsonArray jsonArray = jsonParser.parse(jsonReader).getAsJsonArray();

            for (final JsonElement element : jsonArray) {
                final T value = gson.fromJson(element, type);
                values.add(value);
            }

            jsonReader.close();

            return values;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Cette methode permet de retourner un objet (type d'objet pass en parametre  la classe) resultant de l'url pass en parametre
     * @param urlWebservice url du webservice (paramtre path obligatoire)
     * @return un objet (type d'objet pass en parametre  la classe) ou null s'il ya erreur
     */
    public T getObjetFromUrl(String urlWebservice) {
        final Gson gson = new GsonBuilder().create();
        try {

            URL url = new URL(urlWebservice);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");

            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Erreur -> HTTP code :" + conn.getResponseCode());
            }

            BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));

            String output;
            String output2 = "";
            while ((output = br.readLine()) != null) {
                output2 += output;
            }

            conn.disconnect();

            final T value = gson.fromJson(output2, type);
            return value;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;

        } catch (RuntimeException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Cette methode permet de retourner un objet (type d'objet pass en parametre  la classe) resultant du json pass en paramtre
     * @param json String contenant le json pass en paramtre(le json en question doit renferm un seul objet)
     * @return un objet (type d'objet pass en parametre  la classe) ou null s'il ya erreur
     */
    public T getObjet(String json) {
        final Gson gson = new GsonBuilder().create();
        try {
            final T value = gson.fromJson(json, type);
            return value;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     *Cette methode permet d'ajouter un objet(type d'objet pass en parametre  la classe)  l'url pass en parametre
     * @param urlWebservice url du webservice (pas besoin de paramtre path)
     * @param value objet  ajouter
     * @return true si l'opration est un succs ou false sinon
     */
    public boolean ajouterObjet(String urlWebservice, T value) {
        final Gson gson = new GsonBuilder().create();
        try {

            URL url = new URL(urlWebservice);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "application/json");

            String input = gson.toJson(value);

            OutputStream os = conn.getOutputStream();
            os.write(input.getBytes());
            os.flush();

            if (conn.getResponseCode() != HttpURLConnection.HTTP_NO_CONTENT) {
                throw new RuntimeException("Erreur -> HTTP code :" + conn.getResponseCode());
            } else {
                System.out.println("Ajout de l'objet ffectu avec succs !");
            }

            conn.disconnect();
            return true;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return false;

        } catch (RuntimeException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

    }

    /**
     * Cette methode permet de modifier un objet(type d'objet pass en parametre  la classe)  l'url pass en parametre
     * @param urlWebservice url du webservice (paramtre path obligatoire)
     * @param value objet  modifier
     * @return true si l'opration est un succs ou false sinon
     */
    public boolean modifierObjet(String urlWebservice, T value) {
        final Gson gson = new GsonBuilder().create();
        try {

            URL url = new URL(urlWebservice);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("PUT");
            conn.setRequestProperty("Content-Type", "application/json");

            String input = gson.toJson(value);

            OutputStream os = conn.getOutputStream();
            os.write(input.getBytes());
            os.flush();

            if (conn.getResponseCode() != HttpURLConnection.HTTP_NO_CONTENT) {
                throw new RuntimeException("Erreur -> HTTP code :" + conn.getResponseCode());
            } else {
                System.out.println("Modification de l'objet ffectue avec succs !");
            }

            conn.disconnect();
            return true;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return false;

        } catch (RuntimeException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;

        }

    }

    /**
     * Cette methode permet de supprimer un objet(type d'objet pass en parametre  la classe)  l'url pass en parametre
     * @param urlWebservice url du webservice (paramtre path obligatoire)
     * @return true si l'opration est un succs ou false sinon
     */
    public boolean supprimerObjet(String urlWebservice) {
        try {

            URL url = new URL(urlWebservice);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("DELETE");

            if (conn.getResponseCode() != HttpURLConnection.HTTP_NO_CONTENT) {
                throw new RuntimeException("Erreur -> HTTP code :" + conn.getResponseCode());
            } else {
                System.out.println("Suppression de l'objet ffectue avec succs !");
            }

            conn.disconnect();
            return true;
        } catch (MalformedURLException e) {
            e.printStackTrace();
            return false;

        } catch (RuntimeException e) {
            e.printStackTrace();
            return false;
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }

    }

    /**
     * Cette methode permet de transformer en format Json l'objet pass en parametre
     * @param value objet  transformer en Json
     * @return l'objet sous son format Json
     */
    public String toJson(T value) {
        final Gson gson = new GsonBuilder().create();
        return gson.toJson(value);
    }

    /**
     * Cette methode permet de transformer en format Json une liste d'objet pass en paramtre
     * @param valueListe liste d'objet  transformer en Json
     * @return la liste sous format Json
     */
    public String toJsonListeObjet(List<T> valueListe) {
        final Gson gson = new GsonBuilder().create();
        try {
            if (!valueListe.isEmpty()) {
                final StringWriter stringWriter = new StringWriter();
                final JsonWriter jsonWriter = new JsonWriter(stringWriter);
                jsonWriter.beginArray();
                for (T val : valueListe) {
                    if (val != null) {
                        gson.toJson(val, type, jsonWriter);
                    } else {
                        jsonWriter.nullValue();
                    }
                }
                jsonWriter.endArray();
                jsonWriter.close();
                return stringWriter.toString();
            } else {
                return null;
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}