/*---------------- FILE HEADER --------------------------------------- This file is part of Geoide. Copyright (C) 2005-2006 by: IDgis B.V. http://www.idgis.nl This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Contact: Herman Assink IDgis bv P.O. Box 15 7450 AA Holten The Netherlands E-Mail: herman.assink@idgis.nl * @version 1.4.0 * @author IDgis team * ------------------------------------------------------------------------*/ import nl.idgis.giclient.GIClient; import nl.idgis.giclient.GIClientConfig; import nl.idgis.giclient.util.URLTools; import nl.idgis.giclient.util.XMLTools; import nl.idgis.giclient.gis.Map; import nl.idgis.giclient.gis.GILayer; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.SelectableLayer; import nl.idgis.giclient.geoma.Envelope; import nl.idgis.giclient.gis.TimeRangeScale; import nl.idgis.giclient.gis.TimeRange; import nl.idgis.giclient.StringTools; import nl.idgis.giclient.webserviceconnector.giconnector.GIConnector; import nl.idgis.giclient.webserviceconnector.giconnector.GIConnectorListener; import nl.idgis.giclient.query.QueryAspect; import nl.idgis.giclient.query.QueryColumn; import nl.idgis.giclient.framework.SinglePaneComponent; import nl.idgis.giclient.framework.buttons.ActionButtonConfig; import nl.idgis.giclient.gis.AnimationLayer; import nl.idgis.giclient.gis.WMLayer; import nl.idgis.giclient.webserviceconnector.wmsconnector.WMSConnector; import nl.idgis.giclient.webserviceconnector.wmsconnector.WMSConnectorListener; import nl.idgis.giclient.webserviceconnector.TransformConnector; import nl.idgis.giclient.webserviceconnector.QueryConnector; import nl.idgis.giclient.geoma.Point; import nl.idgis.giclient.geoma.MultiPoint; import nl.idgis.giclient.geoma.GMLFactory; import nl.idgis.giclient.util.Strings; import nl.idgis.giclient.GIContextListener; import nl.idgis.giclient.webserviceconnector.wfsconnector.WFSConnector; import nl.idgis.giclient.webserviceconnector.choristconnector.ChoristConnector; import nl.idgis.giclient.gis.ChoristLayer; import nl.idgis.giclient.gis.Report; import nl.idgis.giclient.template.TemplateFactory; import nl.idgis.giclient.template.TemplateDesc; import nl.idgis.giclient.webserviceconnector.MapConnector; import nl.idgis.giclient.webserviceconnector.AuthenticationConnector; import nl.idgis.giclient.framework.FrameWork; import nl.idgis.giclient.framework.Frame; import nl.idgis.giclient.gui.authenticationviewer.AuthenticationViewer; import mx.utils.Delegate; import nl.idgis.giclient.config.Colors; class nl.idgis.giclient.GIContext implements GIConnectorListener, WMSConnectorListener { private var listener:GIContextListener = null; private var giClientConfig:GIClientConfig = null; private var maps:Array = null; private var connector:TransformConnector = null; private var language:String = null; private var authentications:Array = null; function GIContext(listener:GIContextListener, giClientConfig:GIClientConfig) { authentications = new Array(); this.giClientConfig = giClientConfig; this.listener = listener; this.language = giClientConfig.getLanguage(); var xml:XML = new XML(); xml.ignoreWhite = true; var env:GIContext = this; xml.onLoad = function(successful:Boolean) { if ((successful) && (this.firstChild != null)) { env.onLoadXML(this.firstChild); } else { _root.frameWork.state // ("Could not parse the geoide context file.", 0); ( Strings.getFile("Geoide").getString("ParseErrorContextFile"), 0); } }; var contextURL:String; if(_root["context"]) { contextURL = _root["context"]; } else { contextURL = giClientConfig.getContextURL(); var location:Number = contextURL.indexOf("&"); while(location != -1) { contextURL = contextURL.slice(0, location) + "&" + contextURL.substr(location + 5); location = contextURL.indexOf("&"); } } var location:Number = contextURL.indexOf("&"); while(location != -1) { contextURL = contextURL.slice(0, location) + "&" + contextURL.substr(location + 5); location = contextURL.indexOf("&"); } if(contextURL.indexOf(":", 0) == -1) { xml.load(URLTools.getGIClientPath() + "/" + contextURL); } else { xml.load(contextURL); } } public function getTransformConnector():TransformConnector { return connector; } function onLoadXML(rootNode:XMLNode):Void { var mapsNode:XMLNode = XMLTools.getChild("Maps", rootNode); var mapNodes:Array = XMLTools.getChildNodes("Map", mapsNode); var transformationNode:XMLNode = XMLTools.getChild("TransformationServer", rootNode); if(transformationNode != null) { var service:String = XMLTools.getStringValue("service", transformationNode); if(service == "GI") { var href:String = XMLTools.getStringValue("xlink:href", XMLTools.getChild("OnlineResource", transformationNode)); if(href != null) { //var points:Array = new Array(); //points.push(new Point(10, 10)); //points.push(new Point(20, 20)); //trace("TransformationServer"); connector = GIConnector.getInstance(href, giClientConfig, XMLTools.getStringValue("version", transformationNode), XMLTools.getStringValue("title", transformationNode)); //connector.transform(new MultiPoint(points), "EPSG:4326", "EPSG:25832", null); } } } //trace(GMLFactory.createGeometryNode("test", , "EPSG:4326")); maps = loadMaps(mapNodes); if(authentications.length > 0) { // authentications[i].setCredentials("username1", "password1"); //} if(!_root["frameWork"]["frames"]["authenticationViewer"]) { FrameWork.addFrame("authenticationViewer", {scrollContent: "lib://AuthenticationViewer", paneTitle: "Login", paneComponent: _root["frameWork"], isScrolling: false, resizable: false, hasShader: true, colorlight: Colors.defaultDarkColor, colordark: Colors.defaultDarkColor, contentProperties: {callback: Delegate.create(this, onAuthenticationReady), authentications: authentications}, _x:100, _y:50}); _root["frameWork"]["frames"]["authenticationViewer"].setSize(300, 200); } var frame:Frame = Frame(_root["frameWork"]["frames"]["authenticationViewer"]); } else { GIConnector.loadCapabilities(this, connector); } } function onAuthenticationReady():Void { GIConnector.loadCapabilities(this, connector); } // from interface GIConnectorListener function onGIReady():Void { //giClient.onLoadGIContext(); WMSConnector.loadCapabilities(this, connector); } // from interface GIConnectorListener function onGIError(connector:GIConnector):Void { trace("GIError: " + connector.getURL()); // TODO disable layers /*for(var i:Number = 0; i < maps.length; i++) { var layers:Array = Map(maps[i]).getLayers(); disableGILayer(connector, layers); }*/ } /*private function disableGILayer(connector:GIConnector, layers:Array) { for(var j:Number = 0; j < layers.length; j++) { var layer:Layer = Layer(layers[j]); disableGILayer(connector, layer.getLayers()); if(layer instanceof GILayer) { var giLayer:GILayer = GILayer(layer); if(giLayer.getConnector() == connector) giLayer.setUnavailable(true); } } } */ function onWMSReady():Void { listener.onLoadGIContext(); } function onWMSError(connector:WMSConnector):Void { trace("WMSError: " + connector.getURL()); } private function loadMaps(mapNodes:Array):Array { var maps:Array = new Array(); var name:String = ""; var titleNode:XMLNode = null; var title:String = ""; var srsNode:XMLNode = null; var srs:Array = null; var mapUnits:String =""; var unboundFeatureLayer:Boolean = false; var disableInvisible:Boolean = false; var layersNode:XMLNode = null; var layerNodes:Array = null; var layers:Array = null; var templatesNode:XMLNode = null; var templateNodes:Array = null; var templates:Array = null; var reportsNode:XMLNode = null; var reportNodes:Array = null; var reports:Array = null; var webMapPrintServiceURL:String = ""; var webMapPrintServiceEmail:String = ""; var queryAspectsNode:XMLNode = null; var queryAspects :Array = new Array(); var map:Map = null; var initEnvelopeNode:XMLNode = null; var boundingEnvelopeNode:XMLNode = null; var minX:Number = -1; var minY:Number = -1; var maxX:Number = -1; var maxY:Number = -1; var minScale:Number = -1; var maxScale:Number = -1; var zoomToScale:Number = -1; var powerScale:Number = -1; var stigmaURL:String = null; var initialTimeRangeScaleNode:XMLNode = null; var timeRangeNode:XMLNode = null; var initialTimeRangeScale:TimeRangeScale = null; var currentTimeRangeScale:TimeRangeScale = null; var timeLimitNode:XMLNode = null; var timeLimit:TimeRange = null; var scalesNode:XMLNode = null; var scales:Array = null; for (var i:Number = 0; i < mapNodes.length; i++) { name = XMLTools.getStringValue("Name", mapNodes[i]); titleNode = XMLTools.getChild("Title", mapNodes[i]); title = XMLTools.getStringValue(language, titleNode); srsNode = XMLTools.getChild("SRSs", mapNodes[i]); srs = XMLTools.getStringValues("SRS", srsNode); mapUnits = XMLTools.getStringValue("MapUnits", mapNodes[i]); unboundFeatureLayer = XMLTools.getBooleanValue("UnboundFeatureLayer", mapNodes[i]); disableInvisible = XMLTools.getBooleanValue("DisableInvisible", mapNodes[i]); scalesNode = XMLTools.getChild("Scales", mapNodes[i]); scales = XMLTools.getStringValues("Scale", scalesNode); layersNode = XMLTools.getChild("LayerList", mapNodes[i]); layerNodes = XMLTools.getChildNodes("Layer", layersNode); templatesNode = XMLTools.getChild("PrintTemplates", mapNodes[i]); templateNodes = XMLTools.getChildNodes("PrintTemplate",templatesNode); templates = templateNodes; reportsNode = XMLTools.getChild("Reports", mapNodes[i]); reportNodes = XMLTools.getChildNodes("Report",reportsNode); reports = reportNodes; webMapPrintServiceURL = XMLTools.getStringValue("WebMapPrintServiceURL", mapNodes[i]); initEnvelopeNode = XMLTools.getChild("InitialExtent", mapNodes[i]); boundingEnvelopeNode = XMLTools.getChild("ExtentLimit", mapNodes[i]); webMapPrintServiceEmail = XMLTools.getStringValue("WebMapPrintServiceEmail", mapNodes[i]); queryAspectsNode = XMLTools.getChild("QueryAspects", mapNodes[i]); queryAspects = loadQueryAspects(queryAspectsNode, map); layers = loadLayerList(layerNodes, null, queryAspects, srs); // Disable unbound feature layer when editable layer is present if(unboundFeatureLayer) { for(var j:Number = 0; j < layers.length; j++) { if(layers[j] instanceof SelectableLayer) { if(SelectableLayer(layers[j]).isEditable()) { //trace("unboundfeaturelayer disable"); unboundFeatureLayer = false; break; } } } } map = new Map(name, title, unboundFeatureLayer, disableInvisible, layers, templates, reports, srs, mapUnits,webMapPrintServiceURL ); map.setWebMapPrintServiceEmail(webMapPrintServiceEmail); map.setQueryAspects(queryAspects); map.setScales(scales); if (initEnvelopeNode != null) { minX = XMLTools.getNumberValue("minx", initEnvelopeNode); minY = XMLTools.getNumberValue("miny", initEnvelopeNode); maxX = XMLTools.getNumberValue("maxx", initEnvelopeNode); maxY = XMLTools.getNumberValue("maxy", initEnvelopeNode); map.setInitEnvelope(new Envelope(srs[0], minX, minY, maxX, maxY)); } if (boundingEnvelopeNode != null) { minX = XMLTools.getNumberValue("minx", boundingEnvelopeNode); minY = XMLTools.getNumberValue("miny", boundingEnvelopeNode); maxX = XMLTools.getNumberValue("maxx", boundingEnvelopeNode); maxY = XMLTools.getNumberValue("maxy", boundingEnvelopeNode); map.setEnvelope(new Envelope(srs[0], minX, minY, maxX, maxY)); } initialTimeRangeScaleNode = XMLTools.getChild("InitialTimeRangeScale", mapNodes[i]); var timeScale:Number = XMLTools.getNumberValue("TimeScale", initialTimeRangeScaleNode); //trace("timeScale " + timeScale); if (timeScale != null && timeScale != 0) { //map with animation layers var fps:Number = XMLTools.getNumberValue("FPS", initialTimeRangeScaleNode); timeRangeNode = XMLTools.getChild("TimeRange", initialTimeRangeScaleNode); var begin:Date = new Date(0); var end:Date = new Date(0); if(XMLTools.getStringValue("Begin")!=""){ begin = StringTools.parseDateTime(XMLTools.getStringValue("Begin",timeRangeNode)); } if(XMLTools.getStringValue("End")!=""){ end = StringTools.parseDateTime(XMLTools.getStringValue("End",timeRangeNode)); } if (begin == end) { end.setSeconds(end.getSeconds() + 1); } initialTimeRangeScale = new TimeRangeScale(begin,end, timeScale,fps); map.setInitialTimeRangeScale(initialTimeRangeScale); //Make current initial equal to initial currentTimeRangeScale = new TimeRangeScale(begin,end, timeScale,fps); map.setCurrentTimeRangeScale(currentTimeRangeScale); } minScale = XMLTools.getNumberValue("MinScale", mapNodes[i]); if (minScale > -1) { map.setMinScale(minScale); } maxScale = XMLTools.getNumberValue("MaxScale", mapNodes[i]); if (maxScale > -1) { map.setMaxScale(maxScale); } zoomToScale = XMLTools.getNumberValue("ZoomToScale", mapNodes[i]); if (zoomToScale > -1) { map.setZoomToScale(zoomToScale); } powerScale = XMLTools.getNumberValue("PowerScale", mapNodes[i]); if (powerScale > -1) { map.setPowerScale(powerScale); } stigmaURL = XMLTools.getStringValue("StigmaURL", mapNodes[i]); if (stigmaURL != null) { map.setStigmaURL(stigmaURL); } maps.push(map); } return maps; } private function loadLayerList(layerNodes:Array, superLayer:Layer, queryAspects:Array, srs:Array):Array { var layers:Array = new Array(); var name:String = ""; var titleNode:XMLNode = null; var title:String = ""; var initVisible:Boolean = false; var initExpanded:Boolean = true; var minScale:Number = null; var maxScale:Number = null; var scales:Array = null; var layer:Layer = null; var subLayersNode:XMLNode = null; var subLayerNodes:Array = null; var subLayers:Array = null; var noLegendLayer:Boolean = false; var popUpInfoUrl:String = null; var popUpInfoTrigger:String = null; var editable:Boolean = null; var selectable:Boolean = null; var printLayer:String = null; var printStyle:String = null; var wfsURL:String = ""; var metaUrl:String = ""; var service:String = ""; var version:String = ""; var serverTitle:String = ""; var url:String = ""; var featureTypeName:String=""; var geometryType:String=""; var reportsNode:XMLNode = null; var reportNodes:Array = null; var queryAspectsNode:XMLNode = null; var queryAspectNodes:Array = null; var queryAspectName:String = ""; var queryAspect:QueryAspect = null; var animation:Boolean = null; var formatsNode:XMLNode = null; var formats:Array = null; var extentZoom:Boolean; var dynamicLegend:Boolean; for (var i:Number = 0; i < layerNodes.length; i++) { name = XMLTools.getStringValue("Name", layerNodes[i]); //trace("layerNodes[" + i + "].name = " + name); titleNode = XMLTools.getChild("Title", layerNodes[i]); title = XMLTools.getStringValue(language, titleNode); initVisible = XMLTools.getBooleanValue("InitVisible", layerNodes[i]); initExpanded = XMLTools.getBooleanValue("InitExpanded", layerNodes[i]); if (initExpanded == null || initExpanded == undefined) initExpanded = true; scales = new Array(); minScale = XMLTools.getNumberValue("sld:MinScaleDenominator", layerNodes[i]); maxScale = XMLTools.getNumberValue("sld:MaxScaleDenominator", layerNodes[i]); if(minScale >= 0) scales.push(minScale); if(maxScale >= 0) scales.push(maxScale); printLayer = XMLTools.getStringValue("PrintLayer", layerNodes[i]); printStyle = XMLTools.getStringValue("PrintStyle", layerNodes[i]); if (XMLTools.getStringValue("Editable", layerNodes[i]).toUpperCase() == "TRUE") { editable = true; } else { editable = false; } if (XMLTools.getStringValue("Selectable", layerNodes[i]).toUpperCase() == "TRUE") { selectable = true; } else { selectable = false; } if (XMLTools.getStringValue("Animation", layerNodes[i]).toUpperCase() == "TRUE") { animation = true; } else { animation = false; } if (XMLTools.getStringValue("ExtentZoom", layerNodes[i]).toUpperCase() == "FALSE") { extentZoom = false; } else { extentZoom = true; } if (XMLTools.getStringValue("DynamicLegend", layerNodes[i]).toUpperCase() == "TRUE") { dynamicLegend = true; } else { dynamicLegend = false; } wfsURL = XMLTools.getStringValue("WebFeatureServiceUrl", layerNodes[i]); metaUrl = XMLTools.getStringValue("MetaUrl", layerNodes[i]); featureTypeName = XMLTools.getStringValue("FeatureTypeName", layerNodes[i]); geometryType = XMLTools.getStringValue("GeometryType", layerNodes[i]); var columns:XMLNode = XMLTools.getChild("Columns", layerNodes[i]); subLayersNode = XMLTools.getChild("LayerList", layerNodes[i]); subLayerNodes = XMLTools.getChildNodes("Layer", subLayersNode); var server:XMLNode = XMLTools.getChild("Server", layerNodes[i]); service = server.attributes["service"]; version = server.attributes["version"]; //trace("version = " + version); serverTitle = server.attributes["title"]; var onlineResource:XMLNode = XMLTools.getChild("OnlineResource", server); url = onlineResource.attributes["xlink:href"]; formatsNode = XMLTools.getChild("Formats", layerNodes[i]); formats = XMLTools.getStringValues("Format", formatsNode); var security = "none"; if(server != null) { var serverSecurity = XMLTools.getStringValue("Security", server); if(serverSecurity != null) { security = serverSecurity; } if(service.toUpperCase() == "GI") { var giConnector:GIConnector = GIConnector.getInstance(url, giClientConfig, version, serverTitle); for(var k:Number = 0; k < srs.length; k++) giConnector.addSRS(srs[k]); if (selectable) { layer = new SelectableLayer(giConnector, name, title, initVisible, initExpanded, scales, printLayer, printStyle, superLayer, editable, wfsURL, featureTypeName, geometryType, extentZoom, dynamicLegend); var selectableLayer:SelectableLayer = SelectableLayer(layer); if(columns != null) { var column:Array = XMLTools.getChildNodes("Column", columns); for(var j:Number = 0; j < column.length; j++) { var columnName:String = XMLTools.getStringValue("Name", column[j]); var columnTitleNode:XMLNode = XMLTools.getChild("Title", column[j]); var columnTitle:String = XMLTools.getStringValue(language, columnTitleNode); if(columnTitle == null) columnTitle = XMLTools.getStringValue("en", columnTitleNode); var values:XMLNode = XMLTools.getChild("Values", column[j]); var columnFeatureTypeName:String = XMLTools.getStringValue("FeatureTypeName", values); var columnLabel:String = XMLTools.getStringValue("Label", values); var columnData:String = XMLTools.getStringValue("Data", values); var columnUrlprefix:String = XMLTools.getStringValue("Urlprefix", column[j]); selectableLayer.addColumnItem(columnName, columnTitle, columnFeatureTypeName, columnLabel, columnData, columnUrlprefix, j); } var hyperlinkColumn:String = XMLTools.getStringValue("HyperlinkProperty", layerNodes[i]); selectableLayer.setHyperlinkColumn(hyperlinkColumn); var annotationColumn:String = XMLTools.getStringValue("AnnotationProperty", layerNodes[i]); selectableLayer.setAnnotationColumn(annotationColumn); var objectOwnerProperty:String = XMLTools.getStringValue("ObjectOwnerProperty", layerNodes[i]); //trace("GIContext, objectOwnerProperty = " + objectOwnerProperty); selectableLayer.setObjectOwnerProperty(objectOwnerProperty); } var ownerRoles:String = XMLTools.getStringValue("OwnerRoles", layerNodes[i]); //trace("GIContext, OwnerRoles = " + ownerRoles); selectableLayer.setOwnerRoles(ownerRoles); giConnector.addRequestedRoles(ownerRoles); } else if(animation){ layer = new AnimationLayer(giConnector, name, title, initVisible, initExpanded, scales, printLayer, printStyle, superLayer, editable, featureTypeName, extentZoom, dynamicLegend); } else { layer = new GILayer(giConnector, name, title, initVisible, initExpanded, scales, printLayer, printStyle, superLayer, editable, featureTypeName, extentZoom, dynamicLegend); } } else if(service.toUpperCase() == "OGC:WMS") { var wmsConnector:WMSConnector = WMSConnector.getInstance(url, serverTitle); for(var k:Number = 0; k < srs.length; k++) wmsConnector.addSRS(srs[k]); var mapTipElement:String = XMLTools.getStringValue("MapTipElement", layerNodes[i]); var sldUrl:String = XMLTools.getStringValue("Sld", layerNodes[i]); layer = new WMLayer(wmsConnector, formats, name, title, initVisible, initExpanded, scales, superLayer, editable, mapTipElement, sldUrl); } else if(service.toUpperCase() == "CHORIST") { var choristConnector:ChoristConnector = ChoristConnector.getInstance(url, serverTitle); layer = new ChoristLayer(choristConnector, name, title, initVisible, initExpanded, scales, superLayer, editable); } } else { if(subLayersNode != null) { layer = new Layer(name, title, initVisible, initExpanded, scales, superLayer, editable, extentZoom); } else { layer = null; } } if(layer != null) { if(layer instanceof GILayer) { var giLayer:GILayer = GILayer(layer); /*queryAspectsNode = XMLTools.getChild("QueryAspects", extensionNode); if(queryAspectsNode != null) { queryAspectNodes = XMLTools.getChildNodes("QueryAspect", queryAspectsNode); for(var j:Number = 0; j < queryAspectNodes.length; j++) { queryAspectName = XMLTools.getStringValue("Name", queryAspectNodes[j]); if(queryAspectName != null) { queryAspect = new QueryAspect(queryAspectName, giLayer); queryAspects.push(queryAspect); } } }*/ for(var j:Number = 0; j < queryAspects.length; j++) { if(queryAspects[j].getLayerName() == giLayer.getName()) queryAspects[j].setLayer(giLayer); } popUpInfoUrl = XMLTools.getStringValue("PopUpInfoUrl", layerNodes[i]); popUpInfoTrigger = XMLTools.getStringValue("PopUpInfoTrigger", layerNodes[i]); giLayer.setPopUpInfo(popUpInfoUrl,popUpInfoTrigger); reportsNode = XMLTools.getChild("Reports", layerNodes[i]); if (reportsNode != null) { reportNodes = XMLTools.getChildNodes("Report", reportsNode); giLayer.setReports(loadReports(reportNodes)); } } subLayers = loadLayerList(subLayerNodes, layer, queryAspects, srs); layer.setLayers(subLayers); noLegendLayer = XMLTools.getBooleanValue("NoLegendLayer", layerNodes[i]); layer.setNoLegendLayer(noLegendLayer); layer.setMetaUrl(metaUrl); if(security != "none" && service == "OGC:WMS") { var authenticationConnector:AuthenticationConnector = WMSConnector(layer.getMapConnector()); authenticationConnector.setMethod(security); addAuthentication(authenticationConnector); } layers.push(layer); } } return layers; } private function addAuthentication(authenticationConnector:AuthenticationConnector) { for(var i:Number = 0; i < authentications.length; i++) { if(authentications[i] == authenticationConnector) { return; } } authentications.push(authenticationConnector); } private function loadReports(reportNodes:Array):Array { var reportUrl:String = null; var name:String = null; var path:String = null; var urlPrefix:String = null; var title:String = null; var description:String = null; var parameterColumn:String = null; var selectString:String = null; var report:Report = null; var reports:Array = new Array(); for (var i:Number = 0; i < reportNodes.length; i++) { var index1:Number=0; var index2:Number=0; reportUrl = XMLNode(reportNodes[i]).firstChild.nodeValue; index2 = reportUrl.indexOf("?"); urlPrefix = reportUrl.substring(index1, index2 + 1); if(reportUrl.indexOf("name")!=-1){ index1 = reportUrl.indexOf("=",reportUrl.indexOf("name")); index2 = reportUrl.indexOf("&",reportUrl.indexOf("name")); if(index1!=-1){ if(index2!=-1){ name = reportUrl.substring(index1+1, index2); } else { name = reportUrl.substr(index1+1); } } } if(reportUrl.indexOf("path")!=-1){ index1 = reportUrl.indexOf("=",reportUrl.indexOf("path")); index2 = reportUrl.indexOf("&",reportUrl.indexOf("path")); if(index1!=-1){ if(index2!=-1){ path = reportUrl.substring(index1+1, index2); } else { path = reportUrl.substr(index1+1); } } } if(reportUrl.indexOf("title")!=-1){ index1 = reportUrl.indexOf("=",reportUrl.indexOf("title")); index2 = reportUrl.indexOf("&",reportUrl.indexOf("title")); if(index1!=-1){ if(index2!=-1){ title = reportUrl.substring(index1+1, index2); } else { title = reportUrl.substr(index1+1); } } } if(reportUrl.indexOf("parameterColum")!=-1){ index1 = reportUrl.indexOf("=",reportUrl.indexOf("parameterColum")); index2 = reportUrl.indexOf("&",reportUrl.indexOf("parameterColumn")); if(index1!=-1){ if(index2!=-1){ parameterColumn = reportUrl.substring(index1+1, index2); } else { parameterColumn = reportUrl.substr(index1+1); } } } if(reportUrl.indexOf("selectString")!=-1){ index1 = reportUrl.indexOf("=",reportUrl.indexOf("selectString")); index2 = reportUrl.indexOf("&",reportUrl.indexOf("selectString")); if(index1!=-1){ if(index2!=-1){ selectString = reportUrl.substring(index1+1, index2); } else { selectString = reportUrl.substr(index1+1); } } } //name = XMLTools.getStringValue("Name", reportNodes[i]); //urlPrefix = XMLTools.getStringValue("Urlprefix", reportNodes[i]); //title = XMLTools.getStringValue("Title", reportNodes[i]); //description = XMLTools.getStringValue("Description", reportNodes[i]); //parameterColumn = XMLTools.getStringValue("ParameterColumn", reportNodes[i]); report = new Report(name, path, urlPrefix, title, description, parameterColumn, selectString); reports.push(report); } return reports; } private function loadQueryAspects(queryAspectsNode:XMLNode, map:Map):Array { var queryAspectNodes:Array = null; var queryAspect:QueryAspect = null; var queryAspects:Array = new Array(); var queryAspectName:String = null; var queryAspectTitleNode:XMLNode = null; var queryAspectTitle:String = null; var queryType:String = null; var layerName:String = null; var namespace:String = null; var layer:Layer = null; var queryColumnsNode:XMLNode = null; var queryColumnNodes:Array = null; var queryColumn:QueryColumn = null; var queryColumns:Array = null; var queryColumnName:String = null; var queryColumnTitleNode:XMLNode = null; var queryColumnTitle:String = null; var queryColumnFTQueryField:String = null; var queryColumnFTParentProperty:String = null; var queryColumnFTGeometryNode:String = null; var queryColumnOperandLabelField:String = null; var queryColumnOperandValueField:String = null; var operandValueFT:String = null; var operandValueNamespace:String = null; var searchType:String = null; var format:String = null; var tooltip:String = null; var operatorsNode:XMLNode = null; var operatorNodes:Array = null; var operatorName:String = null; var operatorNames:Array = null; var queryActionsNode:XMLNode = null; var queryActionNodes:Array = null; var actionButtonConfigs:Array = null; queryAspectNodes = XMLTools.getChildNodes("QueryAspect", queryAspectsNode); for (var i:Number = 0; i < queryAspectNodes.length; i++) { var server:XMLNode = XMLTools.getChild("Server", queryAspectNodes[i]); var service:String = server.attributes["service"]; var version:String = server.attributes["version"]; var title:String = server.attributes["title"]; var onlineResource:XMLNode = XMLTools.getChild("OnlineResource", server); var url:String = onlineResource.attributes["xlink:href"]; var connector:QueryConnector = null; if(service == "GI") { connector = GIConnector.getInstance(url, giClientConfig, version, title); } else if(service == "OGC:WFS") { connector = WFSConnector.getInstance(url); } queryAspectName = XMLTools.getStringValue("Name", queryAspectNodes[i]); queryAspectTitleNode = XMLTools.getChild("Title", queryAspectNodes[i]); queryAspectTitle = XMLTools.getStringValue(language, queryAspectTitleNode); queryType = XMLTools.getStringValue("QueryType", queryAspectNodes[i]); layerName = XMLTools.getStringValue("LayerName", queryAspectNodes[i]); namespace = XMLTools.getStringValue("Namespace", queryAspectNodes[i]); queryColumnsNode = XMLTools.getChild("QueryColumns", queryAspectNodes[i]); queryColumnNodes = XMLTools.getChildNodes("QueryColumn", queryColumnsNode); queryColumns = new Array(); for (var j:Number = 0; j < queryColumnNodes.length; j++) { queryColumnName = "column" + j;//XMLTools.getStringValue("Name", queryColumnNodes[j]); queryColumnTitleNode = XMLTools.getChild("Title", queryColumnNodes[j]); queryColumnTitle = XMLTools.getStringValue(language, queryColumnTitleNode); queryColumnFTQueryField = XMLTools.getStringValue("FTQueryField", queryColumnNodes[j]); operandValueFT = XMLTools.getStringValue("OperandValueFT", queryColumnNodes[j]); operandValueNamespace = XMLTools.getStringValue("OperandValueNamespace", queryColumnNodes[j]); queryColumnFTParentProperty = XMLTools.getStringValue("FTParentProperty", queryColumnNodes[j]); queryColumnFTGeometryNode = XMLTools.getStringValue("FTGeometryNode", queryColumnNodes[j]); queryColumnOperandLabelField = XMLTools.getStringValue("OperandLabelField", queryColumnNodes[j]); queryColumnOperandValueField = XMLTools.getStringValue("OperandValueField", queryColumnNodes[j]); searchType = XMLTools.getStringValue("SearchType", queryColumnNodes[j]); format = XMLTools.getStringValue("Format", queryColumnNodes[j]); tooltip = XMLTools.getStringValue("ToolTip", queryColumnNodes[j]); operatorsNode = XMLTools.getChild("Operators", queryColumnNodes[j]); operatorNodes = XMLTools.getChildNodes("Operator", operatorsNode); operatorNames = new Array(); for (var k:Number = 0; k < operatorNodes.length; k++) { operatorName = XMLTools.getStringValue("name", operatorNodes[k]); operatorNames.push(operatorName); } queryColumn = new QueryColumn(queryColumnName, queryColumnTitle, queryColumnFTQueryField, operandValueFT, operandValueNamespace, queryColumnFTParentProperty, queryColumnFTGeometryNode, queryColumnOperandLabelField, queryColumnOperandValueField, operatorNames, searchType, format, tooltip); queryColumns.push(queryColumn); } queryActionsNode = XMLTools.getChild("QueryActions", queryAspectNodes[i]); queryActionNodes = XMLTools.getChildNodes("QueryAction", queryActionsNode); actionButtonConfigs = new Array(); for (var j:Number = 0; j < queryActionNodes.length; j++) { var queryActionName:String = XMLTools.getStringValue("name", queryActionNodes[j]); var paneComponent:SinglePaneComponent = SinglePaneComponent(giClientConfig.getGIComponent("QueryBuilder")); var giButtonConfigs:Array = paneComponent.getGIButtonConfigs(); for (var k:Number = 0; k < giButtonConfigs.length; k++) { if (giButtonConfigs[k] instanceof ActionButtonConfig) { if (ActionButtonConfig(giButtonConfigs[k]).getActionClass()==queryActionName){ actionButtonConfigs.push(giButtonConfigs[k]); } } } } queryAspect = new QueryAspect(connector, queryAspectName, queryAspectTitle, queryType, layerName, namespace, queryColumns, actionButtonConfigs); queryAspects.push(queryAspect); } return queryAspects; } function getMaps():Array { for(var i:Number = 0; i < maps.length; i++) Map(maps[i]).setSRS(Map(maps[i]).getSupportedSRS()[0]); return maps; } }