/*
 * Flow-Design for Java
 *
 * Copyright (c) 2015 Falko Schumann
 * Released under the terms of the MIT License (MIT).
 */
package de.muspellheim.flowdesign;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Consumer;

/**
 * Hilfsklasse für die Implementierung von Functional-Units mit mehreren Outputpins. Die verschiedenen Outputpins werden
 * über ihren Typ unterschieden.
 *
 * <p>Die Klasse sollte gewrappt werden, kann aber auch erweitert werden, um eine Functional-Unit zu implementieren.</p>
 *
 * @author Falko Schumann &lt;www.muspellheim.de&gt;
 */
public class FunctionalUnitSupport {

    private final Map<Class<?>, List<Consumer<?>> consumers = new LinkedHashMap<>();

    /**
     * Verbindet den Outputpin des angegebenen Typs dieser Functional-Unit mit dem Inputpin einer anderen
     * Functional-Unit.
     */
    public <T> void connectWithResultFor(Class<? extends T> outputType, Consumer<? extends T> inputPin) {
        Objects.requireNonNull(inputPin);
        synchronized (this) {
            if (!consumers.containsKey(outputType))
                consumers.put(outputType, new CopyOnWriteArrayList<>());
            consumers.get(outputType).add(inputPin);
        }
    }

    /**
     * Trennt die Verbindung des Outputpins des angegebenen Typs dieser Functional-Unit mit dem Inputpin einer anderen
     * Functional-Unit.
     */
    public <T> void disconnectFromResultFor(Class<? extends T> outputType, Consumer<? extends T> inputPin) {
        Objects.requireNonNull(inputPin);
        synchronized (this) {
            if (consumers.containsKey(outputType))
                consumers.get(outputType).remove(inputPin);
        }
    }

    /**
     * Veröffentlicht ein Ergebnis am Outputpin mit dem angegebenen Typ dieser Functional-Unit.
     */
    public <T> void publishResultFor(Class<? extends T> outputType, T result) {
        synchronized (this) {
            if (consumers.containsKey(outputType))
                consumers.get(outputType).forEach(c -> c.accept(result));
        }
    }

}

@@ -773,21 +773,14 @@
 umer
-%3C?%3E%3E consumer
+%3E wire
 s = 
@@ -1144,24 +1144,20 @@
    if (!
-consumer
+wire
 s.contai
@@ -1191,24 +1191,20 @@
         
-consumer
+wire
 s.put(ou
@@ -1252,32 +1252,28 @@
             
-consumer
+wire
 s.get(output
@@ -1662,32 +1662,28 @@
         if (
-consumer
+wire
 s.containsKe
@@ -1709,32 +1709,28 @@
             
-consumer
+wire
 s.get(output
@@ -2008,24 +2008,20 @@
     if (
-consumer
+wire
 s.contai
@@ -2059,16 +2059,12 @@
     
-consumer
+wire
 s.ge

Remove generic