def __activate__(self, context): self.request = context["request"] self.response = context["response"] self.formData = context["formData"] self.log = context["log"] # Basic response text message = JsonSimple() self.metadata = message.writeObject(["metadata"]) self.results = message.writeArray(["results"]) # Prepare response Object format = self.formData.get("format") if format == "json": out = self.response.getPrintWriter("application/json; charset=UTF-8") else: out = self.response.getPrintWriter("text/plain; charset=UTF-8") # Success Response try: self.searchNla() out.println(message.toString(True)) out.close() except Exception, ex: self.log.error("Error during search: ", ex) self.response.setStatus(500) message = JsonSimple() message.getJsonObject().put("error", ex.getMessage()) out.println(message.toString(True)) out.close()
def getCurationData(self, oid): json = JsonObject() try: # Get the object from storage storage = self.Services.getStorage() object = storage.getObject(oid) # Find the package payload payload = object.getPayload("metadata.json") # Not found? if payload is None: self.log.error(" * detail.py => Can't find package data!") json.put("error", True) return json # Parse the data data = JsonSimple(payload.open()) payload.close() # Return it json.put("error", False) json.put("relationships", data.writeArray("relationships")) return json except StorageException, ex: self.log.error(" * detail.py => Storage Error accessing data: ", ex) json.put("error", True) return json
def __upgrade(self, formData): # These fields are handled specially ignoredFields = ["metaList", "redbox:formVersion", "redbox:newForm"] # Prepare a new JSON setup for upgraded data newJsonSimple = JsonSimple() newJsonObject = newJsonSimple.getJsonObject() metaList = newJsonSimple.writeArray(["metaList"]) oldJsonObject = formData.getJsonObject() for key in oldJsonObject.keySet(): oldField = str(key) if oldField not in ignoredFields: newField = self.__parseFieldName(oldField) metaList.add(newField) newJsonObject.put(newField, oldJsonObject.get(key)) # Form management newJsonObject.put("redbox:formVersion", self.redboxVersion) newForm = oldJsonObject.get("redbox:newForm") if newForm is not None: newJsonObject.put("redbox:newForm", newForm) ######### # Some final custom modifications more complicated than most fields ######### # Old URL checkbox 'on' equals new ID Origin 'internal' urlOrigin = oldJsonObject.get("url_useRecordId") if urlOrigin is not None and urlOrigin == "on": newJsonObject.put("dc:identifier.redbox:origin", "internal") # Related data should default to being unlinked if from legacy forms counter = 1 template = "dc:relation.vivo:Dataset" newIdField = "%s.%s.dc:identifier" % (template, counter) while newJsonObject.containsKey(newIdField): newOriginField = "%s.%s.redbox:origin" % (template, counter) newJsonObject.put(newOriginField, "external") newPublishField = "%s.%s.redbox:publish" % (template, counter) newJsonObject.put(newPublishField, "off") counter += 1 newIdField = "%s.%s.dc:identifier" % (template, counter) self.audit.add( "Migration tool. Version upgrade performed '%s' => '%s'" % (self.version, self.redboxVersion)) return newJsonSimple
def __upgrade(self, formData): # These fields are handled specially ignoredFields = ["metaList", "redbox:formVersion", "redbox:newForm"] # Prepare a new JSON setup for upgraded data newJsonSimple = JsonSimple() newJsonObject = newJsonSimple.getJsonObject() metaList = newJsonSimple.writeArray(["metaList"]) oldJsonObject = formData.getJsonObject() for key in oldJsonObject.keySet(): oldField = str(key) if oldField not in ignoredFields: newField = self.__parseFieldName(oldField) metaList.add(newField) newJsonObject.put(newField, oldJsonObject.get(key)) # Form management newJsonObject.put("redbox:formVersion", self.redboxVersion) newForm = oldJsonObject.get("redbox:newForm") if newForm is not None: newJsonObject.put("redbox:newForm", newForm) ######### # Some final custom modifications more complicated than most fields ######### # Old URL checkbox 'on' equals new ID Origin 'internal' urlOrigin = oldJsonObject.get("url_useRecordId") if urlOrigin is not None and urlOrigin == "on": newJsonObject.put("dc:identifier.redbox:origin", "internal") # Related data should default to being unlinked if from legacy forms counter = 1 template = "dc:relation.vivo:Dataset" newIdField = "%s.%s.dc:identifier" % (template, counter) while newJsonObject.containsKey(newIdField): newOriginField = "%s.%s.redbox:origin" % (template, counter) newJsonObject.put(newOriginField, "external") newPublishField = "%s.%s.redbox:publish" % (template, counter) newJsonObject.put(newPublishField, "off") counter += 1 newIdField = "%s.%s.dc:identifier" % (template, counter) self.audit.add("Migration tool. Version upgrade performed '%s' => '%s'" % (self.version, self.redboxVersion)) return newJsonSimple
def getCurationData(self, oid): json = JsonObject() try: # Get the object from storage storage = self.Services.getStorage() object = storage.getObject(oid) # Find the package payload payload = None pidList = object.getPayloadIdList() for pid in pidList: if (pid.endswith(".tfpackage")): payload = object.getPayload(pid) # Not found? if payload is None: self.log.error(" * detail.py => Can't find package data!") json.put("error", True) return json # Parse the data data = JsonSimple(payload.open()) payload.close() # Some basic cosmetic fixes relations = data.writeArray("relationships") for relation in relations: if not relation.containsKey("field"): relation.put("field", "From Object " + relation.get("oid")) # Return it json.put("error", False) json.put("relationships", relations) return json except StorageException, ex: self.log.error(" * detail.py => Storage Error accessing data: ", ex) json.put("error", True) return json
def getCurationData(self, oid): json = JsonObject() try: # Get the object from storage storage = self.Services.getStorage() object = storage.getObject(oid) # Find the package payload payload = None pidList = object.getPayloadIdList() for pid in pidList: if (pid.endswith(".tfpackage")): payload = object.getPayload(pid) # Not found? if payload is None: self.log.error(" * detail.py => Can't find package data!") json.put("error", True) return json # Parse the data data = JsonSimple(payload.open()) payload.close() # Some basic cosmetic fixes relations = data.writeArray("relationships") for relation in relations: if not relation.containsKey("field"): relation.put("field", "From Object "+relation.get("oid")) # Return it json.put("error", False) json.put("relationships", relations) return json except StorageException, ex: self.log.error(" * detail.py => Storage Error accessing data: ", ex) json.put("error", True) return json