class ZNavigatorTreeTagsNode(ZNavigatorTreeSubNode):

    def __init__(self):
        ZNavigatorTreeSubNode.__init__(self, NODE_TYPE_TAGS)
        self.filter = ZTagSearchFilter()
        self.tagCount = -1
        self.tagIdList = []
    # end __init__()

    def getSearchFilter(self):
        return self.filter
    # end getSearchFilter()

    def getTagCount(self):
        if self.tagCount == -1:
            self._configureFilter()
            self.tagCount = self._getTagCount()
        return self.tagCount
    # end getTagCount()

    def _configureFilter(self):
        if self.parentBlog:
            self.filter.setBlogIdCriteria(self.parentBlog.getId())
    # end _configureFilter()

    def _getTagCount(self):
        docIndex = getApplicationModel().getEngine().getService(IZBlogAppServiceIDs.DOCUMENT_INDEX_SERVICE_ID)
        return docIndex.getTagCount(self.filter)
    # end _getTagCount()

    def getLabel(self):
        label = ZNavigatorTreeSubNode.getLabel(self)
        return u"%s (%d)" % (label, self.getTagCount()) #$NON-NLS-1$
    # end getLabel()

    def addTagIDO(self, tagIDO):
        if self.tagCount != -1 and self.filter.matches(tagIDO)and tagIDO.getId() not in self.tagIdList:
            self.tagCount = self.tagCount + 1
            self.tagIdList.append( tagIDO.getId() )
            return True
        return False
    # end addTagIDO()

    def removeTagIDO(self, tagIDO):
        if self.tagCount != -1 and self.filter.matches(tagIDO) and tagIDO.getId() in self.tagIdList:
            self.tagCount = self.tagCount - 1
            try:
                self.tagIdList.remove(tagIDO.getId())
            except:
                pass
            return True
        return False
class ZNavigatorTreeTagsNode(ZNavigatorTreeSubNode):

    def __init__(self):
        ZNavigatorTreeSubNode.__init__(self, NODE_TYPE_TAGS)
        self.filter = ZTagSearchFilter()
        self.tagCount = -1
        self.tagIdList = []
    # end __init__()

    def getSearchFilter(self):
        return self.filter
    # end getSearchFilter()

    def getTagCount(self):
        if self.tagCount == -1:
            self._configureFilter()
            self.tagCount = self._getTagCount()
        return self.tagCount
    # end getTagCount()

    def _configureFilter(self):
        if self.parentBlog:
            self.filter.setBlogIdCriteria(self.parentBlog.getId())
    # end _configureFilter()

    def _getTagCount(self):
        docIndex = getApplicationModel().getEngine().getService(IZBlogAppServiceIDs.DOCUMENT_INDEX_SERVICE_ID)
        return docIndex.getTagCount(self.filter)
    # end _getTagCount()

    def getLabel(self):
        label = ZNavigatorTreeSubNode.getLabel(self)
        return u"%s (%d)" % (label, self.getTagCount()) #$NON-NLS-1$
    # end getLabel()

    def addTagIDO(self, tagIDO):
        if self.tagCount != -1 and self.filter.matches(tagIDO)and tagIDO.getId() not in self.tagIdList:
            self.tagCount = self.tagCount + 1
            self.tagIdList.append( tagIDO.getId() )
            return True
        return False
    # end addTagIDO()

    def removeTagIDO(self, tagIDO):
        if self.tagCount != -1 and self.filter.matches(tagIDO) and tagIDO.getId() in self.tagIdList:
            self.tagCount = self.tagCount - 1
            try:
                self.tagIdList.remove(tagIDO.getId())
            except:
                pass
            return True
        return False