Package com.comcast.cns.model

Source Code of com.comcast.cns.model.CNSTopicDeliveryPolicy

/**
* 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.JSONObject;

import com.comcast.cmb.common.util.CMBException;
import com.comcast.cns.util.CNSErrorCodes;

/**
* represents a delivery policy
* @author bwolf, jorge
*
* Class is not thread-safe. Caller must ensure thread-safety
*/
public class CNSTopicDeliveryPolicy {

  private static Logger logger = Logger.getLogger(CNSTopicDeliveryPolicy.class);
  private CNSRetryPolicy defaultHealthyRetryPolicy;
  private CNSRetryPolicy defaultSicklyRetryPolicy;
  private boolean disableSubscriptionOverrides;
  private CNSThrottlePolicy defaultThrottlePolicy;
 
  public CNSRetryPolicy getDefaultHealthyRetryPolicy() {
    return defaultHealthyRetryPolicy;
  }

  public void setDefaultHealthyRetryPolicy(CNSRetryPolicy defaultHealthyRetryPolicy) {
    this.defaultHealthyRetryPolicy = defaultHealthyRetryPolicy;
  }
 
  public CNSRetryPolicy getDefaultSicklyRetryPolicy() {
    return defaultSicklyRetryPolicy;
  }
 
  public void setDefaultSicklyRetryPolicy(CNSRetryPolicy defaultSicklyRetryPolicy) {
    this.defaultSicklyRetryPolicy = defaultSicklyRetryPolicy;
  }
 
  public CNSThrottlePolicy getDefaultThrottlePolicy() {
    return defaultThrottlePolicy;
  }
 
  public void setDefaultThrottlePolicy(CNSThrottlePolicy defaultThrottlePolicy) {
    this.defaultThrottlePolicy = defaultThrottlePolicy;
  }
 
  public boolean isDisableSubscriptionOverrides() {
    return disableSubscriptionOverrides;
  }
 
  public void setDisableSubscriptionOverrides(boolean disableSubscriptionOverrides) {
    this.disableSubscriptionOverrides = disableSubscriptionOverrides;
  }
   
  public CNSTopicDeliveryPolicy() {
    defaultHealthyRetryPolicy = new CNSRetryPolicy();
    defaultSicklyRetryPolicy = null;
    disableSubscriptionOverrides = false;
    defaultThrottlePolicy = new CNSThrottlePolicy();
  }

  private JSONObject httpJSONObject() {
    try {
        JSONObject json = new JSONObject();
        if (defaultHealthyRetryPolicy != null) {
          json.put("defaultHealthyRetryPolicy", defaultHealthyRetryPolicy.toJSON());
        } else {
          json.put("defaultHealthyRetryPolicy", JSONObject.NULL);
        }
       
        if (defaultSicklyRetryPolicy != null) {
          json.put("defaultSicklyRetryPolicy", defaultSicklyRetryPolicy.toJSON());
        } else {
          json.put("defaultSicklyRetryPolicy", JSONObject.NULL);
        }
       
        if (disableSubscriptionOverrides) {
          json.put("disableSubscriptionOverrides", true);
        } else {
          json.put("disableSubscriptionOverrides", false);
        }

        if (defaultThrottlePolicy != null)  {
          json.put("defaultThrottlePolicy", defaultThrottlePolicy.toJSON());
        } else {
          json.put("defaultThrottlePolicy", JSONObject.NULL);
        }
       
        return json;
   
    } catch (Exception e) {
      logger.error("event=cns_topic_delivery_policy_to_json", e);
    }

    return null;
  }
 
  public CNSTopicDeliveryPolicy(JSONObject json) throws CMBException {
   
    String errorMessage = "";
    boolean error = false;
    if (!json.has("http")) {
      errorMessage = "Topic Delivery Policy missing policy for http";
      logger.error("event=construct_cns_topic_delivery_policy message=" + errorMessage);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter, errorMessage);
    }
    try
      JSONObject json2 = json.getJSONObject("http");
      if (json2.length() == 0) {
          throw new Exception("Empty http protocol");
      }
     
      for (Iterator<String> keys = json2.keys(); keys.hasNext();) {
          String key = keys.next();
        if (!(key.equals("defaultHealthyRetryPolicy") || key.equals("defaultSicklyRetryPolicy"|| key.equals("disableSubscriptionOverrides") ||
            key.equals("defaultThrottlePolicy"))) {
          throw new Exception("Empty http delivery policy does not have key:" + key);
        }
      }
      if (json2.has("defaultHealthyRetryPolicy") && (json2.get("defaultHealthyRetryPolicy") != JSONObject.NULL)) {
        try {
          defaultHealthyRetryPolicy = new CNSRetryPolicy(json2.getJSONObject("defaultHealthyRetryPolicy"));
        } catch (Exception e) {
          if (e instanceof CNSModelConstructionException) {
            String message = ((CNSModelConstructionException) e).getErrormessage();
            errorMessage = "DeliveryPolicy: defaultHealthyRetryPolicy." + message;
            error = true;
          }
        }         
      } else {
        defaultHealthyRetryPolicy = new CNSRetryPolicy();
      }
      if ((json2.has("defaultSicklyRetryPolicy"))) {
        if (json2.get("defaultSicklyRetryPolicy") == JSONObject.NULL) defaultSicklyRetryPolicy = null;
        else {
          try {
            defaultSicklyRetryPolicy = new CNSRetryPolicy(json2.getJSONObject("defaultSicklyRetryPolicy"));
          } catch (Exception e) {
            if (e instanceof CNSModelConstructionException) {
              String message = ((CNSModelConstructionException) e).getErrormessage();
              errorMessage = "DeliveryPolicy: defaultSicklyRetryPolicy." + message;
              error = true;
            }
          } 
        }
      }
     
      if ((json2.has("disableSubscriptionOverrides"))) {
        disableSubscriptionOverrides = json2.getBoolean("disableSubscriptionOverrides");
      } else {
        disableSubscriptionOverrides = false;
      }
     
      if ((json2.has("defaultThrottlePolicy")) && (json2.get("defaultThrottlePolicy") != JSONObject.NULL)) {
        try {
          defaultThrottlePolicy = new CNSThrottlePolicy(json2.getJSONObject("defaultThrottlePolicy"));
        } catch (Exception e) {
          if (e instanceof CNSModelConstructionException) {
            String message = ((CNSModelConstructionException) e).getErrormessage();
            errorMessage = "DeliveryPolicy: defaultThrottlePolicy." + message;
            error = true;
          }
        } 
      } else {
        defaultThrottlePolicy = new CNSThrottlePolicy();
      }
       
     
    } catch (Exception e) {
      logger.error("event=construct_cns_topic_delivery_policy", e);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,e.getMessage());
    }
    if (error) {
      logger.error("event=update_cns_topic_delivery_policy message=" + errorMessage);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter, errorMessage);
    }
  }
   
  /**
     * 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 CNSModelConstructionException, CMBException {
    if (!json.has("http")) {
      String errorMessage = "Topic Delivery Policy missing policy for http";
      logger.error("event=update_cns_topic_delivery_policy message=" + errorMessage);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter, errorMessage);
    }
    String errorMessage = "";
    boolean error = false;
    try
      CNSRetryPolicy ldefaultHealthyRetryPolicy = null;
      CNSRetryPolicy ldefaultSicklyRetryPolicy = null;
      CNSThrottlePolicy ldefaultThrottlePolicy = null;
      boolean ldisableSubscriptionOverrides = false;
     
     
      JSONObject json2 = json.getJSONObject("http");
   
      if (json2.has("defaultHealthyRetryPolicy") && (json2.get("defaultHealthyRetryPolicy") != JSONObject.NULL)) {
        try {
          ldefaultHealthyRetryPolicy = new CNSRetryPolicy(json2.getJSONObject("defaultHealthyRetryPolicy"));
        } catch (Exception e) {
          if(e instanceof CNSModelConstructionException) {
            String message = ((CNSModelConstructionException) e).getErrormessage();
            errorMessage = "DeliveryPolicy: defaultHealthyRetryPolicy." + message;
            error = true;
          }
        } 
      } else {
        ldefaultHealthyRetryPolicy = new CNSRetryPolicy();
      }
      if ((json2.has("defaultSicklyRetryPolicy")) &&(json2.get("defaultSicklyRetryPolicy") != JSONObject.NULL)) {
        try {
          ldefaultSicklyRetryPolicy = new CNSRetryPolicy(json2.getJSONObject("defaultSicklyRetryPolicy"));
        } catch (Exception e) {
          if (e instanceof CNSModelConstructionException) {
            String message = ((CNSModelConstructionException) e).getErrormessage();
            errorMessage = "DeliveryPolicy: defaultSicklyRetryPolicy." + message;
            error = true;
          }
        } 
      } else {
        ldefaultSicklyRetryPolicy = null;
      }
     
      if ((json2.has("disableSubscriptionOverrides"))) {
        try {
          ldisableSubscriptionOverrides = json2.getBoolean("disableSubscriptionOverrides");
        } catch (Exception e) {
          errorMessage = "DeliveryPolicy: disableSubscriptionOverrides must be a boolean";
          error = true;
       
      } else {
        ldisableSubscriptionOverrides = false;
      }
     
      if ((json2.has("defaultThrottlePolicy")) && (json2.get("defaultThrottlePolicy") != JSONObject.NULL)) {
        try {
          ldefaultThrottlePolicy = new CNSThrottlePolicy(json2.getJSONObject("defaultThrottlePolicy"));
        } catch (Exception e) {
          if (e instanceof CNSModelConstructionException) {
            String message = ((CNSModelConstructionException) e).getErrormessage();
            errorMessage = "DeliveryPolicy: defaultThrottlePolicy." + message;
            error = true;
          }
        } 
      } else {
        ldefaultThrottlePolicy = new CNSThrottlePolicy();
      }
      if (!error) {
        defaultHealthyRetryPolicy = ldefaultHealthyRetryPolicy;
        defaultSicklyRetryPolicy = ldefaultSicklyRetryPolicy;
        disableSubscriptionOverrides = ldisableSubscriptionOverrides;
        defaultThrottlePolicy = ldefaultThrottlePolicy;
      }
     
    } catch (Exception e) {
      logger.error("event=update_cns_topic_delivery_policy", e);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter,"DeliveryPolicy: JSON exception");
    }
    if (error) {
      logger.error("event=update_cns_topic_delivery_policy message=" + errorMessage);
      throw new CMBException(CNSErrorCodes.CNS_InvalidParameter, errorMessage);
    }
  }
 
  public JSONObject toJSON() {
    try {
        JSONObject json = new JSONObject();
        JSONObject httpJson = httpJSONObject();
        json.put("http", httpJson);
        return json;
    } catch (Exception e) {
      logger.error("event=cns_topic_delivery_policy_to_json", e);
    }
    return null;
  }
 
  public String toString() {
    try {
      JSONObject json = this.toJSON();
        if (json != null) {
          return json.toString();
        }
        return null;
    } catch (Exception e) {
      logger.error("event=cns_topic_delivery_policy_to_string", e);
      return null;
    }
  }
}
TOP

Related Classes of com.comcast.cns.model.CNSTopicDeliveryPolicy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.