Package resources.digesters

Source Code of resources.digesters.PluginCollector

package resources.digesters;

import gui.EasyBotAppException;

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;

import resources.PropertiesLoader;


/**
* La clase <code>PluginCollector</code> es la encargada de buscar los archivos
* de manifiesto de los plug-ins, de manera recursiva, en la carpeta configurada
* como <code>PluginFolder</code> en el archivo de configuraci�n de EasyBot
* (<code>config.properties</code>).<br>
*
* La b�squeda recursiva es interrumpida en una rama cuando se encuentra un
* archivo con extensi�n <code>.properties</code>, cuyo prefijo est� definido
* en el archivo de configuraciones como <code>PluginFileNamePrefix</code>.
*/
public class PluginCollector
{
 
  private List   repositories;
 

  /**
   * El constructor es el encargado de armar la lista de directorios que
   * fueron configurados en <code>config.properties</code> para la posterior
   * b�squeda resursiva.
   * @throws Exception si alguno de los directorios no existe.
   */
  public PluginCollector()throws EasyBotAppException
  {
    super();
   
    repositories = new LinkedList();
    StringTokenizer st = new StringTokenizer(
        // busca en el archivo de configuracion la key PluginFolder y si no la encuentra pone ./plugins
                PropertiesLoader.getInstance().getProperty("PluginFolder",'.' + File.separator + "plugins")
                , ",", false);
               
    for ( ; st.hasMoreTokens() ; )
    {
            String token = st.nextToken().trim();
            if ( token.length() == 0 )
                continue;

            try
            {
        repositories.add(new File(token).getCanonicalFile());
      }
            catch (IOException e)
            {
        throw new EasyBotAppException(e.getMessage());
      }
        }
  }

 

  /**
   * Este metodo devuelve una colecci�n de instancias <code>PluginLocation</code>
   * iterando sobre la lista de directorios generada en el contructor.
   * @return colecci�n de instancias <code>PluginLocation</code>.
   * @throws Exception si se produce un error procesando la lista de directorios.
   */
  public Collection collectPluginLocations() throws EasyBotAppException
  {
        List result = new LinkedList();
       
        for (Iterator it = repositories.iterator(); it.hasNext(); )
        {
            File file = (File) it.next();
            if (file.isDirectory())
            {
                processFolder(file, result);
            }
            else if (file.isFile())
            {
                processFile(file, result);
            }
        }
       
        return result;
    }

 
  protected void processFolder(final File folder, final List result) throws EasyBotAppException
  {
        try
        {
            PluginLocation pluginLocation = PluginLocation.create(folder);
            if (pluginLocation != null)
            {
                result.add(pluginLocation);
                return;
            }
        }
        catch (MalformedURLException mue)
        {
            throw new EasyBotAppException(mue.getMessage());
        }
       
        File[] files = folder.listFiles();
       
        for (int i = 0; i < files.length; i++)
        {
            File file = files[i];
            if (file.isDirectory())
            {
                processFolder(file, result);
            }
            else if (file.isFile())
            {
                processFile(file, result);
            }
        }
    }
 
 
    protected void processFile(final File file, final List result) throws EasyBotAppException
    {
      try
      {
        PluginLocation pluginLocation = PluginLocation.create(file);

        if (pluginLocation != null)
        {
          result.add(pluginLocation);
        }
      }
      catch (MalformedURLException e)
      {
        throw new EasyBotAppException(e.getMessage());
      }
    }

}
TOP

Related Classes of resources.digesters.PluginCollector

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.