001/** 002 * Copyright (C) 2006-2025 Talend Inc. - www.talend.com 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.talend.sdk.component.tools.validator; 017 018import static java.util.stream.Stream.of; 019 020import java.lang.reflect.Method; 021import java.util.List; 022import java.util.stream.Stream; 023 024import org.apache.xbean.finder.AnnotationFinder; 025import org.talend.sdk.component.api.processor.ElementListener; 026import org.talend.sdk.component.api.processor.Output; 027 028public class OutputConnectionValidator implements Validator { 029 030 @Override 031 public Stream<String> validate(final AnnotationFinder finder, final List<Class<?>> components) { 032 // outputs must have only one input param 033 return components 034 .stream() 035 .flatMap(c -> of(c.getMethods()).filter(m -> m.isAnnotationPresent(ElementListener.class))) 036 .filter(m -> of(m.getParameters()).noneMatch(p -> p.isAnnotationPresent(Output.class))) 037 .filter(m -> of(m.getParameters()).filter(p -> !p.isAnnotationPresent(Output.class)).count() > 1) 038 .map(Method::getDeclaringClass) 039 .distinct() 040 .map(clazz -> "The Output component '" + clazz 041 + "' must have only one single input branch parameter in its ElementListener method."); 042 } 043}