diff --git a/bin/Logica/Transaccion.class b/bin/Logica/Transaccion.class index b1cd4c7..113832a 100644 Binary files a/bin/Logica/Transaccion.class and b/bin/Logica/Transaccion.class differ diff --git a/src/Ficheros/Configuracion.java b/src/Ficheros/Configuracion.java new file mode 100644 index 0000000..1b8a17c --- /dev/null +++ b/src/Ficheros/Configuracion.java @@ -0,0 +1,37 @@ +package Ficheros; + +import VistaControlador.Menu; + +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Properties; + +public class Configuracion { + private static String direccion=".config"; + + public static void guardarConfiguracion(Menu menu) { + Properties configuracion = new Properties(); + configuracion.setProperty("ruta", menu.getRuta()); + configuracion.setProperty("tema", String.valueOf(menu.getTema())); + try { + configuracion.store(new FileWriter(Configuracion.direccion), "Configuracion general"); + } catch (IOException e1) { + e1.printStackTrace(); + } + } + + public static void cargarConfiguracion(Menu menu) throws IOException { + Properties configuracion = new Properties(); + try { + configuracion.load(new FileReader(Configuracion.direccion)); + } catch (FileNotFoundException e) { + Configuracion.guardarConfiguracion(menu); + } + menu.setTheme(Integer.parseInt(configuracion.getProperty("tema"))); + configuracion.getProperty("ruta"); + + } + +} diff --git a/src/Ficheros/FicheroBinario.java b/src/Ficheros/FicheroBinario.java deleted file mode 100644 index 00bbd60..0000000 --- a/src/Ficheros/FicheroBinario.java +++ /dev/null @@ -1,39 +0,0 @@ -package Ficheros; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; - -import Logica.Gestion; -import Logica.Meses; - -public class FicheroBinario { - String directorioGestiones; - String directorioTransacciones; - String directorioMeses; - public FicheroBinario(String nombre) { - this.directorioGestiones=nombre; - } - - public void guardarMeses(Meses mes) { - - } - - public void guardarGestiones(Gestion gestion) throws IOException { - FileOutputStream ficheroSalida = new FileOutputStream(new File(this.directorioGestiones)); - ObjectOutputStream escritor = new ObjectOutputStream(ficheroSalida); - escritor.writeObject(gestion); - escritor.close(); - ficheroSalida.close(); - } - - public void cargarGestiones(Meses meses) throws IOException { - FileInputStream ficheroEntrada = new FileInputStream(new File(this.directorioGestiones)); - ObjectInputStream lector = new ObjectInputStream(ficheroEntrada); - //meses.aniadirGestion(nombre, anio, mes, isPositivo) - } -} diff --git a/src/Logica/Meses.java b/src/Logica/Meses.java index 18d4a62..f87bcbd 100644 --- a/src/Logica/Meses.java +++ b/src/Logica/Meses.java @@ -1,6 +1,7 @@ package Logica; import java.io.EOFException; +import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -12,6 +13,24 @@ import java.time.Month; import java.util.ArrayList; import java.util.Vector; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerFactoryConfigurationError; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.DOMImplementation; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Text; + public class Meses { private ArrayList meses; private int mesActual=0; @@ -124,6 +143,96 @@ public class Meses { return ret; } + public void exportarXML() { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + DocumentBuilder builder; + File fichero = new File("gestiones.xml"); + try { + builder = factory.newDocumentBuilder(); + DOMImplementation dom = builder.getDOMImplementation(); + Document documento = dom.createDocument(null, "xml", null); + Element raiz = documento.createElement("raiz"); + documento.getDocumentElement().appendChild(raiz); + Element nodoMeses; + Element nodoGestion; + Element nodoTransaccion; + Element nodoDatos; + Text dato; + for(Mes mes:this.meses) { + nodoMeses = documento.createElement("mes"); + raiz.appendChild(nodoMeses); + nodoDatos = documento.createElement("nombre"); + nodoMeses.appendChild(nodoDatos); + dato = documento.createTextNode(mes.getMes().toString()); + nodoDatos.appendChild(dato); + nodoDatos = documento.createElement("anio"); + nodoMeses.appendChild(nodoDatos); + dato = documento.createTextNode(String.valueOf(mes.getAnio())); + nodoDatos.appendChild(dato); + nodoDatos = documento.createElement("dineroRestante"); + nodoMeses.appendChild(nodoDatos); + dato = documento.createTextNode(String.valueOf(mes.getTotal())); + nodoDatos.appendChild(dato); + nodoDatos = documento.createElement("numeroGestiones"); + nodoMeses.appendChild(nodoDatos); + dato = documento.createTextNode(String.valueOf(mes.nGestiones)); + nodoDatos.appendChild(dato); + for(Gestion gestion:mes.gestiones) { + nodoGestion = documento.createElement("gestion"); + nodoMeses.appendChild(nodoGestion); + nodoDatos = documento.createElement("Nombre"); + nodoGestion.appendChild(nodoDatos); + dato = documento.createTextNode(gestion.getNombre()); + nodoDatos.appendChild(dato); + nodoDatos = documento.createElement("Dinero"); + nodoGestion.appendChild(nodoDatos); + dato = documento.createTextNode(String.valueOf(gestion.getSuma())); + nodoDatos.appendChild(dato); + nodoDatos = documento.createElement("EsPositivo"); + nodoGestion.appendChild(nodoDatos); + dato = documento.createTextNode(String.valueOf(gestion.esIngreso())); + nodoDatos.appendChild(dato); + for(Transaccion transaccion:gestion.getElementos()) { + nodoTransaccion = documento.createElement("transaccion"); + nodoGestion.appendChild(nodoTransaccion); + nodoDatos = documento.createElement("Nombre"); + nodoTransaccion.appendChild(nodoDatos); + dato = documento.createTextNode(transaccion.getNombre()); + nodoTransaccion.appendChild(dato); + nodoDatos = documento.createElement("Fecha"); + nodoTransaccion.appendChild(nodoDatos); + dato = documento.createTextNode(transaccion.getDia().toString()); + nodoTransaccion.appendChild(dato); + nodoDatos = documento.createElement("Dinero"); + nodoTransaccion.appendChild(nodoDatos); + dato = documento.createTextNode(String.valueOf(transaccion.getDinero())); + nodoTransaccion.appendChild(dato); + } + } + } + Source src = new DOMSource(documento); + Result result = new StreamResult(fichero); + + Transformer transformer = null; + transformer = TransformerFactory.newInstance().newTransformer(); + transformer.transform(src, result); + + } catch (ParserConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (TransformerConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (TransformerFactoryConfigurationError e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (TransformerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + } class Mes implements Serializable{ diff --git a/src/Logica/Transaccion.java b/src/Logica/Transaccion.java index 0cb8030..69d0714 100644 --- a/src/Logica/Transaccion.java +++ b/src/Logica/Transaccion.java @@ -4,9 +4,6 @@ import java.io.Serializable; import java.time.LocalDate; public class Transaccion implements Serializable{ - /** - * - */ private static final long serialVersionUID = 7544113192927092049L; private String nombre; private float dinero; @@ -50,4 +47,8 @@ public class Transaccion implements Serializable{ public Gestion getGestion() { return this.gestion; } + + public String getNombre() { + return this.nombre; + } } diff --git a/src/VistaControlador/BarraOpciones.java b/src/VistaControlador/BarraOpciones.java index e17a1d6..ee935cf 100644 --- a/src/VistaControlador/BarraOpciones.java +++ b/src/VistaControlador/BarraOpciones.java @@ -10,6 +10,7 @@ public class BarraOpciones extends JMenuBar{ JMenu menuAr; JMenuItem cambiarRuta; JMenuItem guardarIns; + JMenuItem exportarXML; JMenu interfaz; JMenuItem modoOscuro; JMenuItem modoRosa; @@ -23,6 +24,8 @@ public class BarraOpciones extends JMenuBar{ this.menuAr.add(this.guardarIns); this.cambiarRuta = new JMenuItem("Cambiar ruta de guardado"); this.menuAr.add(this.cambiarRuta); + this.exportarXML = new JMenuItem("Exportar en un XML"); + this.menuAr.add(this.exportarXML); this.interfaz = new JMenu("Interfaz"); this.add(this.interfaz); this.modoClaro = new JMenuItem("Modo claro"); diff --git a/src/VistaControlador/ControladorBarra.java b/src/VistaControlador/ControladorBarra.java index 52c064f..41c0a99 100644 --- a/src/VistaControlador/ControladorBarra.java +++ b/src/VistaControlador/ControladorBarra.java @@ -1,12 +1,13 @@ package VistaControlador; -import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import javax.swing.JOptionPane; +import Ficheros.Configuracion; + public class ControladorBarra implements ActionListener{ private BarraOpciones barra; private Menu menu; @@ -26,7 +27,8 @@ public class ControladorBarra implements ActionListener{ JOptionPane.showMessageDialog(null, "Debe introducir algo", "error", JOptionPane.WARNING_MESSAGE); return; } - this.menu.nombreDatos = ruta; + this.menu.rutaGuardado = ruta; + Configuracion.guardarConfiguracion(this.menu); break; } case "Guardar instantanea":{ @@ -45,46 +47,15 @@ public class ControladorBarra implements ActionListener{ break; } case "Modo claro":{ - this.menu.setBackground(Color.WHITE); - this.menu.setOpacity(1); - this.menu.repaint(); - this.menu.revalidate(); - this.menu.panelCentral.setOpaque(true); - this.menu.panelCentral.setBackground(Color.WHITE); - this.menu.panelCentral.repaint(); - this.menu.panelCentral.revalidate(); - this.menu.panel.setBackground(Color.WHITE); - this.menu.panel.repaint(); - this.menu.panel.revalidate(); + menu.setTheme(0); break; } case "Modo rosa":{ - this.menu.setBackground(Color.PINK); - this.menu.setOpacity(1); - this.menu.repaint(); - this.menu.revalidate(); - this.menu.panelCentral.setOpaque(true); - this.menu.panelCentral.setBackground(Color.PINK); - this.menu.panelCentral.repaint(); - this.menu.panelCentral.revalidate(); - this.menu.panel.setOpaque(true); - this.menu.panel.setBackground(Color.PINK); - this.menu.panel.repaint(); - this.menu.panel.revalidate(); + menu.setTheme(1); break; } case "Modo oscuro":{ - this.menu.setBackground(Color.BLACK); - this.menu.repaint(); - this.menu.revalidate(); - this.menu.panelCentral.setOpaque(true); - this.menu.panelCentral.setBackground(Color.BLACK); - this.menu.panelCentral.repaint(); - this.menu.panelCentral.revalidate(); - this.menu.panel.setOpaque(true); - this.menu.panel.setBackground(Color.BLACK); - this.menu.panel.repaint(); - this.menu.panel.revalidate(); + menu.setTheme(2); break; } case "Mostrar todo":{ @@ -92,6 +63,9 @@ public class ControladorBarra implements ActionListener{ mostrar.setVisible(true); break; } + case "Exportar XLM":{ + this.menu.meses.exportarXML(); + } } } @@ -101,6 +75,8 @@ public class ControladorBarra implements ActionListener{ this.barra.cambiarRuta.setActionCommand("Cambiar ruta"); this.barra.guardarIns.addActionListener(this); this.barra.guardarIns.setActionCommand("Guardar instantanea"); + this.barra.exportarXML.addActionListener(this); + this.barra.exportarXML.setActionCommand("Exportar XLM"); this.barra.modoClaro.addActionListener(this); this.barra.modoClaro.setActionCommand("Modo claro"); this.barra.modoRosa.addActionListener(this); diff --git a/src/VistaControlador/Menu.java b/src/VistaControlador/Menu.java index 8b48651..7c5cf65 100644 --- a/src/VistaControlador/Menu.java +++ b/src/VistaControlador/Menu.java @@ -1,5 +1,6 @@ package VistaControlador; +import java.awt.Color; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; @@ -18,6 +19,7 @@ import javax.swing.JTextArea; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import Ficheros.Configuracion; import Logica.Gestion; import Logica.Meses; import Logica.Transaccion; @@ -28,7 +30,8 @@ public class Menu extends JFrame{ protected VistaAniadirVisualizar ingresos; protected VistaAniadirVisualizar gastos; protected VistaPanelLateral panel; - String nombreDatos; + String rutaGuardado; + int tema; Meses meses; ArrayList pestanias; ArrayList controladores; @@ -36,9 +39,11 @@ public class Menu extends JFrame{ protected Gestion datosGastos; protected Gestion datosIngresos; public Menu() { + this.rutaGuardado = ".mes"; + this.tema = 0; this.barra = new BarraOpciones(); ControladorBarra controladorBarra = new ControladorBarra(barra, this); - this.nombreDatos = ".mes"; + setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { @@ -79,13 +84,19 @@ public class Menu extends JFrame{ constrain.weightx = 0.25; this.panelCentral.add(this.panel,constrain); this.add(this.panelCentral); + try { + Configuracion.cargarConfiguracion(this); + } catch (IOException e) { + e.printStackTrace(); + } } private void close(){ if (JOptionPane.showConfirmDialog(rootPane, "¿Desea guardar el estado?", "Salir del sistema", JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { try { - this.meses.guardarMeses(this.nombreDatos); + this.meses.guardarMeses(this.rutaGuardado); + Configuracion.guardarConfiguracion(this); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -112,7 +123,7 @@ public class Menu extends JFrame{ if(this.meses==null) { this.meses=new Meses(); try { - meses.cargarMeses(this.nombreDatos); + meses.cargarMeses(this.rutaGuardado); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -180,8 +191,70 @@ public class Menu extends JFrame{ } } }); + } + } + + public String getRuta() { + return this.rutaGuardado; + } + + public void setRuta(String ruta) { + this.rutaGuardado=ruta; + } + + public int getTema() { + return this.tema; + } + + public void setTheme(int tema) { + switch(tema) { + case 0:{ + this.tema = 0; + this.setBackground(Color.WHITE); + this.setOpacity(1); + this.repaint(); + this.revalidate(); + this.panelCentral.setOpaque(true); + this.panelCentral.setBackground(Color.WHITE); + this.panelCentral.repaint(); + this.panelCentral.revalidate(); + this.panel.setBackground(Color.WHITE); + this.panel.repaint(); + this.panel.revalidate(); + break; + } + case 1:{ + this.tema = 1; + this.setBackground(Color.PINK); + this.setOpacity(1); + this.repaint(); + this.revalidate(); + this.panelCentral.setOpaque(true); + this.panelCentral.setBackground(Color.PINK); + this.panelCentral.repaint(); + this.panelCentral.revalidate(); + this.panel.setBackground(Color.PINK); + this.panel.repaint(); + this.panel.revalidate(); + break; + } + case 2:{ + this.tema = 2; + this.setBackground(Color.BLACK); + this.setOpacity(1); + this.repaint(); + this.revalidate(); + this.panelCentral.setOpaque(true); + this.panelCentral.setBackground(Color.BLACK); + this.panelCentral.repaint(); + this.panelCentral.revalidate(); + this.panel.setBackground(Color.BLACK); + this.panel.repaint(); + this.panel.revalidate(); + break; + } + default: return; } - } }