Changeset 5821


Ignore:
Timestamp:
08/10/09 10:00:25 (10 years ago)
Author:
pnorton
Message:

Moved some of the initial setup values from the wmsviz controller to a status builder class.

Location:
cowsclient/trunk/cowsclient
Files:
1 added
8 edited

Legend:

Unmodified
Added
Removed
  • cowsclient/trunk/cowsclient/controllers/wcsdown.py

    r5818 r5821  
    88""" 
    99 
     10import time 
    1011import logging 
    1112 
    1213import paste 
    13 import time 
    14  
    15 from cowsclient.lib.base import BaseController, g, response, config, request, c, session, render 
    16  
    1714from owslib.wcs import WebCoverageService 
    1815 
     16import cowsclient.lib.utils as utils 
     17from cowsclient.lib.base import BaseController, g, response, config, request, c, render 
    1918from cowsclient.lib.wmc_util import proxyFix, resetProxy 
    20 import cowsclient.lib.utils as utils 
    2119from cowsclient.model.date_time_options import DateTimeOptionsBuilder 
    22   
    2320 
    2421log = logging.getLogger(__name__) 
  • cowsclient/trunk/cowsclient/controllers/wmsviz.py

    r5818 r5821  
    1010""" 
    1111 
    12  
    13 from cowsclient.lib.base import * #BaseController, g, response, config, request, c, session, render etc 
    14 from paste.request import parse_querystring 
    15 #from ows_server.models import Utilities 
    16 from cowsclient.lib.wmc_util import GetWebMapContext, GetWebMapCapabilities, GetLegend, openURL, GetResponse 
    17 from cowsclient.model import selectedItem 
    18 from cowsclient.lib.build_figure import build_figure 
    19 from cowsclient.lib.display_options_config import getDisplayOptionsConfig 
    20  
    21 import cowsclient.lib.utils as utils 
    22  
     12import logging 
     13import urllib2 
    2314import urlparse 
    2415from cStringIO import StringIO 
    2516 
    26      
    27 import logging 
     17#from ows_server.models import Utilities 
     18from paste.request import parse_querystring 
     19import cowsclient.lib.utils as utils 
     20 
     21# cowsclient imports 
     22from cowsclient.model import selectedItem 
     23from cowsclient.lib.base import BaseController, g, response, config, request, c, session, render, abort 
     24from cowsclient.lib.wmc_util import GetWebMapContext, GetWebMapCapabilities, GetLegend, openURL, GetResponse 
     25from cowsclient.lib.build_figure import build_figure 
     26from cowsclient.lib.status_builder import StatusBuilder 
     27 
    2828log = logging.getLogger(__name__) 
    29 import urllib2 
    3029 
    3130class WmsvizController(BaseController): 
     
    5554            return self.removeViewItem(self.inputs['removeItem']) 
    5655         
    57          
    5856        log.debug("self.inputs = %s" % (self.inputs,)) 
     57         
    5958        # check if we're doing an AJAX callback to get some WMC data 
    6059        if 'REQUEST' in self.inputs: 
     
    8887     
    8988     
     89         
     90        statusBuilder = StatusBuilder() 
     91         
     92        status = statusBuilder.getCurrentStatus() 
     93 
    9094        initialSetup = self._buildInitialSetup(self.inputs.get('ENDPOINT')) 
    9195         
     
    98102        # if ENDPOINT specified, we've reached the page via the WMC icon 
    99103         
    100         session['test'] = "test" 
    101          
    102104        #This will ensure that NDG security is triggered if a secured dataset is in Endpoint 
    103105        if 'ENDPOINT' in self.inputs: 
    104             #clear out old endpoints NOTE. this means only one endpoint at a time can be viewed. May want to 
     106        #clear out old endpoints NOTE. this means only one endpoint at a time can be viewed. May want to 
    105107        #rethink this to enable 'shopping cart' type selection. 
    106108#        self.removeAllViewItems() 
     
    111113                req.add_header('Cookie', request.headers.get('Cookie', '')) 
    112114                try: 
    113                    filehandle = openURL(req) 
    114                    filehandle.close() 
     115                    filehandle = openURL(req) 
     116                    filehandle.close() 
    115117                except urllib2.HTTPError, e:             
    116118                    log.exception("exception occurred") 
     
    131133#        if 'viewItems' not in session: 
    132134#            h.redirect_to(h.url_for(controller='discovery')) 
    133 #                                         
     135 
    134136        session.save()   
    135137        log.info('SAVED SESSION') 
     
    139141#            c.pageTabs.append(('View', h.url_for(controller='viewItems',action='index'))) 
    140142 
    141  
    142         c.defaultWMSEndpoints =  utils.toJSON(utils.readEndpoints().get('WMS',None)) 
    143              
    144143        c.initialSetupJSON = utils.toJSON(initialSetup)  
    145          
    146         displayOptsConfig = getDisplayOptionsConfig() 
    147          
    148         if 'HideOptions' in displayOptsConfig: 
    149             c.hideDisplayOptions = utils.toJSON(displayOptsConfig['HideOptions']) 
    150  
    151         if 'DefaultOptions' in displayOptsConfig: 
    152             c.defaultOptions = utils.toJSON(displayOptsConfig['DefaultOptions']) 
    153          
    154         log.debug("c.defaultOptions = %s" % (c.defaultOptions,)) 
    155          
    156         params = {} 
    157         for paramString in config['baselayer.params'].split(','): 
    158             key, value = paramString.split(':') 
    159             params[key] = value 
    160          
    161         baseLayerObj = {"url":config['baselayer.url'], "params": params } 
    162          
    163         c.baseLayerJSON = utils.toJSON(baseLayerObj)  
     144        c.initialStatus = utils.toJSON(status) 
    164145         
    165146        return render('wmsviz') 
  • cowsclient/trunk/cowsclient/lib/base.py

    r5626 r5821  
    88from pylons.controllers.util import abort, etag_cache, redirect_to 
    99from pylons.decorators import jsonify, validate 
    10 from pylons.i18n import _, ungettext, N_ 
     10from pylons.i18n import ungettext, N_ 
    1111from pylons.templating import render 
    1212 
  • cowsclient/trunk/cowsclient/lib/build_figure.py

    r5702 r5821  
    1717 
    1818try: 
    19     import matplotlib 
    2019    from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas 
    2120    from matplotlib.figure import Figure     
  • cowsclient/trunk/cowsclient/lib/png_combine.py

    r5702 r5821  
    55    import Image 
    66 
    7 import time 
    87import logging 
    98import numpy as N 
  • cowsclient/trunk/cowsclient/lib/utilities.py

    r5265 r5821  
    1313import ConfigParser, os, re, urllib, logging 
    1414 
     15log = logging.getLogger(__name__) 
     16 
    1517class myConfig: 
    1618     
    17    ''' Handle missing sections and variables in a config file a bit gracefully. Also 
    18    instantiates a logger if necessary ''' 
     19    """ 
     20    Handle missing sections and variables in a config file a bit gracefully.  
     21    Also instantiates a logger if necessary 
     22    """ 
    1923    
    20    def __init__(self,configfile,logName='NDGLOG'): 
    21        self.config=ConfigParser.ConfigParser() 
    22        if not os.path.exists(configfile):  
    23            raise ValueError("Config file [%s] doesn't exist in [%s]"%(configfile,os.getcwd())) 
    24        self.config.read(configfile) 
    25        logfile=self.get('logging','debugLog',None) 
    26        # move to a wsgi logger ... safer I think in a multithread environment 
    27        #  
    28        #self.logfile=None #deprecated 
    29        self.logger=None 
    30        self.logfile=logfile 
    31        # 
    32        if logfile is not None: 
    33            #logger=logging.getLogger(logName) 
    34            #handler=logging.FileHandler(logfile) 
    35            #formatter=logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
    36            #handler.setFormatter(formatter) 
    37            #logger.addHandler(handler) 
    38            #logger.setLevel(logging.INFO) 
    39            #self.logger=logger 
    40            self.logger=None 
    41          
    42    def get(self,section,key,default=None): 
    43        ''' Return a config file value for key frm section ''' 
    44        try: 
    45            return self.config.get(section,key) 
    46        except: 
    47            return default 
    48          
    49    def log(self,string): 
    50        ''' Log some debug information ''' 
    51        if self.logger is None: return 
    52        if string is not None: 
    53           self.logger.info(string) 
    54        else: 
    55           self.logger.info('empty log entry') 
     24    def __init__(self,configfile,logName='NDGLOG'): 
     25        self.config=ConfigParser.ConfigParser() 
     26        if not os.path.exists(configfile):  
     27            raise ValueError("Config file [%s] doesn't exist in [%s]"%(configfile,os.getcwd())) 
     28        self.config.read(configfile) 
     29        logfile=self.get('logging','debugLog',None) 
     30        # move to a wsgi logger ... safer I think in a multithread environment 
     31        #  
     32        #self.logfile=None #deprecated 
     33        self.logger=None 
     34        self.logfile=logfile 
     35        # 
     36        if logfile is not None: 
     37            #logger=logging.getLogger(logName) 
     38            #handler=logging.FileHandler(logfile) 
     39            #formatter=logging.Formatter('%(asctime)s %(levelname)s %(message)s') 
     40            #handler.setFormatter(formatter) 
     41            #logger.addHandler(handler) 
     42            #logger.setLevel(logging.INFO) 
     43            #self.logger=logger 
     44            self.logger=None 
     45 
     46    def get(self,section,key,default=None): 
     47        ''' Return a config file value for key frm section ''' 
     48         
     49        try: 
     50            return self.config.get(section,key) 
     51        except: 
     52            return default 
     53 
     54    def log(self,string): 
     55        ''' Log some debug information ''' 
     56         
     57        if self.logger is None: return 
     58         
     59        if string is not None: 
     60            self.logger.info(string) 
     61        else: 
     62            self.logger.info('empty log entry') 
    5663           
    57    def getLog(self): 
    58        return self.logger 
     64    def getLog(self): 
     65        return self.logger 
    5966 
    6067class RingBuffer(deque): 
     
    8289 
    8390def wrapGetText(element,xpathExpression,multiple=0): 
    84         ''' Wraps a call to ET to get a text object in an error handler ''' 
    85         def none2txt(i): 
    86             if i is None: return '' 
    87             return i 
    88         if element is None: 
    89             if multiple: 
    90                  return ['',] 
    91             else: return '' 
    92         if multiple: 
    93                 r=element.findall(xpathExpression) 
    94         else: 
    95                 r=[element.find(xpathExpression),] 
    96         try: 
    97                 rr=[i.text for i in r] 
    98         except: 
    99                 rr=['',] 
    100         rr=map(none2txt,rr)  
    101         if multiple:  
    102                 return rr 
    103         else: return rr[0]  
     91    ''' Wraps a call to ET to get a text object in an error handler ''' 
     92     
     93    def none2txt(i): 
     94        if i is None: return '' 
     95        return i 
     96     
     97    if element is None: 
     98        if multiple: 
     99            return ['',] 
     100        else:  
     101            return '' 
     102         
     103    if multiple: 
     104        r=element.findall(xpathExpression) 
     105    else: 
     106        r=[element.find(xpathExpression),] 
     107     
     108    try: 
     109        rr=[i.text for i in r] 
     110    except: 
     111        rr=['',] 
     112        rr=map(none2txt,rr) 
     113          
     114    if multiple:  
     115        return rr 
     116    else:  
     117        return rr[0]  
    104118 
    105119def getURLdict(cgiFieldStorage): 
  • cowsclient/trunk/cowsclient/public/js/outlineControl.js

    r5776 r5821  
    11 
    2 OutlineControl = function (outlineButtonId, outlineURL, outlineParams, eventsManager) { 
     2OutlineControl = function (outlineButtonId, eventsManager, options) { 
     3     
    34    this.outlineButton = document.getElementById(outlineButtonId); 
    4     this.outlineURL = outlineURL; 
    5     this.outlineParams = outlineParams; 
     5     
    66    this.eventsManager = eventsManager; 
     7     
     8    for (var i = 0; i < this.OPTIONAL_ARGS.length; i++) { 
     9        var optionName = this.OPTIONAL_ARGS[i]; 
     10        if (options[optionName] !== undefined) { 
     11            this[optionName] = options[optionName]; 
     12        } 
     13    } 
    714     
    815    Utils.addHTMLEventListener(this.outlineButton, 'click', this.addNewOutline, this); 
     
    1522        EVENT_TYPES: ['NEW_OUTLINE'], 
    1623         
     24        OPTIONAL_ARGS: ['url','params'], 
     25         
     26        url: 'http://labs.metacarta.com/wms/vmap0', 
     27         
     28        params: {'layers':'coastline_01', 'format':'image/png'}, 
     29         
    1730        addNewOutline: function () { 
    1831            var outlineLayer = new OpenLayers.Layer.WMS( 
    1932                    'Outline', 
    20                     this.outlineURL,  
    21                     this.outlineParams, 
     33                    this.url,  
     34                    this.params, 
    2235                    {isBaseLayer:false, buffer:3}); 
    2336         
  • cowsclient/trunk/cowsclient/templates/wmsviz.html

    r5818 r5821  
    145145var layerParameters = null; 
    146146 
    147 var defaultEndpoints = ${h.jsonParseIfNotEmpty(c.defaultWMSEndpoints)}; 
    148 var hideDisplayOptions = ${h.jsonParseIfNotEmpty(c.hideDisplayOptions)}; 
    149 var defaultOptions = ${h.jsonParseIfNotEmpty(c.defaultOptions)}; 
     147var initialStatus = ${h.jsonParseIfNotEmpty(c.initialStatus)}; 
    150148 
    151149var eventsManager = null; 
     
    158156 
    159157    var initialSetupJSON = "${c.initialSetupJSON}"; 
    160         var baseLayerJSON = "${c.baseLayerJSON}"; 
    161  
    162         var baseLayerData = JSON.parse(baseLayerJSON); 
    163          
    164         WMSC.log("baseLayerData.url = " + baseLayerData.url); 
    165         WMSC.log("baseLayerData.params = " + baseLayerData.params); 
    166158 
    167159    var wmcRetriever = new WMCRetriever(); 
     
    183175              
    184176        layerList = new LayerList('layer_list', eventsManager);  
    185     layerParameters = new LayerParameters('layer_properties', 'selection_form', wmcRetriever, hideDisplayOptions, eventsManager); 
     177    layerParameters = new LayerParameters('layer_properties', 'selection_form', wmcRetriever, initialStatus.HiddenDisplayOptions, eventsManager); 
    186178     
    187179    var legendContainer = new LegendContainer('legend', eventsManager); 
    188180    var downloadControl = new WCSDownloadControl('wcsdownloadDiv', initialBounds, eventsManager); 
    189181    var figBuilder = new FigureBuilder('figureForm','make_figure_btn', initialBounds, eventsManager); 
    190     var outlineControl = new OutlineControl('add_outline', baseLayerData.url, baseLayerData.params, eventsManager); 
     182    var outlineControl = new OutlineControl('add_outline', eventsManager, initialStatus.OutlineSettings); 
    191183    var boundsControl = new WMSC.BoundsControl('dims', initialBounds, eventsManager); 
    192     var layerControl = new WMSC.VisAppLayers('layerTree', 'layerLeaves',wmcRetriever, 'new_endpoint', 'add_new_endpoint', defaultOptions, eventsManager);   
     184    var layerControl = new WMSC.VisAppLayers('layerTree', 'layerLeaves',wmcRetriever, 'new_endpoint', 'add_new_endpoint', initialStatus.DefaultLayerParms, eventsManager);   
    193185    app = new WMSC.VisApp('map', 10, 640, true, initialBounds, eventsManager); 
    194186 
    195187    var initialEndpoints = JSON.parse(initialSetupJSON); 
    196  
    197188 
    198189    outlineControl.addNewOutline(); 
     
    209200 
    210201    // build endpoint autocomplete 
    211     Utils.makeCombobox("new_endpoint", "endpoint_toggle", "endpoint_options", defaultEndpoints); 
     202    Utils.makeCombobox("new_endpoint", "endpoint_toggle", "endpoint_options", initialStatus.WMSEndpointsList); 
    212203     
    213204} 
Note: See TracChangeset for help on using the changeset viewer.