/** * Copyright 2012 Comcast Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.comcast.cns.model; import java.util.Iterator; import org.apache.log4j.Logger; import org.json.JSONException; import org.json.JSONObject; import com.comcast.cmb.common.util.CMBException; import com.comcast.cns.util.CNSErrorCodes; /** * Represents a subscription delivery policy * @author aseem * * Class is not thread-safe. Caller must ensure thread-safety */ public class CNSSubscriptionDeliveryPolicy { private CNSRetryPolicy healthyRetryPolicy; private CNSRetryPolicy sicklyRetryPolicy; private CNSThrottlePolicy throttlePolicy; private static Logger logger = Logger.getLogger(CNSSubscriptionDeliveryPolicy.class); public CNSRetryPolicy getHealthyRetryPolicy() { return healthyRetryPolicy; } public void setHealthyRetryPolicy(CNSRetryPolicy healthyRetryPolicy) { this.healthyRetryPolicy = healthyRetryPolicy; } public CNSThrottlePolicy getThrottlePolicy() { return throttlePolicy; } public void setThrottlePolicy(CNSThrottlePolicy throttlePolicy) { this.throttlePolicy = throttlePolicy; } /** * Default constructor */ public CNSSubscriptionDeliveryPolicy() { healthyRetryPolicy = new CNSRetryPolicy(); throttlePolicy = new CNSThrottlePolicy(); } /** * Create the object form its JSON representation */ public CNSSubscriptionDeliveryPolicy(JSONObject json) throws Exception { try { boolean containsHRP = false; boolean containsSRP = false; boolean containsTP = false; if (json != null && json.length() > 0) { for (Iterator<String> keys = json.keys(); keys.hasNext();) { String key = keys.next(); if (key.equals("healthyRetryPolicy")) { containsHRP = true; } else if (key.equals("sicklyRetryPolicy")) { containsSRP = true; } else if (key.equals("throttlePolicy")) { containsTP = true; } else { throw new Exception("Unrecognized key"); } } if (!containsHRP && !containsSRP && !containsTP) { throw new Exception("missing variables"); } } if (json.has("healthyRetryPolicy") && (json.get("healthyRetryPolicy") != JSONObject.NULL)) { try { healthyRetryPolicy = new CNSRetryPolicy(json.getJSONObject("healthyRetryPolicy")); } catch (Exception e) { if (e instanceof CNSModelConstructionException) { String message = ((CNSModelConstructionException) e).getErrormessage(); logger.error("event=construct_cns_subscription_delivery_policy", e); throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"DeliveryPolicy: healthyRetryPolicy." + message); } } } else { healthyRetryPolicy = new CNSRetryPolicy(); } if (json.has("sicklyRetryPolicy") && (json.get("sicklyRetryPolicy") != JSONObject.NULL)) { try { sicklyRetryPolicy = new CNSRetryPolicy(json.getJSONObject("sicklyRetryPolicy")); } catch (Exception e) { if (e instanceof CNSModelConstructionException) { String message = ((CNSModelConstructionException) e).getErrormessage(); throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"DeliveryPolicy: sicklyRetryPolicy." + message); } } } else { sicklyRetryPolicy = null; } if (json.has("throttlePolicy") && (json.get("throttlePolicy") != JSONObject.NULL)) { try { throttlePolicy = new CNSThrottlePolicy(json.getJSONObject("throttlePolicy")); } catch (Exception e) { if (e instanceof CNSModelConstructionException) { String message = ((CNSModelConstructionException) e).getErrormessage(); throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"DeliveryPolicy: throttlePolicy." + message); } } } else { throttlePolicy = new CNSThrottlePolicy(); } } catch (Exception e) { if (e instanceof CMBException) { throw e; } else { throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"DeliveryPolicy: JSON exception"); } } } public JSONObject toJSON() { try { JSONObject json = new JSONObject(); if (healthyRetryPolicy != null) { json.put("healthyRetryPolicy", healthyRetryPolicy.toJSON()); } else { json.put("healthyRetryPolicy", JSONObject.NULL); } if (sicklyRetryPolicy != null) { json.put("sicklyRetryPolicy", sicklyRetryPolicy.toJSON()); } else { json.put("sicklyRetryPolicy", JSONObject.NULL); } if (throttlePolicy != null) { json.put("throttlePolicy", throttlePolicy.toJSON()); } else { json.put("throttlePolicy", JSONObject.NULL); } return json; } catch (Exception e) { logger.error("event=cns_subscription_delivery_policy_to_json", e); } return null; } @Override public String toString() { try { JSONObject json = this.toJSON(); if (json != null) { return json.toString(); } return null; } catch (Exception e) { logger.error("event=cns_subscription_delivery_policy_to_string", e); return null; } } /** * Update this object by taking values from parameter (if present) or the default values * Also do validation checks * @param json * @throws Exception */ public void update(JSONObject json) throws JSONException, CMBException { boolean error = false; String errorMessage = ""; try { CNSRetryPolicy lhealthyRetryPolicy = null; CNSRetryPolicy lsicklyRetryPolicy = null; CNSThrottlePolicy lthrottlePolicy = null; if (json.has("healthyRetryPolicy") && (json.get("healthyRetryPolicy") != JSONObject.NULL)) { try { lhealthyRetryPolicy = new CNSRetryPolicy(json.getJSONObject("healthyRetryPolicy")); } catch (Exception e) { if (e instanceof CNSModelConstructionException) { String message = ((CNSModelConstructionException) e).getErrormessage(); errorMessage = "DeliveryPolicy: healthyRetryPolicy." + message; error = true; } } } else { lhealthyRetryPolicy = new CNSRetryPolicy(); } if (json.has("sicklyRetryPolicy") && (json.get("sicklyRetryPolicy") != JSONObject.NULL)) { try { lsicklyRetryPolicy = new CNSRetryPolicy(json.getJSONObject("sicklyRetryPolicy")); } catch (Exception e) { if (e instanceof CNSModelConstructionException) { String message = ((CNSModelConstructionException) e).getErrormessage(); errorMessage = "DeliveryPolicy: sicklyRetryPolicy." + message; error = true; } } } else { lsicklyRetryPolicy = null; } if (json.has("throttlePolicy") && (json.get("throttlePolicy") != JSONObject.NULL)) { try { lthrottlePolicy = new CNSThrottlePolicy(json.getJSONObject("throttlePolicy")); logger.debug("throttlePolicy: " + lthrottlePolicy.toString()); } catch (Exception e) { if (e instanceof CNSModelConstructionException) { String message = ((CNSModelConstructionException) e).getErrormessage(); errorMessage = "DeliveryPolicy: throttlePolicy." + message; error = true; } } } else { lthrottlePolicy = new CNSThrottlePolicy(); } if (!error) { healthyRetryPolicy = lhealthyRetryPolicy; sicklyRetryPolicy = lsicklyRetryPolicy; throttlePolicy = lthrottlePolicy; } } catch (Exception e) { logger.error("event=cns_update_subscription_delivery_policy", e); throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"DeliveryPolicy: JSON exception"); } if (error) { logger.error("event=cns_update_subscription_delivery_policy message=" + errorMessage); throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,errorMessage); } } public CNSRetryPolicy getSicklyRetryPolicy() { return sicklyRetryPolicy; } public void setSicklyRetryPolicy(CNSRetryPolicy sicklyRetryPolicy) { this.sicklyRetryPolicy = sicklyRetryPolicy; } }