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

📄 sortedresultstablemodel.java

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

import java.io.Serializable;

import org.apache.log4j.Logger;

import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.data.WebContextInitialize;
import com.esri.adf.web.data.results.ResultNode;
import com.esri.adf.web.data.results.WebResults;
import com.esri.adf.web.data.results.WebResultsObserver;

/**
 * @author vlad2928
 *
 */
public class SortedResultsTableModel extends AbstractTableModel implements WebContextInitialize, Serializable {

	private static final long serialVersionUID = 542373160893147141L;

	private static Logger _logger = Logger.getLogger(SortedResultsTableModel.class.getName());
	
	WebContext context = null;

	/**
     * The current row index (0-based).
     */
    private int rowIndex = -1;
    
    /**
     * The {@link ResultNode} containing the data to be displayed.
     */
    private ResultNode data = null;
    
    private String sortByColumnName = "";
    private boolean sortAscending = true;
    
    /**
     * Observes {@link WebResults} events.
     */
    private WebResultsObserver observer = new SortedResultsObserver();

    private EntityInfo entityInfo;
    
    public SortedResultsTableModel() {
    	super();
    }

	/* (non-Javadoc)
	 * @see com.esri.adf.web.data.WebContextInitialize#destroy()
	 */
	public void destroy() {
		setData(null);
	}

	/* (non-Javadoc)
	 * @see com.esri.adf.web.data.WebContextInitialize#init(com.esri.adf.web.data.WebContext)
	 */
	public void init(WebContext context) {
		if(context != null) {
			this.context = context;
			this.context.getWebResults().addObserver(observer);
		}
	}
	
	public void setContext(WebContext context) {
		init(context);
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#getEntityInfo()
	 */
	public EntityInfo getEntityInfo() {
		return entityInfo;
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#getRowCount()
	 */
	public int getRowCount() {
		Object data = getData();
		
		if (data == null) {
            return (-1);
        
		} else if (((ResultNode)data).getChildren() == null) {
            return 0;
        
		} else return (((ResultNode)data).getChildren().size());
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#getRowData()
	 */
	public Object getRowData() throws DataBindingException {
		return getRowData(rowIndex);
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#getRowData(int)
	 */
	public Object getRowData(int rowIndex) throws DataBindingException {
		
		Object data = getData();
		
		if(isRowAvailable(rowIndex)) {
			return ((ResultNode)data).getChildren().get(rowIndex); 
		} else {
			throw new IllegalArgumentException("no row available");
		}
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#getRowIndex()
	 */
	public int getRowIndex() {
		return rowIndex;
	}

	public boolean isDataAvailable() {
		Object data = getData();
		return ((data != null) && (((ResultNode)data).getChildren() != null) && ((ResultNode)data).getChildren().size() > 0);
	}
	
	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#isRowAvailable()
	 */
	public boolean isRowAvailable() {
		return isRowAvailable(this.rowIndex);
	}

	public boolean isRowAvailable(int rowIndex) {
		return (isDataAvailable() && (rowIndex >= 0) && (rowIndex < ((ResultNode)getData()).getChildren().size()));
	}
	
	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#getData()
	 */
	public Object getData() {
		return data;
	}
	
	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#setData(java.lang.Object)
	 */
	public void setData(Object data) {
		
		if(data != null && data instanceof ResultNode) {
			
			if(this.data != null && !this.data.equals(data)) {
				this.sortByColumnName = "";
			}
	    	
			this.data = new WebResultsSorter().sort((ResultNode)data, this.sortByColumnName, this.sortAscending);
	    
		} else {
	    	this.data = null;
	    	this.sortByColumnName = "";
	    }
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#setEntityInfo(com.esri.solutions.jitk.web.data.results.EntityInfo)
	 */
	public void setEntityInfo(EntityInfo entityInfo) {
		this.entityInfo = entityInfo;
	}

	/* (non-Javadoc)
	 * @see com.esri.solutions.jitk.web.data.results.TableModel#setRowIndex(int)
	 */
	public void setRowIndex(int rowIndex) {
		
		if(this.rowIndex != rowIndex && isRowAvailable(rowIndex)) {
			this.rowIndex = rowIndex;
			
			RowSelectionEvent event = new RowSelectionEvent(this, rowIndex, getRowData());
            fireRowSelectedEvent(event);
		}
	}

	public String getSortByColumnName() {
		return sortByColumnName;
	}

	public void setSortByColumnName(String sortByColumnName) {
		
		if(this.sortByColumnName.equals(sortByColumnName)) {
			this.sortAscending = !this.sortAscending;
		} else { 
			this.sortAscending = true;
		}
		
		this.sortByColumnName = sortByColumnName;
		
		setData(data);
		refresh();
	}

	public boolean isSortAscending() {
		return this.sortAscending;
	}
	
	private void refreshAll() {
		
		if (rowIndex > -1) {
            rowIndex = -1;
        }
        
		if (pageIndex > -1) {
            pageIndex = -1;
        }
		
		refresh();
	}
	
	private void refresh() {
        DataBindingEvent event = new DataBindingEvent(this, data);
        fireDataBoundEvent(event);
    }
	
	class SortedResultsObserver implements WebResultsObserver, Serializable {
		
		private static final long serialVersionUID = -1452046954047814994L;

		public void webResultsUpdate(WebResults source, int updateType, ResultNode affectedNode, Object args) {

            if (affectedNode == null) {
                setData(null);
                
                if (updateType == WebResultsObserver.ALL_RESULTS_CLEARED) {
                	setShouldRender(true);
                }
            
            } else {
            	_logger.debug("Tabular Results WebResultsObserver triggered, requesting tabular results re-render");
            	setShouldRender(true);
            	
                switch (updateType) {
                
                case WebResultsObserver.RESULT_ADDED:
                    setData(affectedNode);
                    break;
                
                case WebResultsObserver.RESULT_REMOVED:
                    if (affectedNode.equals(getData())) {
                        setData(null);
                    }
                    break;
                
                case WebResultsObserver.RESULT_MODIFIED:
                    if (affectedNode.equals(getData())) {
                        setData(affectedNode);
                    }
                    break;
                
                case WebResultsObserver.RESULT_REPLACED:

                    if (args == null || !(args instanceof ResultNode)) {
                        setData(null);
                    }
                    if (affectedNode.equals(getData())) {
                        setData((ResultNode) args);
                    }
                    break;
                
                case WebResultsObserver.ALL_RESULTS_CLEARED:
                	setData(null);
                    break;
                }
            }
            
            refreshAll();
        }
    }
}

⌨️ 快捷键说明

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