def __createManifest(self): manifest = ManifestType() meta = MetadataType() meta.setSchema("IMS Content") meta.setSchemaversion("1.1.4") manifest.setMetadata(meta) portal = Services.getPortalManager().get(portalId) portalManifest = portal.getJsonMap("manifest") orgs = OrganizationsType() org = OrganizationType() org.setIdentifier("default") org.setTitle(portal.getDescription()) orgs.getOrganization().add(org) orgs.setDefault(org) manifest.setOrganizations(orgs) resources = ResourcesType() manifest.setResources(resources) for key in portalManifest.keySet(): jsonRes = portalManifest.get(key) # item visible = jsonRes.get("hidden", "false") != "true" item = ItemType() item.setIdentifier("default-" + key) item.setIdentifierref(key) item.setIsvisible(visible) item.setTitle(jsonRes.get("title")) # webcontent webRes = ResourceType() webRes.setIdentifier(key) webRes.setType("webcontent") oid = jsonRes.get("id") _, filename = os.path.split(oid) baseName = os.path.splitext(filename)[0] webRes.setHref("%s/%s.htm" % (key[5:], baseName)) obj = Services.getStorage().getObject(oid) for payload in obj.getPayloadList(): pid = payload.getId() if pid != "SOF-META": file = FileType() file.setHref(pid) webRes.getFile().add(file) org.getItem().add(item) resources.getResource().add(webRes) return manifest
def getMimeTypeIcon(self, oid): #print " *** getMimeTypeIcon(%s)" % oid # check for specific icon contentType = self.__getContentType(oid) iconPath = "images/icons/mimetype/%s/icon.png" % contentType resource = Services.getPageService().resourceExists(portalId, iconPath) if resource is not None: return iconPath elif contentType is not None and contentType.find("/") != -1: # check for major type iconPath = "images/icons/mimetype/%s/icon.png" % contentType[:contentType.find("/")] resource = Services.getPageService().resourceExists(portalId, iconPath) if resource is not None: return iconPath # use default icon return "images/icons/mimetype/icon.png"
def __init__(self, outputFile=None): self.__portal = Services.getPortalManager().get(portalId) self.__portalManifest = self.__portal.getJsonMap("manifest") print formData url = formData.get("url") if outputFile is None and url is None: self.__createPackage() elif url is not None and outputFile is not None: self.__createPackage(outputFile)
def __readManifest(self, oid): object = Services.getStorage().getObject(oid) sourceId = object.getSourceId() payload = object.getPayload(sourceId) payloadReader = InputStreamReader(payload.open(), "UTF-8") manifest = JsonConfigHelper(payloadReader) payloadReader.close() payload.close() object.close() return manifest
def __getContentType(self, oid): #print " *** __getContentType(%s)" % oid if oid == "blank": contentType = "application/x-fascinator-blank-node" else: object = Services.getStorage().getObject(oid) sourceId = object.getSourceId() payload = object.getPayload(sourceId) contentType = payload.getContentType() payload.close() object.close() return contentType
def __init__(self, outputFile=None): oid = formData.get("oid") print "Creating IMS content package for: %s" % oid try: # get the package manifest object = Services.getStorage().getObject(oid) sourceId = object.getSourceId() payload = object.getPayload(sourceId) self.__manifest = JsonConfigHelper(payload.open()) payload.close() object.close() # create the package url = formData.get("url") if outputFile is None and url is None: self.__createPackage() elif url is not None and outputFile is not None: self.__createPackage(outputFile) except Exception, e: log.error("Failed to create IMS content package: %s" % str(e))
def __init__(self): print "formData: %s" % formData self.__oid = formData.get("oid") result = None try: # get the package manifest object = Services.getStorage().getObject(self.__oid) sourceId = object.getSourceId() payload = object.getPayload(sourceId) payloadReader = InputStreamReader(payload.open(), "UTF-8") self.__manifest = JsonConfigHelper(payloadReader) payloadReader.close() payload.close() object.close() # check if we need to do processing func = formData.get("func") if func == "get-rvt-manifest": result = self.__getRvtManifest(self.getManifest()) except Exception, e: log.error("Failed to load manifest", e); result = '{ status: "error", message: "%s" }' % str(e)
def __createPackage(self, outputFile=None): title = self.__manifest.get("title") manifest = self.__createManifest() context = JAXBContext.newInstance("au.edu.usq.fascinator.ims") m = context.createMarshaller() m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, True) writer = StringWriter() jaxbElem = ObjectFactory.createManifest(ObjectFactory(), manifest) m.marshal(jaxbElem, writer) writer.close() if outputFile is not None: print "writing to %s..." % outputFile out = FileOutputStream(outputFile) else: print "writing to http output stream..." filename = urllib.quote(title.replace(" ", "_")) response.setHeader("Content-Disposition", "attachment; filename=%s.zip" % filename) out = response.getOutputStream("application/zip") zipOut = ZipOutputStream(out) zipOut.putNextEntry(ZipEntry("imsmanifest.xml")) IOUtils.write(writer.toString(), zipOut) zipOut.closeEntry() oidList = self.__manifest.getList("manifest//id") for oid in oidList: obj = Services.getStorage().getObject(oid) for pid in obj.getPayloadIdList(): payload = obj.getPayload(pid) if not PayloadType.Annotation.equals(payload.getType()): zipOut.putNextEntry(ZipEntry("resources/%s/%s" % (oid, pid))) IOUtils.copy(payload.open(), zipOut) payload.close() zipOut.closeEntry() obj.close() zipOut.close() out.close()
def __createPackage(self, outputFile=None): manifest = self.__createManifest() context = JAXBContext.newInstance("au.edu.usq.fascinator.ims") m = context.createMarshaller() m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, True) writer = StringWriter() jaxbElem = ObjectFactory.createManifest(ObjectFactory(), manifest) m.marshal(jaxbElem, writer); writer.close() if outputFile is not None: print " * imscp.py: writing to %s..." % outputFile out = FileOutputStream(outputFile) else: print " * imscp.py: writing to http output stream..." response.setHeader("Content-Disposition", "attachment; filename=%s.zip" % self.__portal.getName()) out = response.getOutputStream("application/zip") zipOut = ZipOutputStream(out) zipOut.putNextEntry(ZipEntry("imsmanifest.xml")) IOUtils.write(writer.toString(), zipOut) zipOut.closeEntry() for key in self.__portalManifest.keySet(): item = self.__portalManifest.get(key) oid = item.get("id") obj = Services.getStorage().getObject(oid) for payload in obj.getPayloadList(): pid = payload.getId() if pid != "SOF-META": zipOut.putNextEntry(ZipEntry("%s/%s" % (key[5:], pid))) IOUtils.copy(payload.getInputStream(), zipOut) zipOut.closeEntry() zipOut.close() out.close()
def __createItemAndResource(self, key, jsonRes): hidden = jsonRes.get("hidden", "False") # organization item item = ItemType() item.setIdentifier("default-%s" % key) item.setIdentifierref(key) item.setIsvisible(hidden == "False") item.setTitle(jsonRes.get("title")) # resource webRes = ResourceType() webRes.setIdentifier(key) webRes.setType("webcontent") oid = jsonRes.get("id") obj = Services.getStorage().getObject(oid) baseName = os.path.splitext(obj.getSourceId())[0] webRes.setHref("resources/%s/%s.htm" % (oid, baseName)) for pid in obj.getPayloadIdList(): payload = obj.getPayload(pid) if not PayloadType.Annotation.equals(payload.getType()): file = FileType() file.setHref(pid) webRes.getFile().add(file) obj.close() return item, webRes
def __init__(self): self.access = Services.getAccessControlManager() self.auth = Services.getAuthManager() self.role = Services.getRoleManager() self.check_login()