Channel in = joiner.getIOField ("output", 0);
Channel in = joiner.getIOField("outputChannel", 0);
    public void connectGraph ()    {        // make sure that I have the minimal elements to construct this loop        assert joiner != null;        assert splitter != null;        assert body != null;        // okay, initialize the body and figure out the type of data        // passed around this loop        body.setupOperator();        Channel bodyInput = body.getInputChannel ();        Channel bodyOutput = body.getOutputChannel ();        assert bodyInput != null;        assert bodyOutput != null;        assert bodyOutput.getType ().getName ()            .equals(bodyInput.getType ().getName ());        // if I don't have a feedback path, just give myself an identity body        // and initialize whatever the feedback path is        if (loop == null) loop = new Identity (bodyOutput.getType ());        loop.setupOperator ();        Channel loopInput = loop.getInputChannel ();        Channel loopOutput = loop.getOutputChannel ();        assert loopInput != null;        assert loopOutput != null;        assert loopOutput.getType ().getName ()            .equals(loopInput.getType ().getName ());        // create some extra Identities and give them to the split        // and the join so they have a Filter for every input/output        // they have to deal with        {            // the joiner:            Channel channelIn = null;            if (joiner.isInputUsed (0))                {                    Filter joinerIn = new Identity (bodyInput.getType ());                    joinerIn.setupOperator ();                    joiner.add (joinerIn);                    channelIn = joinerIn.getIOField ("input");                } else {                    joiner.add (null);                }            joiner.add (loop);            joiner.setupOperator ();            {                ChannelConnectFilter connect = new ChannelConnectFilter ();                Channel in = joiner.getIOField ("output", 0);                Channel out = body.getInputChannel ();                connect.useChannels (in, out);                connect.setupOperator();            }            // the splitter:            Channel channelOut = null;            if (splitter.isOutputUsed (0))                {                    Filter splitterOut = new Identity (bodyOutput.getType ());                    splitterOut.setupOperator ();                    splitter.add (splitterOut);                    channelOut = splitterOut.getIOField ("output");                } else {                    splitter.add (null);                }            splitter.add (loop);            splitter.setupOperator ();            {                ChannelConnectFilter connect = new ChannelConnectFilter ();                Channel in = body.getOutputChannel ();                Channel out = splitter.getIOField ("input", 0);                connect.useChannels (in, out);                connect.setupOperator();            }            // copy the input/output from the identities to the input/output            // fields of the feedback loop            inputChannel = channelIn;            outputChannel = channelOut;        }        // now fill up the feedback path with precomputed data:        assert delay == 0 || enqueued.isEmpty();        if (delay != 0)            {                Channel feedbackChannel = loop.getOutputChannel ();                for (int index = 0; index < delay; index++)                    {                        Class type = feedbackChannel.getType ();                        if (type == Integer.TYPE)                            {                                feedbackChannel.pushInt (initPathInt (index));                            } else                                if (type == Short.TYPE)                                    {                                        feedbackChannel.pushShort (initPathShort (index));                                    } else                                        if (type == Character.TYPE)                                            {                                                feedbackChannel.pushChar (initPathChar (index));                                            } else                                                if (type == Float.TYPE)                                                    {                                                        feedbackChannel.pushFloat (initPathFloat (index));                                                    } else                                                        {                                                            // this is essentially a default                                                            // if this isn't what you want, you should implement                                                            // another if-else clause!                                                            feedbackChannel.push (initPathObject (index));                                                        }                    }            }        else            {                Channel feedbackChannel = loop.getOutputChannel ();                for (java.util.Iterator iter = enqueued.iterator();                     iter.hasNext(); )                    {                        Class type = feedbackChannel.getType ();                        if (type == Integer.TYPE)                            {                                Integer value = (Integer)iter.next();                                feedbackChannel.pushInt (value.intValue());                            } else                                if (type == Short.TYPE)                                    {                                        Short value = (Short)iter.next();                                        feedbackChannel.pushShort (value.shortValue());                                    } else                                        if (type == Character.TYPE)                                            {                                                Character value = (Character)iter.next();                                                feedbackChannel.pushChar (value.charValue());                                            } else                                                if (type == Float.TYPE)                                                    {                                                        Float value = (Float)iter.next();                                                        feedbackChannel.pushFloat (value.floatValue());                                                    } else                                                        {                                                            // this is essentially a default                                                            // if this isn't what you want, you should implement                                                            // another if-else clause!                                                            feedbackChannel.push (iter.next());                                                        }                        delay++;                    }                // Throw out the enqueued list now.                enqueued = null;            }    }