function __fetch (complexName) { var namedWindow = null; var complexFrameName = null; var element = null; var idx; // Named window? idx = complexName.indexOf ("::"); if (idx >= 0) { namedWindow = complexName.substring (0, idx); complexFrameName = complexName.substring (idx + 2); } else complexFrameName = complexName; // Element? idx = complexFrameName.indexOf ("#"); if (idx >= 0) { element = complexFrameName.substring (idx + 1); complexFrameName = complexFrameName.substring (0, idx); } var win = namedWindow ? _root ().getNamedWindow (namedWindow) : window; if (! win) return null; var frame = win; if (complexFrameName) { // Try recursively to obtain the proper frame according to the // possibly-nesting-defining complexFrameName stuff var hier = complexFrameName.split (':'); for (var i = 0; i < hier.length; i ++) { frame = frame.frames [hier [i]]; if (! frame) { if (_root ().document.body.signal){ _root ().document.body.signal("WARNING: Couldn't retrieve frame [" + complexFrameName + "]; stumbled upon part [" + newName + "]"); } return false; } } } if (! element) return frame; else return frame.document.getElementById (element); } function cb_reloadFrame (producer, properties, htmlElement, param) { if(!htmlElement){ throw new Error("There is no HTML element to reload. Is the old tag being used?"); } var frame = __fetch (htmlElement); if (frame) frame.location.reload(); } function cb_reloadMapView (producer, properties, view, contextName) { var getGeometryUrl; if (contextName.indexOf ("describe") >= 0) { alert ("reloadMapView received as parameter the URL for fetching the geometry, but this is deprecated: better use the ContextBean's name."); getGeometryUrl = contextName; } else getGeometryUrl = _root ().getWebappBaseUrl () + "//describeContextBeanStructure.do?target=" + escape (contextName); if(typeof(view) == "string"){ var name = view.indexOf ("#") < 0 ? ("#" + view) : view; view = __fetch (name); } if (! view) { alert ("cb_reloadMapView couldn't fetch view with complex name: " + view); return null; } if (! window.getHTTPObject) { if (_root ().document.body.signal) _root ().document.body.signal ('WARNING: getHTTPObject is not defined. Cannot reload map navigator geometry. Is common.js used?'); return null; } if(! view){ if (_root ().document.body.signal) _root ().document.body.signal ('WARNING: view is not defined. Cannot reload map image. But why?'); return null; } var iHolder = view.mouseMapProcessor.getImageHolder (); if (! iHolder) { alert ('Couldn\'t find element imageHolder4' + view.id + '. Can\'t refresh map view ' + view.id); return; } withContextGeometry (getGeometryUrl, function (box, scale, zoomFactor, imageWidth, imageHeight, layerInfos, srs, srsEpsgId) { var parent; view.leftToLoad = 0; // The layerInfos come in the wrong order layerInfos.reverse(); // ======================================= // Update client-side geometry information // ======================================= view.mouseMapProcessor.reset (); var envelopeChanged = false; if(!view.envelope || (!view.envelope.equals(box))){ view.envelope = box; envelopeChanged = true; } view.scale = scale; view.zoomInFactor = zoomFactor; view.imageWidth = imageWidth; view.imageHeight = imageHeight; view.srs = srs; view.srsEpsgId = srsEpsgId; view.processDates(); // All map elements must be updated if (envelopeChanged && _root().getMapElementListeningOnView) { var elts = _root ().getMapElementListeningOnView (view); for (var i = 0; i < elts.length; i ++) { var el = elts [i]; if (el && el.layOnView) el.layOnView (); } } // destroy the ones we must not keep for (var ldiIdx = 0; ldiIdx < view.layerInfos.length; ldiIdx ++) { var foundLayer = false; var currentLayerInfo = view.layerInfos [ldiIdx]; for (var keptIdx = 0; keptIdx < layerInfos.length; keptIdx ++) { if (layerInfos [keptIdx].layerId == currentLayerInfo.layerId) { foundLayer = true; break; } } if (! foundLayer) { view.deleteLayerInfo (currentLayerInfo); } } view.mouseMapProcessor.startLoading (); for (var keptIdx = 0; keptIdx < layerInfos.length; keptIdx ++) { var currentLayerInfo = layerInfos [keptIdx]; currentLayerInfo.setView(view); var image = currentLayerInfo.layer; view.leftToLoad ++; currentLayerInfo.initializeImage (); currentLayerInfo.refreshImage (); } view.setLayerInfos(layerInfos); }); } function cb_displayGetFeatureResults (foo, bar, baz, url) { window.open (url, 'GetFeatureResults', 'width=800,height=600,toolbar=no,menubar=no'); } function withContextGeometry (getterUrl, body) { var httpObj = window.getHTTPObject (); if (httpObj == null) { if (top.document.body.signal) top.document.body.signal (new Array ("Browser", "Couldn't create an XmlHTTPRequest")); return null; } var results = new Array (); var getterFullUrl = getterUrl + '&outputType=wkt&rand=' + Math.random() + '&time=' + new Date ().getTime (); httpObj.onreadystatechange = function () { if (httpObj.readyState == 4) { if (httpObj.status == 200) { var layerInfos = []; var text = httpObj.responseText; //alert ('XmlHTTPRequest status is ' + httpObj.status); //alert ('XmlHTTPRequest text is ' + text); if (text != null) { var minx, miny, maxx, maxy, scale, ziFactor, imageWidth, imageHeight, srs, srsEpsgId; var interpretePair = function (name, value) { if (name.indexOf ('minx') > -1) minx = parseFloat (value); else if (name.indexOf ('miny') > -1) miny = parseFloat (value); else if (name.indexOf ('maxx') > -1) maxx = parseFloat (value); else if (name.indexOf ('maxy') > -1) maxy = parseFloat (value); else if (name.indexOf ('scale') > -1) scale = parseFloat (value); else if (name.indexOf ('zoomInFactor') > -1) ziFactor = parseFloat (value); else if (name.indexOf ('imageWidth') > -1) imageWidth = parseInt (value); else if (name.indexOf ('imageHeight') > -1) imageHeight = parseInt (value); else if (name.indexOf ('srsEpsgId') > -1) srsEpsgId = parseInt (value); else if (name.indexOf ('srs') > -1) srs = value; else if (name.indexOf ('layer id') > -1) { var currentLayerInfo = createLayerInfo(); currentLayerInfo.layerId = value; layerInfos [layerInfos.length] = currentLayerInfo; } else if (name.indexOf ('layer url') > -1) { var curLinfo = layerInfos [layerInfos.length - 1]; curLinfo ["url"] = value; } }; if (text.indexOf ("infos on") > -1) { // Complex version var lines = text.split ("\n"); for (var lIdx = 0; lIdx < lines.length; lIdx ++) { var line = lines [lIdx]; var firstEq = line.indexOf ("="); if (firstEq > -1) { interpretePair (line.substring (0, firstEq), line.substring (firstEq + 1)); } } } else { var tokens = text.split (','); for (var i = 0; i < tokens.length; i ++) { var token = tokens [i]; var parts = token.split ('='); interpretePair (parts [0], parts [1]); } } if (minx == null || miny == null || maxx == null || maxy == null || scale == null || ziFactor == null || imageWidth == null || imageHeight == null) { if (top.document.body.signal) top.document.body.signal (new Array ("Browser", 'Not all four of coordinates, scale, zoomInFactor, or image width and height could be read: ' + minx + ',' + miny + ',' + maxx + ',' + maxy + "; " + scale + "; " + ziFactor + "; " + imageWidth + ", " + imageHeight)); return body (null, null, null, null, null, null); } else { return body (new Box (minx, miny, maxx, maxy), scale, ziFactor, imageWidth, imageHeight, layerInfos, srs, srsEpsgId); } } } else alert ("Couldn't retrieve context geometry using URL " + getterFullUrl + ", got status " + httpObj.status + " from server. Returned text is: " + httpObj.statusText); } }; httpObj.open ("GET", getterFullUrl, true); httpObj.setRequestHeader("Content-Length",0); // Needed for proxies // httpObj.open ("POST", getterFullUrl, false); httpObj.send (null); }