class Associations():
	keywordsList = None		# 2D format [val,occ]
	avoidsList = None		# 2D format [val,occ]
	listTool = None

	def __init__(self):
		self.keywordsList = []
		self.avoidsList = []
		self.listTool = ListTool()

	def setParams(self, keywords, avoids, fKeywords, fAvoids):
		self.keywordsList = self.listTool.addOnlyUniqueFromList(keywords, fKeywords)
		self.avoidsList = self.listTool.addOnlyUniqueFromList(avoids, fAvoids)

	def addKeyword(self, word, occurance, isForced):
		self.keywordsList.append(Keywords(word, occurance, isForced))

	def addAvoids(self, word, occurance, isForced):
		self.avoidsList.append(Avoids(word, occurance, isForced))
class OwnThread(Thread):
	connections = []
	listTool = None
	responseUrls = []

	def __init__(self, connections):
		Thread.__init__(self)
		self.connections = connections
		self.listTool = ListTool()

	def run(self):
		for c in self.connections:
			c.startConnection()

		self.messengerLinks()
		self.messengerConfirm()

		for c in self.connections:
			c.waitForChild()

	def messengerLinks(self):
		numConns = len(self.connections)
		messages = 0
		while (messages < numConns):
			for c in self.connections:
				if not c.hadMessage:
					c.hasMessage = c.pollMessage(1)

			for ind, c in enumerate(self.connections):
				if c.hasMessage:
					msg = c.getMessage()
					messages += 1
					self.responseUrls = self.listTool.addOnlyUniqueFromList(msg, self.responseUrls)
					c.sendMessage(self.listTool.getNonUniques(msg, self.responseUrls))

	def messengerConfirm(self):
		numConns = len(self.connections)
		messages = 0
		for c in self.connections:
			c.hadMessage = False

		while (messages < numConns):
			for c in self.connections:
				if not c.hadMessage:
					c.hasMessage = c.pollMessage(1)

			for ind, c in enumerate(self.connections):
				if c.hasMessage:
					msg = c.getMessage()
					messages += 1
					c.endResult = msg
	def startSubProcesses(self):
		CM = ConnectionManager()
		lt = ListTool()
		sitesList = []
		sitesList = lt.addOnlyUniqueFromList(self.__sites.goodSites, self.__sites.badSites)

		CM.initializeConnection(	self.__associations.keywordsList, 	self.__associations.avoidsList, 
									sitesList, 	self.__conf.siteToSearchList,	 self.__conf.pagesToSearch, 
									self.__conf.searchParamsList)
		CM.startThread()
		CM.join()
		CM.parseResults()
		
		self.resultList = CM.getResults()