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

📄 urlresourcephaselistener.java

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

import java.util.Map;

import javax.faces.application.NavigationHandler;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.el.ValueBinding;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

import org.apache.log4j.Logger;

import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.data.WebMap;
import com.esri.solutions.jitk.web.event.ResourceUtil;

/**
 * JSF PhaseListener that will load a map resource from the URL if the 
 * URL parameter 'resources' value changes.
 *
 */
public class URLResourcePhaseListener implements PhaseListener {
	private static final long serialVersionUID = -3379505629597567268L;
	private static Logger _logger = Logger.getLogger(URLResourcePhaseListener.class.getName());
	
	@SuppressWarnings("unchecked")
	public void afterPhase(PhaseEvent event) {	
		if (_logger.isDebugEnabled()) {
			_logger.debug("afterPhase() called");
		}
		
	    FacesContext fContext = event.getFacesContext();
	    ExternalContext efContext = fContext.getExternalContext();
	    Map paramMap = efContext.getRequestParameterMap();	

	    String resourcesSessionKey = "com.esri.solutions.jitk.web.data.URLResourceHandler.resources";
	    Object objResroucres = efContext.getSessionMap().get(resourcesSessionKey);
	    efContext.getSessionMap().put("toggleAddDataTaskWindow", "false");
	    
	    String sessionResources = (String) objResroucres;
	    String resources = (String) paramMap.get("resources");
	    boolean isLoadResources = isURLResourceChanged(resources, sessionResources);
	    
	    sessionResources = sessionResources == null ? "(null)" : sessionResources;
	    resources = resources == null ? "(null)" : resources;
	    
	    // If the resources specified on the URL have changed ...
	    if (isLoadResources) {
	    	if (_logger.isDebugEnabled()) {
	    		_logger.debug("Resources URL parameter has changed from old:" + sessionResources + " new:" + resources);
	    		_logger.debug("Loading resources");
	    	}
	    	
	    	efContext.getSessionMap().put(resourcesSessionKey, resources);
	    	
	    	ValueBinding vb = fContext.getApplication().createValueBinding("#{mapContext}");
	        WebContext wContext = (WebContext) vb.getValue(fContext);
	        
	        sizeWebMap(wContext.getWebMap(), efContext.getSessionMap());
	    		
		    boolean zoom = isZoomToResourceExtentRequested(paramMap.get("zoom"));
		    String errUrl = addResourceListToMap(wContext, resources, zoom);	
		    
		    // If an error occurred, navigate to error page
		    if (errUrl.length() > 0){
		    	_logger.warn("Could not load resource " + errUrl);
		    	NavigationHandler nh = fContext.getApplication().getNavigationHandler();
		    	nh.handleNavigation(fContext, null, "resource-unavailable");
		    }
		    
		    wContext.refresh();
	    } else {
	    	if (_logger.isDebugEnabled()) {
	    		_logger.debug("Resources URL parameter has not changed, old:" + sessionResources + " new:" + resources);
	    	}
	    }		
	}
	
	@SuppressWarnings("unchecked")
	protected void sizeWebMap(WebMap wMap, Map session) {
		try {
			Object obj = session.get("width");
			
			if (obj == null) {
				_logger.debug("WebMap not size, URL parameter 'width' not found.");
				return;
			}
			
			String width = (String) obj;
			obj = session.get("height");
			
			if (obj == null) {
				_logger.debug("WebMap not size, URL parameter 'height' not found.");
				return;
			}	
			
			String height = (String) obj;
			
			wMap.setWidth(Integer.parseInt(width));
			wMap.setHeight(Integer.parseInt(height));
			
			if (_logger.isDebugEnabled()) {
				_logger.debug("WebMap sized to width:" + width + ", height:" + height);
			}
		} catch (Exception ex) {
			_logger.warn("Could not set WebMap width & height", ex);
		}
	}
	
	protected boolean isURLResourceChanged(String urlResources, String sessionResources) {
		if ((urlResources == null) && (sessionResources == null)) {
			return false;
		} else if (urlResources == null) {
			return false;
		} else if ((sessionResources == null) && (urlResources.length() <= 0)) {
			return false;
		} else if ((sessionResources == null) && (urlResources.length() > 0)) {
			return true;
		} else if (!sessionResources.equalsIgnoreCase(urlResources)){
			return true;
		} else {
			return false;
		}
	}
	
    protected String addResourceListToMap(WebContext wContext, String resources, boolean zoom) {
		String errUrl = "";
    	
    	if (resources != null && resources.length() > 0) {
    		String[] resourceArray = resources.split(",");
			  
    		for (int i = 0; i < resourceArray.length; i++) {
    			try {
    				// The resource loading logic was implemented by Sam Ngan. Here we 
    				// are just delegating logic to Sam's code. This code is poorly written
    				// and should be redone.  
    				errUrl += ResourceUtil.checkResource(resourceArray[i], wContext, zoom);
    			} catch (Exception ex) {
    				_logger.error("Unable to add resource to map", ex);
    				errUrl += "Resource Could not be loaded";
    			}
    		}
    	}  
    
    	return errUrl;
    }
	
	protected boolean isZoomToResourceExtentRequested(Object isZoom) {
		boolean zoom = true;
		String zval = (String) isZoom;
		
		if (zval != null && zval.equalsIgnoreCase("false")) {
			zoom = false;
		}
		
		return zoom;
	}	

	public void beforePhase(PhaseEvent arg0) {		
	}

	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}
}

⌨️ 快捷键说明

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