From: <sou...@us...> - 2006-03-01 20:39:36
|
Revision: 47 Author: soulcatcher Date: 2006-03-01 12:39:30 -0800 (Wed, 01 Mar 2006) ViewCVS: http://svn.sourceforge.net/pcgen/?rev=47&view=rev Log Message: ----------- Changes to allow bonuses to be loaded in plugin jars Modified Paths: -------------- Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java Modified: Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java =================================================================== --- Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2006-03-01 20:15:04 UTC (rev 46) +++ Trunk/pcgen/code/src/java/pcgen/core/bonus/Bonus.java 2006-03-01 20:39:30 UTC (rev 47) @@ -45,6 +45,7 @@ static final int BONUS_UNDEFINED = -1; private static boolean objectListInitialized; + private static int bonusTagMapNum = 0; private static final HashMap BONUS_TAG_MAP = new HashMap(); @@ -169,7 +170,7 @@ BonusObj aBonus = null; try { - aBonus = (BonusObj) Class.forName("pcgen.core.bonus." + bEntry.getBonusObjectName()).newInstance(); + aBonus = (BonusObj) bEntry.getBonusClass().newInstance(); } catch (Exception exc) { @@ -300,7 +301,6 @@ try { final JarFile jarfile = new JarFile(jarName); - int iCount = 0; for (Enumeration e = jarfile.entries() ; e.hasMoreElements() ;) { String jarEntry = e.nextElement().toString(); @@ -316,20 +316,7 @@ .getPackage().getName()) .append('.') .append(jarEntry).toString()); - - if (BonusObj.class.isAssignableFrom(jarClass)) - { - final BonusObj bonusObj = (BonusObj) jarClass.newInstance(); - final String[] handled = bonusObj.getBonusesHandled(); - if (handled != null) - { - bAdded = true; - for (int i = 0; i < handled.length; ++i) - { - BONUS_TAG_MAP.put(handled[i], new bonusMapEntry(jarEntry, iCount++)); - } - } - } + bAdded = addBonusClass(jarClass, jarEntry); } catch (Exception exc) { @@ -354,21 +341,42 @@ } } } + + public static boolean addBonusClass(Class bonusClass, String bonusName) throws InstantiationException, IllegalAccessException { + boolean added = false; + if (BonusObj.class.isAssignableFrom(bonusClass)) + { + final BonusObj bonusObj = (BonusObj) bonusClass.newInstance(); + final String[] handled = bonusObj.getBonusesHandled(); + if (handled != null) + { + added = true; + for (int i = 0; i < handled.length; ++i) + { + BONUS_TAG_MAP.put(handled[i], new bonusMapEntry(bonusName, bonusTagMapNum++, bonusClass)); + } + } + } + return added; + } + private static class bonusMapEntry { private int bonusType = BONUS_UNDEFINED; private String bonusObjectName = ""; + private Class bonusClass; /** * Constructor * @param argName * @param argType */ - public bonusMapEntry(final String argName, final int argType) + public bonusMapEntry(final String bonusObjectName, final int bonusType, final Class bonusClass) { - bonusObjectName = argName; - bonusType = argType; + this.bonusObjectName = bonusObjectName; + this.bonusType = bonusType; + this.bonusClass = bonusClass; } /** @@ -388,6 +396,11 @@ { return bonusType; } + + public final Class getBonusClass() + { + return bonusClass; + } public String toString() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |