PowerpointCollector.java

package pro.verron.officestamper.experimental;


import java.util.ArrayList;
import java.util.List;

/// The PowerpointCollector class is used to collect instances of a specific class in a PowerPoint presentation.
///
/// @param <T> the type of instances to collect
public class PowerpointCollector<T>
        extends PowerpointVisitor {
    private final Class<T> aClass;
    private final List<T> list = new ArrayList<>();

    /// The PowerpointCollector class is used to collect instances of a specific class in a PowerPoint presentation.
    ///
    /// @param aClass the type of instances to collect
    public PowerpointCollector(Class<T> aClass) {
        this.aClass = aClass;
    }

    /// Collects instances of a specific class in a PowerPoint presentation.
    ///
    /// @param <T>      the type of instances to collect
    /// @param template the PowerPoint presentation template
    /// @param aClass   the type of instances to collect
    ///
    /// @return a list of instances of the specified class
    public static <T> List<T> collect(
            Object template,
            Class<T> aClass
    ) {
        var collector = new PowerpointCollector<>(aClass);
        collector.visit(template);
        return collector.collect();
    }

    /// Retrieves the collected instances of a specific class.
    ///
    /// @return an instance list of the specified class
    public List<T> collect() {
        return list;
    }

    @Override
    protected void before(Object object) {
        if (aClass.isInstance(object))
            list.add(aClass.cast(object));
    }
}