package org.moparscape.msc.gs.persistence.impl; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; import net.jcip.annotations.NotThreadSafe; import org.moparscape.msc.config.Config; import org.moparscape.msc.gs.external.*; import org.moparscape.msc.gs.model.InvItem; import org.moparscape.msc.gs.model.Point; import org.moparscape.msc.gs.model.Shop; import org.moparscape.msc.gs.model.TelePoint; import org.moparscape.msc.gs.npchandler.NpcHandlerDef; import org.moparscape.msc.gs.persistence.DataStore; import org.moparscape.msc.gs.phandler.PacketHandlerDef; import org.moparscape.msc.gs.util.Logger; import com.thoughtworks.xstream.XStream; /** * * A DataStore that parses XML using XStream. * * @author Joe Pritzel * */ @NotThreadSafe @SuppressWarnings("unchecked") public class XMLUsingXStream implements DataStore { protected XMLUsingXStream() { // To conform to the contract specified by the DataStore interface. } private static final XStream xstream = new XStream(); static { try { setupAliases(); } catch (Exception e) { e.printStackTrace(); } } public static Object load(String filename) { filename = filename.replaceAll(Pattern.quote("/"), Matcher.quoteReplacement(File.separator)); try { InputStream is = new FileInputStream(new File(Config.CONF_DIR, filename)); if (filename.endsWith(".gz")) { is = new GZIPInputStream(is); } Object rv = xstream.fromXML(is); return rv; } catch (IOException ioe) { Logger.error("Filename = " + filename); Logger.error(ioe); } return null; } public static void setupAliases() { try { Properties aliases = new Properties(); FileInputStream fis = new FileInputStream(new File(Config.CONF_DIR, "aliases.xml")); aliases.loadFromXML(fis); for (Enumeration e = aliases.propertyNames(); e .hasMoreElements();) { String alias = (String) e.nextElement(); Class c = Class.forName((String) aliases.get(alias)); xstream.alias(alias, c); } } catch (Exception ioe) { Logger.error(ioe); } } public static void write(String filename, Object o) { filename = filename.replaceAll(Pattern.quote("/"), Matcher.quoteReplacement(File.separator)); try { OutputStream os = new FileOutputStream(new File(Config.CONF_DIR, filename)); if (filename.endsWith(".gz")) { os = new GZIPOutputStream(os); } xstream.toXML(o, os); } catch (IOException ioe) { Logger.error(ioe); } } @Override public PacketHandlerDef[] loadPacketHandlerDefs() { return (PacketHandlerDef[]) load("PacketHandlers.xml"); } @Override public PacketHandlerDef[] loadLSPacketHandlerDefs() { return (PacketHandlerDef[]) load("LSPacketHandlers.xml"); } @Override public NpcHandlerDef[] loadNpcHandlers() { return (NpcHandlerDef[]) load("NpcHandlers.xml"); } @Override public Map loadTelePoints() { return (Map) load("locs/extras/ObjectTelePoints.xml.gz"); } @Override public List loadShops() { return (List) load("locs/Shops.xml.gz"); } @Override public Map loadCerterDefs() { return (Map) load("defs/extras/NpcCerters.xml.gz"); } @Override public List loadGameObjectLocs() { return (List) load("locs/GameObjectLoc.xml.gz"); } @Override public List loadItemLocs() { return (List) load("locs/ItemLoc.xml.gz"); } @Override public List loadNPCLocs() { return (List) load("locs/NpcLoc.xml.gz"); } @Override public TileDef[] loadTileDefs() { return (TileDef[]) load("defs/TileDef.xml.gz"); } @Override public GameObjectDef[] loadGameObjectDefs() { return (GameObjectDef[]) load("defs/GameObjectDef.xml.gz"); } @Override public DoorDef[] loadDoorDefs() { return (DoorDef[]) load("defs/DoorDef.xml.gz"); } @Override public ItemDef[] loadItemDefs() { return (ItemDef[]) load("defs/ItemDef.xml.gz"); } @Override public PrayerDef[] loadPrayerDefs() { return (PrayerDef[]) load("defs/PrayerDef.xml.gz"); } @Override public SpellDef[] loadSpellDefs() { return (SpellDef[]) load("defs/SpellDef.xml.gz"); } @Override public NPCDef[] loadNPCDefs() { return (NPCDef[]) load("defs/NPCDef.xml.gz"); } @Override public ItemCraftingDef[] loadItemCraftingDefs() { return (ItemCraftingDef[]) load("defs/extras/ItemCraftingDef.xml.gz"); } @Override public ItemHerbSecond[] loadItemHerbSeconds() { return (ItemHerbSecond[]) load("defs/extras/ItemHerbSecond.xml.gz"); } @Override public Map loadItemDartTipDefs() { return (Map) load("defs/extras/ItemDartTipDef.xml.gz"); } @Override public Map loadGemDefs() { return (Map) load("defs/extras/ItemGemDef.xml.gz"); } @Override public Map loadItemLogCutDefs() { return (Map) load("defs/extras/ItemLogCutDef.xml.gz"); } @Override public Map loadItemBowStringDefs() { return (Map) load("defs/extras/ItemBowStringDef.xml.gz"); } @Override public Map loadItemArrowHeadDefs() { return (Map) load("defs/extras/ItemArrowHeadDef.xml.gz"); } @Override public Map loadFiremakingDefs() { return (Map) load("defs/extras/FiremakingDef.xml.gz"); } @Override public Map loadItemAffectedTypes() { return (Map) load("defs/extras/ItemAffectedTypes.xml.gz"); } @Override public Map loadItemWieldableDefs() { return (Map) load("defs/extras/ItemWieldableDef.xml.gz"); } @Override public Map loadItemUnIdentHerbDefs() { return (Map) load("defs/extras/ItemUnIdentHerbDef.xml.gz"); } @Override public Map loadItemHerbDefs() { return (Map) load("defs/extras/ItemHerbDef.xml.gz"); } @Override public Map loadItemEdibleHeals() { return (Map) load("defs/extras/ItemEdibleHeals.xml.gz"); } @Override public Map loadItemCookingDefs() { return (Map) load("defs/extras/ItemCookingDef.xml.gz"); } @Override public Map loadItemSmeltingDefs() { return (Map) load("defs/extras/ItemSmeltingDef.xml.gz"); } @Override public ItemSmithingDef[] loadItemSmithingDefs() { return (ItemSmithingDef[]) load("defs/extras/ItemSmithingDef.xml.gz"); } @Override public Map loadObjectMiningDefs() { return (Map) load("defs/extras/ObjectMining.xml.gz"); } @Override public Map loadObjectWoodcuttingDefs() { return (Map) load("defs/extras/ObjectWoodcutting.xml.gz"); } @Override public Map loadObjectFishDefs() { return (Map) load("defs/extras/ObjectFishing.xml.gz"); } @Override public Map loadSpellAgressiveLevel() { return (Map) load("defs/extras/SpellAggressiveLvl.xml.gz"); } @Override public Map loadAgilityDefs() { return (Map) load("defs/extras/AgilityDef.xml.gz"); } @Override public Map loadAgilityCourseDefs() { return (Map) load("defs/extras/AgilityCourseDef.xml.gz"); } @Override public List[] loadKeyChestLoots() { return (List[]) load("defs/extras/KeyChestLoot.xml.gz"); } @Override public Map loadDartTips() { return (HashMap) load("defs/extras/ItemDartTipDef.xml.gz"); } @Override public void dispose() { } @Override public void savePacketHandlerDefs(PacketHandlerDef[] defs) throws Exception { write("PacketHandlers.xml", defs); } @Override public void saveLSPacketHandlerDefs(PacketHandlerDef[] defs) throws Exception { write("LSPacketHanlders.xml", defs); } @Override public void saveNpcHandlers(NpcHandlerDef[] defs) throws Exception { write("NpcHandlers.xml", defs); } @Override public void saveTelePoints(Map points) throws Exception { write("locs/extras/ObjectTelePoints.xml.gz", points); } @Override public void saveShops(List shops) throws Exception { write("locs/Shops.xml.gz", shops); } @Override public void saveCerterDefs(Map certers) throws Exception { write("defs/extras/NpcCerters.xml.gz", certers); } @Override public void saveGameObjectLocs(List locs) throws Exception { write("locs/GameObjectLocs.xml.gz", locs); } @Override public void saveItemLocs(List locs) throws Exception { write("locs/ItemLoc.xml.gz", locs); } @Override public void saveNPCLocs(List locs) throws Exception { write("locs/NpcLoc.xml.gz", locs); } @Override public void saveTileDefs(TileDef[] defs) throws Exception { write("defs/TileDef.xml.gz", defs); } @Override public void saveGameObjectDefs(GameObjectDef[] defs) throws Exception { write("defs/GameObjectDef.xml.gz", defs); } @Override public void saveDoorDefs(DoorDef[] defs) throws Exception { write("defs/DoorDef.xml.gz", defs); } @Override public void saveItemDefs(ItemDef[] defs) throws Exception { write("defs/ItemDef.xml.gz", defs); } @Override public void savePrayerDefs(PrayerDef[] defs) throws Exception { write("defs/PrayerDef.xml.gz", defs); } @Override public void saveSpellDefs(SpellDef[] defs) throws Exception { write("defs/SpellDef.xml.gz", defs); } @Override public void saveNPCDefs(NPCDef[] defs) throws Exception { write("defs/NPCDef.xml.gz", defs); } @Override public void saveItemCraftingDefs(ItemCraftingDef[] defs) throws Exception { write("defs/extras/ItemCraftingDef.xml.gz", defs); } @Override public void saveItemHerbSeconds(ItemHerbSecond[] seconds) throws Exception { write("defs/extras/ItemHerbSecond.xml.gz", seconds); } @Override public void saveItemDartTipDefs(Map defs) throws Exception { write("defs/extras/ItemDartTipDef.xml.gz", defs); } @Override public void saveGemDefs(Map defs) throws Exception { write("def/extras/ItemGemDef.xml.gz", defs); } @Override public void saveItemLogCutDefs(Map defs) throws Exception { write("def/extras/ItemLogCutDefs.xml.gz", defs); } @Override public void saveItemBowStringDefs(Map defs) throws Exception { write("defs/extras/ItemBowStringDef.xml.gz", defs); } @Override public void saveItemArrowHeadDefs(Map defs) throws Exception { write("defs/extras/ItemArrowHeadDef.xml.gz", defs); } @Override public void saveFiremakingDefs(Map defs) throws Exception { write("defs/extras/FiremakingDef.xml.gz", defs); } @Override public void saveItemAffectedTypes(Map types) throws Exception { write("defs/extras/ItemAffectedTypes.xml.gz", types); } @Override public void saveItemWieldableDefs(Map defs) throws Exception { write("defs/extras/ItemWieldableDef.xml.gz", defs); } @Override public void saveItemUnIdentHerbDefs(Map defs) throws Exception { write("defs/extras/Item.UnIdentHerbDef.xml.gz", defs); } @Override public void saveItemHerbDefs(Map defs) throws Exception { write("defs/extras/ItemHerbDef.xml.gz", defs); } @Override public void saveItemEdibleHeals(Map defs) throws Exception { write("defs/extras/ItemEdibleHeals.xml.gz", defs); } @Override public void saveItemCookingDefs(Map defs) throws Exception { write("defs/extras/ItemCookingDef.xml.gz", defs); } @Override public void saveItemSmeltingDefs(Map defs) throws Exception { write("defs/extras/ItemSmeltingDef.xml.gz", defs); } @Override public void saveItemSmithingDefs(ItemSmithingDef[] defs) throws Exception { write("defs/extras/ItemSmithingDef.xml.gz", defs); } @Override public void saveObjectMiningDefs(Map defs) throws Exception { write("defs/extras/ObjectMiningDef.xml.gz", defs); } @Override public void saveObjectWoodcuttingDefs( Map defs) throws Exception { write("defs/extras/ObjectWoodcuttingDef.xml.gz", defs); } @Override public void saveObjectFishingDefs(Map defs) throws Exception { write("defs/extras/ObjectFishingDef.xml.gz", defs); } @Override public void saveSpellAgressiveLevel(Map defs) throws Exception { write("defs/extras/SpellAgressiveLvl.xml.gz", defs); } @Override public void saveAgilityDefs(Map defs) throws Exception { write("defs/extras/AgilityDef.xml.gz", defs); } @Override public void saveAgilityCourseDef(Map defs) throws Exception { write("defs/extras/AgilityCourseDef.xml.gz", defs); } @Override public void saveKeyChestLoots(List[] loots) throws Exception { write("defs/extras/KeyChestLoot.xml.gz", loots); } }