package com.xiaomi.xms.sales.model;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.Serializable;
import java.util.ArrayList;
public class ProductInfo implements Parcelable,Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
private String mProductId;
private String mProductName;
private String mProductPrice;
private String mMarketPrice;
private String mStyleName;
private String mUrl;
private Image mProductPhoto;
private boolean mHasProduct;
private boolean mDataError;
private String mDisplayType;
private String mPid;
private boolean mIsBatched;
private String mContainId;
public ProductInfo(String productId, String productName, String productPrice,
String marketPrice, String styleName,
boolean hasProduct, Image photo) {
mProductId = productId;
mProductPrice = productPrice;
mMarketPrice = marketPrice;
mProductPhoto = photo;
mProductName = productName;
mHasProduct = hasProduct;
mStyleName = styleName;
}
public ProductInfo(String productId, String productName, String productPrice,
String marketPrice, String styleName,
boolean hasProduct, Image photo, String url, String displayType) {
mProductId = productId;
mProductPrice = productPrice;
mMarketPrice = marketPrice;
mProductPhoto = photo;
mProductName = productName;
mHasProduct = hasProduct;
mStyleName = styleName;
mUrl = url;
mDisplayType = displayType;
}
// 读取顺序必须与 writeToParcel 写入顺序一致
public ProductInfo(Parcel source) {
mProductId = source.readString();
mProductName = source.readString();
mProductPrice = source.readString();
mMarketPrice = source.readString();
mStyleName = source.readString();
mUrl = source.readString();
mProductPhoto = new Image(source.readString());
mHasProduct = source.readByte() == 1;
mDataError = source.readByte() == 1;
}
public String getProductPrice() {
return mProductPrice;
}
public Image getImage() {
return mProductPhoto;
}
public String getProductName() {
return mProductName;
}
public String getProductId() {
return mProductId;
}
public String getStyleName() {
return mStyleName;
}
public boolean hasProduct() {
return mHasProduct;
}
public String getUrl() {
return mUrl;
}
public String getMarketPrice() {
return mMarketPrice;
}
public String getDisplayType() {
return mDisplayType;
}
public String getPid() {
return mPid;
}
public void setPid(String mPid) {
this.mPid = mPid;
}
public boolean isIsBatched() {
return mIsBatched;
}
public void setIsBatched(boolean mIsBatched) {
this.mIsBatched = mIsBatched;
}
public String getContainId() {
return mContainId;
}
public void setContainId(String mContainId) {
this.mContainId = mContainId;
}
public static String getCateName(JSONObject json) throws JSONException {
if (Tags.isJSONReturnedOK(json)) {
String bodyStr = json.optString(Tags.BODY);
if (!TextUtils.isEmpty(bodyStr)) {
JSONObject body = new JSONObject(bodyStr);
return body.optJSONObject("catinfo").optString(Tags.Product.CATE_NAME);
}
}
return null;
}
public static int getPageSize(JSONObject json) throws JSONException {
if (Tags.isJSONReturnedOK(json)) {
String bodyStr = json.optString(Tags.BODY);
if (!TextUtils.isEmpty(bodyStr)) {
JSONObject body = new JSONObject(bodyStr);
return body.optJSONObject("catinfo").optInt("pagesize");
}
}
return 0;
}
public static String getSearchResultCount(JSONObject json) throws JSONException {
if (Tags.isJSONReturnedOK(json)) {
String bodyStr = json.optString(Tags.BODY);
if (!TextUtils.isEmpty(bodyStr)) {
JSONObject body = new JSONObject(bodyStr);
return body.optJSONObject("catinfo").optString(Tags.Product.TOTAL_COUNT);
}
}
return null;
}
public static ArrayList<ProductInfo> valueOf(JSONObject json) throws JSONException {
ArrayList<ProductInfo> list = null;
if (Tags.isJSONReturnedOK(json)) {
String bodyStr = json.optString(Tags.BODY);
if (!TextUtils.isEmpty(bodyStr)) {
JSONObject body = new JSONObject(bodyStr);
JSONArray productJsonArray = body.optJSONArray(Tags.Product.PRODUCT);
if (productJsonArray != null) {
list = new ArrayList<ProductInfo>();
for (int i = 0; i < productJsonArray.length(); i++) {
if (!productJsonArray.isNull(i)) {
JSONObject proJsonobject = (JSONObject) productJsonArray.get(i);
String productId = proJsonobject.optString(Tags.Product.PRODUCT_ID);
String productName = proJsonobject.optString(Tags.Product.PRODUCT_NAME);
String price = proJsonobject.optString(Tags.Product.PRICE);
String marketPrice = proJsonobject.optString(Tags.Product.MARKET_PRICE);
String styleName = proJsonobject.optString(Tags.Product.STYLE_NAME);
boolean hasProduct = proJsonobject.optBoolean(Tags.Product.IS_COS);
String imageUrl = proJsonobject.optString(Tags.Product.IMAGE_URL);
String url = proJsonobject.optString(Tags.Product.URL, "");
String displayType = proJsonobject.optString(Tags.Product.DISPLAY_TYPE,
Tags.Product.DISPLAY_NATIVE);
String pid = proJsonobject.optString(Tags.Product.P_ID, productId);
boolean isBatched = proJsonobject.optBoolean(Tags.Product.IS_BATCHED,false);
String containId = proJsonobject.optString(Tags.Product.CONTAINID);
ProductInfo productInfo = new ProductInfo(productId, productName, price, marketPrice,
styleName, !hasProduct, new Image(imageUrl), url, displayType);
productInfo.setPid(pid);
productInfo.setIsBatched(isBatched);
productInfo.setContainId(containId);
list.add(productInfo);
}
}
}
}
}
return list;
}
public static ProductInfo valueof(JSONObject proJsonobject){
String productId = proJsonobject.optString("product_id");
String productName = proJsonobject.optString("product_name");
String price = proJsonobject.optString("price");
String marketPrice = proJsonobject.optString("market_price");
String styleName = proJsonobject.optString("style_name");
boolean hasProduct = true;
String imageUrl = proJsonobject.optString("image_url");
String url = "";
String displayType = "";
String pid = proJsonobject.optString("p_id");
boolean isBatched = proJsonobject.optBoolean("is_batched");
String containId = proJsonobject.optString("sku");
ProductInfo productInfo = new ProductInfo(productId, productName, price, marketPrice,
styleName, !hasProduct, new Image(imageUrl), url, displayType);
if(productInfo != null){
productInfo.setPid(pid);
productInfo.setIsBatched(isBatched);
productInfo.setContainId(containId);
}
return productInfo;
}
@Override
public int describeContents() {
return 0;
}
// 实现Parcelable的方法writeToParcel,将ProductInfo序列化为一个Parcel对象
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(mProductId);
dest.writeString(mProductName);
dest.writeString(mProductPrice);
dest.writeString(mMarketPrice);
dest.writeString(mStyleName);
dest.writeString(mUrl);
dest.writeString(mProductPhoto.getFileUrl());
dest.writeByte((byte) (mHasProduct ? 1 : 0));
dest.writeByte((byte) (mDataError ? 1 : 0));
}
// 实例化静态内部对象CREATOR实现接口Parcelable.Creator
public static final Parcelable.Creator<ProductInfo> CREATOR = new Creator<ProductInfo>() {
@Override
public ProductInfo createFromParcel(Parcel source) {
return new ProductInfo(source);
}
// 将Parcel对象反序列化为ProductInfo
@Override
public ProductInfo[] newArray(int size) {
return new ProductInfo[size];
}
};
}