示例#1
0
 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
示例#2
0
 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"
示例#3
0
 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)
示例#4
0
 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
示例#5
0
 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
示例#6
0
 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))
示例#7
0
 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)
示例#8
0
 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()
示例#9
0
 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()
示例#10
0
 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
示例#11
0
 def __init__(self):
     self.access = Services.getAccessControlManager()
     self.auth = Services.getAuthManager()
     self.role = Services.getRoleManager()
     self.check_login()