package org.softeg.slartus.forpdaplus.styles; import android.content.Context; import android.util.Xml; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; /** * Created by slinkin on 17.06.13. */ public class CssStyle { public Boolean ExistsInfo = true; public String Title; public String Version; public String Author; public String Comment; public ArrayList<CssStyleScreenShot> ScreenShots = new ArrayList<CssStyleScreenShot>(); public static CssStyle parseStyleFromAssets(Context context, String filePath) { CssStyle cssStyle = new CssStyle(); cssStyle.Title = new File(filePath).getName(); try { cssStyle = parseStyle(cssStyle, context.getAssets().open(filePath)); } catch (Throwable ex) { cssStyle.ExistsInfo = false; } return cssStyle; } public static CssStyle parseStyleFromFile(String filePath) { CssStyle cssStyle = new CssStyle(); File file = new File(filePath); cssStyle.Title = file.getName().replace(".xml", ""); try { if (file.exists()) cssStyle = parseStyle(cssStyle, new FileInputStream(filePath)); else cssStyle.ExistsInfo = false; } catch (Throwable ex) { cssStyle.ExistsInfo = false; } return cssStyle; } public static CssStyle parseStyle(Context context, String filePath) { if (filePath.startsWith("/android_asset")) return parseStyleFromAssets(context, filePath.replace("/android_asset/", "")); return parseStyleFromFile(filePath); } private static CssStyle parseStyle(CssStyle cssStyle, InputStream in) throws XmlPullParserException, IOException { XmlPullParser parser = Xml.newPullParser(); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); parser.setInput(in, null); int eventType = parser.getEventType(); if (eventType == XmlPullParser.END_DOCUMENT) return null; while (parser.next() != XmlPullParser.END_DOCUMENT) { eventType = parser.getEventType(); if (eventType == XmlPullParser.START_TAG) { String name = parser.getName().toLowerCase(); if (name.equals("title")) { parser.next(); eventType = parser.getEventType(); if (eventType == XmlPullParser.TEXT) cssStyle.Title = parser.getText(); } else if (name.equals("version")) { parser.next(); eventType = parser.getEventType(); if (eventType == XmlPullParser.TEXT) cssStyle.Version = parser.getText(); } else if (name.equals("author")) { parser.next(); eventType = parser.getEventType(); if (eventType == XmlPullParser.TEXT) cssStyle.Author = parser.getText(); } else if (name.equals("comment")) { parser.next(); eventType = parser.getEventType(); if (eventType == XmlPullParser.TEXT) cssStyle.Comment = parser.getText(); } else if (name.equals("screenshot")) { cssStyle.ScreenShots.add(parseScreenShot(parser)); } } } return cssStyle; } public static CssStyleScreenShot parseScreenShot(XmlPullParser parser) throws IOException, XmlPullParserException { CssStyleScreenShot screenShot = new CssStyleScreenShot(); screenShot.Preview = parser.getAttributeValue(null, "Preview"); screenShot.FullView = parser.getAttributeValue(null, "FullView"); return screenShot; } }