001/* 002 * JDrupes Builder 003 * Copyright (C) 2025 Michael N. Lipp 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <https://www.gnu.org/licenses/>. 017 */ 018 019package org.jdrupes.builder.api; 020 021import java.util.stream.Stream; 022 023/// A provider of a resource. This interface is intended to be implemented 024/// by providers. It is not intended to be invoked directly. Rather, it 025/// must be invoked via [BuildContext#get]. 026/// 027@SuppressWarnings("PMD.ImplicitFunctionalInterface") 028public interface ResourceProvider { 029 030 /// Provide the requested resources. 031 /// 032 /// This method is never invoked concurrently for the same request 033 /// when invoked through [Project#get]. It may, however, be invoked 034 /// concurrently for different requests. Providers that evaluate all 035 /// possibly provided resources anyway and return only a subset for 036 /// some kinds of request should therefore invoke themselves (through 037 /// [Project#get]) with a request for all resources and filter the 038 /// (automatically cached) result. 039 /// 040 /// @param <T> the type of the requested (and provided) resource 041 /// @param requested the requested resources 042 /// @return the provided resource(s) as stream 043 /// 044 <T extends Resource> Stream<T> provide(ResourceRequest<T> requested); 045}