Package it.unina.seclab.jafimon

Source Code of it.unina.seclab.jafimon.ConfigurationManager

package it.unina.seclab.jafimon;

import it.unina.seclab.jafimon.exceptions.CannotWriteFileException;
import it.unina.seclab.jafimon.exceptions.GenericConfigurationParsingException;
import it.unina.seclab.jafimon.exceptions.GenericConfigurationTrasformException;
import it.unina.seclab.jafimon.exceptions.InvalidConfigurationFileException;
import it.unina.seclab.jafimon.interfaces.IConfigurationManager;
import it.unina.seclab.jafimon.util.SystemEnvironmentVariables;
import it.unina.seclab.jafimon.Configuration;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import java.util.Enumeration;
import java.util.Vector;

import org.apache.log4j.Logger;

/**
* Il gestore delle configurazioni utilizzato dal framework
*
* @author   Mauro Iorio
*
*/
public class ConfigurationManager implements IConfigurationManager {

  private Logger logger = Logger.getRootLogger();
 
  /**
   * La <code>Configuration</code> attiva
   */
  private Configuration activeConfig;
 
  /**
   * La posizione della cartella che contiene le configurazioni.
   * NOTA:
   *     Il nome della <code>Configuration</code> NON include il <code>cfgBasePath</code>, ma solo
   *     il nome del file (completo di percorso relativo alla cartella  <code>cfgBasePath</code>).
   *     Di conseguenza i metodi del <code>ConfigurationManager</code> che operano sui file delle
   *     <code>Configuration</code> dovranno prependere al nome il <code>cfgBasePath</code>.
   */
  private String cfgBasePath;
 
  public ConfigurationManager() {
    try {
      cfgBasePath = SystemEnvironmentVariables.getEnvironmentVariable("JAFIMON_HOME") + File.separator + "data" + File.separator + "configurations";
    } catch (IOException e) {
      cfgBasePath = "data" + File.separator + "configurations";
    }
  }
 
  /**
   * Scorre il percorso indicato da basePath alla ricerca di files, restituendone
   * la lista.
   *
   * @param basePath il percorso dal quale avviare la ricerca
   * @param v il vettore che conterra' la lista dei file
   */
  private void listaFiles(String basePath, String filter, Vector v) {
   
    //logger.trace("basePath = \"" + basePath + "\"");
    //logger.trace("filter = \"" + filter + "\"");
    String[] basePathList = new File(basePath).list();
    //logger.trace("basePathList = \"" + basePathList + "\"");
   
    for (int i = 0; i < basePathList.length; i++) {
      File f = new File(basePath + File.separator + basePathList[i]);
      if (f.isFile()) {
        if (f.getName().endsWith(filter)) {
          String n = new String(basePath + File.separator + basePathList[i]);
          v.addElement(n.substring((cfgBasePath + File.separator).length()));
        }
      }
      else {
        listaFiles(basePath + File.separator + basePathList[i],filter,v);
      }
    }
  }

  public void deleteConfig(String name) {

    Vector v = new Vector();
    listaFiles(cfgBasePath + File.separator + name.substring(0, name.lastIndexOf(File.separator)),"",v);
    Enumeration e = v.elements();
    while (e.hasMoreElements()) {
      String s = cfgBasePath + File.separator + (String) e.nextElement();
      if(! (new File(s).delete()))
        logger.warn("Unable to delete \"" + s + "\"");
    }
   
    if (! (new File(cfgBasePath + File.separator + name.substring(0, name.lastIndexOf(File.separator))).delete()))
      logger.warn("Unable to delete \"" + cfgBasePath + File.separator + name + "\"");
  }

  public String[] getList() {
    Vector v = new Vector();
    listaFiles(cfgBasePath,".xml",v);
    String[] s = new String[v.size()];
    v.copyInto(s);
   
    return s;
  }

  public void selectConfig(String name) throws   FileNotFoundException,
                          InvalidConfigurationFileException,
                          GenericConfigurationParsingException {
    activeConfig = new Configuration(name);
    activeConfig.load(cfgBasePath);
  }

  public void storeConfig(Configuration cfg) throws   CannotWriteFileException,
                            GenericConfigurationTrasformException {
    cfg.save(cfgBasePath);
  }

  public void updateConfig(Configuration cfg) throws   CannotWriteFileException,
                            GenericConfigurationTrasformException {
    deleteConfig(cfg.getName())// Qui il cfgBasePath e' aggiunto dalla deleteConfig
    cfg.save(cfgBasePath);
  }

  /**
   * Restituisce la <code>Configuration</code> attiva
   *
   * @return la <code>Configuration</code> attiva
   */
  public Configuration getActiveConfig() {
    return activeConfig;
  }

}
TOP

Related Classes of it.unina.seclab.jafimon.ConfigurationManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.