package org.anddev.andengine.entity.layer.tiled.tmx; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.anddev.andengine.entity.layer.tiled.tmx.util.exception.TSXLoadException; import org.anddev.andengine.opengl.texture.TextureManager; import org.anddev.andengine.opengl.texture.TextureOptions; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import android.content.Context; /** * (c) 2010 Nicolas Gramlich * (c) 2011 Zynga Inc. * * @author Nicolas Gramlich * @since 17:18:37 - 08.08.2010 */ public class TSXLoader { // =========================================================== // Constants // =========================================================== // =========================================================== // Fields // =========================================================== private final Context mContext; private final TextureManager mTextureManager; private final TextureOptions mTextureOptions; // =========================================================== // Constructors // =========================================================== public TSXLoader(final Context pContext, final TextureManager pTextureManager, final TextureOptions pTextureOptions) { this.mContext = pContext; this.mTextureManager = pTextureManager; this.mTextureOptions = pTextureOptions; } // =========================================================== // Getter & Setter // =========================================================== // =========================================================== // Methods for/from SuperClass/Interfaces // =========================================================== // =========================================================== // Methods // =========================================================== public TMXTileSet loadFromAsset(final Context pContext, final int pFirstGlobalTileID, final String pAssetPath) throws TSXLoadException { try { return this.load(pFirstGlobalTileID, pContext.getAssets().open(pAssetPath)); } catch (final IOException e) { throw new TSXLoadException("Could not load TMXTileSet from asset: " + pAssetPath, e); } } private TMXTileSet load(final int pFirstGlobalTileID, final InputStream pInputStream) throws TSXLoadException { try{ final SAXParserFactory spf = SAXParserFactory.newInstance(); final SAXParser sp = spf.newSAXParser(); final XMLReader xr = sp.getXMLReader(); final TSXParser tsxParser = new TSXParser(this.mContext, this.mTextureManager, this.mTextureOptions, pFirstGlobalTileID); xr.setContentHandler(tsxParser); xr.parse(new InputSource(new BufferedInputStream(pInputStream))); return tsxParser.getTMXTileSet(); } catch (final SAXException e) { throw new TSXLoadException(e); } catch (final ParserConfigurationException pe) { /* Doesn't happen. */ return null; } catch (final IOException e) { throw new TSXLoadException(e); } } // =========================================================== // Inner and Anonymous Classes // =========================================================== }