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
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
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
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
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
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()
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
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)
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
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>"
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
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
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 __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()
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()
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 __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()
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()
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>"
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()
# 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)
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()
def addStream(self, name, s): self.zipOutputStream.putNextEntry(ZipEntry(name)) IOUtils.copy(s, self.zipOutputStream) self.zipOutputStream.closeEntry()
def __getPayloadAsString(self, payload): sw = StringWriter() IOUtils.copy(payload.getInputStream(), sw) sw.flush() return sw.toString()
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()
def __copyString(self, s, out): IOUtils.copy(IOUtils.toInputStream(String(s), "UTF-8"), out)
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 "---"
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 __getPayloadAsString(self, payload): out = ByteArrayOutputStream() IOUtils.copy(payload.open(), out) payload.close() return self.__escapeUnicode(out.toString("UTF-8"))