Exemple #1
0
 def parseFFmpeg(self, parent):
     if parent is not None:
         object = parent.getObject()
         if object is not None:
             payload = None
             try:
                 payload = object.getPayload("ffmpeg.info")
                 # Stream the content out to string
                 out = ByteArrayOutputStream()
                 IOUtils.copy(payload.open(), out)
                 payload.close()
                 self.__ffmpegRaw = out.toString("UTF-8")
                 out.close()
                 payload.close()
                 # And parse it
                 self.__ffmpegData = JsonSimple(self.__ffmpegRaw)
                 if self.__ffmpegData is None:
                     return False
                 else:
                     self.__ffmpegOutputs = self.__ffmpegData.getJsonSimpleMap(["outputs"])
                     return True
             except:
                 if payload is not None:
                     payload.close()
     return False
Exemple #2
0
 def getPayloadContent(self):
     format = self.__metadata.getField("dc_format")
     slash = self.__oid.rfind("/")
     pid = self.__oid[slash+1:]
     print " *** payload content, format: %s, pid: %s *** " % (format, pid)
     contentStr = ""
     if format.startswith("text"):
         contentStr = "<pre>"
         payload = self.__storage.getPayload(self.__oid, pid)
         str = StringWriter() 
         IOUtils.copy(payload.getInputStream(), str)
         contentStr += str.toString()
         contentStr += "</pre>"
     elif format.find("vnd.ms-")>-1 or format.find("vnd.oasis.opendocument.")>-1:
         #get the html version if exist....
         pid = pid[:pid.find(".")] + ".htm"
         payload = self.__storage.getPayload(self.__oid, pid)
         saxReader = SAXReader()
         document = saxReader.read(payload.getInputStream())
         slideNode = document.selectSingleNode("//div[@class='body']")
         #linkNodes = slideNode.selectNodes("//img")
         #contentStr = slideNode.asXML();
         # encode character entities correctly
         out = ByteArrayOutputStream()
         format = OutputFormat.createPrettyPrint()
         format.setSuppressDeclaration(True)
         writer = XMLWriter(out, format)
         writer.write(slideNode)
         writer.close()
         contentStr = out.toString("UTF-8")
     return contentStr
Exemple #3
0
 def __getFile(self, packageDir, filename):
     file = File(packageDir, filename)
     if not file.exists():
         out = FileOutputStream(file)
         IOUtils.copy(Services.getClass().getResourceAsStream("/workflows/" + filename), out)
         out.close()
     return file
Exemple #4
0
 def parseFFmpeg(self, parent):
     if parent is not None:
         object = parent.getObject()
         if object is not None:
             payload = None
             try:
                 payload = object.getPayload("ffmpeg.info")
                 # Stream the content out to string
                 out = ByteArrayOutputStream()
                 IOUtils.copy(payload.open(), out)
                 payload.close()
                 self.__ffmpegRaw = out.toString("UTF-8")
                 out.close()
                 payload.close()
                 # And parse it
                 jsonData = JsonConfigHelper(self.__ffmpegRaw)
                 if jsonData is None:
                     return False
                 else:
                     self.__ffmpegData = jsonData.getJsonMap("/outputs")
                     return True
             except:
                 if payload is not None:
                     payload.close()
     return False
Exemple #5
0
    def pageContent(self):
        # Object ID
        oid = self.metadata.get("id")
        # Determine MIME Type
        mimeType = "Unknown"
        mimeList = self.metadata.getList("dc_format")
        if mimeList is not None and not mimeList.isEmpty():
            mimeType = mimeList.get(0)

        # The HTML payload is the real object, display in a frame because we
        #  have no idea what kind of object it is.
        if mimeType == "text/html":
            objectPath = "http://%s:%s%s/%s/download/%s/" % \
            (self.req.serverName, self.serverPort, self.contextPath, self.portalId, oid)
            objectLink = '<a class="iframe-link-alt" href="%s">View outside the frame</a>' % objectPath
            objectFrame = '<iframe class="iframe-preview" src="%s"></iframe>' % objectPath
            return objectLink + "<br/>" + objectFrame

        # We are just rendering a HTML preview
        else:
            preview = self.metadata.get("preview")
            try:
                object = Services.getStorage().getObject(oid)
                payload = object.getPayload(preview)
                out = ByteArrayOutputStream()
                IOUtils.copy(payload.open(), out)
                payload.close()
                return out.toString("UTF-8")

            except StorageException, e:
                return
Exemple #6
0
 def __load(self, oid):
     template = """<div class="title" /><div class="page-toc" /><div class="body"><div>%s</div></div>"""
     print "Loading HTML preview for %s..." % oid
     if oid == "blank":
         return template % "<p>This page intentionally left blank.</p>"
     else:
         object = Services.getStorage().getObject(oid)
         
         # get preview payload or source if no preview
         pid = self.__getPreviewPid(object)
         payload = object.getPayload(pid)
         mimeType = payload.getContentType()
         
         print "pid=%s mimeType=%s" % (pid, mimeType)
         isHtml = mimeType in ["text/html", "application/xhtml+xml"]
         if isHtml or mimeType.startswith("text/"):
             out = ByteArrayOutputStream()
             IOUtils.copy(payload.open(), out)
             content = out.toString("UTF-8")
             if content.find('class="body"'):  ## assumes ICE content
                 return content
             elif isHtml:
                 return template % content
             elif mimeType == "text/plain":
                 return template % ('<pre>%s</pre>' % content)
             else:
                 return content
         elif mimeType.startswith("image/"):
             return template % ('<div rel="%s"><img src="%s" /></div>' % (oid, pid))
         else:
             return '<a href="%s" rel="%s">%s</a>' % (oid, mimeType, pid)
         payload.close()
         object.close()
Exemple #7
0
 def getPayloadContent(self):
     mimeType = self.__mimeType
     print " * single.py: payload content mimeType=%s" % mimeType
     contentStr = ""
     if mimeType.startswith("text/"):
         if mimeType == "text/html":
             contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s"></iframe>' % (
                 contextPath,
                 portalId,
                 self.__oid,
             )
         else:
             pid = self.__oid[self.__oid.rfind("/") + 1 :]
             payload = self.__storage.getPayload(self.__oid, pid)
             print " * single.py: pid=%s payload=%s" % (pid, payload)
             if payload is not None:
                 sw = StringWriter()
                 sw.write("<pre>")
                 IOUtils.copy(payload.getInputStream(), sw)
                 sw.write("</pre>")
                 sw.flush()
                 contentStr = sw.toString()
     elif (
         mimeType == "application/pdf"
         or mimeType.find("vnd.ms") > -1
         or mimeType.find("vnd.oasis.opendocument.") > -1
     ):
         # get the html version if exist...
         pid = os.path.splitext(self.__pid)[0] + ".htm"
         print " * single.py: pid=%s" % pid
         # contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s/%s"></iframe>' % \
         #    (contextPath, portalId, self.__oid, pid)
         payload = self.__storage.getPayload(self.__oid, pid)
         saxReader = SAXReader(Boolean.parseBoolean("false"))
         try:
             document = saxReader.read(payload.getInputStream())
             slideNode = document.selectSingleNode("//*[local-name()='body']")
             # linkNodes = slideNode.selectNodes("//img")
             # contentStr = slideNode.asXML();
             # encode character entities correctly
             slideNode.setName("div")
             out = ByteArrayOutputStream()
             format = OutputFormat.createPrettyPrint()
             format.setSuppressDeclaration(True)
             format.setExpandEmptyElements(True)
             writer = XMLWriter(out, format)
             writer.write(slideNode)
             writer.close()
             contentStr = out.toString("UTF-8")
         except:
             traceback.print_exc()
             contentStr = '<p class="error">No preview available</p>'
     elif mimeType.startswith("image/"):
         src = "%s/%s" % (self.__oid, self.__pid)
         contentStr = (
             '<a class="image" href="%(src)s"  style="max-width:98%%">'
             '<img src="%(src)s" style="max-width:100%%" /></a>' % {"src": self.__pid}
         )
     return contentStr
 def __getFile(self, packageDir, filename):
     file = File(packageDir, filename)
     if not file.exists():
         out = FileOutputStream(file)
         IOUtils.copy(
             Services.getClass().getResourceAsStream("/workflows/" +
                                                     filename), out)
         out.close()
     return file
Exemple #9
0
 def getResourceContent(self, plugin, field):
     resource = self.getMetadata(plugin, field)
     stream = self.pageService.getResource(resource)
     if stream:
         writer = StringWriter()
         IOUtils.copy(stream, writer, "UTF-8")
         html = writer.toString()
         print " *** html:", html
         return html
     return "<em>'%s' not found!</em>" % (field)
Exemple #10
0
 def getPayloadContent(self):
     mimeType = self.__mimeType
     print " * detail.py: payload content mimeType=%s" % mimeType
     contentStr = ""
     if mimeType == "application/octet-stream":
         dcFormat = self.__json.get("response/docs/dc_format")
         if dcFormat is not None:
             dcFormat = dcFormat[1:-1]
         print dcFormat, mimeType
         if dcFormat != mimeType:
             return "<div><em>(File not found)</em></div>"
         else:
             return "<div><em>(Binary file)</em></div>"
     elif mimeType.startswith("text/"):
         if mimeType == "text/html":
             contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s"></iframe>' % \
                 (contextPath, portalId, self.__oid)
         else:
             pid = self.__oid[self.__oid.rfind("/")+1:]
             payload = self.__storage.getPayload(self.__oid, pid)
             #print " * detail.py: pid=%s payload=%s" % (pid, payload)
             if payload is not None:
                 sw = StringWriter()
                 sw.write("<pre>")
                 IOUtils.copy(payload.getInputStream(), sw)
                 sw.write("</pre>")
                 sw.flush()
                 contentStr = sw.toString()
     elif mimeType == "application/pdf" or mimeType.find("vnd.ms")>-1 or mimeType.find("vnd.oasis.opendocument.")>-1:
         # get the html version if exist...
         pid = os.path.splitext(self.__pid)[0] + ".htm"
         print " * detail.py: pid=%s" % pid
         #contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s/%s"></iframe>' % \
         #    (contextPath, portalId, self.__oid, pid)
         payload = self.__storage.getPayload(self.__oid, pid)
         saxReader = SAXReader(Boolean.parseBoolean("false"))
         try:
             document = saxReader.read(payload.getInputStream())
             slideNode = document.selectSingleNode("//*[local-name()='body']")
             #linkNodes = slideNode.selectNodes("//img")
             #contentStr = slideNode.asXML();
             # encode character entities correctly
             slideNode.setName("div")
             out = ByteArrayOutputStream()
             format = OutputFormat.createPrettyPrint()
             format.setSuppressDeclaration(True)
             format.setExpandEmptyElements(True)
             writer = XMLWriter(out, format)
             writer.write(slideNode)
             writer.close()
             contentStr = out.toString("UTF-8")
         except:
             traceback.print_exc()
             contentStr = "<p class=\"error\">No preview available</p>"
     return contentStr
 def getPayloadContent(self):
     mimeType = self.__mimeType
     print " * single.py: payload content mimeType=%s" % mimeType
     contentStr = ""
     if mimeType.startswith("text/"):
         if mimeType == "text/html":
             contentStr = '<iframe class="iframe-preview" src="%s/download/%s"></iframe>' % \
                 (portalPath, self.__oid)
         else:
             pid = self.__oid[self.__oid.rfind("/") + 1:]
             payload = self.__storage.getPayload(self.__oid, pid)
             print " * single.py: pid=%s payload=%s" % (pid, payload)
             if payload is not None:
                 sw = StringWriter()
                 sw.write("<pre>")
                 IOUtils.copy(payload.getInputStream(), sw)
                 sw.write("</pre>")
                 sw.flush()
                 contentStr = sw.toString()
     elif mimeType == "application/pdf" or mimeType.find(
             "vnd.ms") > -1 or mimeType.find(
                 "vnd.oasis.opendocument.") > -1:
         # get the html version if exist...
         pid = os.path.splitext(self.__pid)[0] + ".htm"
         print " * single.py: pid=%s" % pid
         #contentStr = '<iframe class="iframe-preview" src="%s/download/%s/%s"></iframe>' % \
         #    (portalPath, self.__oid, pid)
         payload = self.__storage.getPayload(self.__oid, pid)
         saxReader = SAXReader(Boolean.parseBoolean("false"))
         try:
             document = saxReader.read(payload.getInputStream())
             slideNode = document.selectSingleNode(
                 "//*[local-name()='body']")
             #linkNodes = slideNode.selectNodes("//img")
             #contentStr = slideNode.asXML();
             # encode character entities correctly
             slideNode.setName("div")
             out = ByteArrayOutputStream()
             format = OutputFormat.createPrettyPrint()
             format.setSuppressDeclaration(True)
             format.setExpandEmptyElements(True)
             writer = XMLWriter(out, format)
             writer.write(slideNode)
             writer.close()
             contentStr = out.toString("UTF-8")
         except:
             traceback.print_exc()
             contentStr = "<p class=\"error\">No preview available</p>"
     elif mimeType.startswith("image/"):
         src = "%s/%s" % (self.__oid, self.__pid)
         contentStr = '<a class="image" href="%(src)s"  style="max-width:98%%">' \
             '<img src="%(src)s" style="max-width:100%%" /></a>' % { "src": self.__pid }
     return contentStr
Exemple #12
0
 def getAboutPage(self, plugin, type):
     if type is None or plugin is None:
         return "<em>This plugin has provided no information about itself.</em>"
     pid = plugin.replace("-", "_")
     resource = "plugin/%s/%s/about.html" % (type, pid)
     stream = self.pageService.getResource(resource)
     if stream:
         writer = StringWriter()
         IOUtils.copy(stream, writer, "UTF-8")
         html = writer.toString()
         return html
     return "<em>This plugin has provided no information about itself.</em>"
Exemple #13
0
 def getAboutPage(self, plugin, type):
     if type is None or plugin is None:
         return "<em>This plugin has provided no information about itself.</em>"
     pid = plugin.replace("-", "_")
     resource = "plugin/%s/%s/about.html" % (type, pid)
     stream = self.pageService.getResource(resource)
     if stream:
         writer = StringWriter()
         IOUtils.copy(stream, writer, "UTF-8")
         html = writer.toString()
         return html
     return "<em>This plugin has provided no information about itself.</em>"
Exemple #14
0
 def getAboutPage(self, plugin, type):
     if type is None or plugin is None:
         return "<em>'plugin/%s/%s/about.html' not found!</em>" % (type, plugin)
     pid = plugin.replace("-", "_")
     resource = "plugin/%s/%s/about.html" % (type, pid)
     stream = self.pageService.getResource(resource)
     if stream:
         writer = StringWriter()
         IOUtils.copy(stream, writer, "UTF-8")
         html = writer.toString()
         return html
     return "<em>'plugin/%s/%s/about.html' not found!</em>" % (type, pid)
    def pageContent(self):
        # Object ID
        oid = self.metadata.getFirst("id")
        # Determine MIME Type
        mimeType = "Unknown"
        mimeList = self.metadata.getList("dc_format")
        if mimeList is not None and not mimeList.isEmpty():
            mimeType = mimeList.get(0)

        # The HTML payload is the real object, display in a frame because we
        #  have no idea what kind of object it is.
        if mimeType == "text/html":
            urlBase = self.config.getString(None, ["urlBase"])
            if urlBase is None:
                "http://%s:%s%s/" % (self.req.serverName, self.serverPort,
                                     self.contextPath)
            objectPath = "%s%s/download/%s/" % (urlBase, self.portalId, oid)
            return self.frameContent(objectPath)

        # We are rendering a HTML preview...
        else:
            preview = self.metadata.getFirst("preview")

            # ... of an IMS package or zipped website. Treat as per html above.
            if mimeType == "application/zip":
                urlBase = self.config.getString(None, ["urlBase"])
                if urlBase is None:
                    "http://%s:%s%s/" % (self.req.serverName, self.serverPort,
                                         self.contextPath)
                objectPath = "%s%s/download/%s/%s" % (urlBase, self.portalId,
                                                      oid, preview)
                return self.frameContent(objectPath)

            # ... of an HTML excerpt, such as an ICE rendition. Render in page.
            else:
                try:
                    object = Services.getStorage().getObject(oid)
                    payload = object.getPayload(preview)
                    out = ByteArrayOutputStream()
                    IOUtils.copy(payload.open(), out)
                    payload.close()
                    return out.toString("UTF-8")

                except StorageException, e:
                    return
Exemple #16
0
 def getPayloadContent(self):
     mimeType = self.__mimeType
     print " * detail.py: payload content mimeType=%s" % mimeType
     contentStr = ""
     if mimeType.startswith("text/"):
         if mimeType == "text/html":
             contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s"></iframe>' % \
                 (contextPath, portalId, self.__oid)
         else:
             pid = self.__oid[self.__oid.rfind("/")+1:]
             payload = self.__storage.getPayload(self.__oid, pid)
             print " * detail.py: pid=%s payload=%s" % (pid, payload)
             if payload is not None:
                 sw = StringWriter()
                 sw.write("<pre>")
                 IOUtils.copy(payload.getInputStream(), sw)
                 sw.write("</pre>")
                 sw.flush()
                 contentStr = sw.toString()
     elif mimeType == "application/pdf" or mimeType.find("vnd")>-1 or mimeType.find("vnd.oasis.opendocument.")>-1:
         # get the html version if exist...
         pid = os.path.splitext(self.__pid)[0] + ".htm"
         print " * detail.py: pid=%s" % pid
         #contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s/%s"></iframe>' % \
         #    (contextPath, portalId, self.__oid, pid)
         payload = self.__storage.getPayload(self.__oid, pid)
         saxReader = SAXReader(Boolean.parseBoolean("false"))
         try:
             document = saxReader.read(payload.getInputStream())
         except:
             traceback.print_exc()
         #slideNode = document.selectSingleNode("//div[@class='body']")
         slideNode = document.selectSingleNode("//*[local-name()='body']")
         #linkNodes = slideNode.selectNodes("//img")
         #contentStr = slideNode.asXML();
         # encode character entities correctly
         out = ByteArrayOutputStream()
         format = OutputFormat.createPrettyPrint()
         format.setSuppressDeclaration(True)
         writer = XMLWriter(out, format)
         writer.write(slideNode)
         writer.close()
         contentStr = out.toString("UTF-8")
     return contentStr
Exemple #17
0
 def __getPayloadContent(self, oid, pid):
     print " * combined.py: oid='%s' pid='%s'" % (oid, pid)
     payload = self.__storage.getPayload(oid, pid)
     if payload is None:
         return "<div>Error: No content for '%s'</div>" % oid
     mimeType = payload.contentType
     contentStr = ""
     if mimeType.startswith("text/"):
         if mimeType == "text/html":
             contentStr = '<iframe class="iframe-preview" src="%s/download/%s"></iframe>' % \
                 (portalPath, oid)
         else:
             sw = StringWriter()
             sw.write("<pre>")
             IOUtils.copy(payload.getInputStream(), sw)
             sw.write("</pre>")
             sw.flush()
             contentStr = sw.toString()
     elif mimeType == "application/pdf" or mimeType.find("vnd.ms")>-1 or mimeType.find("vnd.oasis.opendocument.")>-1:
         # get the html version if exist...
         pid = os.path.splitext(pid)[0] + ".htm"
         print " * combined.py: pid=%s" % pid
         payload = self.__storage.getPayload(oid, pid)
         saxReader = SAXReader(False)
         try:
             document = saxReader.read(payload.getInputStream())
             slideNode = document.selectSingleNode("//*[local-name()='body']")
             slideNode.setName("div")
             out = ByteArrayOutputStream()
             format = OutputFormat.createPrettyPrint()
             format.setSuppressDeclaration(True)
             format.setExpandEmptyElements(True)
             writer = XMLWriter(out, format)
             writer.write(slideNode)
             writer.close()
             contentStr = out.toString("UTF-8")
         except:
             traceback.print_exc()
             contentStr = "<p class=\"error\">No preview available</p>"
     elif mimeType.startswith("image/"):
         src = "%s/%s" % (oid, pid)
         contentStr = '<a class="image" href="%(src)s"  style="max-width:98%%">' \
             '<img src="%(src)s" style="max-width:100%%" /></a>' % { "src": pid }
     return contentStr
    def pageContent(self):
        # Object ID
        oid = self.metadata.getFirst("id")
        # Determine MIME Type
        mimeType = "Unknown"
        mimeList = self.metadata.getList("dc_format")
        if mimeList is not None and not mimeList.isEmpty():
            mimeType = mimeList.get(0)

        # The HTML payload is the real object, display in a frame because we
        #  have no idea what kind of object it is.
        if mimeType == "text/html":
            urlBase = self.config.getString(None, ["urlBase"])
            if urlBase is None:
                "http://%s:%s%s/" % (self.req.serverName, self.serverPort, self.contextPath)
            objectPath = "%s%s/download/%s/" % (urlBase, self.portalId, oid)
            return self.frameContent(objectPath)

        # We are rendering a HTML preview...
        else:
            preview = self.metadata.getFirst("preview")

            # ... of an IMS package or zipped website. Treat as per html above.
            if mimeType == "application/zip":
                urlBase = self.config.getString(None, ["urlBase"])
                if urlBase is None:
                    "http://%s:%s%s/" % (self.req.serverName, self.serverPort, self.contextPath)
                objectPath = "%s%s/download/%s/%s" % (urlBase, self.portalId, oid, preview)
                return self.frameContent(objectPath)

            # ... of an HTML excerpt, such as an ICE rendition. Render in page.
            else:
                try:
                    object = Services.getStorage().getObject(oid)
                    payload = object.getPayload(preview)
                    out = ByteArrayOutputStream()
                    IOUtils.copy(payload.open(), out)
                    payload.close()
                    return out.toString("UTF-8")

                except StorageException, e:
                    return
Exemple #19
0
 def __init__(self):
     basePath = portalId + "/" + pageName
     uri = request.getAttribute("RequestURI")
     print " * download.py: basePath=%s uri=%s" % (basePath, uri)
     uri = uri[len(basePath) + 1 :]
     if uri.find("%2F") == -1:
         slash = uri.rfind("/")
     else:
         slash = uri.find("/")
     oid = URLDecoder.decode(uri[:slash])
     pid = URLDecoder.decode(uri[slash + 1 :])
     print " * download.py: oid=%s pid=%s" % (oid, pid)
     payload = Services.storage.getPayload(oid, pid)
     filename = os.path.split(pid)[1]
     mimeType = payload.contentType
     if mimeType == "application/octet-stream":
         response.setHeader("Content-Disposition", "attachment; filename=%s" % filename)
     out = response.getOutputStream(payload.contentType)
     IOUtils.copy(payload.inputStream, out)
     out.close()
Exemple #20
0
    def __createPackage(self, outputFile=None):
        title = self.__manifest.getString(None, "title")
        manifest = self.__createManifest()
        context = JAXBContext.newInstance("com.googlecode.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.search("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()
Exemple #21
0
    def getSourceSample(self, id, limit):
        # Get source payload
        object = self.services.getStorage().getObject(id)
        if object is not None:
            payload = object.getPayload(object.getSourceId())

        # Read to a string
        if payload is not None:
            out = ByteArrayOutputStream()
            IOUtils.copy(payload.open(), out)
            payload.close()
            string = out.toString("UTF-8")

        # Return response
        if string is not None:
            if (len(string)) > limit:
                return string[0:limit] + "..."
            else:
                return string
        else:
            return ""
    def getSourceSample(self, id, limit):
        # Get source payload
        object = self.services.getStorage().getObject(id)
        if object is not None:
            payload = object.getPayload(object.getSourceId())

        # Read to a string
        if payload is not None:
            out = ByteArrayOutputStream()
            IOUtils.copy(payload.open(), out)
            payload.close()
            string = out.toString("UTF-8")

        # Return response
        if string is not None:
            if (len(string)) > limit:
                return  string[0:limit] + "..."
            else:
                return  string
        else:
            return ""
Exemple #23
0
    def __load(self, oid):
        template = """<div class="title" /><div class="page-toc" /><div class="body"><div>%s</div></div>"""
        print "Loading HTML preview for %s..." % oid
        if oid.startswith("blank-"):
##            package = formData.get("package")
##            return template % self.__getTableOfContents(package, oid)
            return template % ('<div class="blank-toc" id="%s-content"></div>' % oid)
        else:
            if oid.startswith("package-"):
                pipId = oid[oid.find("-")+1:]
                print "package pipId=%s" % pipId
                manifest = self.__readManifest(pipId)
                return template % ('<div class="package-description">%s</div><div class="blank-toc" id="%s-content"></div>' % (manifest.get("description"), oid))
            else:
                object = Services.getStorage().getObject(oid)
                # get preview payload or source if no preview
                pid = self.__getPreviewPid(object)
                payload = object.getPayload(pid)
                mimeType = payload.getContentType()
                
                print "pid=%s mimeType=%s" % (pid, mimeType)
                isHtml = mimeType in ["text/html", "application/xhtml+xml"]
                if isHtml or mimeType.startswith("text/"):
                    out = ByteArrayOutputStream()
                    IOUtils.copy(payload.open(), out)
                    content = out.toString("UTF-8")
                    if content.find('class="body"'):  ## assumes ICE content
                        return content
                    elif isHtml:
                        return template % content
                    elif mimeType == "text/plain":
                        return template % ('<pre>%s</pre>' % content)
                    else:
                        return content
                elif mimeType.startswith("image/"):
                    return template % ('<div rel="%s" class="image"><img src="%s" /></div><div class="clear"></div>' % (oid, pid))
                else:
                    return '<a href="%s" rel="%s">%s</a>' % (oid, mimeType, pid)
                payload.close()
                object.close()
Exemple #24
0
    def __createPackage(self, outputFile=None):
        title = self.__manifest.getString(None, "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.search("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()
Exemple #25
0
 def __init__(self):
     basePath = portalId + "/" + pageName
     uri = URLDecoder.decode(request.getAttribute("RequestURI"))
     uri = uri[len(basePath)+1:]
     oid, pid, payload = self.__resolve(uri)
     print """ * download.py: uri='%s'
             oid='%s'
             pid='%s'
             payload='%s'""" % (uri, oid, pid, payload)
     if payload is not None:
         filename = os.path.split(pid)[1]
         mimeType = payload.contentType
         if mimeType == "application/octet-stream":
             response.setHeader("Content-Disposition", "attachment; filename=%s" % filename)
         out = response.getOutputStream(payload.contentType)
         IOUtils.copy(payload.inputStream, out)
         out.close()
     else:
         response.setStatus(404)
         writer = response.getPrintWriter("text/plain")
         writer.println("Not found: uri='%s'" % uri)
         writer.close()
    def getContent(self, oid, metadata):
        # Get the object
        object = Services.getStorage().getObject(oid)
        if object is None:
            return ""

        # Get the preview/source payload
        pid = metadata.getFirst("preview")
        if pid is None:
            pid = object.getSourceId()
        if pid is None:
            return ""
        payload = object.getPayload(object.getSourceId())
        if payload is None:
            return ""

        # Stream the content out to string
        out = ByteArrayOutputStream()
        IOUtils.copy(payload.open(), out)
        payload.close()
        string = out.toString("UTF-8")

        return "<pre>" + StringEscapeUtils.escapeHtml(string) + "</pre>"
Exemple #27
0
    def getContent(self, oid, metadata):
        # Get the object
        object = Services.getStorage().getObject(oid)
        if object is None:
            return ""

        # Get the preview/source payload
        pid = metadata.getFirst("preview")
        if pid is None:
            pid = object.getSourceId()
        if pid is None:
            return ""
        payload = object.getPayload(object.getSourceId())
        if payload is None:
            return ""

        # Stream the content out to string
        out = ByteArrayOutputStream()
        IOUtils.copy(payload.open(), out)
        payload.close()
        string = out.toString("UTF-8")

        return "<pre>" + StringEscapeUtils.escapeHtml(string) + "</pre>"
Exemple #28
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()
    def __createEpub(self):
        title = self.__manifest.getString(None, "title")

        self.vc("response").setHeader(
            "Content-Disposition",
            "attachment; filename=%s.epub" % urllib.quote(title))
        out = self.vc("response").getOutputStream("application/epub+zip")
        zipOutputStream = ZipOutputStream(out)

        #save mimetype... and the rest of standard files in epub
        zipOutputStream.putNextEntry(ZipEntry("mimetype"))
        epubMimetypeStream = self.__getResourceAsStream("/epub/mimetype")
        IOUtils.copy(epubMimetypeStream, zipOutputStream)
        zipOutputStream.closeEntry()

        zipOutputStream.putNextEntry(ZipEntry("META-INF/container.xml"))
        epubContainerStream = self.__getResourceAsStream("/epub/container.xml")
        IOUtils.copy(epubContainerStream, zipOutputStream)
        zipOutputStream.closeEntry()

        zipOutputStream.putNextEntry(ZipEntry("OEBPS/epub.css"))
        epubcss = self.__getResourceAsStream("/epub/epub.css")
        IOUtils.copy(epubcss, zipOutputStream)
        zipOutputStream.closeEntry()

        #### Creating toc.ncx ####
        tocXml = ElementTree.Element(
            "ncx", {
                "version": "2005-1",
                "xml:lang": "en",
                "xmlns": "http://www.daisy.org/z3986/2005/ncx/"
            })
        headNode = ElementTree.Element("head")
        tocXml.append(headNode)

        headNode.append(
            ElementTree.Element("meta", {
                "name": "dtb:uid",
                "content": "1"
            }))
        headNode.append(
            ElementTree.Element("meta", {
                "name": "dtb:depth",
                "content": "1"
            }))
        headNode.append(
            ElementTree.Element("meta", {
                "name": "dtb:totalPageCount",
                "content": "1"
            }))
        headNode.append(
            ElementTree.Element("meta", {
                "name": "dtb:maxPageNumber",
                "content": "1"
            }))
        headNode.append(
            ElementTree.Element("meta", {
                "name": "dtb:generator",
                "content": "ICE v2"
            }))

        #docTitle
        docTitle = ElementTree.Element("docTitle")
        textNode = ElementTree.Element("text")
        textNode.text = title
        docTitle.append(textNode)
        tocXml.append(docTitle)

        #docAuthor
        docAuthor = ElementTree.Element("docAuthor")
        textNode = ElementTree.Element("text")
        textNode.text = "ICE v2"
        docAuthor.append(textNode)
        tocXml.append(docAuthor)

        #navMap
        navMap = ElementTree.Element("navMap")
        tocXml.append(navMap)

        #### Creating content.opf ####
        contentXml = ElementTree.Element(
            "package", {
                "version": "2.0",
                "xmlns": "http://www.idpf.org/2007/opf",
                "unique-identifier": "BookId"
            })

        metadataNode = ElementTree.Element(
            "metadata", {
                "xmlns:dc": "http://purl.org/dc/elements/1.1/",
                "xmlns:opf": "http://www.idpf.org/2007/opf"
            })
        contentXml.append(metadataNode)

        #metadata information
        metadata = ElementTree.Element("dc:title")
        metadata.text = title
        metadataNode.append(metadata)

        metadata = ElementTree.Element("dc:language")
        metadata.text = "en-AU"
        metadataNode.append(metadata)

        metadata = ElementTree.Element("dc:creator", {"opf:role": "aut"})
        metadata.text = "ICE"
        metadataNode.append(metadata)

        metadata = ElementTree.Element("dc:publisher")
        metadata.text = "University of Southern Queensland"
        metadataNode.append(metadata)

        metadata = ElementTree.Element("dc:identifier", {"id": "BookId"})
        metadata.text = title
        metadataNode.append(metadata)

        #manifest
        manifest = ElementTree.Element("manifest")
        contentXml.append(manifest)

        spine = ElementTree.Element("spine", {"toc": "ncx"})
        contentXml.append(spine)

        item = ElementTree.Element("item", {
            "id": "ncx",
            "href": "toc.ncx",
            "media-type": "text/xml"
        })
        manifest.append(item)
        css = ElementTree.Element("item", {
            "id": "style",
            "href": "epub.css",
            "media-type": "text/css"
        })
        manifest.append(css)

        count = 1
        for itemHash in self.__orderedItem:
            id, title, htmlFileName, payloadDict, isImage = self.__itemRefDict[
                itemHash]

            for payloadId in payloadDict:
                payload, payloadType = payloadDict[payloadId]
                if isinstance(payload, Payload):
                    payloadId = payloadId.lower()
                    zipEntryId = payloadId.replace(" ", "_").replace("\\", "/")
                    if payloadType == "application/xhtml+xml":
                        zipOutputStream.putNextEntry(
                            ZipEntry("OEBPS/%s" % zipEntryId))
                        ##process the html....
                        saxReader = SAXReader(False)
                        try:
                            saxDoc = saxReader.read(payload.open())
                            payload.close()
                            #                            ## remove class or style nodes
                            #                            classOrStyleNodes = saxDoc.selectNodes("//@class | //@style ")
                            #                            for classOrStyleNode in classOrStyleNodes:
                            #                                node = classOrStyleNode
                            #                                if classOrStyleNode.getParent():
                            #                                    node = classOrStyleNode.getParent()
                            #                                if node.getQualifiedName() == "img":
                            #                                    attr = node.attribute(QName("class"))
                            #                                    attr = node.attribute(QName("class"))
                            #                                    if attr:
                            #                                        node.remove(attr)
                            #                                    attr = node.attribute(QName("style"))
                            #                                    if attr:
                            #                                        node.remove(attr)

                            ## remove name in a tags
                            ahrefs = saxDoc.selectNodes(
                                "//*[local-name()='a' and @name!='']")
                            for a in ahrefs:
                                attr = a.attribute(QName("name"))
                                if attr:
                                    a.remove(attr)

                            ## fix images src name.... replace space with underscore and all lower case
                            imgs = saxDoc.selectNodes(
                                "//*[local-name()='img' and contains(@src, '_files')]"
                            )
                            for img in imgs:
                                srcAttr = img.attribute(QName("src"))
                                if srcAttr:
                                    src = srcAttr.getValue()
                                    #hash the sourcename
                                    filepath, filename = os.path.split(src)
                                    filename, ext = os.path.splitext(filename)
                                    filename = hashlib.md5(
                                        filename).hexdigest()
                                    src = os.path.join(
                                        filepath.lower().replace(" ", "_"),
                                        "node-%s%s" % (filename, ext))
                                    img.addAttribute(QName("src"),
                                                     src.replace(" ", "_"))

                            bodyNode = saxDoc.selectSingleNode(
                                "//*[local-name()='div' and @class='body']")
                            bodyNode.setName("div")

                            out = ByteArrayOutputStream()
                            format = OutputFormat.createPrettyPrint()
                            format.setSuppressDeclaration(True)
                            writer = XMLWriter(out, format)
                            writer.write(bodyNode)
                            writer.flush()
                            contentStr = out.toString("UTF-8")

                            htmlString = """<?xml version="1.0" encoding="UTF-8"?>
                                            <html xmlns="http://www.w3.org/1999/xhtml"><head><title>%s</title>
                                            <link rel="stylesheet" href="epub.css"/>
                                            </head><body>%s</body></html>"""
                            htmlString = htmlString % (title, contentStr)
                            self.__copyString(htmlString, zipOutputStream)
                            includeFile = False
                        except:
                            traceback.print_exc()
                    else:
                        #images....
                        zipOutputStream.putNextEntry(
                            ZipEntry("OEBPS/%s" % zipEntryId))
                        IOUtils.copy(payload.open(), zipOutputStream)
                        payload.close()
                        zipOutputStream.closeEntry()
                else:
                    zipOutputStream.putNextEntry(
                        ZipEntry("OEBPS/%s" % zipEntryId))
                    IOUtils.copy(payload, zipOutputStream)
                    zipOutputStream.closeEntry()

                itemNode = ElementTree.Element("item", {
                    "media-type": payloadType,
                    "href": zipEntryId
                })
                if payloadId == htmlFileName.lower():
                    itemNode.set("id", itemHash)
                else:
                    itemNode.set("id", payloadId.replace("/", "_"))
                manifest.append(itemNode)

            if not isImage:
                navPoint = ElementTree.Element(
                    "navPoint", {
                        "class": "chapter",
                        "id": "%s" % itemHash,
                        "playOrder": "%s" % count
                    })
            else:
                navPoint = ElementTree.Element(
                    "navPoint", {
                        "class": "chapter",
                        "id": "%s" % htmlFileName,
                        "playOrder": "%s" % count
                    })
            navMap.append(navPoint)
            navLabel = ElementTree.Element("navLabel")
            navPoint.append(navLabel)
            textNode = ElementTree.Element("text")
            textNode.text = title
            navLabel.append(textNode)
            content = ElementTree.Element("content")
            navPoint.append(content)
            content.set("src", htmlFileName)
            count += 1

            itemRefNode = ElementTree.Element("itemref")
            spine.append(itemRefNode)
            itemRefNode.set("idref", itemHash)

        #saving content.opf...
        zipOutputStream.putNextEntry(ZipEntry("OEBPS/content.opf"))
        self.__copyString(ElementTree.tostring(contentXml), zipOutputStream)
        zipOutputStream.closeEntry()

        #saving toc.ncx
        zipOutputStream.putNextEntry(ZipEntry("OEBPS/toc.ncx"))
        self.__copyString(ElementTree.tostring(tocXml), zipOutputStream)
        zipOutputStream.closeEntry()

        zipOutputStream.close()
Exemple #30
0
# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#

from java.lang import ClassLoader
from java.io import InputStreamReader, BufferedReader, OutputStreamWriter, FileOutputStream, File
import java.lang.Byte
import jarray
import subprocess
import os
import array
from org.apache.commons.io import IOUtils

print "We are in python"
fileStream = File("output")

inStream = ClassLoader.getSystemClassLoader().getResourceAsStream(
    "exec/go/hello")
out = FileOutputStream(fileStream)
IOUtils.copy(inStream, out)
fileStream.setExecutable(True)
out.flush()
out.close()
function_call = subprocess.Popen(["./output"],
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
output = function_call.stdout.read()
print output
# print(function_call)
 #Check if object exist
 objectResult = restClient.findObjects(fedoraId, 1)
 if not objectResult.getObjectFields().isEmpty():
     try:
         mimeType = payload.getContentType()
         formatURI = None
         dsLocation = None
         dsState = "A"
         #Check if datastream exist
         print "Getting datastream for: ", value
         found, foundDs = checkIfDsExist(apim, fedoraId, value, dsState)
         if found:
             print " * Modifying: '%s'" % value
             f = File.createTempFile("fedora-", ".xml")
             fOut = FileOutputStream(f)
             IOUtils.copy(payload.open(), fOut)
             payload.close()
             fOut.close()
             dsLocation = client.uploadFile(f)
             dsId = apim.modifyDatastreamByReference(fedoraId, foundDs.getID(), foundDs.getAltIDs(), foundDs.getLabel(), \
                                              mimeType, foundDs.getFormatURI(), dsLocation, foundDs.getChecksumType(), foundDs.getChecksum(), \
                                              "Updating datastream from Fascinator", True)
             print " * Modified: '%s'" % dsId
         else:
             print " * Adding: '%s'" % value
             f = File.createTempFile("fedora-", ".xml")
             fOut = FileOutputStream(f)
             IOUtils.copy(payload.open(), fOut)
             payload.close()
             fOut.close()
             dsLocation = client.uploadFile(f)
Exemple #32
0
    def run(self):
        try:
            count = 0
            if self.createBaseTables:
                count += 7
            if self.createDicTables:
                count += len(getDictionaryNames())
            if self.loadDics:
                count += len(getDictionaryNames())
            if self.createWorkspace:
                count += 7 + len(getDictionaryNames())

            self.status.setRangeOfValues(0, count)
            self.status.setCurValue(0)

            dataManager = DALLocator.getDataManager()
            workspace = dataManager.createDatabaseWorkspaceManager(
                self.connection)
            server = workspace.getServerExplorer()

            if self.createWorkspace:
                self.status.message("Creando espacio de trabajo")
                workspace.create("ARENA2_DB", "ARENA2 (db)")
                workspace.set("TRAMOS_CARRETERAS_NAME", "TRAMOS_CARRETERAS")
                workspace.set("TRAMOS_CARRETERAS_SCHEMA", "layers")
            if self.createBaseTables:
                self.status.message("Creando ARENA2_ACCIDENTES")
                params = server.getAddParameters("ARENA2_ACCIDENTES")
                ft = params.getDefaultFeatureType()
                add_attributes_ARENA2_ACCIDENTES(ft)
                add_import_attr_ARENA2_ACCIDENTES(ft)
                server.add("ARENA2_ACCIDENTES", params, False)
                self.status.incrementCurrentValue()
                for tableName, add_attributes, add_attributes_importer in (
                    ("ARENA2_CONDUCTORES", add_attributes_ARENA2_CONDUCTORES,
                     None), ("ARENA2_CROQUIS", add_attributes_ARENA2_CROQUIS,
                             None), ("ARENA2_INFORMES",
                                     add_attributes_ARENA2_INFORMES, None),
                    ("ARENA2_PASAJEROS", add_attributes_ARENA2_PASAJEROS,
                     None), ("ARENA2_PEATONES", add_attributes_ARENA2_PEATONES,
                             None), ("ARENA2_VEHICULOS",
                                     add_attributes_ARENA2_VEHICULOS, None),
                    ("AFOROS_MEDIDAS", add_attributes_medidas, None),
                    ("AFOROS_ESTACIONES", add_attributes_estaciones, None)):
                    self.status.message("Creando " + tableName)
                    params = server.getAddParameters(tableName)
                    ft = params.getDefaultFeatureType()

                    add_attributes(ft)
                    if add_attributes_importer != None:
                        add_attributes_importer(ft)
                    server.add(tableName, params, False)
                    self.status.incrementCurrentValue()

                server.execute(load_file("AC_VE_CO_PA_PE_CR.sql"))

            if self.createDicTables:
                for tableName in getDictionaryNames():
                    self.status.message("Creando " + tableName)
                    self.status.incrementCurrentValue()
                    parameters = getOpenStoreParametersOfDictionary(tableName)
                    addparams = server.getAddParameters(tableName)
                    ft = addparams.getDefaultFeatureType()
                    store = dataManager.openStore(parameters.getProviderName(),
                                                  parameters)
                    ft.copyFrom(store.getDefaultFeatureType())
                    store.dispose()
                    server.add(tableName, addparams, False)

            if self.loadDics:
                for tableName in getDictionaryNames():
                    self.status.message("Importando " + tableName)
                    self.status.incrementCurrentValue()
                    params_src = getOpenStoreParametersOfDictionary(tableName)
                    params_dst = server.get(tableName)
                    store_src = dataManager.openStore(
                        params_src.getProviderName(), params_src)
                    store_dst = dataManager.openStore(
                        params_dst.getProviderName(), params_dst)
                    store_src.copyTo(store_dst)
                    store_src.dispose()
                    store_dst.dispose()

            if self.createWorkspace:
                self.status.message("Actualizando espacio de trabajo")
                for tableName in ("ARENA2_ACCIDENTES", "ARENA2_CONDUCTORES",
                                  "ARENA2_CROQUIS", "ARENA2_INFORMES",
                                  "ARENA2_PASAJEROS", "ARENA2_PEATONES",
                                  "ARENA2_VEHICULOS", "AFOROS_MEDIDAS",
                                  "AFOROS_ESTACIONES",
                                  "ARENA2_AC_VE_CO_PA_PE_CR"):
                    self.status.message("Actualizando espacio de trabajo (" +
                                        tableName + ")")
                    self.status.incrementCurrentValue()
                    params = server.get(tableName)
                    workspace.writeStoresRepositoryEntry(tableName, params)

                    resourcesStorage_src = getResourcesStorage(tableName)
                    resourcesStorage_dst = server.getResourcesStorage(params)
                    #print "recursos de ",repr(tableName), repr(getResourceNames(tableName))
                    for resourceName in getResourceNames(tableName):
                        self.status.message(
                            "Actualizando espacio de trabajo (%s/%s)" %
                            (tableName, resourceName))
                        resource_src = resourcesStorage_src.getResource(
                            resourceName)
                        resource_dst = resourcesStorage_dst.getResource(
                            resourceName)
                        IOUtils.copy(resource_src.asInputStream(),
                                     resource_dst.asOutputStream())
                        resource_src.close()
                        resource_dst.close()

                for tableName in getDictionaryNames():
                    self.status.message("Actualizando espacio de trabajo (" +
                                        tableName + ")")
                    self.status.incrementCurrentValue()
                    params = server.get(tableName)
                    workspace.writeStoresRepositoryEntry(tableName, params)

                dataManager.addDatabaseWorkspace(workspace)

                #factorias de las reglas, va llamando al selfconfigure
                # self.connection pasarselo JDBCServerExplorerParameters

                #factorias de las transformacioens
                # self.connection pasarselo JDBCServerExplorerParameters

                self.status.incrementCurrentValue()

            self.status.message("Creacion completada")
            self.status.terminate()

        except java.lang.Exception, ex:
            logger("Error creating tables. " + str(ex), LOGGER_WARN, ex)
            self.status.abort()
Exemple #33
0
 def addStream(self, name, s):
     self.zipOutputStream.putNextEntry(ZipEntry(name))
     IOUtils.copy(s, self.zipOutputStream)
     self.zipOutputStream.closeEntry()
Exemple #34
0
 def __getPayloadAsString(self, payload):
     sw = StringWriter()
     IOUtils.copy(payload.getInputStream(), sw)
     sw.flush()
     return sw.toString()
Exemple #35
0
 def addStream(self, name, s):
     self.zipOutputStream.putNextEntry(ZipEntry(name))
     IOUtils.copy(s, self.zipOutputStream)
     self.zipOutputStream.closeEntry()
Exemple #36
0
    def __createEpub(self):
        title = self.__manifest.get("title")
        
        response.setHeader("Content-Disposition", "attachment; filename=%s.epub" %  urllib.quote(title))
        out = response.getOutputStream("application/epub+zip")
        zipOutputStream = ZipOutputStream(out)
        
        #save mimetype... and the rest of standard files in epub
        zipOutputStream.putNextEntry(ZipEntry("mimetype"))
        epubMimetypeStream = self.__getResourceAsStream("/epub/mimetype")
        IOUtils.copy(epubMimetypeStream, zipOutputStream)
        zipOutputStream.closeEntry()
        
        zipOutputStream.putNextEntry(ZipEntry("META-INF/container.xml"))
        epubContainerStream = self.__getResourceAsStream("/epub/container.xml")
        IOUtils.copy(epubContainerStream, zipOutputStream)
        zipOutputStream.closeEntry()

        zipOutputStream.putNextEntry(ZipEntry("OEBPS/epub.css"))
        epubcss = self.__getResourceAsStream("/epub/epub.css")
        IOUtils.copy(epubcss, zipOutputStream)
        zipOutputStream.closeEntry()
        
        #### Creating toc.ncx ####
        tocXml = ElementTree.Element("ncx", {"version": "2005-1", "xml:lang":"en", "xmlns":"http://www.daisy.org/z3986/2005/ncx/"})
        headNode = ElementTree.Element("head")
        tocXml.append(headNode)
        
        headNode.append(ElementTree.Element("meta", {"name": "dtb:uid", "content": "1"}))
        headNode.append(ElementTree.Element("meta", {"name": "dtb:depth", "content": "1"}))
        headNode.append(ElementTree.Element("meta", {"name": "dtb:totalPageCount", "content": "1"}))
        headNode.append(ElementTree.Element("meta", {"name": "dtb:maxPageNumber", "content": "1"}))
        headNode.append(ElementTree.Element("meta", {"name": "dtb:generator", "content": "ICE v2"}))
        
        #docTitle
        docTitle = ElementTree.Element("docTitle")
        textNode = ElementTree.Element("text")
        textNode.text = title
        docTitle.append(textNode)
        tocXml.append(docTitle)
        
        #docAuthor
        docAuthor = ElementTree.Element("docAuthor")
        textNode = ElementTree.Element("text")
        textNode.text = "ICE v2"
        docAuthor.append(textNode)
        tocXml.append(docAuthor)
        
        #navMap
        navMap = ElementTree.Element("navMap")
        tocXml.append(navMap)
        
        #### Creating content.opf ####
        contentXml = ElementTree.Element("package", {"version": "2.0", "xmlns":"http://www.idpf.org/2007/opf",
                                                     "unique-identifier":"BookId"})
        
        metadataNode = ElementTree.Element("metadata", {"xmlns:dc": "http://purl.org/dc/elements/1.1/", 
                                                        "xmlns:opf": "http://www.idpf.org/2007/opf"})
        contentXml.append(metadataNode)
        
        #metadata information
        metadata = ElementTree.Element("dc:title")
        metadata.text = title
        metadataNode.append(metadata)
        
        metadata = ElementTree.Element("dc:language")
        metadata.text = "en-AU"
        metadataNode.append(metadata)
        
        metadata = ElementTree.Element("dc:creator", {"opf:role":"aut"})
        metadata.text = "ICE"
        metadataNode.append(metadata)
        
        metadata = ElementTree.Element("dc:publisher")
        metadata.text = "University of Southern Queensland"
        metadataNode.append(metadata)
        
        metadata = ElementTree.Element("dc:identifier", {"id":"BookId"})
        metadata.text = title
        metadataNode.append(metadata)
        
        #manifest
        manifest = ElementTree.Element("manifest")
        contentXml.append(manifest)
        
        spine = ElementTree.Element("spine", {"toc":"ncx"})
        contentXml.append(spine)
        
        item = ElementTree.Element("item", {"id":"ncx", "href":"toc.ncx", "media-type":"text/xml"})
        manifest.append(item)
        css = ElementTree.Element("item", {"id":"style", "href":"epub.css", "media-type":"text/css"})
        manifest.append(css)
        
        count = 1
        for itemHash in self.__orderedItem:
            id, title, htmlFileName, payloadDict, isImage = self.__itemRefDict[itemHash]
            
            for payloadId in payloadDict:
                payload, payloadType = payloadDict[payloadId]
                if isinstance(payload, Payload):
                    payloadId = payloadId.lower()
                    zipEntryId = payloadId.replace(" ", "_").replace("\\", "/")
                    if payloadType == "application/xhtml+xml":
                        zipOutputStream.putNextEntry(ZipEntry("OEBPS/%s" % zipEntryId))
                        ##process the html....
                        saxReader = SAXReader(False)
                        try:
                            saxDoc = saxReader.read(payload.open())
                            payload.close()
#                            ## remove class or style nodes
#                            classOrStyleNodes = saxDoc.selectNodes("//@class | //@style ")
#                            for classOrStyleNode in classOrStyleNodes:
#                                node = classOrStyleNode
#                                if classOrStyleNode.getParent():
#                                    node = classOrStyleNode.getParent()
#                                if node.getQualifiedName() == "img":
#                                    attr = node.attribute(QName("class"))
#                                    attr = node.attribute(QName("class"))
#                                    if attr:
#                                        node.remove(attr)
#                                    attr = node.attribute(QName("style"))
#                                    if attr:
#                                        node.remove(attr)
                                    
                            ## remove name in a tags
                            ahrefs = saxDoc.selectNodes("//*[local-name()='a' and @name!='']")
                            for a in ahrefs:
                                attr = a.attribute(QName("name"))
                                if attr:
                                    a.remove(attr)
                                    
                            ## fix images src name.... replace space with underscore and all lower case
                            imgs = saxDoc.selectNodes("//*[local-name()='img' and contains(@src, '_files')]")
                            for img in imgs:
                                srcAttr = img.attribute(QName("src"))
                                if srcAttr:
                                    src = srcAttr.getValue()
                                    #hash the sourcename
                                    filepath, filename = os.path.split(src)
                                    filename, ext = os.path.splitext(filename)
                                    filename = hashlib.md5(filename).hexdigest()
                                    src = os.path.join(filepath.lower().replace(" ", "_"), "node-%s%s" % (filename, ext))
                                    img.addAttribute(QName("src"), src.replace(" ", "_"))
                                
                            bodyNode = saxDoc.selectSingleNode("//*[local-name()='div' and @class='body']")
                            bodyNode.setName("div")
                            
                            out = ByteArrayOutputStream()
                            format = OutputFormat.createPrettyPrint()
                            format.setSuppressDeclaration(True)
                            writer = XMLWriter(out, format)
                            writer.write(bodyNode)
                            writer.flush()
                            contentStr = out.toString("UTF-8")
                            
                            htmlString = """<?xml version="1.0" encoding="UTF-8"?>
                                            <html xmlns="http://www.w3.org/1999/xhtml"><head><title>%s</title>
                                            <link rel="stylesheet" href="epub.css"/>
                                            </head><body>%s</body></html>"""
                            htmlString = htmlString % (title, contentStr)
                            self.__copyString(htmlString, zipOutputStream)
                            includeFile = False
                        except:
                            traceback.print_exc()
                    else:
                        #images....
                        zipOutputStream.putNextEntry(ZipEntry("OEBPS/%s" % zipEntryId))
                        IOUtils.copy(payload.open(), zipOutputStream)
                        payload.close()
                        zipOutputStream.closeEntry()
                else:
                    zipOutputStream.putNextEntry(ZipEntry("OEBPS/%s" % zipEntryId))
                    IOUtils.copy(payload, zipOutputStream)
                    zipOutputStream.closeEntry()
                
                itemNode = ElementTree.Element("item", {"media-type":payloadType, "href": zipEntryId})  
                if payloadId == htmlFileName.lower():
                    itemNode.set("id", itemHash)
                else:
                    itemNode.set("id", payloadId.replace("/", "_"))                  
                manifest.append(itemNode)
                
            if not isImage: 
                navPoint = ElementTree.Element("navPoint", {"class":"chapter", "id":"%s" % itemHash, 
                                                                "playOrder":"%s" % count})
            else:
                navPoint = ElementTree.Element("navPoint", {"class":"chapter", "id":"%s" % htmlFileName, 
                                                                "playOrder":"%s" % count})
            navMap.append(navPoint)
            navLabel = ElementTree.Element("navLabel")
            navPoint.append(navLabel)
            textNode = ElementTree.Element("text")
            textNode.text = title
            navLabel.append(textNode)
            content = ElementTree.Element("content")
            navPoint.append(content)
            content.set("src", htmlFileName)
            count +=1
                
            itemRefNode = ElementTree.Element("itemref")
            spine.append(itemRefNode)
            itemRefNode.set("idref", itemHash)
                
        #saving content.opf...
        zipOutputStream.putNextEntry(ZipEntry("OEBPS/content.opf"))
        self.__copyString(ElementTree.tostring(contentXml), zipOutputStream)
        zipOutputStream.closeEntry()
        
        #saving toc.ncx
        zipOutputStream.putNextEntry(ZipEntry("OEBPS/toc.ncx"))
        self.__copyString(ElementTree.tostring(tocXml), zipOutputStream)
        zipOutputStream.closeEntry()
        
        zipOutputStream.close()
Exemple #37
0
 def __copyString(self, s, out):
     IOUtils.copy(IOUtils.toInputStream(String(s), "UTF-8"), out)
Exemple #38
0
    def __processRequest(self):
        depositUrl = "%s/sword/deposit.post" % portalPath
        sword = SwordSimpleServer(depositUrl)
        try:
            p = self.vc("request").path.split(
                self.vc("portalId") + "/" + self.vc("pageName") +
                "/")[1]  # portalPath
        except:
            p = ""
        if p == "post":
            print "\n--- post ---"
            c = sword.getClient()
            c.clearProxy()
            c.clearCredentials()
            postMsg = sword.getPostMessage()
            postMsg.filetype = "application/zip"
            postMsg.filepath = "/home/ward/Desktop/Test.zip"
            depositResponse = c.postFile(postMsg)
            return str(depositResponse)
        elif p == "servicedocument":
            #print "\n--- servicedocument ---"
            sdr = sword.getServiceDocumentRequest()
            sdr.username = self.vc("formData").get("username", "test")
            sdr.password = self.vc("formData").get("password", "test")
            if self.vc("formData").get("test"):
                depositUrl += "?test=1"
            sd = sword.doServiceDocument(sdr)  # get a serviceDocument
            out = self.vc("response").getPrintWriter("text/xml; charset=UTF-8")
            out.println(str(sd))
            out.close()
            self.velocityContext["pageName"] = "-noTemplate-"
            return sd
        elif p == "deposit.post":
            #print "\n--- deposit ---  formData='%s'" % str(formData)
            inputStream = self.vc("formData").getInputStream()
            headers = {}
            for x in self.vc("formData").getHeaders().entrySet():
                headers[x.getKey()] = x.getValue()
            deposit = sword.getDeposit()
            noOp = headers.get("X-No-Op") or "false"
            deposit.noOp = (noOp.lower()=="true") or \
                (formData.get("test") is not None)
            contentDisposition = headers.get("Content-Disposition", "")
            filename = ""
            if contentDisposition != "":
                try:
                    filename = contentDisposition.split("filename=")[1]
                    deposit.filename = filename
                except:
                    pass
            slug = headers.get("Slug")
            if slug is not None and slug != "":
                deposit.slug = slug
            #elif filename!="":
            #    deposit.slug = filename

            deposit.username = "******"
            deposit.password = deposit.username
            try:
                file = File.createTempFile("tmptf", ".zip")
                file.deleteOnExit()
                fos = FileOutputStream(file.getAbsolutePath())
                IOUtils.copy(inputStream, fos)
                fos.close()
                print "copied posted data to '%s'" % file.getAbsolutePath()
            except Exception, e:
                print "--- Exception - '%s'" % str(e)
            deposit.contentDisposition = file.getAbsolutePath()  #????
            deposit.file = inputStream
            depositResponse = sword.doDeposit(deposit)
            id = str(depositResponse.getEntry().id)
            try:
                print
                #imsPlugin = PluginManager.getTransformer("ims")
                jsonConfig = JsonConfig()
                #imsPlugin.init(jsonConfig.getSystemFile())
                #harvestClient = HarvestClient(jsonConfig.getSystemFile());
                storagePlugin = PluginManager.getStorage(
                    jsonConfig.get("storage/type"))
                #storagePlugin.init(jsonConfig.getSystemFile())

                setConfigUri = self.__getPortal().getClass().getResource(
                    "/swordRule.json").toURI()
                configFile = File(setConfigUri)
                harvestConfig = JsonConfigHelper(configFile)
                tFile = File.createTempFile("harvest", ".json")
                tFile.deleteOnExit()
                harvestConfig.set("configDir", configFile.getParent())
                harvestConfig.set("sourceFile", file.getAbsolutePath())
                harvestConfig.store(FileWriter(tFile))

                zipObject = GenericDigitalObject(id)
                zipObject.addPayload(FilePayload(file, id))
                #digitalObject = imsPlugin.transform(zipObject, file)
                qStorage = QueueStorage(storagePlugin, tFile)
                qStorage.init(jsonConfig.getSystemFile())
                qStorage.addObject(zipObject)
                if deposit.noOp:
                    print "-- Testing noOp='true' --"
                else:
                    # deposit the content
                    pass
            except Exception, e:
                print "---"
                print " -- Exception - '%s'" % str(e)
                print "---"
Exemple #39
0
    def __processRequest(self):
        baseUrl = "http://%s:%s%s/%s" % (request.serverName, serverPort, contextPath, portalId)
        depositUrl = "%s/sword/deposit.post" % baseUrl
        sword = SwordSimpleServer(depositUrl)
        try:
            p =  request.path.split(portalId+"/"+pageName+"/")[1]  # portalPath
        except:
            p = ""
        if p=="post":
            print "\n--- post ---"
            c = sword.getClient()
            c.clearProxy()
            c.clearCredentials()
            postMsg = sword.getPostMessage();
            postMsg.filetype = "application/zip"
            postMsg.filepath = "/home/ward/Desktop/Test.zip"
            depositResponse = c.postFile(postMsg)
            return str(depositResponse)
        elif p=="servicedocument":
            #print "\n--- servicedocument ---"
            sdr = sword.getServiceDocumentRequest()
            sdr.username = formData.get("username", "test")
            sdr.password = formData.get("password", "test")
            if formData.get("test"):
                depositUrl += "?test=1"
            sd = sword.doServiceDocument(sdr)  # get a serviceDocument
            out = response.getPrintWriter("text/xml")
            out.println(str(sd))
            out.close()
            bindings["pageName"] = "-noTemplate-"
            return sd
        elif p=="deposit.post":
            #print "\n--- deposit ---  formData='%s'" % str(formData)
            inputStream = formData.getInputStream()
            headers = {}
            for x in formData.getHeaders().entrySet():
                headers[x.getKey()] = x.getValue()
            deposit = sword.getDeposit()
            noOp = headers.get("X-No-Op") or "false"
            deposit.noOp = (noOp.lower()=="true") or \
                (formData.get("test") is not None)
            contentDisposition = headers.get("Content-Disposition", "")
            filename = ""
            if contentDisposition!="":
                try:
                    filename = contentDisposition.split("filename=")[1]
                    deposit.filename = filename
                except: pass
            slug = headers.get("Slug")
            if slug is not None and slug!="":
                deposit.slug = slug
            #elif filename!="":
            #    deposit.slug = filename

            deposit.username = "******"
            deposit.password = deposit.username
            try:
                file = File.createTempFile("tmptf", ".zip")
                file.deleteOnExit()
                fos = FileOutputStream(file.getAbsolutePath())
                IOUtils.copy(inputStream, fos)
                fos.close()
                print "copied posted data to '%s'" % file.getAbsolutePath()
            except Exception, e:
                print "--- Exception - '%s'" % str(e)
            deposit.contentDisposition = file.getAbsolutePath()         #????
            deposit.file = inputStream
            depositResponse = sword.doDeposit(deposit)
            id = str(depositResponse.getEntry().id)
            try:
                print
                #imsPlugin = PluginManager.getTransformer("ims")
                jsonConfig = JsonConfig()
                #imsPlugin.init(jsonConfig.getSystemFile())
                #harvestClient = HarvestClient(jsonConfig.getSystemFile());
                storagePlugin = PluginManager.getStorage(jsonConfig.get("storage/type"))
                #storagePlugin.init(jsonConfig.getSystemFile())

                setConfigUri = self.__getPortal().getClass().getResource("/swordRule.json").toURI()
                configFile = File(setConfigUri)
                harvestConfig = JsonConfigHelper(configFile);
                tFile = File.createTempFile("harvest", ".json")
                tFile.deleteOnExit()
                harvestConfig.set("configDir", configFile.getParent())
                harvestConfig.set("sourceFile", file.getAbsolutePath())
                harvestConfig.store(FileWriter(tFile))

                zipObject = GenericDigitalObject(id)
                zipObject.addPayload(FilePayload(file, id))
                #digitalObject = imsPlugin.transform(zipObject, file)
                qStorage = QueueStorage(storagePlugin, tFile)
                qStorage.init(jsonConfig.getSystemFile())
                qStorage.addObject(zipObject)
                if deposit.noOp:
                    print "-- Testing noOp='true' --"
                else:
                    # deposit the content
                    pass
            except Exception, e:
                print "---"
                print " -- Exception - '%s'" % str(e)
                print "---"
 def __copyString(self, s, out):
     IOUtils.copy(IOUtils.toInputStream(String(s), "UTF-8"), out)
Exemple #41
0
 def __getPayloadAsString(self, payload):
     out = ByteArrayOutputStream()
     IOUtils.copy(payload.open(), out)
     payload.close()
     return self.__escapeUnicode(out.toString("UTF-8"))