Package org.eclim

Source Code of org.eclim.Services$DefaultPluginResources

/**
* Copyright (C) 2005 - 2011  Eric Van Dewoestine
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.eclim;

import java.io.InputStream;

import java.net.URL;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import org.eclim.command.Command;

import org.eclim.plugin.AbstractPluginResources;
import org.eclim.plugin.PluginResources;

/**
* Class responsible for retrieving service implementations and provides access
* to localized messages.
*
* @author Eric Van Dewoestine
*/
public class Services
{
  public static final String DOT_ECLIM =
    System.getProperty("user.home") + "/.eclim";

  private static HashMap<String, PluginResources> pluginResources =
    new HashMap<String, PluginResources>();

  static {
    PluginResources defaultResources = new DefaultPluginResources();
    defaultResources.initialize("org.eclim");
    addPluginResources(defaultResources);
  }

  /**
   * Gets all commands defined in the system.
   * @return A list of all existing commands
   */
  public static List<Class<? extends Command>> getCommandClasses()
  {
    ArrayList<Class<? extends Command>> commands =
      new ArrayList<Class<? extends Command>>();
    for (PluginResources resources : pluginResources.values()){
      commands.addAll(resources.getCommandClasses());
    }
    return commands;
  }

  /**
   * Gets a command by name.
   *
   * @param name The command name.
   *
   * @return The command implementation.
   */
  public static Command getCommand(String name)
    throws Exception
  {
    for(PluginResources resources : pluginResources.values()){
      if(resources.containsCommand(name)){
        return resources.getCommand(name);
      }
    }
    return null;
  }

  /**
   * Retrieves and optionally formats a message for the supplied message key.
   *
   * @param key The message key.
   * @param args Optional message args used when formatting the message.
   *
   * @return The formatted message.
   */
  public static String getMessage(String key, Object... args)
  {
    for(PluginResources resources : pluginResources.values()){
      try{
        String message = resources.getMessage(key, args);
        return message;
      }catch(MissingResourceException nsme){
        // message not found in this plugin.
      }
    }
    return key;
  }

  /**
   * Gets the underlying resource bundle used for messages.
   *
   * @param plugin The plugin to get the resources for (org.eclim,
   * org.eclim.jdt, etc.).
   *
   * @return The ResourceBundle.
   */
  public static ResourceBundle getResourceBundle(String plugin)
  {
    if(plugin != null){
      PluginResources resources = (PluginResources)pluginResources.get(plugin);
      if(resources != null){
        return resources.getResourceBundle();
      }
    }
    return null;
  }

  /**
   * Gets a resource by searching the available plugins for it.
   *
   * @param resource The resource to find.
   * @return The URL of the resource or null if not found.
   */
  public static URL getResource(String resource)
  {
    for(PluginResources resources : pluginResources.values()){
      URL url = resources.getResource(resource);
      if(url != null){
        return url;
      }
    }
    return null;
  }

  /**
   * Gets a resource stream by searching the available plugins for it.
   *
   * @param resource The resource to find.
   * @return The resource stream or null if not found.
   */
  public static InputStream getResourceAsStream(String resource)
  {
    for(PluginResources resources : pluginResources.values()){
      InputStream stream = resources.getResourceAsStream(resource);
      if(stream != null){
        return stream;
      }
    }
    return null;
  }

  /**
   * Gets the PluginResources for the plugin with the specified name.
   *
   * @param plugin The plugin name.
   * @return The PluginResources or null if none found.
   */
  public static PluginResources getPluginResources(String plugin)
  {
    PluginResources resources = (PluginResources)pluginResources.get(plugin);
    if(resources == null){
      throw new IllegalArgumentException(
          Services.getMessage("plugin.resources.not.found", plugin));
    }
    return resources;
  }

  /**
   * Adds the supplied PluginResources instance to the list of instances that
   * are used to locate services, messages, etc.
   *
   * @param resources The PluginResources to add.
   */
  public static void addPluginResources(PluginResources resources)
  {
    pluginResources.put(resources.getName(), resources);
  }

  /**
   * Remove the supplied PluginResources.
   *
   * @param resources The PluginResources to remove.
   */
  public static PluginResources removePluginResources(PluginResources resources)
  {
    return pluginResources.remove(resources.getName());
  }

  /**
   * Implementation of PluginResources for the main eclim plugin.
   */
  public static class DefaultPluginResources
    extends AbstractPluginResources
  {
    /**
     * Name that can be used to lookup this PluginResources from
     * {@link Services#getPluginResources(String)}.
     */
    public static final String NAME = "org.eclim";

    /**
     * {@inheritDoc}
     * @see AbstractPluginResources#getBundleBaseName()
     */
    protected String getBundleBaseName()
    {
      return "org/eclim/messages";
    }

    /**
     * {@inheritDoc}
     * @see PluginResources#getName()
     */
    public String getName()
    {
      return NAME;
    }
  }
}
TOP

Related Classes of org.eclim.Services$DefaultPluginResources

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.