Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(155)

Side by Side Diff: grit/format/policy_templates/writers/adml_writer.py

Issue 1442863002: Remove contents of grit's SVN repository. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 from xml.dom import minidom
7 from grit.format.policy_templates.writers import xml_formatted_writer
8
9
10 def GetWriter(config):
11 '''Factory method for instanciating the ADMLWriter. Every Writer needs a
12 GetWriter method because the TemplateFormatter uses this method to
13 instantiate a Writer.
14 '''
15 return ADMLWriter(['win'], config)
16
17
18 class ADMLWriter(xml_formatted_writer.XMLFormattedWriter):
19 ''' Class for generating an ADML policy template. It is used by the
20 PolicyTemplateGenerator to write the ADML file.
21 '''
22
23 # DOM root node of the generated ADML document.
24 _doc = None
25
26 # The string-table contains all ADML "string" elements.
27 _string_table_elem = None
28
29 # The presentation-table is the container for presentation elements, that
30 # describe the presentation of Policy-Groups and Policies.
31 _presentation_table_elem = None
32
33 def _AddString(self, id, text):
34 ''' Adds an ADML "string" element to _string_table_elem. The following
35 ADML snippet contains an example:
36
37 <string id="$(id)">$(text)</string>
38
39 Args:
40 id: ID of the newly created "string" element.
41 text: Value of the newly created "string" element.
42 '''
43 id = id.replace('.', '_')
44 if id in self.strings_seen:
45 assert text == self.strings_seen[id]
46 else:
47 self.strings_seen[id] = text
48 string_elem = self.AddElement(
49 self._string_table_elem, 'string', {'id': id})
50 string_elem.appendChild(self._doc.createTextNode(text))
51
52 def WritePolicy(self, policy):
53 '''Generates the ADML elements for a Policy.
54 <stringTable>
55 ...
56 <string id="$(policy_group_name)">$(caption)</string>
57 <string id="$(policy_group_name)_Explain">$(description)</string>
58 </stringTable>
59
60 <presentationTables>
61 ...
62 <presentation id=$(policy_group_name)/>
63 </presentationTables>
64
65 Args:
66 policy: The Policy to generate ADML elements for.
67 '''
68 policy_type = policy['type']
69 policy_name = policy['name']
70 if 'caption' in policy:
71 policy_caption = policy['caption']
72 else:
73 policy_caption = policy_name
74 if 'desc' in policy:
75 policy_description = policy['desc']
76 else:
77 policy_description = policy_name
78 if 'label' in policy:
79 policy_label = policy['label']
80 else:
81 policy_label = policy_name
82
83 self._AddString(policy_name, policy_caption)
84 self._AddString(policy_name + '_Explain', policy_description)
85 presentation_elem = self.AddElement(
86 self._presentation_table_elem, 'presentation', {'id': policy_name})
87
88 if policy_type == 'main':
89 pass
90 elif policy_type in ('string', 'dict'):
91 # 'dict' policies are configured as JSON-encoded strings on Windows.
92 textbox_elem = self.AddElement(presentation_elem, 'textBox',
93 {'refId': policy_name})
94 label_elem = self.AddElement(textbox_elem, 'label')
95 label_elem.appendChild(self._doc.createTextNode(policy_label))
96 elif policy_type == 'int':
97 textbox_elem = self.AddElement(presentation_elem, 'decimalTextBox',
98 {'refId': policy_name})
99 textbox_elem.appendChild(self._doc.createTextNode(policy_label + ':'))
100 elif policy_type in ('int-enum', 'string-enum'):
101 for item in policy['items']:
102 self._AddString(item['name'], item['caption'])
103 dropdownlist_elem = self.AddElement(presentation_elem, 'dropdownList',
104 {'refId': policy_name})
105 dropdownlist_elem.appendChild(self._doc.createTextNode(policy_label))
106 elif policy_type in ('list', 'string-enum-list'):
107 self._AddString(policy_name + 'Desc', policy_caption)
108 listbox_elem = self.AddElement(presentation_elem, 'listBox',
109 {'refId': policy_name + 'Desc'})
110 listbox_elem.appendChild(self._doc.createTextNode(policy_label))
111 elif policy_type == 'group':
112 pass
113 elif policy_type == 'external':
114 # This type can only be set through cloud policy.
115 pass
116 else:
117 raise Exception('Unknown policy type %s.' % policy_type)
118
119 def BeginPolicyGroup(self, group):
120 '''Generates ADML elements for a Policy-Group. For each Policy-Group two
121 ADML "string" elements are added to the string-table. One contains the
122 caption of the Policy-Group and the other a description. A Policy-Group also
123 requires an ADML "presentation" element that must be added to the
124 presentation-table. The "presentation" element is the container for the
125 elements that define the visual presentation of the Policy-Goup's Policies.
126 The following ADML snippet shows an example:
127
128 Args:
129 group: The Policy-Group to generate ADML elements for.
130 '''
131 # Add ADML "string" elements to the string-table that are required by a
132 # Policy-Group.
133 self._AddString(group['name'] + '_group', group['caption'])
134
135 def _AddBaseStrings(self, build):
136 ''' Adds ADML "string" elements to the string-table that are referenced by
137 the ADMX file but not related to any specific Policy-Group or Policy.
138 '''
139 self._AddString(self.config['win_supported_os'],
140 self.messages['win_supported_winxpsp2']['text'])
141 recommended_name = '%s - %s' % \
142 (self.config['app_name'], self.messages['doc_recommended']['text'])
143 if build == 'chrome':
144 self._AddString(self.config['win_mandatory_category_path'][0],
145 'Google')
146 self._AddString(self.config['win_mandatory_category_path'][1],
147 self.config['app_name'])
148 self._AddString(self.config['win_recommended_category_path'][1],
149 recommended_name)
150 elif build == 'chromium':
151 self._AddString(self.config['win_mandatory_category_path'][0],
152 self.config['app_name'])
153 self._AddString(self.config['win_recommended_category_path'][0],
154 recommended_name)
155
156 def BeginTemplate(self):
157 dom_impl = minidom.getDOMImplementation('')
158 self._doc = dom_impl.createDocument(None, 'policyDefinitionResources',
159 None)
160 if self._GetChromiumVersionString() is not None:
161 self.AddComment(self._doc.documentElement, self.config['build'] + \
162 ' version: ' + self._GetChromiumVersionString())
163 policy_definitions_resources_elem = self._doc.documentElement
164 policy_definitions_resources_elem.attributes['revision'] = '1.0'
165 policy_definitions_resources_elem.attributes['schemaVersion'] = '1.0'
166
167 self.AddElement(policy_definitions_resources_elem, 'displayName')
168 self.AddElement(policy_definitions_resources_elem, 'description')
169 resources_elem = self.AddElement(policy_definitions_resources_elem,
170 'resources')
171 self._string_table_elem = self.AddElement(resources_elem, 'stringTable')
172 self._AddBaseStrings(self.config['build'])
173 self._presentation_table_elem = self.AddElement(resources_elem,
174 'presentationTable')
175
176 def Init(self):
177 # Map of all strings seen.
178 self.strings_seen = {}
179
180 def GetTemplateText(self):
181 # Using "toprettyxml()" confuses the Windows Group Policy Editor
182 # (gpedit.msc) because it interprets whitespace characters in text between
183 # the "string" tags. This prevents gpedit.msc from displaying the category
184 # names correctly.
185 # TODO(markusheintz): Find a better formatting that works with gpedit.
186 return self._doc.toxml()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698