package com.andexp.skinmixer.skindata; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.ArrayList; import com.andexp.skinmixer.path.SkinLister; import com.andexp.skinmixer.utils.MLog; public class SkinDataReader { public static final String EXTENSION_TXT = ".txt"; private File mTextFile; private SkinData mSkinData; public SkinDataReader(String directoryPath) { mTextFile = getTextFileFromPath(directoryPath); } private File getTextFileFromPath(String directoryName) { String name = SkinLister.getNameFromPath(directoryName); if (name != null) return new File(directoryName + name + EXTENSION_TXT); else return null; } public SkinData getData() { if (mTextFile.isFile()) { ArrayList<String> textLines = tryExtractingDataFromFile(mTextFile); loadSkinDataFromTextArray(textLines); } return mSkinData; } private ArrayList<String> tryExtractingDataFromFile(File myTextFile) { ArrayList<String> textLines = null; try { textLines = extractDataFromSkinTextFile(myTextFile); } catch (FileNotFoundException e) { MLog.e("Text File not found : " + e.getMessage()); } catch (IOException e) { MLog.e("Text File IOException : " + e.getMessage()); } return textLines; } private ArrayList<String> extractDataFromSkinTextFile(File myTextFile) throws FileNotFoundException, IOException { ArrayList<String> textLines = new ArrayList<String>(); FileInputStream fileInputStream = new FileInputStream(myTextFile); InputStreamReader inputStream = new InputStreamReader(fileInputStream, Charset.forName("UTF-8")); BufferedReader bufferedReader = new BufferedReader(inputStream); String lineData = bufferedReader.readLine(); while (lineData != null) { textLines.add(lineData); lineData = bufferedReader.readLine(); } fileInputStream.close(); return textLines; } private void loadSkinDataFromTextArray(ArrayList<String> textLines) { mSkinData = new SkinData(); if (textLines != null) { for (int i = 0; i < textLines.size(); i++) { for (int j = 0; j < SkinDataName.TAGS.length; j++) { if (textLines.get(i).toLowerCase().contains(SkinDataName.TAGS[j])) { extractDataFromLine(textLines.get(i), j); break; } } } } } private SkinData extractDataFromLine(String textLine, int dataNameId) { String data = extractDataFromLine(textLine); switch (dataNameId) { case SkinDataName.SKINNAME: mSkinData.skinName = data; break; case SkinDataName.AUTHOR: mSkinData.author = data; break; case SkinDataName.URL: mSkinData.url = data; break; case SkinDataName.DONATE: mSkinData.donate = data; break; case SkinDataName.GENERATEDBY: mSkinData.generatedFrom = data; break; case SkinDataName.BACKGROUND: mSkinData.idBackground = data; break; case SkinDataName.BACKGROUNDNUMBER: mSkinData.idBackgroundNumber = data; break; case SkinDataName.NUMBER: mSkinData.idNumber = data; break; case SkinDataName.NUMBER_SKINTYPE: mSkinData.setNumberSkinType(data); break; } return mSkinData; } private String extractDataFromLine(String textLine) { if (textLine != null && containsAssociation(textLine) && containsTagValue(textLine)) return getTagValue(textLine); else return null; } private boolean containsAssociation(String textLine) { if (textLine.split("=", 2).length > 1) return true; else return false; } private boolean containsTagValue(String textLine) { if (textLine.split("=", 2)[1].replaceAll(" ", "").length() > 1) return true; else return false; } private String getTagValue(String textLine) { return textLine.split("=", 2)[1]; } }