bean.EJBean.java Source code

Java tutorial

Introduction

Here is the source code for bean.EJBean.java

Source

/**
 * Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved.
 *
 * You may not modify, use, reproduce, or distribute this software except in
 * compliance with  the terms of the License at:
 * http://java.net/projects/javaeetutorial/pages/BerkeleyLicense
 */
package bean;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;

import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataOutput;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;

import entity.Coordenada;
import entity.Edificio;
import entity.Espacio;
import entity.Imagen;
import entity.Panorama;
import entity.Plano;
import entity.PlanoPK;
import entity.Profesor;
import entity.Usuario;

@Stateless
public class EJBean {
    protected Client client;
    protected String baseURI = "http://localhost:8080/servidor/rest/v0";

    // String pathPano = "D:\\test\\panoramas\\";
    // String pathPlano = "D:\\test\\planos\\";
    String pathPano = "D:\\wamp64\\www\\panoramas\\";
    String pathPlano = "D:\\wamp64\\www\\planos\\";

    @Inject
    private UserMB userMB;

    public List<Usuario> getListaUsuarios() {

        client = ClientBuilder.newClient();

        String usuarios = client.target(baseURI).path("usuarios").request(MediaType.APPLICATION_JSON)
                .get(String.class);

        client.close();

        // System.out.println("METHOD2 "+usuarios);

        Type listType = new TypeToken<List<Usuario>>() {
        }.getType();
        List<Usuario> jsonToUsuarioList = new Gson().fromJson(usuarios, listType);

        return jsonToUsuarioList;

    }

    public List<String> getNombresUsuarios() {

        client = ClientBuilder.newClient();

        String usuarios = client.target(baseURI).path("usuarios").path("nombres")
                .request(MediaType.APPLICATION_JSON).get(String.class);

        client.close();

        // System.out.println("METHOD2 "+usuarios);

        Type listType = new TypeToken<List<String>>() {
        }.getType();
        List<String> jsonToUsuarioList = new Gson().fromJson(usuarios, listType);

        return jsonToUsuarioList;

    }

    public Usuario checkCuenta(String uuid) {
        client = ClientBuilder.newClient();

        String usuarios = client.target(baseURI).path("usuarios").path("uuid").path(uuid)
                .request(MediaType.APPLICATION_JSON)

                .get(String.class);
        client.close();

        // System.out.println("get Usuario: "+usuarios);
        Usuario jsonToUsuario = new Gson().fromJson(usuarios, Usuario.class);

        return jsonToUsuario;

    }

    public Usuario getUsuario(String id) {

        client = ClientBuilder.newClient();

        String usuarios = client.target(baseURI).path("usuarios").path(id).request(MediaType.APPLICATION_JSON)

                .get(String.class);
        client.close();

        // System.out.println("get Usuario: "+usuarios);
        Usuario jsonToUsuario = new Gson().fromJson(usuarios, Usuario.class);

        return jsonToUsuario;

    }

    public String getUsuariosSize() {
        client = ClientBuilder.newClient();

        String usuarios = client.target(baseURI).path("usuarios").path("count").request(MediaType.APPLICATION_JSON)

                .get(String.class);
        client.close();

        return usuarios;
    }

    public void removeUsuario(String id) {

        client = ClientBuilder.newClient();
        Response response = client.target(baseURI).path("usuarios").path(id).request(MediaType.APPLICATION_JSON)
                .delete();
        client.close();

    }

    public void createUsuario(Usuario u) {
        final Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
        final String gson = prettyGson.toJson(u);

        // System.out.println(gson);

        client = ClientBuilder.newClient();
        Response response = client.target(baseURI).path("usuarios").request(MediaType.APPLICATION_JSON)
                .post(Entity.entity(gson, MediaType.APPLICATION_JSON), Response.class);
        client.close();
    }

    public void updateUsuario(Usuario u) {

        String gson = new Gson().toJson(u);

        client = ClientBuilder.newClient();
        Response response = client.target(baseURI).path("usuarios").path(u.getUsuario())
                .request(MediaType.APPLICATION_JSON)
                .put(Entity.entity(gson, MediaType.APPLICATION_JSON), Response.class);
        client.close();

    }

    public List<String> getNombresEdificios() {
        client = ClientBuilder.newClient();
        String edificios = client.target(baseURI).path("edificios").path("nombres")
                .request(MediaType.APPLICATION_JSON).get(String.class);
        client.close();

        Type listType = new TypeToken<List<String>>() {
        }.getType();
        List<String> jsonToEspacioList = new Gson().fromJson(edificios, listType);

        return jsonToEspacioList;
    }

    public List<Edificio> getListaEdificios() {

        client = ClientBuilder.newClient();
        String edificios = client.target(baseURI).path("edificios").request(MediaType.APPLICATION_JSON)
                .get(String.class);
        client.close();

        Type listType = new TypeToken<List<Edificio>>() {
        }.getType();
        List<Edificio> jsonToEdificioList = new Gson().fromJson(edificios, listType);

        return jsonToEdificioList;
    }

    public List<Edificio> getListaEdificiosEditor(String id) {
        System.out.println("EJB Bean: " + userMB.isUserAdmin());
        client = ClientBuilder.newClient();
        String edificios = client.target(baseURI).path("usuarios").path(id).path("edificios")
                .request(MediaType.APPLICATION_JSON).get(String.class);
        client.close();

        Type listType = new TypeToken<List<Edificio>>() {
        }.getType();
        List<Edificio> jsonToEdificioList = new Gson().fromJson(edificios, listType);

        return jsonToEdificioList;
    }

    public String getEdificioSize() {
        client = ClientBuilder.newClient();

        String edificios = client.target(baseURI).path("edificios").path("count")
                .request(MediaType.APPLICATION_JSON)

                .get(String.class);
        client.close();

        return edificios;
    }

    public Edificio getEdificio(String id) {

        client = ClientBuilder.newClient();
        String edificio = client.target(baseURI).path("edificios").path(id).request(MediaType.APPLICATION_JSON)
                .get(String.class);
        client.close();

        /// Deserializar///

        GsonBuilder gsonBuilder = new GsonBuilder();

        JsonDeserializer<Edificio> deserializer = new JsonDeserializer<Edificio>() {

            @Override
            public Edificio deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                    throws JsonParseException {
                JsonObject jsonObject = json.getAsJsonObject();

                Edificio e = new Edificio();

                e.setIdedificio(jsonObject.get("idedificio").getAsString());

                if (jsonObject.has("nombreen")) {
                    e.setNombreen(jsonObject.get("nombreen").getAsString());
                }
                if (jsonObject.has("nombrevl")) {
                    e.setNombrevl(jsonObject.get("nombrevl").getAsString());
                }
                if (jsonObject.has("nombrees")) {
                    e.setNombrees(jsonObject.get("nombrees").getAsString());
                }
                if (jsonObject.has("direccion")) {
                    e.setDireccion(jsonObject.get("direccion").getAsString());
                }
                if (jsonObject.has("telefono")) {
                    e.setTelefono(jsonObject.get("telefono").getAsString());
                }
                if (jsonObject.has("enlace")) {
                    e.setEnlace(jsonObject.get("enlace").getAsString());
                }
                e.setXano(jsonObject.get("xano").getAsString());
                e.setTopleft(jsonObject.get("topleft").getAsString());
                e.setTopright(jsonObject.get("topright").getAsString());
                e.setBottomleft(jsonObject.get("bottomleft").getAsString());

                // System.out.println("Deserializer: Edi Obj: "+e.toString());

                List<Usuario> lu = new ArrayList<Usuario>();
                JsonArray usuariosArray = jsonObject.getAsJsonArray("usuarios");
                for (JsonElement usuario : usuariosArray) {
                    Usuario u = new Usuario();
                    JsonObject usuarioObj = usuario.getAsJsonObject();
                    u.setUsuario(usuarioObj.get("usuario").getAsString());
                    lu.add(u);
                }
                // System.out.println("Deserializer: usu Obj: "+e.toString());

                e.setUsuarios(lu);
                // System.out.println("Deserializer: usu Obj: " + e.getUsuarios().size());
                List<Plano> lp = new ArrayList<Plano>();
                JsonArray planoArray = jsonObject.getAsJsonArray("planos");
                for (JsonElement plano : planoArray) {
                    Plano p = new Plano();
                    PlanoPK pk = new PlanoPK();
                    JsonObject planoObj = plano.getAsJsonObject();
                    pk.setIdedificio(e.getIdedificio());
                    pk.setIdplano(planoObj.get("idplano").getAsString());
                    p.setId(pk);
                    p.setEnlace(planoObj.get("enlace").getAsString());
                    p.setNivel(planoObj.get("nivel").getAsInt());
                    Edificio edAux = new Edificio();
                    edAux.setIdedificio(edAux.getIdedificio());
                    p.setEdificio(edAux);

                    lp.add(p);
                }

                e.setPlanos(lp);

                JsonObject coordenadaObj = jsonObject.getAsJsonObject("coordenada");
                Coordenada coordenada = new Coordenada();
                coordenada.setIdcoordenada(coordenadaObj.get("idcoordenada").getAsString());
                coordenada.setDescripcion(coordenadaObj.get("idcoordenada").getAsString());
                coordenada.setLatitud(coordenadaObj.get("latitud").getAsDouble());
                coordenada.setLongitud(coordenadaObj.get("longitud").getAsDouble());

                e.setCoordenada(coordenada);

                return e;
            }

        };
        gsonBuilder.registerTypeAdapter(Edificio.class, deserializer);

        System.out.println("GSON" + edificio);

        Gson customGson = gsonBuilder.create();
        Edificio jsonToEdificio = customGson.fromJson(edificio, Edificio.class);
        System.out.print("Size users EJB: " + jsonToEdificio.getUsuarios().size());

        return jsonToEdificio;
    }

    public void removeEdificio(String id) {
        System.out.println("REMOVE Ed");
        client = ClientBuilder.newClient();

        Response response = client.target(baseURI).path("edificios").path(id).request(MediaType.APPLICATION_JSON)
                .delete();

        client.close();
    }

    public void removeEspacio(String id) {
        System.out.println("REMOVE Espacio");
        client = ClientBuilder.newClient();

        Response response = client.target(baseURI).path("espacios").path(id).request(MediaType.APPLICATION_JSON)
                .delete();

        client.close();
    }

    public Response createEdificio(List<Imagen> planos, String path, String gson) throws IOException {
        MultipartFormDataOutput formData = new MultipartFormDataOutput();
        String ruta = path;
        int index = 0;
        for (Imagen plano : planos) {
            FileInputStream file = new FileInputStream(new File(ruta + plano.getNombre() + plano.getExtension()));
            System.out.println("rutaArchivo: " + ruta + plano.getNombre() + plano.getExtension());
            formData.addFormData("file" + (index++), file, MediaType.APPLICATION_SVG_XML_TYPE,
                    plano.getNombre() + plano.getExtension());
        }
        formData.addFormData("json", gson, MediaType.APPLICATION_JSON_TYPE, "edificio.json");

        client = ClientBuilder.newClient();
        Response response = client.target(baseURI).path("edificios").request(MediaType.MULTIPART_FORM_DATA)
                .post(Entity.entity(formData, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class);
        client.close();

        System.out.println("UploadFile EJBEAN Fin");

        return response;

    }

    public Response createEspacio(List<Imagen> panos, String path, String gson) throws IOException {
        MultipartFormDataOutput formData = new MultipartFormDataOutput();

        String ruta = path;
        int index = 0;
        for (Imagen pano : panos) {
            FileInputStream file = new FileInputStream(new File(ruta + pano.getNombre() + pano.getExtension()));
            System.out.println("rutaArchivo: " + ruta + pano.getNombre() + pano.getExtension());
            formData.addFormData("file" + (index++), file, new MediaType("image", "png"),
                    pano.getNombre() + pano.getExtension());
        }

        formData.addFormData("json", gson, MediaType.APPLICATION_JSON_TYPE, "espacios.json");

        client = ClientBuilder.newClient();

        Response response = client.target(baseURI).path("espacios")

                .request(MediaType.MULTIPART_FORM_DATA)
                .post(Entity.entity(formData, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class);
        client.close();

        System.out.println("UploadFile EJBEAN Fin");

        return response;
    }

    public Response createPlano(MultipartFormDataInput multipartFormDataInput) {
        MultivaluedMap<String, String> multivaluedMap = null;
        String fileName = null;
        InputStream inputStream = null;
        String uploadFilePath = null;

        try {
            Map<String, List<InputPart>> map = multipartFormDataInput.getFormDataMap();
            List<InputPart> lstInputPart = map.get("uploadedFile");

            for (InputPart inputPart : lstInputPart) {

                // get filename to be uploaded
                multivaluedMap = inputPart.getHeaders();
                fileName = getFileName(multivaluedMap);

                if (null != fileName && !"".equalsIgnoreCase(fileName)) {

                    // write & upload file to UPLOAD_FILE_SERVER
                    inputStream = inputPart.getBody(InputStream.class, null);
                    // uploadFilePath = writeToFileServer(inputStream, fileName);

                    // close the stream
                    inputStream.close();
                }
            }
        } catch (IOException ioe) {
            ioe.printStackTrace();
        } finally {
            // release resources, if any
        }
        return Response.ok("File uploaded successfully at " + uploadFilePath).build();
    }

    private String getFileName(MultivaluedMap<String, String> multivaluedMap) {

        String[] contentDisposition = multivaluedMap.getFirst("Content-Disposition").split(";");

        for (String filename : contentDisposition) {

            if ((filename.trim().startsWith("filename"))) {
                String[] name = filename.split("=");
                String exactFileName = name[1].trim().replaceAll("\"", "");
                return exactFileName;
            }
        }
        return "UnknownFile";
    }

    public Response updateEdificio(List<Imagen> planos, String path, String gson) throws IOException {
        System.out.println("updateEdificio EJBean");

        MultipartFormDataOutput formData = new MultipartFormDataOutput();

        String ruta = path;

        int index = 0;
        for (Imagen plano : planos) {
            FileInputStream file = new FileInputStream(new File(ruta + plano.getNombre() + plano.getExtension()));
            System.out.println("rutaArchivo: " + ruta + plano.getNombre() + plano.getExtension());
            formData.addFormData("file" + (index++), file, MediaType.APPLICATION_SVG_XML_TYPE,
                    plano.getNombre() + plano.getExtension());
        }

        formData.addFormData("json", gson, MediaType.APPLICATION_JSON_TYPE, "edificio.json");

        client = ClientBuilder.newClient();

        Response response = client.target(baseURI).path("edificios")

                .request(MediaType.MULTIPART_FORM_DATA)
                .post(Entity.entity(formData, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class);
        client.close();

        System.out.println("UploadFile EJBEAN Fin");

        return response;

    }

    public Response updateEspacio(List<Imagen> panos, String path, String gson) throws IOException {
        System.out.println("updateEspacio EJBean");
        MultipartFormDataOutput formData = new MultipartFormDataOutput();

        String ruta = path;
        int index = 0;
        for (Imagen pano : panos) {
            FileInputStream file = new FileInputStream(new File(ruta + pano.getNombre() + pano.getExtension()));
            System.out.println("rutaArchivo: " + ruta + pano.getNombre() + pano.getExtension());
            formData.addFormData("file" + (index++), file, new MediaType("image", "png"),
                    pano.getNombre() + pano.getExtension());
        }

        formData.addFormData("json", gson, MediaType.APPLICATION_JSON_TYPE, "espacios.json");

        client = ClientBuilder.newClient();

        Response response = client.target(baseURI).path("espacios").request(MediaType.MULTIPART_FORM_DATA)
                .post(Entity.entity(formData, MediaType.MULTIPART_FORM_DATA_TYPE), Response.class);
        client.close();

        System.out.println("UPdateEspacio EJBEAN Fin");

        return response;
    }

    public List<Espacio> getListaEspacios() {

        client = ClientBuilder.newClient();
        String espacios = client.target(baseURI).path("espacios").request(MediaType.APPLICATION_JSON)
                .get(String.class);
        client.close();

        Type listType = new TypeToken<List<Espacio>>() {
        }.getType();
        List<Espacio> jsonToEspacioList = new Gson().fromJson(espacios, listType);

        return jsonToEspacioList;
    }

    public Espacio getEspacio(String id) {
        client = ClientBuilder.newClient();
        String espacio = client.target(baseURI).path("espacios").path(id).request(MediaType.APPLICATION_JSON)
                .get(String.class);
        client.close();

        /// Deserializar///

        //      System.out.println(espacio);

        GsonBuilder gsonBuilder = new GsonBuilder();

        JsonDeserializer<Espacio> deserializer = new JsonDeserializer<Espacio>() {

            @Override
            public Espacio deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                    throws JsonParseException {
                JsonObject jsonObject = json.getAsJsonObject();

                Espacio e = new Espacio();

                e.setIdespacio(jsonObject.get("idespacio").getAsString());

                if (jsonObject.has("nombreen")) {
                    e.setNombreen(jsonObject.get("nombreen").getAsString());
                }
                if (jsonObject.has("nombrevl")) {
                    e.setNombrevl(jsonObject.get("nombrevl").getAsString());
                }
                if (jsonObject.has("nombrees")) {
                    e.setNombrees(jsonObject.get("nombrees").getAsString());
                }
                if (jsonObject.has("bloque")) {
                    e.setBloque(jsonObject.get("bloque").getAsString());
                }
                if (jsonObject.has("piso")) {
                    e.setPiso(jsonObject.get("piso").getAsInt());
                }
                if (jsonObject.has("tipo")) {
                    e.setTipo(jsonObject.get("tipo").getAsString());
                }
                e.setVisibilidad(jsonObject.get("visibilidad").getAsBoolean());
                if (jsonObject.has("boundingbox")) {
                    e.setBoundingbox(jsonObject.get("boundingbox").getAsString());
                }

                // System.out.println("Deserializer: Edi Obj: "+e.toString());
                JsonObject edificioObj = jsonObject.getAsJsonObject("edificio");
                Edificio edificio = new Edificio();
                edificio.setIdedificio(edificioObj.get("idedificio").getAsString());

                e.setEdificio(edificio);

                List<Panorama> lp = new ArrayList<Panorama>();
                JsonArray panoArray = jsonObject.getAsJsonArray("panoramas");
                for (JsonElement pano : panoArray) {
                    Panorama p = new Panorama();
                    JsonObject panoObj = pano.getAsJsonObject();
                    p.setIdpanorama(panoObj.get("idpanorama").getAsString());
                    p.setEnlace(panoObj.get("enlace").getAsString());
                    lp.add(p);
                }

                e.setPanoramas(lp);

                JsonObject coordenadaObj = jsonObject.getAsJsonObject("coordenada");
                Coordenada coordenada = new Coordenada();
                coordenada.setIdcoordenada(coordenadaObj.get("idcoordenada").getAsString());
                coordenada.setDescripcion(coordenadaObj.get("idcoordenada").getAsString());
                coordenada.setLatitud(coordenadaObj.get("latitud").getAsDouble());
                coordenada.setLongitud(coordenadaObj.get("longitud").getAsDouble());

                e.setCoordenada(coordenada);

                if (jsonObject.has("profesores")) {
                    List<Profesor> lprof = new ArrayList<Profesor>();
                    JsonArray profArray = jsonObject.getAsJsonArray("profesores");
                    for (JsonElement prof : profArray) {
                        Profesor p = new Profesor();
                        JsonObject profObj = prof.getAsJsonObject();
                        p.setIdprofesor(profObj.get("idprofesor").getAsString());
                        p.setUsuario(profObj.get("usuario").getAsString());
                        p.setVisibilidad(profObj.get("visibilidad").getAsBoolean());

                        lprof.add(p);
                    }

                    e.setProfesores(lprof);
                }

                return e;
            }

        };
        gsonBuilder.registerTypeAdapter(Espacio.class, deserializer);

        // System.out.println("GSON"+espacio);

        Gson customGson = gsonBuilder.create();
        Espacio jsonToEspacio = customGson.fromJson(espacio, Espacio.class);

        return jsonToEspacio;
    }

    public List<String> getNombresEspacios() {
        client = ClientBuilder.newClient();
        String espacios = client.target(baseURI).path("espacios").path("nombres")
                .request(MediaType.APPLICATION_JSON).get(String.class);
        client.close();

        System.out.println("GSON " + espacios);

        Type listType = new TypeToken<List<String>>() {
        }.getType();
        List<String> jsonToEspacioList = new Gson().fromJson(espacios, listType);

        return jsonToEspacioList;
    }

    public List<Espacio> getEspaciosFromEdificio(String id) {

        client = ClientBuilder.newClient();
        String espaciosJSON = client.target(baseURI).path("edificios").path(id).path("espacios")
                .request(MediaType.APPLICATION_JSON).get(String.class);
        client.close();

        GsonBuilder gsonBuilder = new GsonBuilder();

        JsonDeserializer<Espacio> deserializer = new JsonDeserializer<Espacio>() {

            @Override
            public Espacio deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
                JsonObject jsonObject = json.getAsJsonObject();

                Espacio e = new Espacio();

                // System.out.println("HOLA "+jsonObject.get("bloque").getAsString());

                e.setIdespacio(jsonObject.get("idespacio").getAsString());
                e.setNombrees(jsonObject.get("nombrees").getAsString());
                // e.setNombreen(jsonObject.get("nombreen").getAsString());
                // e.setNombrevl(jsonObject.get("nombrevl").getAsString());
                e.setBloque(jsonObject.get("bloque").getAsString());
                e.setBoundingbox(jsonObject.get("boundingbox").getAsString());
                e.setPiso(jsonObject.get("piso").getAsInt());
                e.setTipo(jsonObject.get("tipo").getAsString());
                e.setVisibilidad(jsonObject.get("visibilidad").getAsBoolean());

                JsonObject coordenadaObj = jsonObject.getAsJsonObject("coordenada");
                Coordenada coordenada = new Coordenada();
                coordenada.setIdcoordenada(coordenadaObj.get("idcoordenada").getAsString());
                coordenada.setDescripcion(coordenadaObj.get("idcoordenada").getAsString());
                coordenada.setLatitud(coordenadaObj.get("latitud").getAsDouble());
                coordenada.setLongitud(coordenadaObj.get("longitud").getAsDouble());
                e.setCoordenada(coordenada);

                JsonObject edificioObj = jsonObject.getAsJsonObject("edificio");
                Edificio edificio = new Edificio();
                edificio.setIdedificio(edificioObj.get("idedificio").getAsString());
                /*
                 * edificio.setNombrees(edificioObj.get("nombrees").getAsString());
                 * edificio.setNombreen(edificioObj.get("nombreen").getAsString());
                 * edificio.setNombrevl(edificioObj.get("nombrevl").getAsString());
                 * edificio.setEnlace(edificioObj.get("enlace").getAsString());
                 * edificio.setXano(edificioObj.get("xano").getAsString());
                 * edificio.setTopleft(edificioObj.get("topleft").getAsString());
                 * edificio.setTopright(edificioObj.get("topright").getAsString());
                 * edificio.setBottomleft(edificioObj.get("bottomleft").getAsString());
                 */
                e.setEdificio(edificio);

                List<Panorama> lu = new ArrayList<Panorama>();
                JsonArray panoramaArray = jsonObject.getAsJsonArray("panoramas");
                for (JsonElement panorama : panoramaArray) {
                    Panorama p = new Panorama();

                    JsonObject panoramaObj = panorama.getAsJsonObject();

                    p.setIdpanorama(panoramaObj.get("idpanorama").getAsString());
                    p.setEnlace(panoramaObj.get("enlace").getAsString());
                    if (panoramaObj.has("panorama")) {
                        p.setPanorama(panoramaObj.get("panorama").getAsInt());
                    }

                    lu.add(p);
                }

                e.setPanoramas(lu);

                List<Profesor> lp = new ArrayList<Profesor>();
                if (jsonObject.has("profesores")) {
                    JsonArray profesorArray = jsonObject.getAsJsonArray("profesores");
                    for (JsonElement profesor : profesorArray) {
                        Profesor p = new Profesor();

                        JsonObject profesorObj = profesor.getAsJsonObject();
                        p.setIdprofesor(profesorObj.get("idprofesor").getAsString());
                        p.setUsuario(profesorObj.get("usuario").getAsString());
                        p.setVisibilidad(profesorObj.get("visibilidad").getAsBoolean());
                        lp.add(p);
                    }
                }
                e.setProfesores(lp);

                return e;
            }

        };
        gsonBuilder.registerTypeAdapter(Espacio.class, deserializer);

        Type listType = new TypeToken<List<Espacio>>() {
        }.getType();

        Gson customGson = gsonBuilder.create();
        List<Espacio> jsonToEspacios = customGson.fromJson(espaciosJSON, listType);

        // System.out.println("Success Espacio: "+ jsonToEspacios.size());

        return jsonToEspacios;

    }

    public List<Profesor> getListaProfesores() {

        // System.out.println("EJB prof: ");
        client = ClientBuilder.newClient();
        String profesores = client.target(baseURI).path("profesores").request(MediaType.APPLICATION_JSON)
                .get(String.class);
        client.close();

        Type listType = new TypeToken<List<Profesor>>() {
        }.getType();
        List<Profesor> jsonToProfesorList = new Gson().fromJson(profesores, listType);

        return jsonToProfesorList;
    }

    public List<String> getNombresProfesores() {

        client = ClientBuilder.newClient();

        String profesores = client.target(baseURI).path("profesores").path("nombres")
                .request(MediaType.APPLICATION_JSON).get(String.class);

        client.close();

        // System.out.println("METHOD2 "+usuarios);

        Type listType = new TypeToken<List<String>>() {
        }.getType();
        List<String> jsonToUsuarioList = new Gson().fromJson(profesores, listType);

        return jsonToUsuarioList;

    }

    public String getProfesorSize() {
        client = ClientBuilder.newClient();

        String prof = client.target(baseURI).path("profesores").path("count").request(MediaType.APPLICATION_JSON)

                .get(String.class);
        client.close();

        return prof;
    }

    public Profesor getProfesor(String id) {

        client = ClientBuilder.newClient();
        String profesor = client.target(baseURI).path("profesores").path(id).request(MediaType.APPLICATION_JSON)
                .get(String.class);
        client.close();

        Profesor jsonToProfesor = new Gson().fromJson(profesor, Profesor.class);

        return jsonToProfesor;
    }

    public void createProfesor(Profesor u) {

        final Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
        final String gson = prettyGson.toJson(u);

        System.out.println("create profesor: " + gson);

        client = ClientBuilder.newClient();
        Response response = client.target(baseURI).path("profesores").request(MediaType.APPLICATION_JSON)
                .post(Entity.entity(gson, MediaType.APPLICATION_JSON), Response.class);
        client.close();

    }

    public void updateProfesor(Profesor u) {

        final Gson prettyGson = new GsonBuilder().setPrettyPrinting().create();
        final String gson = prettyGson.toJson(u);

        client = ClientBuilder.newClient();
        Response response = client.target(baseURI).path("profesores").path(u.getIdprofesor())
                .request(MediaType.APPLICATION_JSON)
                .put(Entity.entity(gson, MediaType.APPLICATION_JSON), Response.class);
        client.close();

    }

    public void removeProfesor(String id) {
        client = ClientBuilder.newClient();

        Response response = client.target(baseURI).path("profesores").path(id).request(MediaType.APPLICATION_JSON)
                .delete();

        client.close();
    }

}