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.table.model.common; 016 017import org.apache.tapestry.IRender; 018import org.apache.tapestry.IRequestCycle; 019import org.apache.tapestry.components.Block; 020import org.apache.tapestry.components.BlockRenderer; 021import org.apache.tapestry.contrib.table.model.ITableColumn; 022import org.apache.tapestry.contrib.table.model.ITableModelSource; 023import org.apache.tapestry.contrib.table.model.ITableRendererListener; 024import org.apache.tapestry.contrib.table.model.ITableRendererSource; 025import org.apache.tapestry.util.ComponentAddress; 026 027/** 028 * 029 * @author mindbridge 030 * @since 2.3 031 */ 032public 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}