gestores.IOVocabularioGeneral.java Source code

Java tutorial

Introduction

Here is the source code for gestores.IOVocabularioGeneral.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 gestores;

import configuracion.ConfiguracionFabricasStax;
import configuracion.Configuracion;
import entidades.vocabularioGeneral.EntradaVocabularioGeneral;
import entidades.vocabularioGeneral.VocabularioGeneral;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;

/**
 *
 * @author Matas
 */
public abstract class IOVocabularioGeneral {
    // Estas propiedades estaticas de la clase se utilizan para poder cambiar a gusto
    // las marcas que se utilizaran en el documento xml tanto para lectura como escritura

    public static void exportarVocabularioGeneral(VocabularioGeneral vocabulario, String URL)
            throws XMLStreamException, FileNotFoundException {

        exportarVocabularioStax(vocabulario, URL);
        //exportarVocabularioSAX(vocabulario, URL);

    }

    private static void exportarVocabularioStax(VocabularioGeneral vocabulario, String URLExportacion)
            throws XMLStreamException, FileNotFoundException {
        ArrayList<EntradaVocabularioGeneral> entradas = vocabulario
                .getEntradasDelVocabularioOrdenadasPorCantidadDocumentos();

        XMLOutputFactory xmlof = XMLOutputFactory.newInstance();

        XMLStreamWriter xmlw = xmlof
                .createXMLStreamWriter(new BufferedOutputStream(new FileOutputStream(URLExportacion)));

        // DOCUMENTO
        xmlw.writeStartDocument();
        xmlw.writeCharacters("\n");
        xmlw.writeCharacters("\n");

        //<VOCABULARIO>
        xmlw.writeStartElement(Configuracion.marcaElementoRootVocabulario);
        xmlw.writeCharacters("\n");

        for (EntradaVocabularioGeneral entrada : entradas) {
            //<ENTRADA>
            xmlw.writeCharacters("\t");
            xmlw.writeStartElement(Configuracion.marcaEntradaVocabulario);
            xmlw.writeCharacters("\n");

            //<PALABRA>
            xmlw.writeCharacters("\t");
            xmlw.writeCharacters("\t");
            xmlw.writeStartElement(Configuracion.marcaPalabraVocabulario);
            xmlw.writeCharacters(entrada.getPalabra());
            xmlw.writeEndElement();
            xmlw.writeCharacters("\n");

            //<FRECUENCIA>
            xmlw.writeCharacters("\t");
            xmlw.writeCharacters("\t");
            xmlw.writeStartElement(Configuracion.marcaFrecuenciaVocabulario);
            xmlw.writeCharacters(Integer.toString(entrada.getFrecuencia()));
            xmlw.writeEndElement();
            xmlw.writeCharacters("\n");

            //<FRECUENCIA MAXIMA>
            xmlw.writeCharacters("\t");
            xmlw.writeCharacters("\t");
            xmlw.writeStartElement(Configuracion.marcaFrecuenciaMaximaVocabulario);
            xmlw.writeCharacters(Integer.toString(entrada.getFrecuenciaMaxima()));
            xmlw.writeEndElement();
            xmlw.writeCharacters("\n");

            //<CANTIDAD DOCUMENTOS>
            xmlw.writeCharacters("\t");
            xmlw.writeCharacters("\t");
            xmlw.writeStartElement(Configuracion.marcaCantidadDocumentosVocabulario);
            xmlw.writeCharacters(Integer.toString(entrada.getDocumentosEnQueAparece()));
            xmlw.writeEndElement();
            xmlw.writeCharacters("\n");

            xmlw.writeCharacters("\t");
            xmlw.writeEndElement();
            xmlw.writeCharacters("\n");
        }

        xmlw.writeEndElement();
        xmlw.writeCharacters("\n");

        xmlw.writeEndDocument();

        xmlw.close();
    }

    private static void exportarVocabularioSAX(VocabularioGeneral vocabulario, String URL) throws IOException {

        Element documentoXML = new Element(Configuracion.marcaElementoRootVocabulario);

        ArrayList<EntradaVocabularioGeneral> entradas = vocabulario.getEntradasDelVocabulario();
        Collections.sort(entradas);

        for (EntradaVocabularioGeneral entrada : entradas) {
            Element entradaXML = new Element(Configuracion.marcaEntradaVocabulario);
            entradaXML.addContent(new Element(Configuracion.marcaPalabraVocabulario).setText(entrada.getPalabra()));
            entradaXML.addContent(new Element(Configuracion.marcaFrecuenciaVocabulario)
                    .setText(Integer.toString(entrada.getFrecuencia())));
            entradaXML.addContent(new Element(Configuracion.marcaFrecuenciaMaximaVocabulario)
                    .setText(Integer.toString(entrada.getFrecuenciaMaxima())));
            entradaXML.addContent(new Element(Configuracion.marcaCantidadDocumentosVocabulario)
                    .setText(Integer.toString(entrada.getDocumentosEnQueAparece())));

            documentoXML.addContent(entradaXML);
        }

        /*if(nombreDelArchivo == null || nombreDelArchivo.equals("")){
            nombreDelArchivo = "vocabularioGeneral.xml";
        }*/

        Document archivoDeSalida = new Document(documentoXML);

        XMLOutputter xmlOutput = new XMLOutputter();
        xmlOutput.setFormat(Format.getPrettyFormat());
        xmlOutput.output(archivoDeSalida, new FileWriter(URL));

    }

    public static ArrayList<EntradaVocabularioGeneral> importarEntradasDeVocabulario(String URL)
            throws IOException {
        return importarEntradasDeVocabularioStax(URL);
    }

    private static ArrayList<EntradaVocabularioGeneral> importarEntradasDeVocabularioSAX(String URL) {
        ArrayList<EntradaVocabularioGeneral> entradas = new ArrayList<>();

        SAXBuilder builder = new SAXBuilder();

        File file = new File(URL);

        try {
            Document document = builder.build(file);

            Element rootNode = document.getRootElement();

            List<Element> lista = rootNode.getChildren(Configuracion.marcaEntradaVocabulario);

            for (Element elemento : lista) {

                EntradaVocabularioGeneral entrada = new EntradaVocabularioGeneral();
                entrada.setDocumentosEnQueAparece(
                        Integer.parseInt(elemento.getChildText(Configuracion.marcaCantidadDocumentosVocabulario)));
                entrada.setFrecuencia(
                        Integer.parseInt(elemento.getChildText(Configuracion.marcaFrecuenciaVocabulario)));
                entrada.setFrecuenciaMaxima(
                        Integer.parseInt(elemento.getChildText(Configuracion.marcaFrecuenciaMaximaVocabulario)));
                entrada.setPalabra((elemento.getChildText(Configuracion.marcaPalabraVocabulario)));

                entradas.add(entrada);
            }
        } catch (Exception e) {
            System.out.println("Error al intentar leer el vocabulario desde la URL: " + URL);
            e.printStackTrace();
            return new ArrayList<>();
        }

        return entradas;
    }

    private static ArrayList<EntradaVocabularioGeneral> importarEntradasDeVocabularioStax(String URL)
            throws IOException {
        try {
            ArrayList<EntradaVocabularioGeneral> entradas = new ArrayList<>();

            File file = new File(URL);
            if (!file.exists()) {
                throw new IOException("No se encuentra el archivo para importar el vocabulario. URL: " + URL);
            }

            XMLInputFactory xmlif = ConfiguracionFabricasStax.getInputFactory();

            //XMLStreamReader xmlr = xmlif.createXMLStreamReader(URL, new BufferedInputStream(new FileInputStream(file)));
            XMLStreamReader xmlr = xmlif.createXMLStreamReader(URL, new FileInputStream(file));

            EntradaVocabularioGeneral entradaEnTrabajo = null;
            String entradaVocabulario = Configuracion.marcaEntradaVocabulario;
            String palabra = Configuracion.marcaPalabraVocabulario;
            String frecuencia = Configuracion.marcaFrecuenciaVocabulario;
            String frecuenciaM = Configuracion.marcaFrecuenciaMaximaVocabulario;
            String documentos = Configuracion.marcaCantidadDocumentosVocabulario;

            while (xmlr.hasNext()) {
                xmlr.next();
                if (xmlr.isStartElement()) {
                    String xmlrName = xmlr.getName().toString();

                    if (xmlrName.equals(entradaVocabulario)) {
                        entradaEnTrabajo = new EntradaVocabularioGeneral();
                    } else if (xmlrName.equals(palabra)) {
                        xmlr.next();
                        entradaEnTrabajo.setPalabra(xmlr.getText());
                    } else if (xmlrName.equals(frecuencia)) {
                        xmlr.next();
                        int f = Integer.parseInt(xmlr.getText());
                        entradaEnTrabajo.setFrecuencia(f);
                    } else if (xmlrName.equals(frecuenciaM)) {
                        xmlr.next();
                        int fm = Integer.parseInt(xmlr.getText());
                        entradaEnTrabajo.setFrecuenciaMaxima(fm);
                    } else if (xmlrName.equals(documentos)) {
                        xmlr.next();
                        int docs = Integer.parseInt(xmlr.getText());
                        entradaEnTrabajo.setDocumentosEnQueAparece(docs);
                    }
                } else if (xmlr.isEndElement()) {
                    String endElement = xmlr.getName().toString();
                    if (endElement.equals(entradaVocabulario)) {
                        entradas.add(entradaEnTrabajo);
                        entradaEnTrabajo = null;
                    }
                }
            }

            xmlr.close();

            return entradas;
        } catch (XMLStreamException ex) {
            String mensaje = "El archivo del que se intenta leer no tiene el formato correcto: " + URL;
            Logger.getLogger(IOVocabularioGeneral.class.getName()).log(Level.SEVERE, null, ex);
            return null;
        }
    }
}