/*
* Copyright (C) 2014 Open Whisper Systems
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.anhonesteffort.flock.registration.model;
import android.util.Log;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.anhonesteffort.flock.util.MapperUtil;
import java.io.IOException;
/**
* rhodey
*/
@JsonDeserialize(using = SubscriptionPlanDeserializer.class)
public class SubscriptionPlan {
public static final int PLAN_TYPE_NONE = 0;
public static final int PLAN_TYPE_STRIPE = 1;
public static final int PLAN_TYPE_GOOGLE = 2;
public static final SubscriptionPlan PLAN_NONE = new SubscriptionPlan("nope", SubscriptionPlan.PLAN_TYPE_NONE, "nope");
@JsonProperty
protected String accountId;
@JsonProperty
protected Integer planType;
@JsonProperty
protected String planId;
public SubscriptionPlan() { }
public SubscriptionPlan(String accountId, Integer planType, String planId) {
this.accountId = accountId;
this.planType = planType;
this.planId = planId;
}
public static SubscriptionPlan buildFromSerialized(Integer planType,
String serializedPlan)
throws JsonParseException
{
try {
switch (planType) {
case PLAN_TYPE_NONE:
return PLAN_NONE;
case PLAN_TYPE_STRIPE:
return MapperUtil.getMapper().readValue(serializedPlan, StripePlan.class);
case PLAN_TYPE_GOOGLE:
return MapperUtil.getMapper().readValue(serializedPlan, GooglePlan.class);
default:
Log.e(SubscriptionPlan.class.getName(), "unknown plan type" + planType);
return PLAN_NONE;
}
} catch (IOException e) {
throw new JsonParseException("unable to build plan for type " + planType, null, e);
}
}
public String getAccountId() {
return accountId;
}
public Integer getPlanType() {
return planType;
}
public String getPlanId() {
return planId;
}
public String serialize() throws JsonProcessingException {
return MapperUtil.getMapper().writeValueAsString(this);
}
@Override
public boolean equals(Object other) {
if (other == null) return false;
if (!(other instanceof SubscriptionPlan)) return false;
SubscriptionPlan that = (SubscriptionPlan)other;
return this.accountId.equals(that.accountId) &&
this.planType.equals(that.planType) &&
this.planId.equals(that.planId);
}
@Override
public int hashCode() {
return accountId.hashCode() ^ planType.hashCode() ^ planId.hashCode();
}
}