Package org.apache.beehive.netui.databinding.datagrid.api.rendering

Source Code of org.apache.beehive.netui.databinding.datagrid.api.rendering.CellModel

/*
* Copyright 2004 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Header:$
*/
package org.apache.beehive.netui.databinding.datagrid.api.rendering;

import java.util.ArrayList;
import java.util.Iterator;
import javax.servlet.jsp.JspException;

import org.apache.beehive.netui.tags.html.FormatTag.Formatter;
import org.apache.beehive.netui.util.logging.Logger;
import org.apache.beehive.netui.util.Bundle;

/**
* <p>
* The CellModel is the base class for JavaBean objects that are used to configure the rendering of a CellDecorator.
* A CellModel exposes primitive services and state that can be used by {@link CellDecorator}s during rendering.
* </p>
*/
public class CellModel {

    private static final Logger LOGGER = Logger.getInstance(CellModel.class);

    private DataGridTagModel _dataGridTagModel;
    private ArrayList/*<Formatter>*/ _formatters;

    /**
     * Get the {@link DataGridTagModel} which is associated with the data grid tag that contains this
     * cell.
     *
     * @return the {@link DataGridTagModel} for this cell.  Inside a valid data grid, this method should
     * not return <code>null</code>.
     */
    public DataGridTagModel getDataGridTagModel() {
        return _dataGridTagModel;
    }

    /**
     * Set the {@link DataGridTagModel} for this cell.
     *
     * @param dataGridTagModel the new {@link DataGridTagModel} value.
     */
    public void setDataGridTagModel(DataGridTagModel dataGridTagModel) {
        _dataGridTagModel = dataGridTagModel;
    }

    /**
     * Add a {@link Formatter} which can be used to format an Object for rendering.  Many
     * {@link Formatter} instances can be registered and will be executed in the order in
     * which they were added.  This method is provided as a service to CellModel subclasses;
     * the use of formatters can vary based on the implementation of a {@link CellDecorator}.
     *
     * @param formatter the {@link Formatter} to add
     */
    public void addFormatter(Formatter formatter) {
        if(_formatters == null)
            _formatters = new ArrayList/*<Formatter>*/();

        _formatters.add(formatter);
    }

    /**
     * Format an {@link Object} value.  This method can be called by subclasses or by {@link CellDecorator} instances
     * which need to format data before rendering.
     *
     * @param value the {@link Object} to format
     * @return If the <code>value</code> is null, return <code>null</code>.   If there are no registered
     * {@link Formatter} instances, return {@link Object#toString()} for the <code>value</code> parameter.
     * Otherwisee, return the formatted value.
     */
    public String formatText(Object value) {
        if(value == null)
            return null;

        if(_formatters == null)
            return value.toString();

        Object formatted = value;
        for(int i = 0; i < _formatters.size(); i++) {
            assert _formatters.get(i) instanceof Formatter :
                    "Found invalid formatter type \"" +
                    (_formatters.get(i) != null ? _formatters.get(i).getClass().getName() : "null") + "\"";

            Formatter formatter = (Formatter)_formatters.get(i);
            assert formatter != null;
            try {
                formatted = formatter.format(formatted);
            }
            catch(JspException e) {
                /* todo: v1 -- error reporting */
                LOGGER.error(Bundle.getErrorString("CellModel_FormatterThrewException", new Object[]{formatter.getClass().getName(), e}), e);
            }
        }

        assert formatted != null;
        return formatted.toString();
    }
}
TOP

Related Classes of org.apache.beehive.netui.databinding.datagrid.api.rendering.CellModel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.