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
015package org.apache.tapestry.contrib.tree.components.table;
016
017import org.apache.tapestry.IRender;
018import org.apache.tapestry.IRequestCycle;
019import org.apache.tapestry.contrib.table.model.ITableColumn;
020import org.apache.tapestry.contrib.table.model.ITableModelSource;
021import org.apache.tapestry.contrib.table.model.ITableRendererSource;
022import org.apache.tapestry.contrib.table.model.common.ComponentTableRendererSource;
023import org.apache.tapestry.util.ComponentAddress;
024
025/**
026 * @author ceco
027 */
028public class TreeTableValueRenderSource implements ITableRendererSource
029{
030        private static final long serialVersionUID = 3237638859391458116L;
031        
032        private ComponentTableRendererSource m_objComponentRenderer;
033        private ComponentAddress m_objComponentAddress = null;
034
035        public TreeTableValueRenderSource()
036        {
037                m_objComponentRenderer = null;
038        }
039
040        public TreeTableValueRenderSource(ComponentAddress objComponentAddress)
041        {
042                m_objComponentAddress = objComponentAddress;
043        }
044
045        /**
046         * @see org.apache.tapestry.contrib.table.model.ITableRendererSource#getRenderer(IRequestCycle, ITableModelSource, ITableColumn, Object)
047         */
048        public IRender getRenderer(
049                IRequestCycle objCycle,
050                ITableModelSource objSource,
051                ITableColumn objColumn,
052                Object objRow)
053        {
054                if (m_objComponentRenderer == null)
055                {
056                        synchronized (this)
057                        {
058                                if (m_objComponentRenderer == null)
059                                {
060                                        
061                                        ComponentAddress objAddress = m_objComponentAddress;
062                                        if(m_objComponentAddress == null)
063                                                objAddress = new ComponentAddress(
064                                                        "contrib:TreeTableNodeViewPage",
065                                                        "treeTableNodeViewDelegator");
066                                        m_objComponentRenderer =
067                                                new ComponentTableRendererSource(objAddress);
068                                }
069                        }
070                }
071
072                return m_objComponentRenderer.getRenderer(
073                        objCycle,
074                        objSource,
075                        objColumn,
076                        objRow);
077        }
078
079}