Exemple #1
0
class TagsPayload(GenericPayload):
    def __init__(self, payload, oid):
        self.__tags = []
        self.__model = RDF2Go.getModelFactory().createModel();
        self.__model.open();
        self.__content = TaggedContent(self.__model, "urn:" + md5.new(oid).hexdigest(), True);
        if payload is None:
            self.setId("tags.rdf")
            self.setLabel("Tags")
            self.setContentType("application/rdf+xml")
            self.setType(PayloadType.Annotation)
        else:
            GenericPayload.__init__(self, payload)
            self.__model.readFrom(payload.getInputStream())
            tags = self.__content.getAllTagged_as().asArray()
            for tag in tags:
                labels = tag.getAllTaglabel_asNode_().asArray()
                for label in labels:
                    self.__tags.append(label)
        self.setType(PayloadType.Annotation)
    
    def addTag(self, tag):
        tagNode = self.__createTag(tag)
        self.__content.addTagged(tagNode);
    
    def removeTag(self, tag):
        tagNode = self.__createTag(tag)
        self.__content.removeTagged(tagNode);
    
    def __createTag(self, tag):
        encodedTag = URLEncoder.encode(tag, "UTF-8")
        tagNode = Tag(self.__model, "urn:tags:" + encodedTag, True)
        tagNode.setMeans(self.__model.createURI("urn:tags:" + encodedTag));
        tagNode.setTaglabel(self.__model.createPlainLiteral(tag))
        return tagNode
    
    def getTags(self):
        return self.__tags
    
    def getInputStream(self):
        rdf = self.__model.serialize(Syntax.RdfXml)
        return ByteArrayInputStream(array.array('b', rdf.encode("UTF-8")))
    
    def close(self):
        self.__model.close()