source: cows/trunk/cows/service/imps/data_reader_geoplot_backend/slab_options_json_generator.py @ 5692

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/cows/trunk/cows/service/imps/data_reader_geoplot_backend/slab_options_json_generator.py@5697
Revision 5692, 2.5 KB checked in by pnorton, 11 years ago (diff)

Made some modifications to the data renderer backend. The display options are now attached to each of the slabs rather than being stored in the shared option parser and the controller.

I've also added some code to generate the display options JSON string.

Line 
1import logging
2import simplejson as json
3
4log = logging.getLogger(__name__)
5
6class SlabJSONGenerator(object):
7   
8    def __init__(self, slabClasses):
9               
10        #create a list of names for each of the styles (each slabClass has its onw style)
11        styleOptionNames = {}
12        for klass in slabClasses:
13            styleOptionNames[klass.style] = [x.name for x in klass.renderingOptions]
14       
15        self.commonOptions = []
16        self.styleOptions = {}
17       
18        #create an empty list to hold each styles specific options
19        for style in styleOptionNames.keys():
20            self.styleOptions[style] = []
21       
22        #for each option in each class
23        for klass in slabClasses:
24            for option in klass.renderingOptions:
25               
26                #check if this option appears in all the others
27                isCommon = True
28                for styleNames in styleOptionNames.values():
29                    if option.name not in styleNames:
30                        isCommon = False
31               
32                #add the option to one of the lists
33                if isCommon:
34                    if option.name not in [x.name for x in self.commonOptions]:
35                        self.commonOptions.append(option)
36                else:
37                    self.styleOptions[klass.style].append(option)
38           
39       
40    def generateJSON(self):
41
42        displayOptions = {}
43       
44        displayOptions['common'] = self._buildOptionsList(self.commonOptions)
45       
46        for style, optionsList in self.styleOptions.items():
47            displayOptions[style] = self._buildOptionsList(optionsList)
48           
49        return json.dumps(displayOptions)
50
51    def _buildOptionsList(self, optionsList):
52       
53        list = [self._buildOptionDict(opt) for opt in optionsList]
54           
55        return list
56   
57    def _buildOptionDict(self, renderOption):
58       
59        optionDict = {}
60        optionDict['name'] = renderOption.name
61        optionDict['title'] = renderOption.title
62        optionDict['defaultVal'] = renderOption.default
63       
64        if optionDict['defaultVal'] == None:
65            optionDict['defaultVal'] = ''
66       
67        if renderOption.options != None:
68            optionDict['options'] = renderOption.options
69            optionDict['type'] = 'select'
70           
71        elif renderOption.type == bool:
72            optionDict['type'] = 'bool'
73           
74        else:
75            optionDict["type"] ="value"
76       
77        return optionDict
Note: See TracBrowser for help on using the repository browser.