/* 
* Copyright 2016 Agencia Estatal de Administración Tibutaria
*
* Licencia con arreglo a la EUPL, Versión 1.1 o –en cuanto
* sean aprobadas por la Comisión Europea– versiones
* posteriores de la EUPL (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en:
*  
* https://joinup.ec.europa.eu/software/page/eupl
*  
* Salvo cuando lo exija la legislación aplicable o se acuerde
* por escrito, el programa distribuido con arreglo a la
* Licencia se distribuye «TAL CUAL», SIN GARANTÍAS NI CONDICIONES
* DE NINGÚN TIPO, ni expresasni implícitas.
*
* Véase la Licencia en el idioma concreto que rige los permisos y 
* limitaciones que establece la Licencia.
*/ 

package monitor.utiles;

import java.io.*;
import java.util.*;

public class AlmacenStrings {

   LinkedHashMap<String,String> hash;
   String miFichero;
   
   public AlmacenStrings() {
      hash = new LinkedHashMap<String,String>();
   }

   public boolean cargar(String fichero) {
      miFichero = fichero;
      try {
         BufferedReader bf = null;
         File origen = new File(fichero);
         if (origen.exists()) {
            bf = new BufferedReader(new FileReader(fichero));
         } else {
            return false;
         }
         String linea;
         while ((linea = bf.readLine()) != null) {
            add(linea);
         }
         bf.close();
         return true;
      } catch (Exception exc) {
         System.out.println(exc.getMessage());
         return false;
      }
   }

   void add(String linea) {
      linea = linea.trim();
      if (linea.length() == 0 || linea.startsWith("#")) {
         return;
      }
      String pp[] = linea.split("=");
      String clave = pp[0].trim();
      String valor = "";
      if (pp.length > 1) {
         valor = pp[1].trim();
         if (valor.startsWith("\"")) {
            valor = valor.replaceFirst("^\"", "");
         }
         if (valor.endsWith("\"")) {
            valor = valor.replaceFirst("\"$", "");
         }
         if (valor.indexOf("\\n") > 0) {
            valor = valor.replaceAll("\\\\n", "\n");
         }
      }
      hash.put(clave, valor);
   }

   public String valor(String clave) {
      String s = hash.get(clave);
      if (s == null) {
         return "";
      }
      return s;
   }
   
   public boolean consolidar(AlmacenStrings jar) {
      boolean cambios = false;
      for(String key : jar.hash.keySet()) {
         if(!hash.containsKey(key)) {
            hash.put(key, jar.valor(key));
            cambios = true;
         }
      }
      return cambios;
   }
   
   public boolean guardar() {
      if (miFichero == null) {
         return false;
      }
      try {
         PrintWriter pw = new PrintWriter(new FileOutputStream(miFichero, false));
         for(String s : hash.keySet()) {
            String v = hash.get(s);
            v = v.replaceAll("\n","\\\\n");
            pw.println(s + " = \"" + v + "\"");
         }
         pw.close();
         return true;
      } catch (Exception exc) {
         System.out.println(exc.getMessage());
         return false;
      }
   }
   
}
