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

Unified Diff: grit/format/policy_templates/writers/adml_writer.py

Issue 7994004: Initial source commit to grit-i18n project. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 9 years, 3 months 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 side-by-side diff with in-line comments
Download patch
Index: grit/format/policy_templates/writers/adml_writer.py
===================================================================
--- grit/format/policy_templates/writers/adml_writer.py (revision 0)
+++ grit/format/policy_templates/writers/adml_writer.py (revision 0)
@@ -0,0 +1,167 @@
+# Copyright (c) 2011 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+from xml.dom import minidom
+from grit.format.policy_templates.writers import xml_formatted_writer
+
+
+def GetWriter(config):
+ '''Factory method for instanciating the ADMLWriter. Every Writer needs a
+ GetWriter method because the TemplateFormatter uses this method to
+ instantiate a Writer.
+ '''
+ return ADMLWriter(['win'], config)
+
+
+class ADMLWriter(xml_formatted_writer.XMLFormattedWriter):
+ ''' Class for generating an ADML policy template. It is used by the
+ PolicyTemplateGenerator to write the ADML file.
+ '''
+
+ # DOM root node of the generated ADML document.
+ _doc = None
+
+ # The string-table contains all ADML "string" elements.
+ _string_table_elem = None
+
+ # The presentation-table is the container for presentation elements, that
+ # describe the presentation of Policy-Groups and Policies.
+ _presentation_table_elem = None
+
+ def _AddString(self, parent, id, text):
+ ''' Adds an ADML "string" element to the passed parent. The following
+ ADML snippet contains an example:
+
+ <string id="$(id)">$(text)</string>
+
+ Args:
+ parent: Parent element to which the new "string" element is added.
+ id: ID of the newly created "string" element.
+ text: Value of the newly created "string" element.
+ '''
+ string_elem = self.AddElement(parent, 'string', {'id': id})
+ string_elem.appendChild(self._doc.createTextNode(text))
+
+ def WritePolicy(self, policy):
+ '''Generates the ADML elements for a Policy.
+ <stringTable>
+ ...
+ <string id="$(policy_group_name)">$(caption)</string>
+ <string id="$(policy_group_name)_Explain">$(description)</string>
+ </stringTable>
+
+ <presentationTables>
+ ...
+ <presentation id=$(policy_group_name)/>
+ </presentationTables>
+
+ Args:
+ policy: The Policy to generate ADML elements for.
+ '''
+ policy_type = policy['type']
+ policy_name = policy['name']
+ if 'caption' in policy:
+ policy_caption = policy['caption']
+ else:
+ policy_caption = policy_name
+ if 'desc' in policy:
+ policy_description = policy['desc']
+ else:
+ policy_description = policy_name
+ if 'label' in policy:
+ policy_label = policy['label']
+ else:
+ policy_label = policy_name
+
+ self._AddString(self._string_table_elem, policy_name, policy_caption)
+ self._AddString(self._string_table_elem, policy_name + '_Explain',
+ policy_description)
+ presentation_elem = self.AddElement(
+ self._presentation_table_elem, 'presentation', {'id': policy_name})
+
+ if policy_type == 'main':
+ pass
+ elif policy_type == 'string':
+ textbox_elem = self.AddElement(presentation_elem, 'textBox',
+ {'refId': policy_name})
+ label_elem = self.AddElement(textbox_elem, 'label')
+ label_elem.appendChild(self._doc.createTextNode(policy_label))
+ elif policy_type == 'int':
+ textbox_elem = self.AddElement(presentation_elem, 'decimalTextBox',
+ {'refId': policy_name})
+ textbox_elem.appendChild(self._doc.createTextNode(policy_label + ':'))
+ elif policy_type in ('int-enum', 'string-enum'):
+ for item in policy['items']:
+ self._AddString(self._string_table_elem, item['name'], item['caption'])
+ dropdownlist_elem = self.AddElement(presentation_elem, 'dropdownList',
+ {'refId': policy_name})
+ dropdownlist_elem.appendChild(self._doc.createTextNode(policy_label))
+ elif policy_type == 'list':
+ self._AddString(self._string_table_elem,
+ policy_name + 'Desc',
+ policy_caption)
+ listbox_elem = self.AddElement(presentation_elem, 'listBox',
+ {'refId': policy_name + 'Desc'})
+ listbox_elem.appendChild(self._doc.createTextNode(policy_label))
+ elif policy_type == 'group':
+ pass
+ else:
+ raise Exception('Unknown policy type %s.' % policy_type)
+
+ def BeginPolicyGroup(self, group):
+ '''Generates ADML elements for a Policy-Group. For each Policy-Group two
+ ADML "string" elements are added to the string-table. One contains the
+ caption of the Policy-Group and the other a description. A Policy-Group also
+ requires an ADML "presentation" element that must be added to the
+ presentation-table. The "presentation" element is the container for the
+ elements that define the visual presentation of the Policy-Goup's Policies.
+ The following ADML snippet shows an example:
+
+ Args:
+ group: The Policy-Group to generate ADML elements for.
+ '''
+ # Add ADML "string" elements to the string-table that are required by a
+ # Policy-Group.
+ self._AddString(self._string_table_elem, group['name'] + '_group',
+ group['caption'])
+
+ def _AddBaseStrings(self, string_table_elem, build):
+ ''' Adds ADML "string" elements to the string-table that are referenced by
+ the ADMX file but not related to any specific Policy-Group or Policy.
+ '''
+ self._AddString(string_table_elem, self.config['win_supported_os'],
+ self.messages['win_supported_winxpsp2']['text'])
+ if build == 'chrome':
+ self._AddString(string_table_elem, self.config['win_category_path'][0],
+ 'Google')
+ self._AddString(string_table_elem, self.config['win_category_path'][1],
+ self.config['app_name'])
+ elif build == 'chromium':
+ self._AddString(string_table_elem, self.config['win_category_path'][0],
+ self.config['app_name'])
+
+ def BeginTemplate(self):
+ dom_impl = minidom.getDOMImplementation('')
+ self._doc = dom_impl.createDocument(None, 'policyDefinitionResources',
+ None)
+ policy_definitions_resources_elem = self._doc.documentElement
+ policy_definitions_resources_elem.attributes['revision'] = '1.0'
+ policy_definitions_resources_elem.attributes['schemaVersion'] = '1.0'
+
+ self.AddElement(policy_definitions_resources_elem, 'displayName')
+ self.AddElement(policy_definitions_resources_elem, 'description')
+ resources_elem = self.AddElement(policy_definitions_resources_elem,
+ 'resources')
+ self._string_table_elem = self.AddElement(resources_elem, 'stringTable')
+ self._AddBaseStrings(self._string_table_elem, self.config['build'])
+ self._presentation_table_elem = self.AddElement(resources_elem,
+ 'presentationTable')
+
+ def GetTemplateText(self):
+ # Using "toprettyxml()" confuses the Windows Group Policy Editor
+ # (gpedit.msc) because it interprets whitespace characters in text between
+ # the "string" tags. This prevents gpedit.msc from displaying the category
+ # names correctly.
+ # TODO(markusheintz): Find a better formatting that works with gpedit.
+ return self._doc.toxml()
Property changes on: grit/format/policy_templates/writers/adml_writer.py
___________________________________________________________________
Added: svn:eol-style
+ LF

Powered by Google App Engine
This is Rietveld 408576698