private ExecutableAnimation parseAnimationMap(ReadableMap animationMap) {
        ReadableMap propertyMap = animationMap.getMap("properties");
        String positionX = getFloatPropertyAsString(propertyMap, "positionX");
        String positionY = getFloatPropertyAsString(propertyMap, "positionY");
        String positionZ = getFloatPropertyAsString(propertyMap, "positionZ");
        String scaleX = getFloatPropertyAsString(propertyMap, "scaleX");
        String scaleY = getFloatPropertyAsString(propertyMap, "scaleY");
        String scaleZ = getFloatPropertyAsString(propertyMap, "scaleZ");
        String rotateX = getFloatPropertyAsString(propertyMap, "rotateX");
        String rotateY = getFloatPropertyAsString(propertyMap, "rotateY");
        String rotateZ = getFloatPropertyAsString(propertyMap, "rotateZ");
        String opacity = getFloatPropertyAsString(propertyMap, "opacity");
        String color = getIntPropertyAsString(propertyMap, "color");

        LazyMaterial lazyMaterial = null;

        // Currently we only support animating the index 0 material.
        if (propertyMap.hasKey("material")) {
            String material = propertyMap.getString("material");
            MaterialManager materialManager = getReactApplicationContext().getNativeModule(MaterialManager.class);
            lazyMaterial = new LazyMaterialReact(material, materialManager);
        }

        float durationMilliseconds = (float) getPropertyAsDouble(animationMap, "duration");
        float delayMilliseconds = (float) getPropertyAsDouble(animationMap, "delay");

        float durationSeconds = durationMilliseconds == Double.MIN_VALUE ? 0 : durationMilliseconds / 1000f;
        float delaySeconds = delayMilliseconds == Double.MIN_VALUE ? 0 : delayMilliseconds / 1000f;

        String functionType = getFloatPropertyAsString(animationMap, "easing");
        if (functionType == null) {
            functionType = "Linear";
        }
        return new AnimationGroup(positionX, positionY, positionZ,
                scaleX, scaleY, scaleZ, rotateX, rotateY, rotateZ,
                opacity, color, lazyMaterial, durationSeconds, delaySeconds, functionType);
    }
This function helps us branch between the 3 different animation object types

@param array - the array of animation objects
@param index - the index of the animation object to parse
@param executionType - the execution type
@return the parsed animation
android/viro_bridge/src/main/java/com/viromedia/bridge/module/AnimationManager.java