Class: SystemListener

Inherits:
Object
  • Object
show all
Defined in:
lib/ObjectModel/Repository/SystemListener.rb

Instance Method Summary collapse

Constructor Details

#initialize(transaction) ⇒ SystemListener

Returns a new instance of SystemListener.



2
3
4
5
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 2

def initialize transaction
  @transaction = transaction
  @deleted_parents = {}
end

Instance Method Details

#after_delete_parent(entity, old_parent) ⇒ Object



25
26
27
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 25

def after_delete_parent entity, old_parent
  check_name_uniquity entity, entity.name
end

#after_new(entity) ⇒ Object



36
37
38
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 36

def after_new entity
  AnEntity::EntityType.custom_initialization entity
end

#after_new_parent(entity, old_parent) ⇒ Object



21
22
23
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 21

def after_new_parent entity, old_parent
  check_name_uniquity entity, entity.name
end

#before_attribute_update(entity, name, new, old) ⇒ Object



7
8
9
10
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 7

def before_attribute_update entity, name, new, old
  name.should! :be_a, Symbol
  AnEntity::EntityType.validate_attribute entity, name, new, old
end

#before_commit(entities) ⇒ Object



29
30
31
32
33
34
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 29

def before_commit entities
  entities.should! :be_a, Array
  entities.each do |e|
    AnEntity::EntityType.validate_entity e
  end
end

#before_delete(entity) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 75

def before_delete entity    
  if entity.name_get == "child2"
    copy = @transaction.copies[entity.entity_id]
    
    parent = entity.parent
    parent.should! :be_a, [Entity, NilClass]
    
    @transaction.deleted_entities[entity.entity_id] = entity
    
    AnEntity::EntityType.delete_all_references_to @transaction, entity
    AnEntity::EntityType.delete_from_parent entity, parent if parent    
    AnEntity::EntityType.delete_all_children entity
    return
  end
  
  copy = @transaction.copies[entity.entity_id]
  copy.should_not! :deleted?
  
  parent = entity.parent
  parent.should! :be_a, [Entity, NilClass]
  
  @transaction.deleted_entities[entity.entity_id] = entity
  
  AnEntity::EntityType.delete_all_references_to @transaction, entity
  AnEntity::EntityType.delete_from_parent entity, parent if parent   
  AnEntity::EntityType.delete_all_children entity
end

#before_delete_child(entity, name, child) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 65

def before_delete_child entity, name, child
  child.should! :be_a, Entity
  entity.should! :be_a, Entity
  name.should! :be_a, Symbol   
  
  @transaction.event_processor.fire_before child, :delete_parent, entity
  child._parent = nil
  @transaction.event_processor.fire_after child, :delete_parent, entity
end

#before_delete_reference(entity, name, reference) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 103

def before_delete_reference entity, name, reference
  entity.should! :be_a, Entity
  reference.should! :be_a, Entity
  name.should! :be_a, Symbol
  
  @transaction.event_processor.fire_before reference, :delete_referrer, entity
  
  AnEntity::EntityType.delete_backreference @transaction, entity, reference    
  
  @transaction.event_processor.fire_after reference, :delete_referrer, entity
end

#before_name_update(entity, new, old) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 12

def before_name_update entity, new, old   
  return if new == old
  raise_without_self "name '#{new}' should be a String!", ObjectModel unless new.is_a? String
  raise_without_self "name '#{new}' shouldn't be Emtpy!", ObjectModel if new.empty?
  raise_without_self "name '#{new}' should not include '/' Symbol!", ObjectModel if new.include? '/'
  
  check_name_uniquity entity, new    
end

#before_new_child(entity, name, child) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 40

def before_new_child entity, name, child        
  raise_without_self "Child should be Entity or Nil (#{child})!", ObjectModel unless child.is_a?(Entity) or child == nil
  raise_without_self "Forbiden to add self as Child!", ObjectModel if child == entity
  raise_without_self "Forbiden to add the same Child twice!", ObjectModel if child.parent == entity
  
  name.should! :be_a, Symbol
  
  old_parent = child.parent
  if old_parent != nil # :move
    AnEntity::EntityType.delete_from_parent child, old_parent     
    @transaction.event_processor.fire_before child, :move, entity, old_parent
    @transaction.copies[entity.entity_id].moved!
  end
  
  @transaction.event_processor.fire_before child, :new_parent, entity        
  
  child._parent = entity
  
  @transaction.event_processor.fire_after child, :new_parent, old_parent       
  
  if old_parent != nil # :move
    @transaction.event_processor.fire_after child, :move, entity, old_parent
  end    
end

#before_new_reference(entity, name, reference) ⇒ Object



115
116
117
118
119
120
121
122
123
124
125
# File 'lib/ObjectModel/Repository/SystemListener.rb', line 115

def before_new_reference entity, name, reference
  entity.should! :be_a, Entity
  reference.should! :be_a, Entity
  name.should! :be_a, Symbol
  
  @transaction.event_processor.fire_before reference, :new_referrer, entity
  
  AnEntity::EntityType.new_backreference @transaction, entity, reference   
  
  @transaction.event_processor.fire_after reference, :new_referrer, entity
end