⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tablerendererutil.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 JAVA
字号:
package com.esri.solutions.jitk.web.faces.renderkit.xml;

import com.esri.adf.web.ADFException;
import com.esri.adf.web.data.results.ResultNode;
import com.esri.adf.web.util.XMLUtil;

import com.esri.solutions.jitk.common.resources.TextResources;
import com.esri.solutions.jitk.web.data.results.DefaultRowDataIntrospector;
import com.esri.solutions.jitk.web.data.results.EntityInfo;
import com.esri.solutions.jitk.web.data.results.FormatKit;
import com.esri.solutions.jitk.web.data.results.QueryResultNodeIntrospector;
import com.esri.solutions.jitk.web.data.results.RowDataIntrospector;
import com.esri.solutions.jitk.web.data.results.SelectableTableModel;
import com.esri.solutions.jitk.web.data.results.SimpleFormatKit;
import com.esri.solutions.jitk.web.data.results.SortedResultsTableModel;
import com.esri.solutions.jitk.web.data.results.TableModel;

import org.apache.log4j.Logger;

import org.w3c.dom.Element;

import java.util.Hashtable;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Set;


public class TableRendererUtil {
    private static final Logger log = Logger.getLogger(TableRendererUtil.class);

    public static void renderTableXml(TableModel tableModel, String controlId,
        Element parent) {
        try {
            int firstRow = 0;
            int lastRow = tableModel.getRowCount();

            Element headers = XMLUtil.createElement("headers", null, parent);
            Element rows = XMLUtil.createElement("rows", null, parent);

            if (isHasColumns(tableModel)) {
                rows.setAttribute("record-count", String.valueOf(lastRow));
            } else {
                rows.setAttribute("record-count", String.valueOf(0));
            }

            rows.setAttribute("record-count-text",
                TextResources.getResourceString(
                    "results.ui.label.table.RecordCount"));

            if ((lastRow > 0) && (tableModel.getPageIndex() < 0)) {
                tableModel.setPageIndex(0);
            }

            if ((tableModel.getPageSize() > 0) &&
                    (tableModel.getPageIndex() >= 0)) {
                firstRow = tableModel.getPageSize() * tableModel.getPageIndex();
                lastRow = firstRow + tableModel.getPageSize();
            }

            if (lastRow > tableModel.getRowCount()) {
                lastRow = tableModel.getRowCount();
            }

            String[] includeColumns = null;

            for (int i = firstRow; i < lastRow; i++) {
                Object rowData = tableModel.getRowData(i);
                RowDataIntrospector introspector = getRowDataIntrospector(rowData);

                if (i == firstRow) {
                    includeColumns = encodeAndReturnColumns(introspector.getColumnNames(
                                rowData), tableModel, headers, controlId);
                }

                encodeRow(tableModel, rowData, includeColumns, introspector,
                    rows, controlId + "_" + i, i);
            }

            if (tableModel.getPageCount() > 1) {
                Element pagings = XMLUtil.createElement("pagings", null, parent);
                encodePagingPanel(tableModel.getPageIndex(),
                    tableModel.getPageCount(), pagings, controlId + "_pagings");
            }
        } catch (Exception ex) {
            log.error("Unable to encode the table control.", ex);
            throw new ADFException("Unable to encode the table control.", ex);
        }
    }

    private static boolean isHasColumns(TableModel tableModel) {
        boolean hasColumns = false;

        if (tableModel.getRowCount() > 0) {
            Object rowData = tableModel.getRowData(0);
            RowDataIntrospector introspector = getRowDataIntrospector(rowData);
            String[] columns = introspector.getColumnNames(rowData);
            hasColumns = (boolean) (columns != null);
        }

        return hasColumns;
    }

    private static RowDataIntrospector getRowDataIntrospector(Object rowData) {
        return (rowData instanceof ResultNode)
        ? new QueryResultNodeIntrospector() : new DefaultRowDataIntrospector();
    }

    private static void addElement(String name, Map<String, String> atts,
        Element parent) {
        Element element = XMLUtil.createElement(name, null, parent);

        if ((atts != null) && !atts.isEmpty()) {
            for (java.util.Iterator<Map.Entry<String, String>> i = atts.entrySet()
                                                                       .iterator();
                    i.hasNext();) {
                Map.Entry<String, String> att = i.next();
                element.setAttribute(att.getKey(), att.getValue());
            }
        }
    }

    private static String[] encodeAndReturnColumns(String[] allColumns,
        TableModel tableModel, Element parent, String clientIdPrefix) {
        Set<String> columns = new LinkedHashSet<String>();

        if (allColumns != null) {
            EntityInfo entityInfo = tableModel.getEntityInfo();
            List<String> excludeColumns = ((entityInfo != null) &&
                (entityInfo.getExcludeColumns() != null) &&
                !entityInfo.getExcludeColumns().isEmpty())
                ? entityInfo.getExcludeColumns() : null;
            List<String> includeColumns = ((entityInfo != null) &&
                (entityInfo.getIncludeColumns() != null) &&
                !entityInfo.getIncludeColumns().isEmpty())
                ? entityInfo.getIncludeColumns() : null;
            Map<String, String> displayNames = ((entityInfo != null) &&
                (entityInfo.getDisplayNamesMap() != null) &&
                !entityInfo.getDisplayNamesMap().isEmpty())
                ? entityInfo.getDisplayNamesMap() : null;

            String sortByColumnName = "";
            boolean isSortAscending = true;

            if (tableModel instanceof SortedResultsTableModel) {
                SortedResultsTableModel sortedTableModel = (SortedResultsTableModel) tableModel;

                sortByColumnName = sortedTableModel.getSortByColumnName();
                isSortAscending = sortedTableModel.isSortAscending();
            }

            for (int i = 0; i < allColumns.length; i++) {
                if ((excludeColumns != null) &&
                        excludeColumns.contains(allColumns[i])) {
                    continue;
                }

                if ((includeColumns != null) &&
                        !includeColumns.contains(allColumns[i])) {
                    continue;
                }

                columns.add(allColumns[i]);

                Hashtable<String, String> atts = new Hashtable<String, String>();
                atts.put("id", clientIdPrefix + "_" + i);
                atts.put("name",
                    (displayNames != null) ? displayNames.get(allColumns[i])
                                           : allColumns[i]);

                if ((sortByColumnName.length() > 0) &&
                        allColumns[i].equalsIgnoreCase(sortByColumnName)) {
                    atts.put("sorted", (isSortAscending) ? "asc" : "desc");
                }

                addElement("header", atts, parent);
            }
        }

        return columns.toArray(new String[columns.size()]);
    }

    @SuppressWarnings("unchecked")
    private static void encodeRow(TableModel tableModel, Object rowData,
        String[] columns, RowDataIntrospector introspector, Element parent,
        String clientId, int rowIndex) {
        String[] actions = introspector.getActions(rowData);
        Object[] values = introspector.getValues(rowData, columns);

        // TODO: Need to be able to alter the format kit used by the
        // renderer or to define a new format kit altogether.
        FormatKit formatKit = new SimpleFormatKit();

        // Do not create a row element if the results has no actions
        // or values
        if (isRowHasData(actions, values)) {
            Element row = XMLUtil.createElement("row", null, parent);
            row.setAttribute("id", clientId);

            if (tableModel.getRowIndex() == rowIndex) {
                row.setAttribute("selected", Boolean.toString(true));
            } else {
                row.setAttribute("selected", Boolean.toString(false));
            }

            if (tableModel instanceof SelectableTableModel) {
                Set selected = ((SelectableTableModel) tableModel).getSelected();
                row.setAttribute("selected",
                    Boolean.toString(selected.contains(clientId)));
            }

            if (actions != null) {
                for (int i = 0; i < actions.length; i++) {
                    Element action = XMLUtil.createElement("action", null, row);
                    action.setAttribute("id", clientId + "_action_" + i);
                    action.setAttribute("name", actions[i]);
                    action.setAttribute("display-name",
                        getActionDisplayName(actions[i]));
                }
            }

            if (values != null) {
                for (int i = 0; i < values.length; i++) {
                    Element column = XMLUtil.createElement("column", null, row);
                    column.setAttribute("id", clientId + "_" + i);
                    column.setAttribute("value", formatKit.format(values[i]));

                    if (values[i] == null) {
                        column.setAttribute("is-null", "true");
                    }
                }
            }
        }
    }

    private static boolean isRowHasData(String[] actions, Object[] values) {
        return (((actions != null) && (actions.length > 0)) ||
        (values != null));
    }

    private static void encodePagingPanel(int currentPage, int pageCount,
        Element parent, String clientId) {
        boolean isFirst = (currentPage == 0);
        boolean isLast = (currentPage == (pageCount - 1));

        FormatKit formatKit = new SimpleFormatKit();
        Element column = XMLUtil.createElement("paging", null, parent);
        column.setAttribute("id", clientId + "_first");
        column.setAttribute("name", "first");
        column.setAttribute("enabled", formatKit.format(!isFirst));
        column.setAttribute("display-name", "First");

        column = XMLUtil.createElement("paging", null, parent);
        column.setAttribute("id", clientId + "_prev");
        column.setAttribute("name", "previous");
        column.setAttribute("enabled", formatKit.format(!isFirst));
        column.setAttribute("display-name", "Previous");

        Element action = XMLUtil.createElement("paging", null, parent);
        action.setAttribute("id", clientId + "_next");
        action.setAttribute("name", "next");
        action.setAttribute("enabled", formatKit.format(!isLast));
        action.setAttribute("display-name", "Next");

        action = XMLUtil.createElement("paging", null, parent);
        action.setAttribute("id", clientId + "_last");
        action.setAttribute("name", "last");
        action.setAttribute("enabled", formatKit.format(!isLast));
        action.setAttribute("display-name", "Last");

        for (int i = 1; i <= pageCount; i++) {
            Element page = XMLUtil.createElement("page", null, parent);
            page.setAttribute("id", clientId + "_" + formatKit.format(i));
            page.setAttribute("value", formatKit.format(i));
            page.setAttribute("name", "Page " + formatKit.format(i));

            boolean selected = (i == (currentPage + 1));
            page.setAttribute("selected", formatKit.format(selected));
        }
    }

    private static String getActionDisplayName(String action) {
        String displayName = action;

        try {
            // handle special case for 'View Metadata'
            if (action.contains(";")) {
                displayName = TextResources.getResourceString(
                        "results.ui.label.action." +
                        action.substring(0, action.indexOf(";"))) +
                    action.substring(action.indexOf(";"));
            } else {
                displayName = TextResources.getResourceString(
                        "results.ui.label.action." + action);
            }
        } catch (MissingResourceException ex) {
            log.warn(String.format("Cannot find resource for action %1$s " +
                    "(results.ui.label.action.%1$s)", action));
        }

        return displayName;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -