content: package com.airbnb.lottie;
  
  import android.support.annotation.Nullable;
  import android.util.Log;
  
  import org.json.JSONArray;
  import org.json.JSONObject;
  
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.List;
  
  class ShapeGroup {
    @Nullable static Object shapeItemWithJson(JSONObject json, LottieComposition composition) {
      String type = json.optString("ty");
  
      switch (type) {
        case "gr":
          return ShapeGroup.Factory.newInstance(json, composition);
        case "st":
          return ShapeStroke.Factory.newInstance(json, composition);
        case "fl":
          return ShapeFill.Factory.newInstance(json, composition);
        case "tr":
          return AnimatableTransform.Factory.newInstance(json, composition);
        case "sh":
          return ShapePath.Factory.newInstance(json, composition);
        case "el":
          return CircleShape.Factory.newInstance(json, composition);
        case "rc":
          return RectangleShape.Factory.newInstance(json, composition);
        case "tm":
          return ShapeTrimPath.Factory.newInstance(json, composition);
        case "sr":
          return PolystarShape.Factory.newInstance(json, composition);
        case "mm":
          return MergePaths.Factory.newInstance(json);
        default:
          Log.w(L.TAG, "Unknown shape type " + type);
      }
      return null;
    }
  
    private final String name;
    private final List<Object> items;
  
    ShapeGroup(String name, List<Object> items) {
      this.name = name;
      this.items = items;
    }
  
    static class Factory {
      private Factory() {
      }
  
      private static ShapeGroup newInstance(JSONObject json, LottieComposition composition) {
        JSONArray jsonItems = json.optJSONArray("it");
        String name = json.optString("nm");
        List<Object> items = new ArrayList<>();
  
        for (int i = 0; i < jsonItems.length(); i++) {
          Object newItem = shapeItemWithJson(jsonItems.optJSONObject(i), composition);
          if (newItem != null) {
            items.add(newItem);
          }
        }
        return new ShapeGroup(name, items);
      }
    }
  
    List<Object> getItems() {
      return items;
    }
  
    @Override public String toString() {
      return "ShapeGroup{" + "name='" + name + "\' Shapes: " + Arrays.toString(items.toArray()) + '}';
    }
  }
  