public List getResourceNodes(Document manifest) { return XPathHelper.selectNodes("//resource", manifest); }
public List getTopLevelItemNodes(Document manifest) { return XPathHelper.selectNodes("//tableofcontents/item", manifest); }
public List getItemNodes(Document manifest) { return XPathHelper.selectNodes("//item", manifest); }
public List getItemNodes(Document manifest) { return XPathHelper.selectNodes("//item", manifest); }
public List getItemNodes(Document manifest) { return XPathHelper.selectNodes("//item", manifest); }
public List getTopLevelItemNodes(Document manifest) { return XPathHelper.selectNodes("//organization/item", manifest); }
public List getItemNodes(Document manifest) { return XPathHelper.selectNodes("//item", manifest); }
public List getResourceNodes(Document manifest) { return XPathHelper.selectNodes("//resource", manifest); }
public List getResourceNodes(Document manifest) { return XPathHelper.selectNodes("//resource", manifest); }
public List getResourceNodes(Document manifest) { return XPathHelper.selectNodes("//resource", manifest); }
public List getTopLevelItemNodes(Document manifest) { List items = XPathHelper.selectNodes("//organization/item", manifest); if (items != null && items.size() > 1) return items; items = XPathHelper.selectNodes("//organization/item/item", manifest); if (items != null && items.size() > 1) return items; return XPathHelper.selectNodes("//organization/item/item/item", manifest); }
public List getTopLevelItemNodes(Document manifest) { List items = XPathHelper.selectNodes("//organization/item", manifest); if (items != null && items.size() > 1) return items; items = XPathHelper.selectNodes("//organization/item/item", manifest); if (items != null && items.size() > 1) return items; return XPathHelper.selectNodes("//organization/item/item/item", manifest); }
/** * get nodes * * @param xpath * * @return list of nodes */ public final List selectNodes(String xpath) { if(log.isDebugEnabled()) { log.debug("selectNodes(String " + xpath + ")"); } return XPathHelper.selectNodes(xpath, this.document); }
/** * get nodes * * @param xpath * * @return list of nodes */ public final List selectNodes(String xpath) { if(log.isDebugEnabled()) { log.debug("selectNodes(String " + xpath + ")"); } return XPathHelper.selectNodes(xpath, this.document); }
public boolean isValidArchive(InputStream fileData) { if (super.isValidArchive(fileData)) { //TODO check for compliance with IMS 1.0 DTD Document manifest = extractFileAsDOM("/imsmanifest.xml", fileData); return (XPathHelper.selectNodes("/manifest/organizations/tableofcontents/item",manifest).size() > 0 || XPathHelper.selectNodes("/manifest/resources/resource",manifest).size() > 0 || XPathHelper.selectNodes("/manifest/organization/tableofcontents/item", manifest).size() > 0); } else return false; }
public boolean isValidArchive(InputStream fileData) { if (super.isValidArchive(fileData)) { //TODO check for compliance with IMS 1.1 DTD Document manifest = extractFileAsDOM("/imsmanifest.xml", fileData); //String head = extractFileHead("/imsmanifest.xml", fileData); // originally head.indexOf("xmlns:bb=\"http://www.blackboard.com/content-packaging/\"") >= 0 // but we've already read the whole stream, so have to get it from the document NodeList nl = manifest.getElementsByTagName("manifest"); if (nl.getLength() > 0) { Element node = (Element)nl.item(0); String url = node.getAttribute("xmlns:bb"); if (url == null || !url.equals("http://www.blackboard.com/content-packaging/")) return false; } else return false; // xmlns:bb means it's v6. However I'm worried about packages generated by other // software not being quite right. Since we're most concerned about tests, if it // has 5.5 format tests, let 5.5 deal with it. return ((XPathHelper.selectNodes("//resource[@type='assessment/x-bb-quiz']", manifest).size() + XPathHelper.selectNodes("//resource[@type='assessment/x-bb-pool']", manifest).size() + XPathHelper.selectNodes("//resource[@type='assessment/x-bb-survey']", manifest).size()) == 0 || (XPathHelper.selectNodes("//resource[@type='assessment/x-bb-qti-test']", manifest).size() + XPathHelper.selectNodes("//resource[@type='assessment/x-bb-qti-pool']", manifest).size()) > 0); // return (XPathHelper.selectNodes("/manifest/organizations/organization/item",manifest).size() > 0 // || XPathHelper.selectNodes("/manifest/resources/resource",manifest).size() > 0); } else return false; }
private List getAttachments(Node resourceNode, Document descriptor, String archiveBasePath) throws IOException { List rv = new ArrayList(); List fileNodes = XPathHelper.selectNodes("//FILEREF", descriptor); for (Iterator i = fileNodes.iterator(); i.hasNext();) { Node fileNode = (Node)i.next(); String relFile = XPathHelper.getNodeValue("./RELFILE/@value", fileNode); String filePath = archiveBasePath + "/" + XPathHelper.getNodeValue("./CONTENTID/@value", fileNode) + "/" + relFile; FileResource attachment = new FileResource(); attachment.setInputStream(new FileInputStream(filePath)); attachment.setFileName(relFile.substring(relFile.lastIndexOf("/") + 1)); rv.add(attachment); } return rv; }
public Importable translate(Node resourceNode, Document descriptor, String contextPath, String archiveBasePath) { if (resourceNode.hasChildNodes() && (resourceNode.getChildNodes().getLength() > 1)) { // this is a compound document, and it's already being handled by the Blackboard55FileParser return null; } if (XPathHelper.selectNodes("//STARTASSESSMENT", descriptor).size() > 0) { // this signifies a document that serves as a link to an assessment // these links aren't meaningful in the Sakai context return null; } String content = XPathHelper.getNodeValue("//TEXT", descriptor); String title = XPathHelper.getNodeValue("/CONTENT/TITLE", descriptor); int priority = Integer.parseInt(((Element)resourceNode).getAttribute("priority")); // HTML docs in the archive have the < character replaced with the equivalent HTML entity // Without this, the TEXT node contents would be treated as sub-nodes. content.replaceAll("<", "<"); contextPath = contextPath + title.replaceAll("/", "_"); //Validator.escapeResourceName(title); HtmlDocument html = new HtmlDocument(); html.setContent(content); html.setTitle(title); html.setContextPath(contextPath); html.setSequenceNum(priority); return html; }
protected Importable getCompanionForCompoundDocument(Document resourceDescriptor, Folder folder) { HtmlDocument html = new HtmlDocument(); StringBuffer content = new StringBuffer(); List<Node> linkFileNodes = XPathHelper.selectNodes("//FILEREF/FILEACTION[@value='link']/parent::node()", resourceDescriptor); List<Node> embedFileNodes = XPathHelper.selectNodes("//FILEREF/FILEACTION[@value='embed']/parent::node()", resourceDescriptor); String documentText = XPathHelper.getNodeValue("//TEXT", resourceDescriptor); content.append("<html>\n");
protected Importable getCompanionForCompoundDocument(Document resourceDescriptor, Folder folder) { HtmlDocument html = new HtmlDocument(); StringBuffer content = new StringBuffer(); List<Node> fileNodes = XPathHelper.selectNodes("/CONTENT/FILES/FILE", resourceDescriptor); content.append("<html>\n"); content.append(" <head><title>" + folder.getTitle() + "</title></head>\n"); content.append(" <body>\n"); content.append(" <p>" + XPathHelper.getNodeValue("/CONTENT/BODY/TEXT", resourceDescriptor) + "</p>\n"); content.append(" <table border=\"1\">\n"); for (Node fileNode : fileNodes) { String fileName = XPathHelper.getNodeValue("./NAME", fileNode); content.append(" <tr><td><a href=\""+ folder.getTitle() + "/" + fileName + "\">" + fileName + "</a></td></tr>\n"); } content.append(" </table>\n"); content.append(" </body>\n"); content.append("</html>"); html.setContent(content.toString()); html.setTitle(folder.getTitle()); html.setContextPath(folder.getPath() + folder.getTitle() + "_manifest"); html.setLegacyGroup(folder.getLegacyGroup()); // we want the html document to come before the folder in sequence html.setSequenceNum(folder.getSequenceNum() - 1); return html; }