# AbstractCustomLintingRuleFactory.java

    package org.thewonderlemming.c4plantuml.mojo.linting.rules.custom;

    import java.util.Optional;
    import java.util.Properties;

    /**
     * A factory to create a {@link AbstractCustomLintingRule}.
     * <p>
     * Extend the following class if you intend to create your own rules but don't want to integrate them to the current
     * plugin.
     * <p>
     * Please note that you'll also have to to implement a {@link AbstractCustomLintingRule}.
     *
     * @author thewonderlemming
     *
     * @param <R> the type of {@link AbstractCustomLintingRule} to build.
     */
    public abstract class AbstractCustomLintingRuleFactory<R extends AbstractCustomLintingRule> {

        /**
         * Creates an instance of {@link AbstractCustomLintingRule} given a set of {@link Properties} gathered from the
         * {@code pom.xml} file..
         *
         * @param parameters the {@code pom.xml} configuration.
         * @return an {@link Optional} of the newly created instance, or empty on failure.
         */
        public abstract Optional<R> createCustomRule(final Properties parameters);
    }