Refactor Catalog Key BT5 install

Remove code duplication and make it easy to override how the key should be modified at install time.
parent 43528411
...@@ -4172,10 +4172,7 @@ class RoleTemplateItem(BaseTemplateItem): ...@@ -4172,10 +4172,7 @@ class RoleTemplateItem(BaseTemplateItem):
path = obsolete_key path = obsolete_key
bta.addObject(xml_data, name=path) bta.addObject(xml_data, name=path)
class CatalogSearchKeyTemplateItem(BaseTemplateItem): class CatalogKeyTemplateItemBase(BaseTemplateItem):
key_list_attr = 'sql_catalog_search_keys'
key_list_title = 'search_key_list'
key_title = 'Search key'
def build(self, context, **kw): def build(self, context, **kw):
catalog = _getCatalogValue(self) catalog = _getCatalogValue(self)
...@@ -4200,6 +4197,10 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem): ...@@ -4200,6 +4197,10 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
key_list = [key.text for key in xml.getroot()] key_list = [key.text for key in xml.getroot()]
self._objects[file_name[:-4]] = key_list self._objects[file_name[:-4]] = key_list
def _getUpdateDictAction(self, update_dict):
action = update_dict.get(self.key_list_title, 'nothing')
return action
def install(self, context, trashbin, **kw): def install(self, context, trashbin, **kw):
catalog = _getCatalogValue(self) catalog = _getCatalogValue(self)
if catalog is None: if catalog is None:
...@@ -4217,17 +4218,17 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem): ...@@ -4217,17 +4218,17 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
keys = self._archive.keys() keys = self._archive.keys()
update_dict = kw.get('object_to_update') update_dict = kw.get('object_to_update')
force = kw.get('force') force = kw.get('force')
# XXX same as related key if force or self._getUpdateDictAction(update_dict) != 'nothing':
if update_dict.has_key(self.key_list_title) or force: catalog_key_list = self._getUpdatedCatalogKeyList(catalog_key_list, keys)
if not force:
action = update_dict[self.key_list_title]
if action == 'nothing':
return
for key in keys:
if key not in catalog_key_list:
catalog_key_list.append(key)
setattr(catalog, self.key_list_attr, catalog_key_list) setattr(catalog, self.key_list_attr, catalog_key_list)
def _getUpdatedCatalogKeyList(self, catalog_key_list, new_key_list):
catalog_key_list = list(catalog_key_list) # copy
for key in new_key_list:
if key not in catalog_key_list:
catalog_key_list.append(key)
return catalog_key_list
def uninstall(self, context, **kw): def uninstall(self, context, **kw):
catalog = _getCatalogValue(self) catalog = _getCatalogValue(self)
if catalog is None: if catalog is None:
...@@ -4262,100 +4263,80 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem): ...@@ -4262,100 +4263,80 @@ class CatalogSearchKeyTemplateItem(BaseTemplateItem):
xml_data = self.generateXml(path=path) xml_data = self.generateXml(path=path)
bta.addObject(xml_data, name=path) bta.addObject(xml_data, name=path)
class CatalogResultKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogSearchKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_search_keys'
key_list_title = 'search_key_list'
key_title = 'Search key'
class CatalogResultKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_search_result_keys' key_list_attr = 'sql_search_result_keys'
key_list_title = 'result_key_list' key_list_title = 'result_key_list'
key_title = 'Result key' key_title = 'Result key'
class CatalogRelatedKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogRelatedKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_related_keys' key_list_attr = 'sql_catalog_related_keys'
key_list_title = 'related_key_list' key_list_title = 'related_key_list'
key_title = 'Related key' key_title = 'Related key'
# override this method to support 'key_list' for backward compatibility. # override this method to support 'key_list' for backward compatibility.
def install(self, context, trashbin, **kw): def _getUpdateDictAction(self, update_dict):
catalog = _getCatalogValue(self) action = update_dict.get(self.key_list_title, _MARKER)
if catalog is None: if action is _MARKER:
LOG('BusinessTemplate', 0, 'no SQL catalog was available') action = update_dict.get('key_list', 'nothing')
return return action
catalog_key_list = list(getattr(catalog, self.key_list_attr, []))
if context.getTemplateFormatVersion() == 1:
if len(self._objects.keys()) == 0: # needed because of pop()
return
keys = []
for k in self._objects.values().pop(): # because of list of list
keys.append(k)
else:
keys = self._archive.keys()
update_dict = kw.get('object_to_update')
force = kw.get('force')
# XXX must a find a better way to manage related key
if update_dict.has_key(self.key_list_title) or update_dict.has_key('key_list') or force:
if not force:
if update_dict.has_key(self.key_list_title):
action = update_dict[self.key_list_title]
else: # XXX for backward compatibility
action = update_dict['key_list']
if action == 'nothing':
return
for key in keys:
if key not in catalog_key_list:
catalog_key_list.append(key)
setattr(catalog, self.key_list_attr, catalog_key_list)
class CatalogResultTableTemplateItem(CatalogSearchKeyTemplateItem): class CatalogResultTableTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_search_tables' key_list_attr = 'sql_search_tables'
key_list_title = 'result_table_list' key_list_title = 'result_table_list'
key_title = 'Result table' key_title = 'Result table'
# keyword # keyword
class CatalogKeywordKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogKeywordKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_keyword_search_keys' key_list_attr = 'sql_catalog_keyword_search_keys'
key_list_title = 'keyword_key_list' key_list_title = 'keyword_key_list'
key_title = 'Keyword key' key_title = 'Keyword key'
# datetime # datetime
class CatalogDateTimeKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogDateTimeKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_datetime_search_keys' key_list_attr = 'sql_catalog_datetime_search_keys'
key_list_title = 'datetime_key_list' key_list_title = 'datetime_key_list'
key_title = 'DateTime key' key_title = 'DateTime key'
# full text # full text
class CatalogFullTextKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogFullTextKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_full_text_search_keys' key_list_attr = 'sql_catalog_full_text_search_keys'
key_list_title = 'full_text_key_list' key_list_title = 'full_text_key_list'
key_title = 'Fulltext key' key_title = 'Fulltext key'
# request # request
class CatalogRequestKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogRequestKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_request_keys' key_list_attr = 'sql_catalog_request_keys'
key_list_title = 'request_key_list' key_list_title = 'request_key_list'
key_title = 'Request key' key_title = 'Request key'
# multivalue # multivalue
class CatalogMultivalueKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogMultivalueKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_multivalue_keys' key_list_attr = 'sql_catalog_multivalue_keys'
key_list_title = 'multivalue_key_list' key_list_title = 'multivalue_key_list'
key_title = 'Multivalue key' key_title = 'Multivalue key'
# topic # topic
class CatalogTopicKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogTopicKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_topic_search_keys' key_list_attr = 'sql_catalog_topic_search_keys'
key_list_title = 'topic_key_list' key_list_title = 'topic_key_list'
key_title = 'Topic key' key_title = 'Topic key'
class CatalogScriptableKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogScriptableKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_scriptable_keys' key_list_attr = 'sql_catalog_scriptable_keys'
key_list_title = 'scriptable_key_list' key_list_title = 'scriptable_key_list'
key_title = 'Scriptable key' key_title = 'Scriptable key'
class CatalogRoleKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogRoleKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_role_keys' key_list_attr = 'sql_catalog_role_keys'
key_list_title = 'role_key_list' key_list_title = 'role_key_list'
key_title = 'Role key' key_title = 'Role key'
class CatalogLocalRoleKeyTemplateItem(CatalogSearchKeyTemplateItem): class CatalogLocalRoleKeyTemplateItem(CatalogKeyTemplateItemBase):
key_list_attr = 'sql_catalog_local_role_keys' key_list_attr = 'sql_catalog_local_role_keys'
key_list_title = 'local_role_key_list' key_list_title = 'local_role_key_list'
key_title = 'LocalRole key' key_title = 'LocalRole key'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment