예제 #1
0
 def __init__(self):
     responseType = "text/html; charset=UTF-8"
     responseMsg = ""
     func = formData.get("func")
     if func == "url-history":
         responseType = "text/plain; charset=UTF-8"
         responseMsg = "\n".join(self.getUrls())
     else:
         try:
             url = formData.get("url")
             title = formData.get("title")
             username = formData.get("username")
             password = formData.get("password")
             try:
                 auth = ProxyBasicAuthStrategy(username, password, url)
                 self.__service = AtomClientFactory.getAtomService(url, auth)
                 oid = formData.get("oid")
                 if oid is not None:
                     self.__object = Services.getStorage().getObject(oid)
                     sourceId = self.__object.getSourceId()
                     payload = self.__object.getPayload(sourceId)
                     print "payload=%s,%s" % (payload, payload.getContentType())
                     # FIXME see https://fascinator.usq.edu.au/trac/ticket/647
                     if payload and sourceId.endswith(".tfpackage"): #payload.getContentType() == "application/x-fascinator-package":
                         jsonManifest = JsonConfigHelper(payload.open())
                         print jsonManifest.toString()
                         content = self.__getManifestContent(jsonManifest)
                         payload.close()
                     else:
                         content = self.__getContent(oid)
                     self.__object.close()
                 else:
                     content = "<div>Object not found!</div>"
                 success, value = self.__post(title, content)
             except Exception, e:
                 e.printStackTrace()
                 success = False
                 value = e.getMessage()
             if success:
                 altLinks = value.getAlternateLinks()
                 if altLinks is not None:
                     self.saveUrl(url)
                     responseMsg = "<p>Success! Visit the <a href='%s' target='_blank'>blog post</a>.</p>" % altLinks[0].href
                 else:
                     responseMsg = "<p class='warning'>The server did not return a valid link!</p>"
             else:
                 responseMsg = "<p class='error'>%s</p>" % value
         except Exception, e:
             print "Failed to post: %s" % e.getMessage()
             responseMsg = "<p class='error'>%s</p>"  % e.getMessage()
예제 #2
0
 def get_image(self):
     self.type = "http://www.purl.org/anotar/ns/type/0.1#Tag"
     mediaFragType = "http://www.w3.org/TR/2009/WD-media-frags-20091217"
     result = '{"result":' + self.search_solr() + '}'
     if result:
         imageTagList = []
         imageTags = JsonConfigHelper(result).getJsonList("result")
         for imageTag in imageTags:
             imageAno = JsonConfigHelper()
             if imageTag.getJsonList("annotates/locators"):
                 locatorValue = imageTag.getJsonList("annotates/locators").get(0).get("value")
                 locatorType = imageTag.getJsonList("annotates/locators").get(0).get("type")
                 if locatorValue and locatorValue.find("#xywh=")>-1 and locatorType == mediaFragType:
                     _, locatorValue = locatorValue.split("#xywh=")
                     left, top, width, height = locatorValue.split(",")
                     imageAno.set("top", top)
                     imageAno.set("left", left)
                     imageAno.set("width", width)
                     imageAno.set("height", height)
                     imageAno.set("creator", imageTag.get("creator/literal"))
                     imageAno.set("creatorUri", imageTag.get("creator/uri"))
                     imageAno.set("id", imageTag.get("id"))
                     #tagCount = imageTag.get("tagCount")
                     imageAno.set("text", imageTag.get("content/literal"))
                     imageAno.set("editable", "true");
                     imageTagList.append(imageAno.toString())
         result = "[" + ",".join(imageTagList) + "]"
     return result
예제 #3
0
 def __activate__(self, context):
     response = context["response"]
     json = JsonConfigHelper()
     auth = context["page"].authentication
     if auth.is_logged_in():
         formData = context["formData"]
         oid = formData.get("oid")
         if oid:
             # TODO check security on object
             json.set("oid", oid)
             try:
                 object = context["Services"].storage.getObject(oid)
                 json.setMap("meta", object.getMetadata())
             except StorageException:
                 response.setStatus(500)
                 json.set("error", "Object '%s' not found" % oid)
         else:
             response.setStatus(500)
             json.set("error", "An object identifier is required")
     else:
         response.setStatus(500)
         json.set("error", "Only registered users can access this API")
     
     writer = response.getPrintWriter("text/plain; charset=UTF-8")
     writer.println(json.toString())
     writer.close()
예제 #4
0
 def __messages(self):
     if self.message_list is not None and len(self.message_list) > 0:
         msg = JsonConfigHelper()
         msg.set("oid", self.oid)
         message = msg.toString()
         for target in self.message_list:
             self.utils.sendMessage(target, message)
예제 #5
0
 def __activate__(self, context):
     response = context["response"]
     writer = response.getPrintWriter("text/plain; charset=UTF-8")
     auth = context["page"].authentication
     result = JsonConfigHelper()
     result.set("status", "error")
     result.set("message", "An unknown error has occurred")
     if auth.is_logged_in() and auth.is_admin():
         services = context["Services"]
         formData = context["formData"]
         func = formData.get("func")
         oid = formData.get("oid")
         portalId = formData.get("portalId")
         portalManager = services.portalManager
         if func == "reharvest":
             if oid:
                 print "Reharvesting object '%s'" % oid
                 portalManager.reharvest("oid")
                 result.set("status", "ok")
                 result.set("message", "Object '%s' queued for reharvest")
             elif portalId:
                 print " Reharvesting view '%s'" % portalId
                 # TODO security filter
                 # TODO this should loop through the whole portal,
                 #      not just the first page of results
                 portal = portalManager.get(portalId)
                 req = SearchRequest(portal.query)
                 req.setParam("fq", 'item_type:"object"')
                 out = ByteArrayOutputStream();
                 services.indexer.search(req, out)
                 json = JsonConfigHelper(ByteArrayInputStream(out.toByteArray()))
                 objectIds = json.getList("response/docs//id")
                 if not objectIds.isEmpty():
                     portalManager.reharvest(objectIds)
                 result.set("status", "ok")
                 result.set("message", "Objects in '%s' queued for reharvest" % portalId)
             else:
                 response.setStatus(500)
                 result.set("message", "No object or view specified for reharvest")
         elif func == "reindex":
             if oid:
                 print "Reindexing object '%s'" % oid
                 services.indexer.index(oid)
                 services.indexer.commit()
                 result.set("status", "ok")
                 result.set("message", "Objects in '%s' queued for reharvest" % portalId)
             else:
                 response.setStatus(500)
                 result.set("message", "No object specified to reindex")
         else:
             response.setStatus(500)
             result.set("message", "Unknown action '%s'" % func)
     else:
         response.setStatus(500)
         result.set("message", "Only administrative users can access this API")
     writer.println(result.toString())
     writer.close()
예제 #6
0
    def modify_json(self):
        #print "**** anotar.py : add_json() : adding json : " + json
        jsonObj = JsonConfigHelper(self.json)
        jsonObj.set("id", self.pid)
        rootUri = jsonObj.get("annotates/rootUri")
        if rootUri is not None:
            baseUrl = "http://%s:%s/" % (self.vc("request").serverName, self.vc("serverPort"))
            myUri = baseUrl + rootUri + "#" + self.pid
            jsonObj.set("uri", myUri)

        jsonObj.set("schemaVersionUri", "http://www.purl.org/anotar/schema/0.1")

        self.json = jsonObj.toString(False)
예제 #7
0
    def process_tags(self, result):
        tags = []
        tagsDict = {}
        # Build a dictionary of the tags
        for doc in result:
            doc = JsonConfigHelper(doc.get("jsonString"))
            tag = doc.get("content/literal")
            locs = doc.getJsonList("annotates/locators").size()
            if locs == 0:
                if tag in tagsDict:
                    d = tagsDict[tag]
                    d.set("tagCount", str(int(d.get("tagCount")) + 1))
                else:
                    doc.set("tagCount", str(1))
                    tagsDict[tag] = doc
            else:
                tags.append(doc.toString())

        for tag in tagsDict:
            tags.append(tagsDict[tag].toString())

        return "[" + ",".join(tags) + "]"
예제 #8
0
    def __activate__(self, context):
        request = context["request"]
        response = context["response"]
        writer = response.getPrintWriter("text/javascript; charset=UTF-8")
        result = JsonConfigHelper()

        ## Look for the JSONP callback to use
        jsonpCallback = request.getParameter("callback")
        if jsonpCallback is None:
            jsonpCallback = request.getParameter("jsonp_callback")
            if jsonpCallback is None:
                response.setStatus(403)
                writer.println("Error: This interface only responds to JSONP")
                writer.close()
                return

        if context["page"].authentication.is_logged_in():
            result.set("isAuthenticated", "true")
        else:
            result.set("isAuthenticated", "false")

        writer.println(jsonpCallback + "(" + result.toString() + ")")
        writer.close()
예제 #9
0
class ManifestActions:
    def __init__(self):
        print "formData=%s" % formData
        
        result = "{}"
        func = formData.get("func")
        oid = formData.get("oid")
        
        if func != "set-package-title":
            nodeId = formData.get("nodeId")
            nodePath = self.__getNodePath(formData.get("parents"), nodeId)
            originalPath = "manifest//%s" % nodeId
        
        self.__object = Services.getStorage().getObject(oid)
        sourceId = self.__object.getSourceId()
        payload = self.__object.getPayload(sourceId)
        self.__manifest = JsonConfigHelper(payload.open())
        payload.close()
        
        if func == "set-package-title":
            title = formData.get("title")
            self.__manifest.set("title", StringEscapeUtils.escapeHtml(title))
            self.__saveManifest()
        if func == "rename":
            title = formData.get("title")
            self.__manifest.set("%s/title" % nodePath, title)
            self.__saveManifest()
        elif func == "move":
            refNodeId = formData.get("refNodeId")
            refNodePath = self.__getNodePath(formData.get("refParents"),
                                             formData.get("refNodeId"));
            moveType = formData.get("type")
            if moveType == "before":
                self.__manifest.moveBefore(originalPath, refNodePath)
            elif moveType == "after":
                self.__manifest.moveAfter(originalPath, refNodePath)
            elif moveType == "inside":
                self.__manifest.move(originalPath, nodePath)
            self.__saveManifest()
        elif func == "update":
            title = StringEscapeUtils.escapeHtml(formData.get("title"))
            hidden = formData.get("hidden")
            hidden = hidden == "true"
            self.__manifest.set("%s/title" % nodePath, title)
            self.__manifest.set("%s/hidden" % nodePath, str(hidden))
            #if self.__manifest.get("%s/id" % nodePath) is None:
            #    print "blank node!"
            self.__saveManifest()
            result = '{ title: "%s", hidden: "%s" }' % (title, hidden)
        elif func == "delete":
            title = self.__manifest.get("%s/title" % nodePath)
            if title:
                self.__manifest.removePath(nodePath)
                self.__saveManifest()
            else:
                title = "Untitled"
            result = '{ title: "%s" }' % title
        
        self.__object.close()
        writer = response.getPrintWriter("text/plain; charset=UTF-8")
        writer.println(result)
        writer.close()
    
    def __getNodePath(self, parents, nodeId):
        parents = [p for p in parents.split(",") if p != ""]
        nodePath = "manifest/%s" % nodeId
        if len(parents) > 0:
            nodePath = ""
            for parent in parents:
                if nodePath == "":
                    nodePath = "manifest/%s"  % parent
                else:
                    nodePath += "/children/%s" % parent
            nodePath += "/children/%s" % nodeId
        return nodePath
    
    def __saveManifest(self):
        manifestStr = String(self.__manifest.toString())
        self.__object.updatePayload(self.__object.getSourceId(),
                                    ByteArrayInputStream(manifestStr.getBytes("UTF-8")))
예제 #10
0
 def __getRvtManifest(self, manifest):
     rvtMap = HashMap()
     rvtMap.put("title", self.__manifest.get("title"))
     rvtMap.put("toc", self.__getRvtNodes(manifest))
     rvtManifest = JsonConfigHelper(rvtMap)
     return rvtManifest.toString()
예제 #11
0
    def process(self):
        print " * settings.py: formData=%s" % self.vc("formData")

        result = "{}"
        portalManager = Services.getPortalManager()
        portal = portalManager.get(self.vc("portalId"))
        func = self.vc("formData").get("func")

        if func == "view-update":
            portal.setDescription(self.vc("formData").get("view-description"))
            portal.setQuery(self.vc("formData").get("view-query"))
            portal.setSearchQuery(self.vc("formData").get("view-search-query"))
            portal.setRecordsPerPage(int(self.vc("formData").get("view-records-per-page")))
            portal.setFacetCount(int(self.vc("formData").get("view-facet-count")))
            portal.setFacetDisplay(int(self.vc("formData").get("view-facet-display")))
            portal.setFacetSort(self.vc("formData").get("view-facet-sort") is not None)
            portalManager.save(portal)

        elif func == "general-update":
            config = JsonConfig()
            email = StringUtils.trimToEmpty(self.vc("formData").get("general-email"))
            systemEmail = StringUtils.trimToEmpty(config.get("email"))
            print email, systemEmail
            if systemEmail != email:
                config.set("email", self.vc("formData").get("general-email"), True)
                config.set("configured", "true", True)
                config.store(NullWriter(), True)
                # mark restart
                Services.getHouseKeepingManager().requestUrgentRestart()
            else:
                print " * settings.py: email not updated: did not change"
                self.throw_error("Email address is the same! No change saved.")

        elif func == "facets-update":
            portal.removePath("portal/facet-fields")
            fields = self.vc("formData").getValues("field")
            labels = self.vc("formData").getValues("label")
            displays = self.vc("formData").getValues("display")
            deletes = self.vc("formData").getValues("delete")
            for i in range(0, len(fields)):
                field = fields[i]
                if deletes[i] == "false":
                    portal.set("portal/facet-fields/%s/label" % field, labels[i])
                    portal.set("portal/facet-fields/%s/display" % field, displays[i])
            portalManager.save(portal)

        elif func == "sort-update":
            portal.removePath("portal/sort-fields")
            fields = self.vc("formData").getValues("field")
            labels = self.vc("formData").getValues("label")
            deletes = self.vc("formData").getValues("delete")
            for i in range(0, len(fields)):
                field = fields[i]
                if deletes[i] == "false":
                    portal.set("portal/sort-fields/%s" % field, labels[i])
            portalManager.save(portal)

        elif func == "watcher-update":
            configFile = self.getWatcherFile()
            if configFile is not None:
                pathIds = self.vc("formData").get("pathIds").split(",")
                actives = self.vc("formData").getValues("watcher-active")
                if actives is None:
                    actives = []
                deletes = self.vc("formData").getValues("watcher-delete")
                if deletes is None:
                    deletes = []
                watchDirs = HashMap()
                for pathId in pathIds:
                    if pathId not in deletes:
                        path = self.vc("formData").get("%s-path" % pathId)
                        stopped = str(pathId not in actives).lower()
                        watchDir = HashMap()
                        watchDir.put("ignoreFileFilter", self.vc("formData").get("%s-file" % pathId))
                        watchDir.put("ignoreDirectories", self.vc("formData").get("%s-dir" % pathId))
                        watchDir.put("cxtTags", [])
                        watchDir.put("stopped", stopped)
                        watchDirs.put(path, watchDir)
                json = JsonConfigHelper(self.getWatcherFile())
                json.setMap("watcher/watchDirs", watchDirs)
                json.store(FileWriter(configFile), True)
            else:
                result = "The Watcher is not installed properly."

        elif func == "restore-default-config":
            # backup the file
            JsonConfig.backupSystemFile()
            # delete the file
            JsonConfig.getSystemFile().delete()
            # restore default
            JsonConfig.getSystemFile()
            # mark restart
            Services.getHouseKeepingManager().requestUrgentRestart()

        elif func == "housekeeping-update":
            config = JsonConfig()
            freq = StringUtils.trimToEmpty(self.vc("formData").get("housekeeping-timeout"))
            systemFreq = StringUtils.trimToEmpty(config.get("portal/houseKeeping/config/frequency"))
            result = "House Keeper refreshed"
            if systemFreq != freq:
                config.set("portal/houseKeeping/config/frequency", freq, True)
                config.store(NullWriter(), True)
                result = "Frequency updated, refreshing House Keeper"
            # Refresh the HouseKeeper
            message = JsonConfigHelper()
            message.set("type", "refresh")
            Services.getHouseKeepingManager().sendMessage(message.toString())

        self.writer.println(result)
        self.writer.close()
예제 #12
0
             organizations = organizations.findall(ns+"organization")
             organizations = [o for o in organizations if o.attrib.get("identifier")==defaultName]
             organization = organizations[0]
             title = organization.find(ns+"title").text
             rvtMap.put("title", title)
             items = organization.findall(ns+"item")
             rvtMap.put("toc", self.__getJsonItems(ns, items, resources))
         except Exception, e:
              data["error"] = "Error - %s" % str(e)
              print data["error"]
         object.close()
     except StorageException, e:
         data["DEBUG"] = str(e.getMessage())
     
     rvtManifest = JsonConfigHelper(rvtMap)
     return rvtManifest.toString()
 
 def __getJsonItems(self, ns, items, resources):
     rvtNodes = ArrayList()
     for item in items:
         attr = item.attrib
         isvisible = attr.get("isvisible") == "true"
         idref = attr.get("identifierref")
         id = resources.get(idref)
         title = item.find(ns+"title").text
         if isvisible and id and id.endswith(".htm"):
             rvtNode = HashMap()
             rvtNode.put("visible", True)
             rvtNode.put("relPath", id)
             rvtNode.put("title", title)
             rvtNode.put("children", self.__getJsonItems(ns, item.findall(ns+"item"), resources))
예제 #13
0
    def __init__(self):
        self.action = formData.get("action")
        self.rootUri = formData.get("rootUri")
        self.json = formData.get("json")
        self.type = formData.get("type")
        self.rootUriList = formData.getValues("rootUriList")
        print " * anotar.py : '" + self.action + "' : ", formData

        # ?? media fragment stuff?
        if self.rootUri and self.rootUri.find("?ticks") > -1:
            self.rootUri = self.rootUri[: self.rootUri.find("?ticks")]

        # Portal path info
        portalPath = contextPath + "/" + portalId + "/"
        self.oid = self.rootUri
        if self.oid and self.oid.startswith(portalPath):
            self.oid = self.oid[len(portalPath) :]

        if self.action == "getList":
            # Repsonse is a list of object (nested)
            # print "**** anotar.py : GET_SOLR : " + self.rootUri
            result = self.search_solr()
        elif self.action == "put":
            # Response is an ID
            # print "**** anotar.py : PUT : " + self.rootUri
            result = self.put()
        elif self.action == "get-image":
            self.type = "http://www.purl.org/anotar/ns/type/0.1#Tag"
            mediaFragType = "http://www.w3.org/TR/2009/WD-media-frags-20091217"
            result = '{"result":' + self.search_solr() + "}"
            if result:
                imageTagList = []
                imageTags = JsonConfigHelper(result).getJsonList("result")
                for imageTag in imageTags:
                    imageAno = JsonConfigHelper()
                    if imageTag.getJsonList("annotates/locators"):
                        locatorValue = imageTag.getJsonList("annotates/locators").get(0).get("value")
                        locatorType = imageTag.getJsonList("annotates/locators").get(0).get("type")
                        if locatorValue and locatorValue.find("#xywh=") > -1 and locatorType == mediaFragType:
                            _, locatorValue = locatorValue.split("#xywh=")
                            left, top, width, height = locatorValue.split(",")
                            imageAno.set("top", top)
                            imageAno.set("left", left)
                            imageAno.set("width", width)
                            imageAno.set("height", height)
                            imageAno.set("creator", imageTag.get("creator/literal"))
                            imageAno.set("creatorUri", imageTag.get("creator/uri"))
                            imageAno.set("id", imageTag.get("id"))
                            # tagCount = imageTag.get("tagCount")
                            imageAno.set("text", imageTag.get("content/literal"))
                            # imageAno.set("editable", Boolean(False).toString());
                            imageTagList.append(imageAno.toString())
                result = "[" + ",".join(imageTagList) + "]"
        elif self.action == "save-image":
            jsonTemplate = """
{
  "clientVersionUri": "http://www.purl.org/anotar/client/0.1",
  "type" : "http://www.purl.org/anotar/ns/type/0.1#Tag",
  "title" : {
    "literal" : null,
    "uri" : null
  },  
  "annotates" : {
    "uri" : "%s",
    "rootUri" : "%s",
    "locators" : [ {
      "originalContent": null,
      "type" : "http://www.w3.org/TR/2009/WD-media-frags-20091217",
      "value" : "%s"
    } ]
  },
  "creator" : {
    "literal" : "%s",
    "uri" : "%s",
    "email" : {
      "literal" : null
    }
  },
  "dateCreated" : {
    "literal" : "%s",
    "uri" : null
  },
  "dateModified" : {
    "literal" : null,
    "uri" : null
  },
  "content" : {
    "mimeType" : "text/plain",
    "literal" : "%s",
    "formData" : {
    }
  },
  "contentUri": "",
  "isPrivate" : false,
  "lang" : "en"
}
"""
            mediaDimension = "xywh=%s,%s,%s,%s" % (
                formData.get("left"),
                formData.get("top"),
                formData.get("width"),
                formData.get("height"),
            )
            locatorValue = "%s#%s" % (self.rootUri, mediaDimension)
            dateCreated = time.strftime("%Y-%m-%dT%H:%M:%SZ")
            self.json = jsonTemplate % (
                self.rootUri,
                self.rootUri,
                locatorValue,
                formData.get("creator"),
                formData.get("creatorUri"),
                dateCreated,
                formData.get("text"),
            )
            result = self.put()
        writer = response.getPrintWriter("text/plain; charset=UTF-8")
        writer.println(result)
        writer.close()
예제 #14
0
class ManifestData:
    def __init__(self):
        pass

    def __activate__(self, context):
        self.velocityContext = context
        auth = context["page"].authentication
        if auth.is_logged_in():
            self.fd = self.vc("formData").get

            print "formData=%s" % self.vc("formData")
            result = "{}"
            func = self.fd("func")
            oid = self.fd("oid")
    
            if func != "update-package-meta":
                nodeId = self.fd("nodeId")
                nodePath = self.__getNodePath(self.fd("parents"), nodeId)
                originalPath = "manifest//%s" % nodeId
    
            self.__object = Services.getStorage().getObject(oid)
            sourceId = self.__object.getSourceId()
            payload = self.__object.getPayload(sourceId)
            self.__manifest = JsonConfigHelper(payload.open())
            payload.close()
    
            if func == "update-package-meta":
                print "*********  update-package-meta ***************"
                metaList = list(self.vc("formData").getValues("metaList"))
                for metaName in metaList:
                    value = self.fd(metaName)
                    self.__manifest.set(metaName, value)
                #title = formData.get("title")
                #self.__manifest.set("title", StringEscapeUtils.escapeHtml(title))
                self.__saveManifest()
            if func == "rename":
                title = self.fd("title")
                self.__manifest.set("%s/title" % nodePath, title)
                self.__saveManifest()
            elif func == "move":
                refNodeId = self.fd("refNodeId")
                refNodePath = self.__getNodePath(self.fd("refParents"),
                                                 self.fd("refNodeId"));
                moveType = self.fd("type")
                if moveType == "before":
                    self.__manifest.moveBefore(originalPath, refNodePath)
                elif moveType == "after":
                    self.__manifest.moveAfter(originalPath, refNodePath)
                elif moveType == "inside":
                    self.__manifest.move(originalPath, nodePath)
                self.__saveManifest()
            elif func == "update":
                title = StringEscapeUtils.escapeHtml(self.fd("title"))
                hidden = self.fd("hidden")
                hidden = hidden == "true"
                self.__manifest.set("%s/title" % nodePath, title)
                self.__manifest.set("%s/hidden" % nodePath, str(hidden))
                #if self.__manifest.get("%s/id" % nodePath) is None:
                #    print "blank node!"
                self.__saveManifest()
                result = '{ title: "%s", hidden: "%s" }' % (title, hidden)
            elif func == "delete":
                title = self.__manifest.get("%s/title" % nodePath)
                if title:
                    self.__manifest.removePath(nodePath)
                    self.__saveManifest()
                else:
                    title = "Untitled"
                result = '{ title: "%s" }' % title
            
            self.__object.close()
        else:
            result = '{ "status": "error", "message": "Only registered users can access this API" }'
        
        writer = self.vc("response").getPrintWriter("text/plain; charset=UTF-8")
        writer.println(result)
        writer.close()
    
    # Get from velocity context
    def vc(self, index):
        if self.velocityContext[index] is not None:
            return self.velocityContext[index]
        else:
            log.error("ERROR: Requested context entry '" + index + "' doesn't exist")
            return None

    def __getNodePath(self, parents, nodeId):
        parents = [p for p in parents.split(",") if p != ""]
        nodePath = "manifest/%s" % nodeId
        if len(parents) > 0:
            nodePath = ""
            for parent in parents:
                if nodePath == "":
                    nodePath = "manifest/%s"  % parent
                else:
                    nodePath += "/children/%s" % parent
            nodePath += "/children/%s" % nodeId
        return nodePath
    
    def __saveManifest(self):
        manifestStr = String(self.__manifest.toString())
        self.__object.updatePayload(self.__object.getSourceId(),
                                    ByteArrayInputStream(manifestStr.getBytes("UTF-8")))
예제 #15
0
                status, reply = self.__post(self.__baseUrl, rdf)
                try:
                    url = reply.split(':about="')[1].split('"', 1)[0]
                except:
                    url = ""
                d = {"url": url, "status":status}
            elif method=="test":
                return "Testing"
            else:
                d = {"error": "Unknown method '%s'" % method, "data":[]}
        except Exception, e:
            d = {"error": "Exception '%s'" % repr(e)}

        #return "('Annotation test data', '%s')" % repr(s)
        j = JsonConfigHelper(d)
        return j.toString()
        #return repr(d)

    
    # --- Private Methods ---
    def __getJsonFromRdf(self, rdfStr):
        # selfUrl, commentType, annotates, context, title, creator,
        #   bodyUrl/body, created, rootUrl, inReplyTo
        #
        d = {}
        dataList = []
        try:
            dom = self.saxReader.read(StringReader(rdfStr))
            for descNode in dom.selectNodes("//rdf:Description"):
                def st(xpath):
                    n = descNode.selectSingleNode(xpath)
예제 #16
0
    except StorageException, e:
        # No workflow payload, time to create
        wfChanged = True
        wfMeta = JsonConfigHelper()
        wfMeta.set("id", WORKFLOW_ID)
        wfMeta.set("step", "pending")
        stages = jsonConfig.getJsonList("stages")
        for stage in stages:
            if stage.get("name") == "pending":
                item_security = stage.getList("visibility")
                workflow_security = stage.getList("security")

    # Has the workflow metadata changed?
    if wfChanged == True:
        jsonString = String(wfMeta.toString())
        inStream = ByteArrayInputStream(jsonString.getBytes("UTF-8"))
        try:
            StorageUtils.createOrUpdatePayload(object, "workflow.metadata", inStream)
        except StorageException, e:
            print " * workflow-harvester.py : Error updating workflow payload"

    rules.add(AddField("workflow_id", wfMeta.get("id")))
    rules.add(AddField("workflow_step", wfMeta.get("step")))
    for group in workflow_security:
        rules.add(AddField("workflow_security", group))

    # some defaults if the above failed
    if titleList == []:
       #use object's source id (i.e. most likely a filename)
       titleList.append(object.getSourceId())
예제 #17
0
        wfChanged = True
        wfMeta = JsonConfigHelper()
        wfMeta.set("id", WORKFLOW_ID)
        wfMeta.set("step", "pending")
        wfMeta.set("pageTitle", "Organiser")
        stages = jsonConfig.getJsonList("stages")
        for stage in stages:
            if stage.get("name") == "pending":
                wfMeta.set("label", stage.get("label"))
                item_security = stage.getList("visibility")
                workflow_security = stage.getList("security")
                message_list = stage.getList("message")

    # Has the workflow metadata changed?
    if wfChanged == True:
        jsonString = String(wfMeta.toString())
        inStream = ByteArrayInputStream(jsonString.getBytes("UTF-8"))
        try:
            StorageUtils.createOrUpdatePayload(object, "workflow.metadata", inStream)
        except StorageException, e:
            print " * packaging-rules.py : Error updating workflow payload"

    rules.add(AddField("workflow_id", wfMeta.get("id")))
    rules.add(AddField("workflow_step", wfMeta.get("step")))
    rules.add(AddField("workflow_step_label", wfMeta.get("label")))
    for group in workflow_security:
        rules.add(AddField("workflow_security", group))

    # Index our metadata finally
    indexList("dc_title", titleList)
    indexList("dc_creator", creatorList)  #no dc_author in schema.xml, need to check