package com.dianping.loader.model;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Parcel;
import android.os.Parcelable;
public class SiteSpec implements Parcelable {
private String id;
private String version;
private FileSpec[] files;
private FragmentSpec[] fragments;
public SiteSpec(String id, String version, FileSpec[] files,
FragmentSpec[] fragments) {
this.id = id;
this.version = version;
this.files = files;
this.fragments = fragments;
}
public SiteSpec(JSONObject json) throws JSONException {
id = json.getString("id");
version = json.getString("version");
JSONArray arr = json.getJSONArray("files");
files = new FileSpec[arr.length()];
for (int i = 0; i < files.length; i++) {
JSONObject obj = arr.getJSONObject(i);
FileSpec f = new FileSpec(obj);
files[i] = f;
}
arr = json.getJSONArray("fragments");
fragments = new FragmentSpec[arr.length()];
for (int i = 0; i < fragments.length; i++) {
JSONObject obj = arr.getJSONObject(i);
FragmentSpec f = new FragmentSpec(obj);
fragments[i] = f;
}
}
public String id() {
return id;
}
public String version() {
return version;
}
public FileSpec[] files() {
return files;
}
public FragmentSpec[] fragments() {
return fragments;
}
public FragmentSpec getFragment(String host) {
for (FragmentSpec f : fragments) {
if (host.equalsIgnoreCase(f.host())) {
return f;
}
}
return null;
}
public FileSpec getFile(String id) {
for (FileSpec f : files) {
if (id.equals(f.id())) {
return f;
}
}
return null;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(id);
if (!id.contains(version)) {
sb.append(" v").append(version);
}
sb.append(" (").append(files.length).append(" files, ")
.append(fragments.length).append(" fragments)");
return sb.toString();
}
//
// Parcelable
//
@Override
public void writeToParcel(Parcel out, int flags) {
out.writeString(id);
out.writeTypedArray(files, 0);
out.writeTypedArray(fragments, 0);
}
@Override
public int describeContents() {
return 0;
}
public static final Parcelable.Creator<SiteSpec> CREATOR = new Parcelable.Creator<SiteSpec>() {
public SiteSpec createFromParcel(Parcel in) {
return new SiteSpec(in);
}
public SiteSpec[] newArray(int size) {
return new SiteSpec[size];
}
};
protected SiteSpec(Parcel in) {
id = in.readString();
files = in.createTypedArray(FileSpec.CREATOR);
fragments = in.createTypedArray(FragmentSpec.CREATOR);
}
}