//http://www.javahispano.org/contenidos/es/xml_desde_java_hecho_fcil_jdom/
package Funcion;
import Tipos.CopiaTablero;
import Tipos.Elemento;
import Tipos.MiBoton;
import Tipos.MiColeccion;
import Tipos.MisElementos;
import Tipos.Tablero;
import java.awt.Color;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;
public class ParsearXML {
//static String pathConfiguracion="C:\\";
public static Tablero t = Tablero.getInstance();
String file;
File fichero=null;
public ParsearXML(String XMLfile){
file= XMLfile;
}
public ParsearXML(File mifile){
fichero= mifile;
}
// Verifica que el Driver es de tipo DRatonVirtual
public int devolverTipoDriver() {
try {
SAXBuilder builder=new SAXBuilder(false);
//usar el parser Xerces y no queremos
//que valide el documento
//Document doc=builder.build(pathConfiguracion + file);
Document doc=builder.build(fichero);
// construyo el arbol en memoria desde el fichero
// que se lo pasar� por parametro.
Element raiz=doc.getRootElement();
//cojo el elemento raiz
System.out.println("El driver es de tipo: "+
raiz.getAttributeValue("tipo"));
if (!raiz.getAttributeValue("tipo").equals("DRatonVirtual"))
return(-1);
else
return(0);
}catch (Exception e){
//e.printStackTrace();
return(-1);
}
}
// Abre una configuracion almacenada previamente
// devuelve 1 si todo ha sido correcto, 0 si ha habido algun error
// Guarda los parametros en una copia del Tablero, por si ha habido errores
public int abrirConfiguracion() {
try {
SAXBuilder builder=new SAXBuilder(false);
//usar el parser Xerces y no queremos que valide el documento
//Document doc=builder.build(pathConfiguracion + file);
Document doc=builder.build(fichero);
// construyo el arbol en memoria desde el fichero
//cojo el elemento raiz
Element raiz=doc.getRootElement();
Element elems=raiz.getChild("elementos");
System.out.println("El driver es de tipo: "+ raiz.getAttributeValue("tipo"));
List elementos=elems.getChildren("elemento");
// cogere todos los elementos
System.out.println("Formada por:"+ elementos.size() + " elementos");
if (elementos.size()>0){
MisElementos mise = new MisElementos();
Iterator elem = elementos.iterator();
while (elem.hasNext()){
Element e= (Element)elem.next();
Element nombre =e.getChild("nombre");
// System.out.println("nombre elemento: "+ nombre.getText());
Element imagen =e.getChild("imagen");
// System.out.println("imagen elemento: "+ imagen.getText());
Element sonido =e.getChild("sonido");
// System.out.println("sonido elemento: "+ sonido.getText());
mise.Add(new Elemento(nombre.getText(),imagen.getText(),sonido.getText()));
}
// almaceno los elementos
CopiaTablero.elementos=mise;
// Muestro todos los elementos
// for (int i=0; i< CopiaTablero.elementos.size(); i++){
// System.out.println("Elemento "+ i + " nombre: " + CopiaTablero.elementos.get(i).nombre +" im: "
// + CopiaTablero.elementos.get(i).nombreImagen + " sonido: " + CopiaTablero.elementos.get(i).nombreSonido);
// }
}
// botones
Element botones= raiz.getChild("botones");
// altura
Element altura= botones.getChild("altura");
CopiaTablero.altoBoton= Integer.parseInt(altura.getText().trim());
System.out.println("Altura boton: " + CopiaTablero.altoBoton);
// anchura
Element anchura= botones.getChild("anchura");
CopiaTablero.anchoBoton= Integer.parseInt(anchura.getText().trim());
System.out.println("Ancho boton: " + CopiaTablero.anchoBoton);
// color de los botones tengo q mirar a ver si es este
Element colorFondo= botones.getChild("colorFondo");
CopiaTablero.colorBot= new Color(Integer.parseInt(colorFondo.getText().trim()));
System.out.println("Color botones: " + CopiaTablero.colorBotones);
// simetria
int simetriaI;
Element simetria= botones.getChild("simetria");
simetriaI= Integer.parseInt(simetria.getValue().trim());
if (simetriaI==0){
CopiaTablero.simetria=false;
}
else{
CopiaTablero.simetria=true;
}
System.out.println("VALOR SIMETRIA: " + CopiaTablero.simetria);
// cojo todos los botones
List listaBotones=botones.getChildren("boton");
// cogere todos los botones
System.out.println("Formada por:"+ listaBotones.size() + " botones");
if (listaBotones.size()>0){
MiColeccion mc = new MiColeccion();
mc.clear();
Iterator bot = listaBotones.iterator();
int j=0;
while (bot.hasNext()){
Element b= (Element)bot.next();
Element nombre =b.getChild("nombre");
// System.out.println("nombre elemento: "+ nombre.getText());
// obtengo el elemento de ese boton
Elemento el= CopiaTablero.elementos.Item(nombre.getText());
mc.Add(new MiBoton(el.nombre, j, el.nombreImagen));
System.out.println("A�ado boton: " + j + ", : " + el.nombre);
j++;
}
// // almaceno los botones
CopiaTablero.coleccion = new MiColeccion();
CopiaTablero.coleccion.clear();
CopiaTablero.coleccion= mc;
System.out.println("Tama�o coleccion final: " + CopiaTablero.coleccion.size());
// Muestro todos los botones
// for (int i=0; i< CopiaTablero.coleccion.size(); i++){
// System.out.println("Boton "+ i + " nombre: " + CopiaTablero.coleccion.get(i).getName() + " tabulador: "
// + CopiaTablero.coleccion.get(i).tabIndex + " imagen: " + CopiaTablero.coleccion.get(i).getIcon().toString());
// }
// forma
Element forma= raiz.getChild("forma");
// tipo
Element tipoForma= forma.getChild("tipo");
CopiaTablero.tipoTablero=Integer.parseInt(tipoForma.getValue().trim());
// fila
Element fila= forma.getChild("fila");
CopiaTablero.filas=Integer.parseInt(fila.getValue().trim());
// columna
Element columna= forma.getChild("columna");
CopiaTablero.columnas=Integer.parseInt(columna.getValue().trim());
// movimiento
Element movimiento= raiz.getChild("movimiento");
// tipo
Element tipoMov= movimiento.getChild("tipo");
CopiaTablero.tipoMovimiento=Integer.parseInt(tipoMov.getValue().trim());
// relacion
Element relacion= movimiento.getChild("relacion");
CopiaTablero.relacionVel=Integer.parseInt(relacion.getValue().trim());
// barrido
Element barrido= raiz.getChild("barrido");
// tipo
Element tipoBar= barrido.getChild("tipo");
CopiaTablero.barrido=Integer.parseInt(tipoBar.getValue().trim());
// forma
Element formaBar= barrido.getChild("forma");
CopiaTablero.tipoBarrido=Integer.parseInt(formaBar.getValue().trim());
// color
Element color= barrido.getChild("color");
CopiaTablero.colorB= new Color(Integer.parseInt(color.getText().trim()));
// pasadas
Element pasadas= barrido.getChild("pasadas");
CopiaTablero.pasadas=Integer.parseInt(pasadas.getValue().trim());
// min
Element minScan= barrido.getChild("min");
CopiaTablero.minScan=Integer.parseInt(minScan.getValue().trim());
// max
Element maxScan= barrido.getChild("max");
CopiaTablero.maxScan=Integer.parseInt(maxScan.getValue().trim());
// velocidad
Element velocidad= barrido.getChild("velocidad");
int velocidadScan=Integer.parseInt(velocidad.getValue().trim());
if ((CopiaTablero.minScan <= velocidadScan) && (CopiaTablero.maxScan >= velocidadScan)){
CopiaTablero.speedScan= velocidadScan;
}
else {
CopiaTablero.speedScan= (int)((CopiaTablero.maxScan - CopiaTablero.minScan)/2);
}
// opacidad
Element opacidad= raiz.getChild("opacidad");
Element valor= opacidad.getChild("valor");
CopiaTablero.opacidad=Integer.parseInt(valor.getValue().trim());
// transparencia
int tr;
Element transparencia= raiz.getChild("transparencia");
Element valorT= transparencia.getChild("valor");
tr= Integer.parseInt(valorT.getValue().trim());
if (tr==0) CopiaTablero.transparencia=false;
else CopiaTablero.transparencia=true;
// barra
int barr;
Element barra= raiz.getChild("barra");
Element presente= barra.getChild("presente");
barr= Integer.parseInt(presente.getValue().trim());
if (barr==0) CopiaTablero.barra=false;
else CopiaTablero.barra=true;
// cursor
Element cursor= raiz.getChild("cursor");
// min
Element minCursor= cursor.getChild("min");
CopiaTablero.minCursor=Integer.parseInt(minCursor.getValue().trim());
// max
Element maxCursor= cursor.getChild("max");
CopiaTablero.maxCursor=Integer.parseInt(maxCursor.getValue().trim());
Element velocidadC= cursor.getChild("velocidad");
int speed= Integer.parseInt(velocidadC.getValue().trim());
if ((CopiaTablero.minCursor <= speed) && (CopiaTablero.maxCursor >= speed)){
CopiaTablero.speedCursor= speed;
}
else {
CopiaTablero.speedCursor= (int)((CopiaTablero.maxCursor - CopiaTablero.minCursor)/2);
}
// silencio
int sil;
Element silencio= raiz.getChild("silencio");
Element activado= silencio.getChild("activado");
sil= Integer.parseInt(activado.getValue().trim());
if (sil==0) CopiaTablero.sonido=false;
else CopiaTablero.sonido=true;
// estilo
Element estilo= raiz.getChild("estilo");
Element tipoE= estilo.getChild("tipo");
CopiaTablero.tipoEstilo=Integer.parseInt(tipoE.getValue().trim());
// // cultura
Element cultura= raiz.getChild("cultura");
Element tipoC= cultura.getChild("tipo");
String idioma= tipoC.getValue();
System.out.println("Idioma : " + idioma);
CopiaTablero.Idiomas=new Locale(tipoC.getValue());
// entradas
Element entradas= raiz.getChild("entradas");
// teclado
Element teclado= entradas.getChild("teclado");
// uso
Element usoT= teclado.getChild("uso");
CopiaTablero.uso_teclado=Integer.parseInt(usoT.getValue().trim());
// seleccion
Element seleccionT= teclado.getChild("seleccion");
CopiaTablero.teclaSeleccion=seleccionT.getText();
System.out.println("Tecla para seleccionar en copia tablero: " + CopiaTablero.teclaSeleccion);
// barrido
Element barridoT= teclado.getChild("barrido");
CopiaTablero.teclaBarrido= barridoT.getText();
// raton
Element raton= entradas.getChild("raton");
// uso
Element usoR= raton.getChild("uso");
CopiaTablero.uso_raton=Integer.parseInt(usoR.getValue().trim());
// seleccion
Element seleccionR= raton.getChild("seleccion");
CopiaTablero.botonSeleccion=Integer.parseInt(seleccionR.getValue().trim());
// barrido
Element barridoR= raton.getChild("barrido");
CopiaTablero.botonBarrido= Integer.parseInt(barridoR.getValue().trim());
// microfono
Element microfono= entradas.getChild("microfono");
// uso
Element usoM= microfono.getChild("uso");
CopiaTablero.uso_microfono=Integer.parseInt(usoM.getValue().trim());
// seleccion
Element seleccionM= microfono.getChild("seleccion");
Element volumenS= seleccionM.getChild("volumen");
CopiaTablero.volumenSeleccion=Float.parseFloat(volumenS.getValue().trim());
Element sampleS= seleccionM.getChild("sample");
CopiaTablero.sampleRateSeleccion=Float.parseFloat(sampleS.getValue().trim());
// barrido
Element barridoM= microfono.getChild("barrido");
Element volumenB= barridoM.getChild("volumen");
CopiaTablero.volumenBarrido=Float.parseFloat(volumenB.getValue().trim());
Element sampleB= barridoM.getChild("sample");
CopiaTablero.sampleRateBarrido=Float.parseFloat(sampleB.getValue().trim());
}
return(0);
}
catch (Exception e){
e.printStackTrace();
return(-1);
}
}
// Guarda la configuracion actual
// devuelve 1 si todo ha sido correcto, 0 si ha habido algun error
public int guardarConfiguracion() {
//Creamos un elemento root
Element root=new Element("Driver");
root.setAttribute("tipo","DRatonVirtual");
//Creamos hijo elementos
Element elementos=new Element("elementos");
Element elemento=null;
String elem;
for (int i=0; i< t.elementos.size(); i++ ){
elemento= new Element("elemento");
Element nombre=new Element("nombre").setText(t.elementos.get(i).nombre);
Element imagen=new Element("imagen").setText(t.elementos.get(i).nombreImagen);
Element sonido=new Element("sonido").setText(t.elementos.get(i).nombreSonido);
elemento.addContent(nombre);
elemento.addContent(imagen);
elemento.addContent(sonido);
elementos.addContent(elemento);
elemento= null;
}
root.addContent(elementos);
// Creamos hijo botones
Element botones=new Element("botones");
Element altura=new Element("altura").setText(((Integer)t.altoBoton).toString());
Element anchura=new Element("anchura").setText(((Integer)t.anchoBoton).toString());
Element colorFondo=new Element("colorFondo").setText(((Integer)t.colorBot.getRGB()).toString());
int sim= (t.simetria) ? 1 : 0;
Element simetria=new Element("simetria").setText(((Integer)sim).toString());
botones.addContent(altura);
botones.addContent(anchura);
botones.addContent(colorFondo);
botones.addContent(simetria);
Element boton=null;
for (int i=0; i< t.coleccion.size(); i++ ){
boton= new Element("boton");
Element nombreBot=new Element("nombre").setText(t.coleccion.get(i).getName());
boton.addContent(nombreBot);
botones.addContent(boton);
boton= null;
}
root.addContent(botones);
// forma
Element forma=new Element("forma");
Element tipo=new Element("tipo").setText(((Integer)t.tipoTablero).toString());
Element fila=new Element("fila").setText(((Integer)t.filas).toString());
Element columna=new Element("columna").setText(((Integer)t.columnas).toString());
forma.addContent(tipo);
forma.addContent(fila);
forma.addContent(columna);
root.addContent(forma);
// movimiento
Element movimiento=new Element("movimiento");
Element tipoM=new Element("tipo").setText(((Integer)t.tipoMovimiento).toString());
Element relacion=new Element("relacion").setText(((Integer)t.relacionVel).toString());
movimiento.addContent(tipoM);
movimiento.addContent(relacion);
root.addContent(movimiento);
// barrido
Element barrido=new Element("barrido");
Element tipoB=new Element("tipo").setText(((Integer)t.barrido).toString());
Element formaB=new Element("forma").setText(((Integer)t.tipoBarrido).toString());
Element velocidad=new Element("velocidad").setText(((Integer)((int)t.speedScan)).toString());
Element color=new Element("color").setText(((Integer)(t.colorB.getRGB())).toString());
Element pasadas=new Element("pasadas").setText(((Integer)((int)t.pasadas)).toString());
Element minScan=new Element("min").setText(((Integer)t.minScan).toString());
Element maxScan=new Element("max").setText(((Integer)t.maxScan).toString());
barrido.addContent(tipoB);
barrido.addContent(formaB);
barrido.addContent(velocidad);
barrido.addContent(color);
barrido.addContent(pasadas);
barrido.addContent(minScan);
barrido.addContent(maxScan);
root.addContent(barrido);
//opacidad
Element opacidad=new Element("opacidad");
Element valor=new Element("valor").setText(((Integer)t.opacidad).toString());
opacidad.addContent(valor);
root.addContent(opacidad);
// transparencia
Element transparencia=new Element("transparencia");
int valT= (t.transparencia) ? 1 : 0;
Element valorT=new Element("valor").setText(((Integer)valT).toString());
transparencia.addContent(valorT);
root.addContent(transparencia);
//barra
Element barra=new Element("barra");
int pres= (t.barra) ? 1 : 0;
Element presente=new Element("presente").setText(((Integer)pres).toString());
barra.addContent(presente);
root.addContent(barra);
// cursor
Element cursor=new Element("cursor");
Element velocidadC=new Element("velocidad").setText(((Integer)t.speedCursor).toString());
cursor.addContent(velocidadC);
Element minCursor=new Element("min").setText(((Integer)t.minCursor).toString());
cursor.addContent(minCursor);
Element maxCursor=new Element("max").setText(((Integer)t.maxCursor).toString());
cursor.addContent(maxCursor);
root.addContent(cursor);
//silencio
Element silencio=new Element("silencio");
int sil= (t.sonido) ? 1 : 0;
Element activado=new Element("activado").setText(((Integer)sil).toString());
silencio.addContent(activado);
root.addContent(silencio);
//estilo
Element estilo=new Element("estilo");
Element tipoE=new Element("tipo").setText(((Integer)t.tipoEstilo).toString());
estilo.addContent(tipoE);
root.addContent(estilo);
//cultura
Element cultura=new Element("cultura");
Element idioma=new Element("tipo").setText(t.Idiomas.toString());
cultura.addContent(idioma);
root.addContent(cultura);
// entradas
// teclado
Element entradas=new Element("entradas");
Element teclado=new Element("teclado");
Element uso=new Element("uso").setText(((Integer)t.uso_teclado).toString());
Element seleccion=new Element("seleccion").setText(t.teclaSeleccion);
Element barridoEntradas=new Element("barrido").setText(t.teclaBarrido);
teclado.addContent(uso);
teclado.addContent(seleccion);
teclado.addContent(barridoEntradas);
entradas.addContent(teclado);
uso=null; seleccion=null; barridoEntradas=null;
// raton
Element raton=new Element("raton");
uso=new Element("uso").setText(((Integer)t.uso_raton).toString());
seleccion=new Element("seleccion").setText(((Integer)t.botonSeleccion).toString());
barridoEntradas=new Element("barrido").setText(((Integer)t.botonBarrido).toString());
raton.addContent(uso);
raton.addContent(seleccion);
raton.addContent(barridoEntradas);
entradas.addContent(raton);
uso=null; seleccion=null; barridoEntradas=null;
// microfono
Element microfono=new Element("microfono");
uso=new Element("uso").setText(((Integer)t.uso_microfono).toString());
seleccion=new Element("seleccion");
Element volumen=new Element("volumen").setText(((Float)t.volumenSeleccion).toString());
Element sample=new Element("sample").setText(((Float)t.sampleRateSeleccion).toString());
seleccion.addContent(volumen);
seleccion.addContent(sample);
volumen=null; sample=null;
barridoEntradas=new Element("barrido");
volumen=new Element("volumen").setText(((Float)t.volumenBarrido).toString());
sample=new Element("sample").setText(((Float)t.sampleRateBarrido).toString());
barridoEntradas.addContent(volumen);
barridoEntradas.addContent(sample);
microfono.addContent(uso);
microfono.addContent(seleccion);
microfono.addContent(barridoEntradas);
entradas.addContent(microfono);
root.addContent(entradas);
System.out.println("Antes de crear documento");
Document doc=new Document(root);//Creamos el documento
//Vamos a almacenarlo en un fichero y ademas lo sacaremos por pantalla
try{
XMLOutputter out=new XMLOutputter(Format.getPrettyFormat());
//XMLOutputter out=new XMLOutputter(" ",true);
System.out.println("Nombre fich:"+ file);
//FileOutputStream fileO=new FileOutputStream(pathConfiguracion + file);
if (file.endsWith(".xml")){
System.out.println("Acaba en xml");
}
else{
System.out.println("NOOOOOO Acaba en xml");
file += ".xml";
}
FileOutputStream fileO=new FileOutputStream(file);
out.output(doc,fileO);
fileO.flush();
fileO.close();
out.output(doc,System.out);
} catch(Exception e){
e.printStackTrace();
return(0);
}
return(1);
}
}