/* * $Id$ * * Copyright (c) 2000-2007 by Rodney Kinney, Brent Easton * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.build.module; import java.io.File; import java.io.IOException; import java.util.zip.ZipException; import VASSAL.build.GameModule; import VASSAL.command.Command; import VASSAL.i18n.Resources; import VASSAL.tools.DataArchive; import VASSAL.tools.SequenceEncoder; /** * Load Plugins. * @author Brent Easton * */ public class PluginsLoader extends ExtensionsLoader { public static final String COMMAND_PREFIX = "PLUGIN\t"; //$NON-NLS-1$ private ExtensionsManager extMgr = new ExtensionsManager("plugins"); public void addTo(GameModule mod) { mod.addCommandEncoder(this); for (File ext : extMgr.getActiveExtensions()) { addExtension(ext); } } @Override protected ModuleExtension createExtension(String extname) throws ZipException, IOException { return new ModulePlugin(new DataArchive(extname)); } public Command decode(String command) { Command c = null; if (command.startsWith(COMMAND_PREFIX)) { SequenceEncoder.Decoder st = new SequenceEncoder.Decoder(command.substring(COMMAND_PREFIX.length()), '\t'); c = new ModulePlugin.RegCmd(st.nextToken(), st.nextToken()); } else { c = super.decode(command); } return c; } public String encode(Command c) { String s = null; if (c instanceof ModulePlugin.RegCmd) { ModulePlugin.RegCmd cmd = (ModulePlugin.RegCmd) c; SequenceEncoder se = new SequenceEncoder('\t'); se.append(cmd.getName()).append(cmd.getVersion()); s = COMMAND_PREFIX + se.getValue(); } else { s = super.encode(c); } return s; } public static String getPluginDirectory() { return new ExtensionsManager("plugins").getExtensionsDirectory(false).getPath(); //$NON-NLS-1$ } protected String getLoadedMessage(String name, String version) { return Resources.getString("PluginsLoader.plugin_loaded", name, version); //$NON-NLS-1$ } protected String getErrorMessage(String name, String msg) { return Resources.getString("PluginsLoader.unable_to_load", name , msg); //$NON-NLS-1$ } /** * Any components that are added to the module by a Plugin MUST * implement PluginElement to prevent them being written to the * buildFile when saving the module. Implemented by Plugin and * ModuleExtension. */ public interface PluginElement { } }