1from paida.paida_core.PAbsorber import * 2from paida.paida_core.PExceptions import * 3 4import types 5 6class IAnnotation: 7 titleKey = 'Title' 8 9 def __init__(self): 10 self._data = [] 11 self._titleKey = [] 12 13 def addItem(self, key, value, sticky = False): 14 if key in self._titleKey: 15 raise IllegalArgumentException() 16 else: 17 self._titleKey.append(key) 18 self._data.append([value, sticky]) 19 20 def _addItem(self, key, value, sticky): 21 if key in self._titleKey: 22 self._data[self._titleKey.index(key)] = [value, sticky] 23 else: 24 self._titleKey.append(key) 25 self._data.append([value, sticky]) 26 27 def removeItem(self, key): 28 self._removeItem(key, False) 29 30 def _removeItem(self, key, inner = False): 31 if key in self._titleKey: 32 i = self._titleKey.index(key) 33 if self._data[i][1] == True: 34 if inner == False: 35 raise IllegalArgumentException() 36 else: 37 self._titleKey.remove(key) 38 self._data.remove(self._data[i]) 39 else: 40 if inner == False: 41 raise IllegalArgumentException() 42 43 def value(self, data): 44 if isinstance(data, types.StringType): 45 key = data 46 if key in self._titleKey: 47 return self._data[self._titleKey.index(key)][0] 48 else: 49 raise IllegalArgumentException('"%s" is not in %s.' % (key, self._titleKey)) 50 elif isinstance(data, types.IntType): 51 if 0 <= data < len(self._titleKey): 52 return self._data[data][0] 53 else: 54 raise IllegalArgumentException('Beyond range.') 55 else: 56 raise IllegalArgumentException() 57 58 def setValue(self, key, value): 59 if key in self._titleKey: 60 self._data[self._titleKey.index(key)][0] = value 61 else: 62 raise IllegalArgumentException() 63 64 def setSticky(self, key, sticky): 65 if key in self._titleKey: 66 self._data[self._titleKey.index(key)][1] = bool(sticky) 67 else: 68 raise IllegalArgumentException() 69 70 def _sticky(self, index): 71 return self._data[index][1] 72 73 def size(self): 74 return len(self._titleKey) 75 76 def key(self, index): 77 return self._titleKey[index] 78 79 def reset(self): 80 for key in self._titleKey: 81 try: 82 self._removeItem(key, True) 83 except IllegalArgumentException: 84 pass 85