/*---------------- 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.framework.buttons.ActionButtonConfig; import nl.idgis.giclient.geoma.Envelope; import nl.idgis.giclient.GIClient; import nl.idgis.giclient.GIClientConfig; import nl.idgis.giclient.gis.Column; import nl.idgis.giclient.gis.Layer; import nl.idgis.giclient.gis.Map; import nl.idgis.giclient.gis.Report; import nl.idgis.giclient.query.QueryAspect; import nl.idgis.giclient.query.QueryColumn; import nl.idgis.giclient.framework.SinglePaneComponent; import nl.idgis.giclient.io.XMLResponse; import nl.idgis.giclient.io.XMLResponseListener; import nl.idgis.giclient.io.XMLServer; import nl.idgis.giclient.util.XMLTools; import nl.idgis.giclient.gis.PrintTemplate; import nl.idgis.giclient.StringTools; import nl.idgis.giclient.gis.AnimationLayer; import nl.idgis.giclient.gis.TimeRange; import nl.idgis.giclient.gis.TimeRangeScale; import nl.idgis.giclient.gis.SelectableLayer; class nl.idgis.giclient.GICapabilities /*implements XMLResponseListener*/ { /*private var giClient:GIClient = null; private var giClientConfig:GIClientConfig = null; private var xmlServer:XMLServer = null; private var authenticationType:String = null; private var authenticationUserName:String = null; private var authenticationTime:String = null; private var maps:Array = null; function GICapabilities(giClient:GIClient, giClientConfig:GIClientConfig) { this.giClientConfig = giClientConfig; this.giClient = giClient; xmlServer = giClientConfig.getXMLServer(); var serverRequest:String = "request=GetCapabilities"; var xmlResponse:XMLResponse = new XMLResponse(this, serverRequest); xmlResponse.setPath(giClientConfig.getServerURLPrefix()); xmlResponse.load(); // asynchronous } */ //TODO authentication public function getAuthenticationUserName():String { //return authenticationUserName; return ""; } /* public function getMaps():Array { return maps; } function onLoadXMLResponse(xmlResponse:XMLResponse):Void { var authenticationNode:XMLNode = XMLTools.getChild("Authentication", xmlResponse.firstChild); authenticationType = XMLTools.getStringValue("Type", authenticationNode); if (authenticationType.toUpperCase() != "NONE") { authenticationUserName = XMLTools.getStringValue("UserName", authenticationNode); authenticationTime = XMLTools.getStringValue("Time", authenticationNode); } var mapsNode:XMLNode = XMLTools.getChild("Maps", xmlResponse.firstChild); var mapNodes:Array = XMLTools.getChildNodes("Map", mapsNode); maps = loadMaps(mapNodes); giClient.onLoadGICapabilities(); // change username? reset capa & event } private function loadMaps(mapNodes:Array):Array { var maps:Array = new Array(); var name:String = ""; var title:String = ""; var srs:String = ""; var mapUnits:String =""; var unboundFeatureLayer: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 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 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; for (var i:Number = 0; i < mapNodes.length; i++) { name = XMLTools.getStringValue("Name", mapNodes[i]); title = XMLTools.getStringValue("Title", mapNodes[i]); srs = XMLTools.getStringValue("SRS", mapNodes[i]); mapUnits = XMLTools.getStringValue("MapUnits", mapNodes[i]); unboundFeatureLayer = XMLTools.getBooleanValue("UnboundFeatureLayer", mapNodes[i]); layersNode = XMLTools.getChild("Layers", mapNodes[i]); layerNodes = XMLTools.getChildNodes("Layer", layersNode); layers = loadLayers(layerNodes, null); templatesNode = XMLTools.getChild("PrintTemplates", mapNodes[i]); templateNodes = XMLTools.getChildNodes("PrintTemplate",templatesNode); templates = loadTemplates(templateNodes); webMapPrintServiceURL = XMLTools.getStringValue("WebMapPrintServiceURL", mapNodes[i]); map = new Map(xmlServer, name, title, unboundFeatureLayer, layers, templates, srs,mapUnits,webMapPrintServiceURL ); initEnvelopeNode = XMLTools.getChild("InitialExtent", mapNodes[i]); boundingEnvelopeNode = XMLTools.getChild("ExtentLimit", mapNodes[i]); 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(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.setBoundingEnvelope(new Envelope(minX, minY, maxX, maxY)); } webMapPrintServiceEmail = XMLTools.getStringValue("WebMapPrintServiceEmail", mapNodes[i]); map.setWebMapPrintServiceEmail(webMapPrintServiceEmail); queryAspectsNode = XMLTools.getChild("QueryAspects", mapNodes[i]); queryAspects = loadQueryAspects(queryAspectsNode, map); map.setQueryAspects(queryAspects); timeLimitNode = XMLTools.getChild("TimeLimit", mapNodes[i]); timeLimit = new TimeRange(StringTools.parseDateTime(XMLTools.getStringValue("begin",timeLimitNode)) ,StringTools.parseDateTime(XMLTools.getStringValue("end",timeLimitNode))); map.setTimeLimit(timeLimit); 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); } 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 loadLayers(layerNodes:Array, superLayer:Layer):Array { var layers:Array = new Array(); var name:String = ""; var title:String = ""; var initVisible:Boolean = false; var initExpanded:Boolean = true; var scalesNode:XMLNode = null; var scales:Array = null; var type:String = ""; var layer:Layer = null; var subLayersNode:XMLNode = null; var subLayerNodes:Array = null; var subLayers:Array = null; var latLongBoundingBoxNode:XMLNode = null; var minX:Number = 0; var minY:Number = 0; var maxX:Number = 0; var maxY:Number = 0; var columnsNode:XMLNode = null; var columnNodes:Array = null; var reportsNode:XMLNode = null; var reportNodes:Array = null; var mapTipColumnNode:XMLNode = null; var hyperlinkColumnNode:XMLNode = null; var attrInfoColumnsNode:XMLNode = null; var attrInfoColumnNodes:Array = null; var attrInfoColumns:Array = null; var path:String = ""; var geometryTypeNode:XMLNode = null; var geometryType:String = null; var noLegendLayer:Boolean = false; var popUpInfoUrl:String = null; var editable:Boolean = null; var selectable:Boolean = null; var printLayer:String = null; var printStyle:String = null; var featureTypeName:String = null; var featureIdPrefix:String = ""; var wfsURL:String = ""; for (var i:Number = 0; i < layerNodes.length; i++) { name = XMLTools.getStringValue("Name", layerNodes[i]); title = XMLTools.getStringValue("Title", layerNodes[i]); initVisible = XMLTools.getBooleanValue("InitVisible", layerNodes[i]); initExpanded = XMLTools.getBooleanValue("InitExpanded", layerNodes[i]); if (initExpanded == null || initExpanded == undefined) initExpanded = true; scalesNode = XMLTools.getChild("Scales", layerNodes[i]); scales = XMLTools.getNumberValues("Scale", scalesNode); printLayer = XMLTools.getStringValue("PrintLayer", layerNodes[i]); printStyle = XMLTools.getStringValue("PrintStyle", layerNodes[i]); featureTypeName = XMLTools.getStringValue("FeatureTypeName", layerNodes[i]); featureIdPrefix = XMLTools.getStringValue("FeatureIdPrefix", layerNodes[i]); if (featureIdPrefix == null) featureIdPrefix = ""; type = XMLTools.getStringValue("Type", 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; } subLayersNode = XMLTools.getChild("Layers", layerNodes[i]); subLayerNodes = XMLTools.getChildNodes("Layer", subLayersNode); wfsURL = XMLTools.getStringValue("WebFeatureServiceUrl", layerNodes[i]); if (type.toLowerCase() == "animation") { var timeRangeNode:XMLNode = XMLTools.getChild("TimeRange",layerNodes[i]); var timeRangeBegin:String = XMLTools.getStringValue("Begin", timeRangeNode); var begin:Date = StringTools.parseDateTime(timeRangeBegin); //trace("startTime = " + begin); var timeRangeEnd:String = XMLTools.getStringValue("End", timeRangeNode); var end:Date = StringTools.parseDateTime(timeRangeEnd); //trace("endTime = " + end); var timeRange = new TimeRange(begin, end); var maxFrames:Number = XMLTools.getNumberValue("MaxFrames", layerNodes[i]); layer = new AnimationLayer(xmlServer, name, title, initVisible, initExpanded, scales, printLayer, printStyle, type, superLayer, editable, featureTypeName, timeRange, maxFrames); } else if (selectable) { layer = new SelectableLayer(xmlServer, name, title, initVisible, initExpanded, scales, printLayer, printStyle, superLayer, editable, wfsURL, featureTypeName); } else { layer = new Layer(xmlServer, name, title, initVisible, initExpanded, scales, printLayer, printStyle, type, superLayer, editable, wfsURL, featureTypeName); } layer.setFeatureIdPrefix(featureIdPrefix); subLayers = loadLayers(subLayerNodes, layer); layer.setLayers(subLayers); latLongBoundingBoxNode = XMLTools.getChild("LatLongBoundingBox", layerNodes[i]); if (latLongBoundingBoxNode != null) { minX = XMLTools.getNumberValue("minx", latLongBoundingBoxNode); minY = XMLTools.getNumberValue("miny", latLongBoundingBoxNode); maxX = XMLTools.getNumberValue("maxx", latLongBoundingBoxNode); maxY = XMLTools.getNumberValue("maxy", latLongBoundingBoxNode); layer.setEnvelope(new Envelope(minX, minY, maxX, maxY)); } columnsNode = XMLTools.getChild("Columns", layerNodes[i]); if (columnsNode != null) { columnNodes = XMLTools.getChildNodes("Column", columnsNode); layer.setColumns(loadColumns(columnNodes)); mapTipColumnNode = XMLTools.getChild("MapTipColumn", layerNodes[i]); hyperlinkColumnNode = XMLTools.getChild("HyperlinkColumn", layerNodes[i]); attrInfoColumnsNode = XMLTools.getChild("AttrInfoColumns", layerNodes[i]); if (mapTipColumnNode != null) { path = XMLTools.getStringValue("path", mapTipColumnNode); layer.setMapTipColumn(layer.getColumn(path)); } if (hyperlinkColumnNode != null) { path = XMLTools.getStringValue("path", hyperlinkColumnNode); layer.setHyperlinkColumn(layer.getColumn(path)); } if (attrInfoColumnsNode != null) { attrInfoColumnNodes = XMLTools.getChildNodes("Column", attrInfoColumnsNode); attrInfoColumns = new Array(); for (var j:Number = 0; j < attrInfoColumnNodes.length; j++) { path = XMLTools.getStringValue("path", attrInfoColumnNodes[j]); attrInfoColumns.push(layer.getColumn(path)); } layer.setAttrInfoColumns(attrInfoColumns); } } reportsNode = XMLTools.getChild("Reports", layerNodes[i]); if (reportsNode != null) { reportNodes = XMLTools.getChildNodes("Report", reportsNode); layer.setReports(loadReports(reportNodes)); } geometryTypeNode = XMLTools.getChild("GeometryType", layerNodes[i]); geometryType = XMLTools.getStringValue("GeometryType", layerNodes[i]); if (geometryTypeNode != null) { layer.setGeometryType(geometryType); } noLegendLayer = XMLTools.getBooleanValue("NoLegendLayer", layerNodes[i]); layer.setNoLegendLayer(noLegendLayer); popUpInfoUrl = XMLTools.getStringValue("PopUpInfoUrl", layerNodes[i]); layer.setPopUpInfoUrl(popUpInfoUrl); layers.push(layer); } return layers; } private function loadColumns(columnNodes:Array):Array { var path:String = ""; var alias:String = null; var type:String = null; var urlPrefix:String = null; var width:Number = 0; var column:Column = null; var columns:Array = new Array(); var searchType:String = null; for (var i:Number = 0; i < columnNodes.length; i++) { path = XMLTools.getStringValue("Path", columnNodes[i]); column = new Column(path); alias = XMLTools.getStringValue("Alias", columnNodes[i]); if (alias != null) { column.setAlias(alias); } type = XMLTools.getStringValue("Type", columnNodes[i]); if (type != null) { column.setType(type); } urlPrefix = XMLTools.getStringValue("Urlprefix", columnNodes[i]); if (urlPrefix != null) { column.setURLPrefix(urlPrefix); } width = XMLTools.getNumberValue("Width", columnNodes[i]); if (width > -1) { column.setWidth(width); } searchType = XMLTools.getStringValue("SearchType", columnNodes[i]); if (searchType != null) { column.setSearchType(searchType); } columns.push(column); } return columns; } private function loadReports(reportNodes:Array):Array { var name:String = null; var urlPrefix:String = null; var title:String = null; var description:String = null; var parameterColumn:String = null; var report:Report = null; var reports:Array = new Array(); for (var i:Number = 0; i < reportNodes.length; i++) { 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, urlPrefix, title, description, parameterColumn); 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 queryAspectLabel:String = null; var queryType:String = null; var layerName: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 queryColumnFTQueryField:String = null; var queryColumnOperandLabelField:String = null; var queryColumnOperandValueField:String = null; var operandValueFT: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++) { queryAspectName = XMLTools.getStringValue("Name", queryAspectNodes[i]); queryAspectLabel = XMLTools.getStringValue("Label", queryAspectNodes[i]); queryType = XMLTools.getStringValue("QueryType", queryAspectNodes[i]); layerName = XMLTools.getStringValue("LayerName", queryAspectNodes[i]); layer=map.getLayerByName(layerName); queryColumnsNode = XMLTools.getChild("QueryColumns", queryAspectNodes[i]); queryColumnNodes = XMLTools.getChildNodes("QueryColumn", queryColumnsNode); queryColumns = new Array(); for (var j:Number = 0; j < queryColumnNodes.length; j++) { queryColumnName = XMLTools.getStringValue("Name", queryColumnNodes[j]); queryColumnFTQueryField = XMLTools.getStringValue("FTQueryField", queryColumnNodes[j]); operandValueFT = XMLTools.getStringValue("OperandValueFT", 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,queryColumnFTQueryField,operandValueFT, 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(queryAspectName, queryAspectLabel, queryType, layer, queryColumns, actionButtonConfigs); queryAspects.push(queryAspect); } return queryAspects; } private function loadTemplates(templateNodes : Array) : Array { var name:String = ""; var mapAreaWidth:Number = null; var mapAreaHeight:Number =null; var copyrightnote:String = ""; var printTemplate:PrintTemplate = null; var templates:Array = new Array(); for (var i:Number = 0; i < templateNodes.length; i++) { name = XMLTools.getStringValue("name", templateNodes[i]); mapAreaWidth = XMLTools.getNumberValue("width",templateNodes[i]); mapAreaHeight = XMLTools.getNumberValue("height",templateNodes[i]); copyrightnote = XMLTools.getStringValue("copyrightnote",templateNodes[i]); printTemplate = new PrintTemplate(name,mapAreaWidth,mapAreaHeight,copyrightnote); templates.push(printTemplate); } return templates; }*/ }