📄 appendableenabledwebresults.java
字号:
package com.esri.solutions.jitk.web.data.results;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import com.esri.adf.web.data.GISResource;
import com.esri.adf.web.data.WebApplication;
import com.esri.adf.web.data.WebLayerInfo;
import com.esri.adf.web.data.query.QueryResult;
import com.esri.adf.web.data.results.ResultNode;
import com.esri.adf.web.data.results.ResultsUtil;
import com.esri.adf.web.data.results.WebResults;
import com.esri.adf.web.data.results.WebResultsObserver;
import com.esri.solutions.jitk.web.util.WebResultsUtil;
@SuppressWarnings("serial")
public class AppendableEnabledWebResults extends WebResults {
private static final Logger _logger = Logger.getLogger(AppendableEnabledWebResults.class);
private WebResultsMerger _webResultsMerger;
private String _resultsMode;
private boolean _highlightResults = true;
// enums for the results mode behavior
public enum ResultsModeType { ADD, SUBTRACT, NORMAL };
public AppendableEnabledWebResults() {
}
@SuppressWarnings("unchecked")
protected boolean removeResults( ResultNode resultNode ) {
// grab the current results
List topLevelResults = getResultNodes();
if( ! WebResultsUtil.isResultNodeListValid( topLevelResults ) ) {
// add the result node
return false;
}
// grab the latest results
ResultNode latestResultNode =
(ResultNode) topLevelResults.get( topLevelResults.size() -1 ) ;
// check if we have a "valid" result node
if( ! isResultNodeValid( resultNode ) ){
// add the result node
return false;
}
// grab the first Query Result Object in the ResultNode
QueryResult queryResult =
WebResultsUtil.getFirstQueryResult( resultNode );
// grab the first Query Result Object from current web results
QueryResult currentQueryResult =
WebResultsUtil.getFirstQueryResult( latestResultNode );
boolean isRemovalSucessful = false;
// Check if the currentResult obj's source is the same as the queryResult's source.
if( isQueryResultTheSame( queryResult, currentQueryResult ) ) {
_logger.debug( "[removeResults] Found a QueryResult match. Attemping to merge the results..." );
// call the merger to merge the results
isRemovalSucessful = _webResultsMerger.remove( latestResultNode, resultNode );
// check if we still have any results left, if we don't then send the 'No results' message
if( latestResultNode.getChildren().size() == 0 ) {
super.addResultsWithActionMap( "No Results Selected", null, null, null, null );
}
// send the notification that the ResultNode has been modified
notifyObservers(
WebResultsObserver.RESULT_MODIFIED,
latestResultNode,
null
);
} else {
_logger.debug( "Current result is not the same source as the query result." );
return false;
}
return isRemovalSucessful;
}
@SuppressWarnings("unchecked")
protected boolean mergeResults( ResultNode resultNode ) {
_logger.debug( "inside the mergeResults..." );
// grab the current results
List topLevelResults = getResultNodes();
if( ! WebResultsUtil.isResultNodeListValid( topLevelResults ) ) {
_logger.debug( "The topLevel ResultNode is invalid." );
// add the result node
//super.addResultNode(resultNode);
return false;
}
// grab the latest results
ResultNode latestResultNode =
(ResultNode) topLevelResults.get( topLevelResults.size() -1 ) ;
// check if we have a "valid" result node
if( ! isResultNodeValid( resultNode ) ){
_logger.debug( "the ResultNode that we are trying to merge is invalid" );
// add the result node
//super.addResultNode( resultNode );
return false;
}
// grab the first Query Result Object in the ResultNode
QueryResult queryResult =
WebResultsUtil.getFirstQueryResult( resultNode );
// grab the first Query Result Object from current web results
QueryResult currentQueryResult =
WebResultsUtil.getFirstQueryResult( latestResultNode );
boolean isMergeSucessful = false;
// Check if the currentResult obj's source is the same as the queryResult's source.
if( isQueryResultTheSame( queryResult, currentQueryResult ) ) {
_logger.debug( "[addResultNode] Found a QueryResult match. Attemping to merge the results..." );
// call the merger to merge the results
isMergeSucessful = _webResultsMerger.merge( latestResultNode, resultNode );
// send the notification that the ResultNode has been modified
notifyObservers(
WebResultsObserver.RESULT_MODIFIED,
latestResultNode,
null
);
} else {
_logger.debug( "Current result is not the same source as the query result." );
//super.addResultNode( resultNode );
return false;
}
return isMergeSucessful;
}
@Override
@SuppressWarnings("unchecked")
public void addResultNode( ResultNode resultNode ) {
_logger.debug( "Attempting to addResultNode..." );
if( resultNode != null ) {
// clear the previous selection
WebResultsUtil.toggleHighlightResultNode(
WebResultsUtil.getLatestResultNode( this ),
false
);
_logger.debug( "Using WebResults Mode: " + _resultsMode );
if( ResultsModeType.ADD.toString().equalsIgnoreCase( _resultsMode ) ) {
// merging the web results
boolean isMergeSuccessful = mergeResults( resultNode );
// checking if merge was successful
if( ! isMergeSuccessful ) {
_logger.warn( "Could not merge the results sucessfully - using the super method..." );
super.addResultNode( resultNode );
}
} else if( ResultsModeType.SUBTRACT.toString().equalsIgnoreCase( _resultsMode ) ) {
//remove from the web results
boolean isRemovalSucessful = removeResults( resultNode );
// checking if merge was successful
if( ! isRemovalSucessful ) {
_logger.warn( "Could not remove the results sucessfully." );
}
} else {
// call the super method
super.addResultNode( resultNode );
}
// highlight the results
WebResultsUtil.toggleHighlightResultNode(
WebResultsUtil.getLatestResultNode( this ),
true
);
}
}
@Override
@SuppressWarnings("unchecked")
public ResultNode addResults( String groupHeader, List results ) {
return addResultsWithActionMap(
groupHeader,
results,
null,
null,
null
);
}
@Override
@SuppressWarnings("unchecked")
public ResultNode addResultsWithActionArray(
String groupHeader,
List results,
String displayNameMethodName,
String detailsMethodName,
String[] actionMethodNames) {
return addResultsWithActionArray(
groupHeader,
results,
displayNameMethodName,
detailsMethodName,
actionMethodNames,
null
);
}
@Override
@SuppressWarnings("unchecked")
public ResultNode addResultsWithActionArray(
String groupHeader,
List results,
String displayNameMethodName,
String detailsMethodName,
String[] actionMethodNames,
String onRemoveMethodName) {
// create the map based on the action array
Map actionMethodsMap = new LinkedHashMap();
if (actionMethodNames != null) {
for (int i = 0; i < actionMethodNames.length; i++) {
actionMethodsMap.put(actionMethodNames[i], actionMethodNames[i]);
}
}
//call the other addResultsWithActionMap method
return addResultsWithActionMap(
groupHeader,
results,
displayNameMethodName,
detailsMethodName,
actionMethodsMap,
onRemoveMethodName
);
}
@Override
@SuppressWarnings("unchecked")
public ResultNode addResultsWithActionMap(
String groupHeader,
List results,
String displayNameMethodName,
String detailsMethodName,
Map actionMethodNames) {
// call other addResultsWithActionMap
return addResultsWithActionMap(
groupHeader,
results,
displayNameMethodName,
detailsMethodName,
actionMethodNames,
null
);
}
@Override
@SuppressWarnings("unchecked")
public ResultNode addResultsWithActionMap(
String groupHeader,
List results,
String displayNameMethodName,
String detailsMethodName,
Map actionMethodNames,
String onRemoveMethodName) {
// generate the ResultNode
ResultNode groupNode =
ResultsUtil.generateGroupTaskResultNodes(
groupHeader,
results,
displayNameMethodName,
detailsMethodName,
actionMethodNames,
onRemoveMethodName
);
// check the node for children
List children = groupNode.getChildren();
if (children == null || children.isEmpty() ) {
groupNode.addChild( new ResultNode( WebApplication.getResourceString("WebResults.NoResultMsg") ) );
}
addResultNode( groupNode );
return groupNode;
}
private boolean isQueryResultTheSame( QueryResult queryResult1, QueryResult queryResult2 ) {
// check the objects
if( queryResult1 != null && queryResult2 != null ) {
WebLayerInfo layer1 = queryResult1.getLayer();
WebLayerInfo layer2 = queryResult2.getLayer();
if( layer1 != null && layer2 != null ) {
GISResource resource1 = layer1.getResource();
GISResource resource2 = layer2.getResource();
// check the GIS resource
if( resource1 != null && resource2 != null ) {
if( ! resource1.equals( resource2 ) ) {
return false;
}
} else {
return false;
}
//check layer name
if( ! layer1.getName().equals( layer2.getName() ) ){
return false;
}
//check the layer id
if( layer1.getId() != layer2.getId() ){
return false;
}
// it is the same returning true
return true;
}
}
return false;
}
private boolean isResultNodeValid( Object nodeObj ) {
if (nodeObj == null || !(nodeObj instanceof ResultNode)) {
_logger.warn("Found a null/invalid ResultNode["+nodeObj+"] in WebResults of type: " + nodeObj.getClass() );
return false;
}
// cast the current Result Node
ResultNode resultNode = (ResultNode) nodeObj;
// grab the QueryResult Object - check the type
QueryResult queryResult = WebResultsUtil.getFirstQueryResult( resultNode );
// grab the QueryResult Object - check if its not null
if ( queryResult == null ) {
_logger.warn( "Found a null/invalid QueryResult["+ resultNode.getResult()+"] in ResultNode " );
return false;
}
return true;
}
public String getResultsMode() {
return _resultsMode;
}
public void setResultsMode( String resultsMode ) {
_resultsMode = resultsMode;
}
public WebResultsMerger getWebResultsMerger() {
return _webResultsMerger;
}
public void setWebResultsMerger(WebResultsMerger webResultsMerger) {
_webResultsMerger = webResultsMerger;
}
public boolean isHighlightResults() {
return _highlightResults;
}
public void setHighlightResults( boolean highlightResults ) {
_highlightResults = highlightResults;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -