All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.qameta.allure.core.Configuration Maven / Gradle / Ivy

There is a newer version: 2.30.0
Show newest version
/*
 *  Copyright 2016-2023 Qameta Software OÜ
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package io.qameta.allure.core;

import io.qameta.allure.Aggregator;
import io.qameta.allure.Context;
import io.qameta.allure.Extension;
import io.qameta.allure.Reader;
import io.qameta.allure.exception.ContextNotFoundException;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * Report configuration.
 *
 * @since 2.0
 */
public interface Configuration {

    /**
     * Returns the report name.
     *
     * @return the report name.
     */
    default String getReportName() {
        return null;
    }

    /**
     * Returns all configured plugins.
     *
     * @return configured plugins.
     */
    List getPlugins();

    /**
     * Returns all configured aggregators.
     *
     * @return configured aggregators.
     * @deprecated for removal. Use {@link #getExtensions()} instead.
     */
    @Deprecated
    default List getAggregators() {
        return getExtensions(Aggregator.class);
    }

    /**
     * Returns all configured readers.
     *
     * @return configured readers.
     * @deprecated for removal. Use {@link #getExtensions()} instead.
     */
    @Deprecated
    default List getReaders() {
        return getExtensions(Reader.class);
    }

    /**
     * Returns all discovered extensions.
     *
     * @return configured extensions.
     */
    List getExtensions();

    /**
     * Returns all discovered extensions of specified type.
     *
     * @param            the type of extension.
     * @param extensionType the type of extension.
     * @return configured extensions.
     */
    default  List getExtensions(final Class extensionType) {
        return getExtensions().stream()
                .filter(extensionType::isInstance)
                .map(extensionType::cast)
                .collect(Collectors.toList());
    }

    /**
     * Resolve context by given type.
     *
     * @param contextType type of context to resolve.
     * @param          the java type of context.
     * @param          the java type of context's type.
     * @return resolved context.
     */
    default > Optional getContext(Class contextType) {
        return getExtensions(contextType).stream()
                .findFirst();
    }

    /**
     * The same as {@link #getContext(Class)} but throws an exception
     * if context doesn't present.
     *
     * @return resolved context.
     * @throws ContextNotFoundException if no such context present.
     */
    default > S requireContext(Class contextType) {
        return getContext(contextType).orElseThrow(() -> new ContextNotFoundException(contextType));
    }
}