📄 sortedresultstablemodel.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 + -