001    // Copyright 2004, 2005 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.apache.tapestry.contrib.table.model.common;
016    
017    import org.apache.tapestry.IRender;
018    import org.apache.tapestry.IRequestCycle;
019    import org.apache.tapestry.components.Block;
020    import org.apache.tapestry.components.BlockRenderer;
021    import org.apache.tapestry.contrib.table.model.ITableColumn;
022    import org.apache.tapestry.contrib.table.model.ITableModelSource;
023    import org.apache.tapestry.contrib.table.model.ITableRendererListener;
024    import org.apache.tapestry.contrib.table.model.ITableRendererSource;
025    import org.apache.tapestry.util.ComponentAddress;
026    
027    /**
028     * 
029     * @author mindbridge
030     * @since 2.3
031     */
032    public class BlockTableRendererSource implements ITableRendererSource
033    {
034            private static final long serialVersionUID = 1L;
035            
036            private ComponentAddress m_objBlockAddress;
037            private ComponentAddress m_objListenerAddress;
038    
039            public BlockTableRendererSource(Block objBlock)
040            {
041                    this(new ComponentAddress(objBlock));
042            }
043    
044            public BlockTableRendererSource(
045                    Block objBlock,
046                    ITableRendererListener objListener)
047            {
048                    this(new ComponentAddress(objBlock), new ComponentAddress(objListener));
049            }
050    
051            public BlockTableRendererSource(ComponentAddress objBlockAddress)
052            {
053                    this(objBlockAddress, null);
054            }
055    
056            public BlockTableRendererSource(
057                    ComponentAddress objBlockAddress,
058                    ComponentAddress objListenerAddress)
059            {
060                    setBlockAddress(objBlockAddress);
061                    setListenerAddress(objListenerAddress);
062            }
063    
064            /**
065             * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
066             */
067            public IRender getRenderer(
068                    IRequestCycle objCycle,
069                    ITableModelSource objSource,
070                    ITableColumn objColumn,
071                    Object objRow)
072            {
073                    ComponentAddress objListenerAddress = getListenerAddress();
074                    if (objListenerAddress != null)
075                    {
076                            ITableRendererListener objListener =
077                                    (ITableRendererListener) objListenerAddress.findComponent(
078                                            objCycle);
079                            objListener.initializeRenderer(
080                                    objCycle,
081                                    objSource,
082                                    objColumn,
083                                    objRow);
084                    }
085    
086                    Block objBlock = (Block) getBlockAddress().findComponent(objCycle);
087                    return new BlockRenderer(objBlock);
088            }
089    
090            /**
091             * Returns the blockAddress.
092             * @return ComponentAddress
093             */
094            public ComponentAddress getBlockAddress()
095            {
096                    return m_objBlockAddress;
097            }
098    
099            /**
100             * Sets the blockAddress.
101             * @param blockAddress The blockAddress to set
102             */
103            public void setBlockAddress(ComponentAddress blockAddress)
104            {
105                    m_objBlockAddress = blockAddress;
106            }
107    
108            /**
109             * Returns the listenerAddress.
110             * @return ComponentAddress
111             */
112            public ComponentAddress getListenerAddress()
113            {
114                    return m_objListenerAddress;
115            }
116    
117            /**
118             * Sets the listenerAddress.
119             * @param listenerAddress The listenerAddress to set
120             */
121            public void setListenerAddress(ComponentAddress listenerAddress)
122            {
123                    m_objListenerAddress = listenerAddress;
124            }
125    
126    }