001    /*
002     * Copyright 2002-2004 the original author or authors.
003     * 
004     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
005     * use this file except in compliance with the License. You may obtain a copy of
006     * the License at
007     * 
008     * http://www.apache.org/licenses/LICENSE-2.0
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
012     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
013     * License for the specific language governing permissions and limitations under
014     * the License.
015     */
016    package org.springframework.richclient.util;
017    
018    import java.awt.Component;
019    
020    import javax.swing.JList;
021    import javax.swing.JTable;
022    import javax.swing.JTree;
023    import javax.swing.ListCellRenderer;
024    import javax.swing.table.TableCellRenderer;
025    import javax.swing.tree.TreeCellRenderer;
026    
027    import org.springframework.util.Assert;
028    
029    /**
030     * Convenient superclass that encapsulates common rendering code for an object
031     * applied to different controls.
032     * 
033     * @author Keith Donald
034     */
035    public abstract class AbstractCellRenderer implements TreeCellRenderer, TableCellRenderer, ListCellRenderer {
036    
037        private TableCellRenderer tableCellRenderer;
038    
039        private ListCellRenderer listCellRenderer;
040    
041        private TreeCellRenderer treeCellRenderer;
042    
043        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
044                boolean leaf, int row, boolean hasFocus) {
045            if (treeCellRenderer == null) {
046                this.treeCellRenderer = createTreeCellRenderer();
047                Assert.notNull(this.treeCellRenderer, "Cell renderer implementation has not been configured for trees?");
048            }
049            return treeCellRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
050        }
051    
052        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,
053                int row, int column) {
054            if (tableCellRenderer == null) {
055                this.tableCellRenderer = createTableCellRenderer();
056                Assert.notNull(this.tableCellRenderer, "Cell renderer implementation has not been configured for tables?");
057            }
058            return tableCellRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
059        }
060    
061        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
062                boolean cellHasFocus) {
063            if (listCellRenderer == null) {
064                this.listCellRenderer = createListCellRenderer();
065                Assert.notNull(this.listCellRenderer, "Cell renderer has not been configured for lists?");
066            }
067            return listCellRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
068        }
069    
070        protected ListCellRenderer createListCellRenderer() {
071            return null;
072        }
073    
074        protected TableCellRenderer createTableCellRenderer() {
075            return null;
076        }
077    
078        protected TreeCellRenderer createTreeCellRenderer() {
079            return null;
080        }
081    
082    }