diff --git a/product/ERP5Type/Utils.py b/product/ERP5Type/Utils.py index 9f2dfd82607661b81791e468943eb82ebd09f225..fbad71f9dfda24437ef36aab2d85a19199dad69b 100755 --- a/product/ERP5Type/Utils.py +++ b/product/ERP5Type/Utils.py @@ -574,7 +574,7 @@ def setDefaultProperties(klass): for prop in prop_list: if prop['type'] in legalTypes: if not converted_prop_keys.has_key(prop['id']): - if prop['type'] != 'object': converted_prop_list += [prop] + if prop['type'] != 'content': converted_prop_list += [prop] converted_prop_keys[prop['id']] = 1 createDefaultAccessors(klass, prop['id'], prop=prop) else: @@ -636,11 +636,11 @@ def setDefaultProperties(klass): ##################################################### from Base import Base as BaseClass -from Accessor import Base, List, Object, Acquired +from Accessor import Base, List, Object, Acquired, Content import types # Compile accessors -for accessor in [Base, List, Object, Acquired]: +for accessor in [Base, List, Object, Acquired, Content]: for a_class in accessor.__dict__.items(): if type(a_class) is types.ClassType: if hasattr(a_class, '__call__'): @@ -720,6 +720,33 @@ def createDefaultAccessors(klass, id, prop = None): accessor_name = '_baseGet' + UpperCase(id) + 'List' if not hasattr(klass, accessor_name) or prop.get('override',0): setattr(klass, accessor_name, list_accessor) + if prop['type'] is 'content': + #LOG('Value Object Accessor', 0, prop['id']) + # Base Getter + accessor_name = 'get' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, base_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGet' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, base_accessor) + # Default Getter + accessor_name = 'getDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, default_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGetDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, default_accessor) + # List Getter + accessor_name = 'get' + UpperCase(id) + 'ValueList' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, list_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGet' + UpperCase(id) + 'ValueList' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, list_accessor) + if prop['type'] is 'object': #LOG('Value Object Accessor', 0, prop['id']) # Base Getter @@ -800,6 +827,75 @@ def createDefaultAccessors(klass, id, prop = None): accessor_name = '_baseGet' + UpperCase(id) + 'Set' if not hasattr(klass, accessor_name) or prop.get('override',0): setattr(klass, accessor_name, list_accessor) + elif prop['type'] is 'content': + # Create url getters for an object property + accessor_name = 'get' + UpperCase(id) + base_accessor = Content.Getter(accessor_name, id, prop['type'], + portal_type = prop.get('portal_type'), storage_id = prop.get('storage_id')) + # The default accessor returns the first item in a list + accessor_name = 'getDefault' + UpperCase(id) + default_accessor = Content.DefaultGetter(accessor_name, id, prop['type'], + portal_type = prop.get('portal_type'), storage_id = prop.get('storage_id')) + # The list accessor returns the whole list + accessor_name = 'get' + UpperCase(id) + 'List' + list_accessor = Content.ListGetter(accessor_name, id, prop['type'], + portal_type = prop.get('portal_type'), storage_id = prop.get('storage_id')) + # Create getters for a list property + accessor_name = 'get' + UpperCase(id) + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, base_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGet' + UpperCase(id) + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, base_accessor) + accessor_name = 'getDefault' + UpperCase(id) + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, default_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGetDefault' + UpperCase(id) + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, default_accessor) + accessor_name = 'get' + UpperCase(id) + 'List' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, list_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGet' + UpperCase(id) + 'List' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, list_accessor) + # Create getters for an object property + accessor_name = 'get' + UpperCase(id) + 'Value' + base_accessor = Content.ValueGetter(accessor_name, id, prop['type'], + portal_type = prop.get('portal_type'), storage_id = prop.get('storage_id')) + # The default accessor returns the first item in a list + accessor_name = 'getDefault' + UpperCase(id) + 'Value' + default_accessor = Content.DefaultValueGetter(accessor_name, id, prop['type'], + portal_type = prop.get('portal_type'), storage_id = prop.get('storage_id')) + # The list accessor returns the whole list + accessor_name = 'get' + UpperCase(id) + 'ValueList' + list_accessor = Content.ValueListGetter(accessor_name, id, prop['type'], + portal_type = prop.get('portal_type'), storage_id = prop.get('storage_id')) + # Create value getters for a list property + accessor_name = 'get' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, base_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGet' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, base_accessor) + accessor_name = 'getDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, default_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGetDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, default_accessor) + accessor_name = 'get' + UpperCase(id) + 'ValueList' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, list_accessor) + klass.security.declareProtected( Permissions.AccessContentsInformation, accessor_name ) + accessor_name = '_baseGet' + UpperCase(id) + 'ValueList' + if not hasattr(klass, accessor_name) or prop.get('override',0): + setattr(klass, accessor_name, list_accessor) elif prop['type'] is 'object': # Create url getters for an object property accessor_name = 'get' + UpperCase(id) @@ -961,6 +1057,70 @@ def createDefaultAccessors(klass, id, prop = None): setter_name = '_baseSet' + UpperCase(id) + 'Set' if not hasattr(klass, setter_name): setattr(klass, setter_name, set_setter) + elif prop['type'] is 'content': + # Create setters for an object property + # Create setters for a list property (reindexing) + # The base accessor sets the list to a singleton + # and allows simulates a simple property + setter_name = 'set' + UpperCase(id) + base_setter = Content.Setter(setter_name, id, prop['type'], reindex=1, + storage_id = prop.get('storage_id')) + # The default setter sets the first item of a list without changing other items + setter_name = 'setDefault' + UpperCase(id) + default_setter = Content.DefaultSetter(setter_name, id, prop['type'], reindex=1, + storage_id = prop.get('storage_id')) + # Create setters for an object property + setter_name = 'set' + UpperCase(id) + if not hasattr(klass, setter_name): + setattr(klass, setter_name, base_setter) + klass.security.declareProtected(Permissions.ModifyPortalContent, setter_name) + setter_name = 'setDefault' + UpperCase(id) + if not hasattr(klass, setter_name): + setattr(klass, setter_name, default_setter) + klass.security.declareProtected(Permissions.ModifyPortalContent, setter_name) + setter_name = 'set' + UpperCase(id) + 'Value' + if not hasattr(klass, setter_name): + setattr(klass, setter_name, base_setter) + klass.security.declareProtected(Permissions.ModifyPortalContent, setter_name) + setter_name = 'setDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, setter_name): + setattr(klass, setter_name, default_setter) + klass.security.declareProtected(Permissions.ModifyPortalContent, setter_name) + # Create setters for a list property (no reindexing) + # The base accessor sets the list to a singleton + # and allows simulates a simple property + setter_name = '_set' + UpperCase(id) + base_setter = Content.Setter(setter_name, id, prop['type'], reindex=0, + storage_id = prop.get('storage_id')) + # The default setter sets the first item of a list without changing other items + setter_name = '_setDefault' + UpperCase(id) + default_setter = Content.DefaultSetter(setter_name, id, prop['type'], reindex=0, + storage_id = prop.get('storage_id')) + # Create setters for an object property + setter_name = '_set' + UpperCase(id) + if not hasattr(klass, setter_name): + setattr(klass, setter_name, base_setter) + setter_name = '_baseSet' + UpperCase(id) + if not hasattr(klass, setter_name): + setattr(klass, setter_name, base_setter) + setter_name = '_setDefault' + UpperCase(id) + if not hasattr(klass, setter_name): + setattr(klass, setter_name, default_setter) + setter_name = '_baseSetDefault' + UpperCase(id) + if not hasattr(klass, setter_name): + setattr(klass, setter_name, default_setter) + setter_name = '_set' + UpperCase(id) + 'Value' + if not hasattr(klass, setter_name): + setattr(klass, setter_name, base_setter) + setter_name = '_baseSet' + UpperCase(id) + 'Value' + if not hasattr(klass, setter_name): + setattr(klass, setter_name, base_setter) + setter_name = '_setDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, setter_name): + setattr(klass, setter_name, default_setter) + setter_name = '_baseSetDefault' + UpperCase(id) + 'Value' + if not hasattr(klass, setter_name): + setattr(klass, setter_name, default_setter) elif prop['type'] is 'object': # Create setters for an object property # Create setters for a list property (reindexing) @@ -1043,6 +1203,16 @@ def createDefaultAccessors(klass, id, prop = None): setattr(klass, setter_name, setter) ###################################################### # Create testers + if prop['type'] is 'content': + tester_name = 'has' + UpperCase(id) + tester = Content.Tester(tester_name, id, prop['type'], + storage_id = prop.get('storage_id')) + if not hasattr(BaseClass, tester_name): + setattr(BaseClass, tester_name, tester) + BaseClass.security.declareProtected(Permissions.AccessContentsInformation, tester_name) + tester_name = '_baseHas' + UpperCase(id) + if not hasattr(BaseClass, tester_name): + setattr(BaseClass, tester_name, tester) if prop['type'] is 'object': tester_name = 'has' + UpperCase(id) tester = Object.Tester(tester_name, id, prop['type'],