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