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

📄 appendableenabledwebresults.java

📁 esri的ArcGIS Server超级学习模板程序(for java)
💻 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 + -