// Path: src/main/java/com/tempodb/MultiStatus.java
// public class MultiStatus implements Iterable<Status>, Serializable {
// 
//   private List<Status> statuses;
// 
//   /** Serialization lock */
//   private static final long serialVersionUID = 1L;
// 
//   public MultiStatus() {
//     this(new ArrayList<Status>());
//   }
// 
//   /**
//    *  Base constructor
//    *  @param statuses List of {@link Status} objects.
//    *  @since 1.0.0
//    */
//   public MultiStatus(@JsonProperty("multistatus") List<Status> statuses) {
//     this.statuses = checkNotNull(statuses);
//   }
// 
//   /**
//    *  Returns list of Statuses.
//    *  @return List of Statuses.
//    *  @since 1.0.0
//    */
//   @JsonProperty("multistatus")
//   public List<Status> getStatuses() { return statuses; }
// 
//   /**
//    *  Sets list of Statuses.
//    *  @param statuses List of Statuses.
//    *  @since 1.0.0
//    */
//   public void setStatuses(List<Status> statuses) { this.statuses = checkNotNull(statuses); }
// 
//   /**
//    *  Returns iterator over the Statuses.
//    *  @return Iterator over Statueses.
//    *  @since 1.0.0
//    */
//   public Iterator<Status> iterator() {
//     return statuses.iterator();
//   }
// 
//   @Override
//   public String toString() {
//     return String.format("MultiStatus(statuses=%s)", statuses);
//   }
// 
//   @Override
//   public int hashCode() {
//     return new HashCodeBuilder(167, 173)
//       .append(statuses)
//       .toHashCode();
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if(obj == null) return false;
//     if(obj == this) return true;
//     if(!(obj instanceof MultiStatus)) return false;
// 
//     MultiStatus rhs = (MultiStatus)obj;
//     return new EqualsBuilder()
//       .append(statuses, rhs.statuses)
//       .isEquals();
//   }
// }
// 
// Path: src/main/java/com/tempodb/json/Json.java
// public class Json {
//   private Json() { /* singleton */ }
// 
//   private static ObjectMapper mapper;
// 
//   protected static ObjectMapper getObjectMapper() {
//     if(mapper == null) {
//       final ObjectMapper _mapper = new ObjectMapper();
//       _mapper.registerModule(new JodaModule());
//       _mapper.registerModule(new DateTimeZoneModule());
//       _mapper.registerModule(new FoldModule());
//       _mapper.registerModule(new DataPointSegmentModule());
//       _mapper.registerModule(new DataPointFoundSegmentModule());
//       _mapper.registerModule(new IntervalModule());
//       _mapper.registerModule(new MultiDataPointSegmentModule());
//       _mapper.registerModule(new MultiRollupDataPointSegmentModule());
//       _mapper.registerModule(new SeriesSegmentModule());
//       _mapper.registerModule(new SingleValueModule());
//       _mapper.registerModule(new SingleValueSegmentModule());
//       _mapper.registerModule(new SummaryModule());
//       _mapper.registerModule(new WritableDataPointModule());
//       _mapper.registerModule(new WriteRequestModule());
//       _mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//       _mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//       mapper = _mapper;
//     }
//     return mapper;
//   }
// 
//   public static <T> T loads(String src, Class<?> valueType) throws IOException {
//     return reader().withType(valueType).readValue(src);
//   }
// 
//   public static <T> T loads(String src, TypeReference<?> valueType) throws IOException {
//     return reader().withType(valueType).readValue(src);
//   }
// 
//   public static <T> T loads(String src, Class<?> valueType, DateTimeZone timezone) throws IOException {
//     return reader(timezone).withType(valueType).readValue(src);
//   }
// 
//   public static <T> T loads(String src, TypeReference<?> valueType, DateTimeZone timezone) throws IOException {
//     return reader(timezone).withType(valueType).readValue(src);
//   }
// 
//   public static ObjectReader reader() {
//     return getObjectMapper().reader();
//   }
// 
//   public static ObjectReader reader(DateTimeZone timezone) {
//     return reader().with(timezone.toTimeZone());
//   }
// 
//   public static ObjectWriter writer() {
//     return getObjectMapper().writer();
//   }
// 
//   public static ObjectWriter writer(DateTimeZone timezone) {
//     return writer().with(timezone.toTimeZone());
//   }
// 
//   public static String dumps(Object value) throws JsonProcessingException {
//     return writer().writeValueAsString(value);
//   }
// 
//   public static String dumps(Object value, DateTimeZone timezone) throws JsonProcessingException {
//     return writer(timezone).writeValueAsString(value);
//   }
// }


import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import com.tempodb.MultiStatus;
import com.tempodb.json.Json;
   *  Returns the MultiStatus of the Result.
   *  @return Result MultiStatus. Null if Result state is not PARTIAL_SUCCESS.
   *  @since 1.0.0
   */
  public MultiStatus getMultiStatus() { return multistatus; }

  /**
   *  Returns the State of the Result.
   *  The state should be used to determine the success state of the Result.
   *  @return Result state
   *  @since 1.0.0
   */
  public State getState() { return getState(code); }

  private static State getState(int code) {
    State state = null;
    if(((code / 100) == 2) && (code != 207)) {
      state = State.SUCCESS;
    } else if(code == 207) {
      state = State.PARTIAL_SUCCESS;
    } else {
      state = State.FAILURE;
    }
    return state;
  }

  private static <T> T newInstanceFromResponse(HttpResponse response, Class<T> klass) {
    Throwable cause = null;
    try {
      if(klass == Void.class) {
// Path: src/main/java/com/tempodb/MultiStatus.java
// public class MultiStatus implements Iterable<Status>, Serializable {
// 
//   private List<Status> statuses;
// 
//   /** Serialization lock */
//   private static final long serialVersionUID = 1L;
// 
//   public MultiStatus() {
//     this(new ArrayList<Status>());
//   }
// 
//   /**
//    *  Base constructor
//    *  @param statuses List of {@link Status} objects.
//    *  @since 1.0.0
//    */
//   public MultiStatus(@JsonProperty("multistatus") List<Status> statuses) {
//     this.statuses = checkNotNull(statuses);
//   }
// 
//   /**
//    *  Returns list of Statuses.
//    *  @return List of Statuses.
//    *  @since 1.0.0
//    */
//   @JsonProperty("multistatus")
//   public List<Status> getStatuses() { return statuses; }
// 
//   /**
//    *  Sets list of Statuses.
//    *  @param statuses List of Statuses.
//    *  @since 1.0.0
//    */
//   public void setStatuses(List<Status> statuses) { this.statuses = checkNotNull(statuses); }
// 
//   /**
//    *  Returns iterator over the Statuses.
//    *  @return Iterator over Statueses.
//    *  @since 1.0.0
//    */
//   public Iterator<Status> iterator() {
//     return statuses.iterator();
//   }
// 
//   @Override
//   public String toString() {
//     return String.format("MultiStatus(statuses=%s)", statuses);
//   }
// 
//   @Override
//   public int hashCode() {
//     return new HashCodeBuilder(167, 173)
//       .append(statuses)
//       .toHashCode();
//   }
// 
//   @Override
//   public boolean equals(Object obj) {
//     if(obj == null) return false;
//     if(obj == this) return true;
//     if(!(obj instanceof MultiStatus)) return false;
// 
//     MultiStatus rhs = (MultiStatus)obj;
//     return new EqualsBuilder()
//       .append(statuses, rhs.statuses)
//       .isEquals();
//   }
// }
// 
// Path: src/main/java/com/tempodb/json/Json.java
// public class Json {
//   private Json() { /* singleton */ }
// 
//   private static ObjectMapper mapper;
// 
//   protected static ObjectMapper getObjectMapper() {
//     if(mapper == null) {
//       final ObjectMapper _mapper = new ObjectMapper();
//       _mapper.registerModule(new JodaModule());
//       _mapper.registerModule(new DateTimeZoneModule());
//       _mapper.registerModule(new FoldModule());
//       _mapper.registerModule(new DataPointSegmentModule());
//       _mapper.registerModule(new DataPointFoundSegmentModule());
//       _mapper.registerModule(new IntervalModule());
//       _mapper.registerModule(new MultiDataPointSegmentModule());
//       _mapper.registerModule(new MultiRollupDataPointSegmentModule());
//       _mapper.registerModule(new SeriesSegmentModule());
//       _mapper.registerModule(new SingleValueModule());
//       _mapper.registerModule(new SingleValueSegmentModule());
//       _mapper.registerModule(new SummaryModule());
//       _mapper.registerModule(new WritableDataPointModule());
//       _mapper.registerModule(new WriteRequestModule());
//       _mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
//       _mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//       mapper = _mapper;
//     }
//     return mapper;
//   }
// 
//   public static <T> T loads(String src, Class<?> valueType) throws IOException {
//     return reader().withType(valueType).readValue(src);
//   }
// 
//   public static <T> T loads(String src, TypeReference<?> valueType) throws IOException {
//     return reader().withType(valueType).readValue(src);
//   }
// 
//   public static <T> T loads(String src, Class<?> valueType, DateTimeZone timezone) throws IOException {
//     return reader(timezone).withType(valueType).readValue(src);
//   }
// 
//   public static <T> T loads(String src, TypeReference<?> valueType, DateTimeZone timezone) throws IOException {
//     return reader(timezone).withType(valueType).readValue(src);
//   }
// 
//   public static ObjectReader reader() {
//     return getObjectMapper().reader();
//   }
// 
//   public static ObjectReader reader(DateTimeZone timezone) {
//     return reader().with(timezone.toTimeZone());
//   }
// 
//   public static ObjectWriter writer() {
//     return getObjectMapper().writer();
//   }
// 
//   public static ObjectWriter writer(DateTimeZone timezone) {
//     return writer().with(timezone.toTimeZone());
//   }
// 
//   public static String dumps(Object value) throws JsonProcessingException {
//     return writer().writeValueAsString(value);
//   }
// 
//   public static String dumps(Object value, DateTimeZone timezone) throws JsonProcessingException {
//     return writer(timezone).writeValueAsString(value);
//   }
// }


// Path: src/main/java/com/tempodb/Result.java
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import com.tempodb.MultiStatus;
import com.tempodb.json.Json;

   *  Returns the MultiStatus of the Result.
   *  @return Result MultiStatus. Null if Result state is not PARTIAL_SUCCESS.
   *  @since 1.0.0
   */
  public MultiStatus getMultiStatus() { return multistatus; }

  /**
   *  Returns the State of the Result.
   *  The state should be used to determine the success state of the Result.
   *  @return Result state
   *  @since 1.0.0
   */
  public State getState() { return getState(code); }

  private static State getState(int code) {
    State state = null;
    if(((code / 100) == 2) && (code != 207)) {
      state = State.SUCCESS;
    } else if(code == 207) {
      state = State.PARTIAL_SUCCESS;
    } else {
      state = State.FAILURE;
    }
    return state;
  }

  private static <T> T newInstanceFromResponse(HttpResponse response, Class<T> klass) {
    Throwable cause = null;
    try {
      if(klass == Void.class) {
        return null;