package master.flame.danmaku.danmaku.parser.android;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import master.flame.danmaku.danmaku.parser.IDataSource;
import master.flame.danmaku.danmaku.util.IOUtils;
import org.json.JSONArray;
import org.json.JSONException;
import android.net.Uri;
import android.text.TextUtils;
/**
* a json file source
* @author yrom
*/
public class JSONSource implements IDataSource<JSONArray>{
private JSONArray mJSONArray;
private InputStream mInput;
public JSONSource(String json) throws JSONException{
init(json);
}
public JSONSource(InputStream in) throws JSONException{
init(in);
}
private void init(InputStream in) throws JSONException {
if(in == null)
throw new NullPointerException("input stream cannot be null!");
mInput = in;
String json = IOUtils.getString(mInput);
init(json);
}
public JSONSource(URL url) throws JSONException, IOException{
this(url.openStream());
}
public JSONSource(File file) throws FileNotFoundException, JSONException{
init(new FileInputStream(file));
}
public JSONSource(Uri uri) throws IOException, JSONException {
String scheme = uri.getScheme();
if (SCHEME_HTTP_TAG.equalsIgnoreCase(scheme) || SCHEME_HTTPS_TAG.equalsIgnoreCase(scheme)) {
init(new URL(uri.getPath()).openStream());
} else if (SCHEME_FILE_TAG.equalsIgnoreCase(scheme)) {
init(new FileInputStream(uri.getPath()));
}
}
private void init(String json) throws JSONException {
if(!TextUtils.isEmpty(json)){
mJSONArray = new JSONArray(json);
}
}
public JSONArray data(){
return mJSONArray;
}
@Override
public void release() {
IOUtils.closeQuietly(mInput);
mInput = null;
mJSONArray = null;
}
}