def _merge(pcMerge, pcMaster, pcSlave): Log.trace(__class__, "_merge() called") # add headerNames in pcNew for kMaster in pcMaster.getHeaderNames(): pcMerge.addHeader(kMaster) # Merge attributes of pcMaster to pcNew for pMaster in pcMaster.getPersons(): pMerge = Merge.getPerson(pcMerge, pMaster) if(pMerge == None): pMerge = Person() pcMerge.addPerson(pMerge) pSlave = Merge.getPerson(pcSlave, pMaster) if(pSlave == None): # do copy of pMaster pSlave = Person() for kMaster in pcMaster.getHeaderNames(): aMaster = pMaster.getAttribute(kMaster) aSlave = pSlave.getAttribute(kMaster) aMerge = Person.ATTR_NOT_AVAILABLE # Attribute is empty if((aMaster != "" or aMaster != Person.ATTR_NOT_AVAILABLE) and (aSlave == "" or aSlave == Person.ATTR_NOT_AVAILABLE)): aMerge = aMaster elif((aSlave != "" or aSlave != Person.ATTR_NOT_AVAILABLE) and (aMaster == "" or aMaster == Person.ATTR_NOT_AVAILABLE)): aMerge = aSlave # Attributes are not empty elif(aMaster == aSlave): aMerge = aMaster else: Log.warn(__class__, "merge conflict:\nMaster=" + aMaster + "\n Slave=" + aSlave) pMerge.setAttribute(kMaster, aMerge) Log.trace(__class__, "_merge() finished")
def read(fName): Log.trace(__class__, "read()") pCollection = PersonCollection() try: file = open(fName, 'r') isHeader = True #SEP = ',*' SEP = "[\,,\s]*" EMB = "\"" regEx = re.compile(EMB + '([^' + EMB + ']*)' + EMB + SEP) for line in file: i = 0 person = Person() for col in regEx.findall(line): if(isHeader): pCollection.addHeader(col) #self._headerNames.append(col) else: person.setAttribute(pCollection.getHeaderNames()[i], col) i += 1 if(isHeader): isHeader = False else: pCollection.addPerson(person) file.close() return pCollection except IOError: Log.error(__class__, "IOError with file > " + fName) return None
def write(fName, pCollection): Log.trace(__class__, "write()") try: file = open(fName, 'w') SEP = "," EMB = "\"" # write headerNames first sep = "" for col in pCollection.getHeaderNames(): file.write(sep + EMB + col + EMB) if(sep != SEP): sep = SEP file.write("\n") # write persons for person in pCollection.getPersons(): sep = "" for col in pCollection.getHeaderNames(): file.write(sep + EMB + person.getAttribute(col) + EMB) if(sep != SEP): sep = SEP file.write("\n") file.close() return True except IOError: Log.error(__class__, "IOError with file > " + fName)
def merge(pcLeft, pcRight): # shared attributes are merged twice! :( Log.trace(__class__, "merge() called") pcMerge = PersonCollection() Merge._merge(pcMerge, pcLeft, pcRight) Merge._merge(pcMerge, pcRight, pcMerge) Log.trace(__class__, "merge() finished") return pcMerge
def write(fName, pCollection): Log.trace(__class__, "write()") try: # write persons for person in pCollection.getPersons(): fName = person.getAttribute(Person.NAME_DISPLAY) + VCARD.SUFFIX file = open(fName, 'w') file.write("BEGIN:VCARD\nVERSION:2.1\n") file.write("N:" + person.getAttribute(Person.NAME) + ";" + person.getAttribute(Person.NAME_FIRST) + '\n') file.write("FN:" + person.getAttribute(Person.NAME_DISPLAY) + '\n') file.write("TEL;CELL;VOICE:" + person.getAttribute(Person.MOBILEPHONE) + '\n') file.write("TEL;HOME;VOICE:" + person.getAttribute(Person.TELEPHONE) + '\n') file.write("EMAIL;PREF;INTERNET:" + person.getAttribute(Person.EMAIL_PRIVATE) + '\n') # file.write("BDAY:" + person.getAttribute(Person.BIRTHDAY) + '\n') file.write("END:VCARD") file.close() return True except IOError: Log.error(self.__class__, "IOError with file > " + file)
def read(fName): Log.trace(__class__, "read()") Log.error(__class__, "Not yet implemented!") return None