# Workflow data WORKFLOW_ID = "workflow1" wfChanged = False customFields = {} try: wfPayload = object.getPayload("workflow.metadata") wfMeta = JsonConfigHelper(wfPayload.open()) wfPayload.close() # Are we indexing because of a workflow progression? targetStep = wfMeta.get("targetStep") if targetStep is not None and targetStep != wfMeta.get("step"): wfChanged = True # Step change wfMeta.set("step", targetStep) wfMeta.removePath("targetStep") # This must be a re-index then else: targetStep = wfMeta.get("step") # Security change stages = jsonConfig.getJsonList("stages") for stage in stages: if stage.get("name") == targetStep: item_security = stage.getList("visibility") workflow_security = stage.getList("security") # Form processing formData = wfMeta.getJsonList("formData") if formData.size() > 0: formData = formData[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")))
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")))
def __workflow(self): # Workflow data WORKFLOW_ID = "packaging" wfChanged = False workflow_security = [] self.message_list = None try: wfPayload = self.object.getPayload("workflow.metadata") wfMeta = JsonConfigHelper(wfPayload.open()) wfPayload.close() # Are we indexing because of a workflow progression? targetStep = wfMeta.get("targetStep") if targetStep is not None and targetStep != wfMeta.get("step"): wfChanged = True # Step change wfMeta.set("step", targetStep) wfMeta.removePath("targetStep") # This must be a re-index then else: targetStep = wfMeta.get("step") # Security change stages = self.config.getJsonList("stages") for stage in stages: if stage.get("name") == targetStep: wfMeta.set("label", stage.get("label")) self.item_security = stage.getList("visibility") workflow_security = stage.getList("security") if wfChanged == True: self.message_list = stage.getList("message") # Form processing formData = wfMeta.getJsonList("formData") if formData.size() > 0: formData = formData[0] else: formData = None coreFields = ["title", "creator", "contributor", "description", "format", "creationDate"] if formData is not None: # Core fields title = formData.getList("title") if title: self.titleList = title creator = formData.getList("creator") if creator: self.creatorList = creator contributor = formData.getList("contributor") if contributor: self.contributorList = contributor description = formData.getList("description") if description: self.descriptionList = description format = formData.getList("format") if format: self.formatList = format creation = formData.getList("creationDate") if creation: self.creationDate = creation # Non-core fields data = formData.getMap("/") for field in data.keySet(): if field not in coreFields: self.customFields[field] = formData.getList(field) except StorageException, e: # No workflow payload, time to create wfChanged = True wfMeta = JsonConfigHelper() wfMeta.set("id", WORKFLOW_ID) wfMeta.set("step", "pending") wfMeta.set("pageTitle", "Uploaded Files - Management") stages = self.config.getJsonList("stages") for stage in stages: if stage.get("name") == "pending": wfMeta.set("label", stage.get("label")) self.item_security = stage.getList("visibility") workflow_security = stage.getList("security") self.message_list = stage.getList("message")
def __getSolrData(self): prefix = self.getSearchTerms() print "prefix='%s'" % prefix if prefix: query = "dc_title:%(prefix)s OR dc_title:%(prefix)s*" % {"prefix": prefix} query += " OR f_dc_identifier:%(ns)s%(prefix)s OR f_dc_identifier:%(ns)s%(prefix)s*" % { "prefix": prefix, "ns": "http\://example.com/arc/", } else: query = "*:*" portal = self.services.portalManager.get(self.portalId) if portal.searchQuery != "*:*" and portal.searchQuery != "": query = query + " AND " + portal.searchQuery req = SearchRequest(query) req.setParam("fq", 'item_type:"object"') if portal.query: req.addParam("fq", portal.query) req.setParam("fl", "score") req.setParam("sort", "score desc") req.setParam("start", self.getStartIndex()) req.setParam("rows", self.getItemsPerPage()) req.setParam("facet", "true") req.setParam("facet.field", "repository_name") req.setParam("facet.mincount", "1") ns = self.getNamespace() level = self.getFormData("level", None) if level and level != "top": req.addParam("fq", 'repository_name:"%s"' % level.replace(ns, "")) try: out = ByteArrayOutputStream() indexer = self.services.getIndexer() indexer.search(req, out) results = JsonConfigHelper(ByteArrayInputStream(out.toByteArray())) if level == "top": narrowerMap = {} for doc in results.getJsonList("response/docs"): value = doc.getList("repository_name").get(0) hash = md5.md5(value).hexdigest() if not narrowerMap.has_key(hash): # print value, hash narrowerMap[hash] = [] narrowerMap[hash].append(doc.get("id")) docs = ArrayList() facets = results.getList("facet_counts/facet_fields/repository_name") for i in range(0, len(facets), 2): value = facets[i] hash = md5.md5(value).hexdigest() # print value,hash doc = JsonConfigHelper() doc.set("score", "1") doc.set("dc_identifier", "%s%s" % (ns, value)) doc.set("skos_inScheme", ns) doc.set("skos_broader", "%s%s" % (ns, value)) doc.set("skos_narrower", '", "'.join(narrowerMap[hash])) doc.set("skos_prefLabel", value) docs.add(doc) results.removePath("response/docs") results.setJsonList("response/docs", docs) return results except Exception, e: self.log.error("Failed to lookup '{}': {}", prefix, str(e))