Changeset 5744 for cowsclient


Ignore:
Timestamp:
21/09/09 14:22:13 (10 years ago)
Author:
pnorton
Message:

Made some changes so that parameters can be included in the endpoint url and these will be maintained through the UI.

Location:
cowsclient/trunk/cowsclient
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/trunk/cowsclient/lib/wmc_util.py

    r5664 r5744  
    100100 
    101101def GetWebMapCapabilities(endpoint): 
    102     
    103     urlstring=('%s?request=GetCapabilities&service=WMS'%(str(endpoint))) 
    104     log.debug("GetWebMapCapabilities endpoint = %s" % (endpoint,)) 
     102     
     103    urlstring = parseEndpointString(endpoint, {'REQUEST':'GetCapabilities', 
     104                                               'SERVICE':'WMS'} ) 
     105    log.debug("urlstring = %s" % (urlstring,)) 
    105106    req = urllib2.Request(urlstring) 
    106107    req.add_header('Cookie', request.headers.get('Cookie', '')) 
     
    169170        os.environ['http_proxy'] = oldProxyVal 
    170171        reload(urllib2) 
     172 
     173 
     174def parseEndpointString(endpointString, requiredParams): 
     175    """ 
     176    Take an endpoint string and add the required params if they don't already appear 
     177    on the string. 
     178    """ 
     179    urlObj = urlparse.urlparse(endpointString) 
     180     
     181    queryParams = _parse_qs(urlObj.query) 
     182     
     183    for k, v in requiredParams.items(): 
     184        queryParams[k.lower()] = v 
     185     
     186    queryString = _build_qs(queryParams) 
     187     
     188    # as urlObj.query isn't writable extract the data to a list 
     189    # and replace the query data with the new query string 
     190    res = [x for x in urlObj] 
     191    res[4] = queryString 
     192                              
     193    return urlparse.urlunparse(res) 
     194 
     195def _parse_qs(queryString): 
     196    """ 
     197    returns a dictionary of key, value pairs from the query string. The keys in 
     198    the return dictionary are in all lowercase. Empty parameters are ignored. 
     199    The query string shouln't have a leading '?' character. 
     200    """ 
     201    queryDict = {} 
     202     
     203    for kvString in queryString.split('&'): 
     204         
     205        if kvString == '': 
     206            continue 
     207         
     208        key, value = kvString.split('=') 
     209         
     210        if value in ['', None]: 
     211            continue 
     212             
     213        queryDict[key.lower()] = value 
     214     
     215    return queryDict 
     216 
     217def _build_qs(queryDict, upperCaseKeys=True): 
     218    """ 
     219    Builds a url query string out of a dictionary. doesn't add the initial '?' character. 
     220     
     221    If upperCaseKeys == True then all the dictionary keys will be included as capital letters. 
     222    """ 
     223     
     224    queryStr = "" 
     225    for k, v in queryDict.items(): 
     226         
     227        if upperCaseKeys: 
     228            k = k.upper() 
     229         
     230        queryStr += "%s=%s&" % (k, v) 
     231     
     232    #remove the last & 
     233    queryStr = queryStr[:-1] 
     234    return queryStr 
     235     
  • cowsclient/trunk/cowsclient/public/js/layerControl.js

    r5719 r5744  
    419419        var defaultParams = this.defaultSetter.getDefaults(url, layerName);  
    420420         
     421        // because openlayesr adds the request and service params to the url 
     422        // they have to be removed if they already exist to avoid confustion 
     423         
     424        var removeParams = ['request', 'service']; 
     425        url = Utils.removeParamsInUrl(url, removeParams) 
     426         
    421427        var layer = new OpenLayers.Layer.WMS("#" + this.idIndex + " " + layerName,  
    422428                url, defaultParams); 
  • cowsclient/trunk/cowsclient/public/js/utils.js

    r5724 r5744  
    304304 
    305305/** 
     306 * Replaces existing parameters in a url with the new ones provided. If the new  
     307 * parameters don't already exist in the url they will be added. 
     308 *  
     309 * @param {String} url The url to add the parameters to 
     310 * @param {Object} params An object whos attributes correspond to the params to  
     311 *      be added, so that params[paramName] = paramValue. 
     312 */ 
     313Utils.replaceParamsInUrl = function (url, params) { 
     314    var addedFirst = false; 
     315    var urlStart = url; 
     316    if (url.indexOf('?') > 0) { 
     317        urlStart = url.substring(0, url.indexOf('?')); 
     318    } 
     319     
     320    var paramsString = ""; 
     321    var newParams = []; 
     322     
     323    for (var p in params) { 
     324         
     325        newParams.push(p.toUpperCase()); 
     326         
     327        if (addedFirst === false) { 
     328            paramsString += "?"; 
     329            addedFirst = true; 
     330        }  
     331        else { 
     332            paramsString += "&";     
     333        } 
     334         
     335        paramsString += p + "=" + params[p]; 
     336    } 
     337     
     338    // build a list of uppercase params already on the url 
     339    var existingParams = Utils.getParamsFromURL(url); 
     340 
     341    for (p in existingParams) { 
     342        if (Utils.isValueInList(p.toUpperCase(), newParams)) { 
     343            continue; 
     344        } 
     345        else if (existingParams[p] === "") { 
     346            continue; 
     347        } 
     348         
     349        if (addedFirst === false) { 
     350            paramsString += "?"; 
     351            addedFirst = true; 
     352        }  
     353        else { 
     354            paramsString += "&";     
     355        } 
     356         
     357        paramsString += p + "=" + existingParams[p];         
     358    } 
     359     
     360    return urlStart + paramsString; 
     361}; 
     362 
     363/** 
     364 * Removes existing parameters in a url with the new ones provided. 
     365 *  
     366 * @param {String} url The url to add the parameters to 
     367 * @param {Array} an array of params to remove from the url 
     368 */ 
     369Utils.removeParamsInUrl = function (url, params) { 
     370    var urlStart = url; 
     371    if (url.indexOf('?') > 0) { 
     372        urlStart = url.substring(0, url.indexOf('?')); 
     373    } 
     374     
     375    var paramsString = ""; 
     376    var removeParams = []; 
     377     
     378    for (var i = 0; i < params.length; i++) { 
     379        removeParams.push(params[i].toUpperCase()); 
     380    } 
     381     
     382    // build a list of uppercase params already on the url 
     383    var existingParams = Utils.getParamsFromURL(url); 
     384 
     385    var addedFirst = false; 
     386    for (p in existingParams) { 
     387        if (Utils.isValueInList(p.toUpperCase(), removeParams)) { 
     388            continue; 
     389        } 
     390         
     391        if (addedFirst === false) { 
     392            paramsString += "?"; 
     393            addedFirst = true; 
     394        }  
     395        else { 
     396            paramsString += "&";     
     397        } 
     398         
     399        paramsString += p + "=" + existingParams[p];         
     400    } 
     401     
     402    return urlStart + paramsString; 
     403}; 
     404 
     405/** 
    306406 * finds out if a list contains a particular value 
    307407 *  
     
    338438        for (var i = 0; i < 2000; i++) { 
    339439             
     440            var end = paramsStr.indexOf('&'); 
     441            if (end === -1) { 
     442                end = paramsStr.length; 
     443            } 
     444             
    340445            var pName = paramsStr.substring(0, paramsStr.indexOf('=')); 
    341             var pValue = paramsStr.substring(paramsStr.indexOf('=') + 1, paramsStr.indexOf('&')); 
     446            var pValue = paramsStr.substring(paramsStr.indexOf('=') + 1, end); 
    342447            params[pName] = pValue; 
    343448             
  • cowsclient/trunk/cowsclient/public/layout/ddc_vis.css

    r5690 r5744  
    3232{ 
    3333        display:none; 
    34         visibility = visible; 
     34        visibility:visible; 
    3535} 
    3636DIV.optDiv INPUT { 
  • cowsclient/trunk/cowsclient/public/test/utils_test.html

    r5671 r5744  
    33<head> 
    44 
    5     <script src="../js/utils.js"></script> 
     5    <script type="text/javascript" src="../js/utils.js"></script> 
    66         
    77    <script type="text/javascript"> 
     
    1616                valList = ['1','2','3','4','5',]; 
    1717                 
    18                 var sb = buildSelectBox('test', descList, valList, '2'); 
     18                var sb = Utils.buildSelectBox('test', descList, valList, '2'); 
    1919                form.appendChild(sb); 
    2020     
     
    2626            var items = paramsStr.split(','); 
    2727            var params = {}; 
     28            var paramNames = []; 
    2829            for (var i=0; i<items.length; i++) { 
    2930                var parts = items[i].split('_'); 
    3031                params[parts[0]] = parts[1]; 
     32                paramNames.push(parts[0]); 
    3133            } 
    3234     
    33             document.getElementById('new_url').innerHTML = addParamsToUrl(url, params); 
     35            document.getElementById('add_url').innerHTML = Utils.addParamsToUrl(url, params); 
     36            document.getElementById('replace_url').innerHTML = Utils.replaceParamsInUrl(url, params); 
     37            document.getElementById('remove_url').innerHTML = Utils.removeParamsInUrl(url, paramNames); 
    3438             
    3539            console.log("Finished."); 
     
    4751        </form> 
    4852     
    49     Original URL : <span id="original_url">http://labs.metacarta.com/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=coastline_01&format=image/png</span> <br /> 
    50     Params : <span id="params">FORMAT_image/png,VERSION_1.3.0,CRS_CRS:84,TRANSPARENT_true,SERVICE_WMS,REQUEST_GetMap,STYLES_,EXCEPTIONS_application/vnd.ogc.se_inimage_LAYERS_coastline_02,SRS_EPSG:4326</span> <br /> 
    51     New URL : <span id="new_url"></span> <br /> 
     53    Original URL : <span id="original_url">http://labs.metacarta.com/wms?version=1.1.1&service=WMS&request=GetLegendGraphic&layer=coastline_01&format=image/png</span> <br />  
     54    Params : <span id="params">FORMAT_image/png,VERSION_1.3.0,CRS_CRS:84,TRANSPARENT_true,SERVICE_WMS,REQUEST_GetMap,STYLES_,EXCEPTIONS_application/vnd.ogc.se_inimage_LAYERS_coastline_02,SRS_EPSG:4326</span> <br />  
     55    <!-- Original URL : <span id="original_url">http://behemoth.nerc-essc.ac.uk/ncWMS/wms?DATASET=GENIE&Request=GetCapabilities&service=WMS&version=1.3.0</span> <br /> --> 
     56    <!-- Params : <span id="params">request_1,service_wcs</span> <br /> --> 
     57    Added URL : <span id="add_url"></span> <br /> 
     58    Replaced URL : <span id="replace_url"></span> <br /> 
     59    Removed URL : <span id="remove_url"></span> <br /> 
    5260     
    5361</body> 
Note: See TracChangeset for help on using the changeset viewer.