Example usage for org.dom4j Document setRootElement

List of usage examples for org.dom4j Document setRootElement

Introduction

In this page you can find the example usage for org.dom4j Document setRootElement.

Prototype

void setRootElement(Element rootElement);

Source Link

Document

Sets the root element for this document

Usage

From source file:org.olat.core.gui.control.generic.textmarker.TextMarkerManagerImpl.java

License:Apache License

/**
 * @see org.olat.core.gui.control.generic.textmarker.TextMarkerManager#saveToFile(org.olat.core.util.vfs.VFSLeaf, java.util.List)
 *///www  .  j a  v  a2s  .  c  o  m
@Override
public void saveToFile(VFSLeaf textMarkerFile, List textMarkerList) {
    DocumentFactory df = DocumentFactory.getInstance();
    Document doc = df.createDocument();
    // create root element with version information
    Element root = df.createElement(XML_ROOT_ELEMENT);
    root.addAttribute(XML_VERSION_ATTRIBUTE, String.valueOf(VERSION));
    doc.setRootElement(root);
    // add TextMarker elements
    Iterator iter = textMarkerList.iterator();
    while (iter.hasNext()) {
        TextMarker textMarker = (TextMarker) iter.next();
        textMarker.addToElement(root);
    }
    OutputStream stream = textMarkerFile.getOutputStream(false);
    try {
        XMLWriter writer = new XMLWriter(stream);
        writer.write(doc);
        writer.close();
        stream.close();
    } catch (UnsupportedEncodingException e) {
        Tracing.logError("Error while saving text marker file", e, TextMarkerManagerImpl.class);
    } catch (IOException e) {
        Tracing.logError("Error while saving text marker file", e, TextMarkerManagerImpl.class);
    }
}

From source file:org.olat.ims.qti.qpool.QTIImportProcessor.java

License:Apache License

protected void processAssessmentFiles(QuestionItemImpl item, ItemInfos itemInfos) {
    //a package with an item
    String dir = item.getDirectory();
    String rootFilename = item.getRootFilename();
    VFSContainer container = qpoolFileStorage.getContainer(dir);
    VFSLeaf endFile = container.createChildLeaf(rootFilename);

    //embed in <questestinterop>
    DocumentFactory df = DocumentFactory.getInstance();
    Document itemDoc = df.createDocument();
    Element questestinteropEl = df.createElement(QTIDocument.DOCUMENT_ROOT);
    itemDoc.setRootElement(questestinteropEl);
    Element deepClone = (Element) itemInfos.getItemEl().clone();
    questestinteropEl.add(deepClone);//from w  ww  .j  av a 2s .  c  om

    //write
    try {
        OutputStream os = endFile.getOutputStream(false);
        ;
        XMLWriter xw = new XMLWriter(os, new OutputFormat("  ", true));
        xw.write(itemDoc.getRootElement());
        xw.close();
        os.close();
    } catch (IOException e) {
        log.error("", e);
    }

    //there perhaps some other materials
    if (importedFilename.toLowerCase().endsWith(".zip")) {
        processAssessmentMaterials(deepClone, container);
    }
}

From source file:org.olat.ims.qti.render.ResultsBuilder.java

License:Apache License

/**
 * Method getResDoc./*from w  w w.  jav  a  2s.  co m*/
 * 
 * @param ai The assessment instance
 * @param locale The users locale
 * @param identity
 * @return Document The XML document
 */
public Document getResDoc(final AssessmentInstance ai, final Locale locale, final Identity identity) {
    final AssessmentContext ac = ai.getAssessmentContext();
    final DocumentFactory df = DocumentFactory.getInstance();
    final Document res_doc = df.createDocument();
    final Element root = df.createElement("qti_result_report");
    res_doc.setRootElement(root);
    final Element result = root.addElement("result");
    final Element extension_result = result.addElement("extension_result");

    // add items (not qti standard, but nice to display original questions ->
    // put it into extensions)
    // extension_result.
    final int sectioncnt = ac.getSectionContextCount();
    for (int i = 0; i < sectioncnt; i++) {
        final SectionContext sc = ac.getSectionContext(i);
        final int itemcnt = sc.getItemContextCount();
        for (int j = 0; j < itemcnt; j++) {
            final ItemContext it = sc.getItemContext(j);
            final Element el_item = it.getEl_item();
            extension_result.add(el_item);
        }
    }

    // add ims cp id for any media references
    addStaticsPath(extension_result, ai);

    // add assessment_result

    // Add User information
    final Element context = result.addElement("context");
    final User user = identity.getUser();
    final String name = user.getProperty(UserConstants.LASTNAME, locale) + " "
            + user.getProperty(UserConstants.FIRSTNAME, locale) + " (" + identity.getName() + ")";
    String instId = user.getProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, locale);
    final String instName = user.getProperty(UserConstants.INSTITUTIONALNAME, locale);

    if (instId == null) {
        instId = "N/A";
    }
    context.addElement("name").addText(name);

    String institution;
    if (instName == null) {
        institution = "N/A";
    } else {
        institution = instName;
    }
    if (institution == null) {
        institution = "N/A";
    }

    // Add institutional identifier (e.g. Matrikelnummer)
    final Element generic_identifier = context.addElement("generic_identifier");
    generic_identifier.addElement("type_label").addText(institution);
    generic_identifier.addElement("identifier_string").addText(instId);

    // Add start and stop date formatted as datetime
    final Element beginDate = context.addElement("date");
    beginDate.addElement("type_label").addText("Start");
    beginDate.addElement("datetime").addText(Formatter.formatDatetime(new Date(ac.getTimeOfStart())));
    final Element stopDate = context.addElement("date");
    stopDate.addElement("type_label").addText("Stop");
    stopDate.addElement("datetime").addText(Formatter.formatDatetime(new Date(ac.getTimeOfStop())));

    final Element ares = result.addElement("assessment_result");
    ares.addAttribute("ident_ref", ac.getIdent());
    if (ac.getTitle() != null) {
        ares.addAttribute("asi_title", ac.getTitle());
    }

    // process assessment score
    final Element a_score = ares.addElement("outcomes").addElement("score");
    a_score.addAttribute("varname", "SCORE");
    String strVal = StringHelper.formatFloat(ac.getScore(), 2);
    a_score.addElement("score_value").addText(strVal);

    strVal = ac.getMaxScore() == -1.0f ? "N/A" : StringHelper.formatFloat(ac.getMaxScore(), 2);
    a_score.addElement("score_max").addText(strVal);

    strVal = ac.getCutvalue() == -1.0f ? "N/A" : StringHelper.formatFloat(ac.getCutvalue(), 2);
    a_score.addElement("score_cut").addText(strVal);

    addElementText(ares, "duration", QTIHelper.getISODuration(ac.getDuration()));
    addElementText(ares, "num_sections", "" + ac.getSectionContextCount());
    addElementText(ares, "num_sections_presented", "0");
    addElementText(ares, "num_items", "" + ac.getItemContextCount());
    addElementText(ares, "num_items_presented", "" + ac.getItemsPresentedCount());
    addElementText(ares, "num_items_attempted", "" + ac.getItemsAttemptedCount());

    // add section_result
    final int secnt = ac.getSectionContextCount();
    for (int i = 0; i < secnt; i++) {
        final SectionContext secc = ac.getSectionContext(i);
        final Element secres = ares.addElement("section_result");
        secres.addAttribute("ident_ref", secc.getIdent());
        if (secc.getTitle() != null) {
            secres.addAttribute("asi_title", secc.getTitle());
        }
        addElementText(secres, "duration", QTIHelper.getISODuration(secc.getDuration()));
        addElementText(secres, "num_items", "" + secc.getItemContextCount());
        addElementText(secres, "num_items_presented", "" + secc.getItemsPresentedCount());
        addElementText(secres, "num_items_attempted", "" + secc.getItemsAttemptedCount());

        // process section score
        final Element sec_score = secres.addElement("outcomes").addElement("score");
        sec_score.addAttribute("varname", "SCORE");
        strVal = secc.getScore() == -1.0f ? "N/A" : "" + StringHelper.formatFloat(secc.getScore(), 2);
        sec_score.addElement("score_value").addText(strVal);
        strVal = secc.getMaxScore() == -1.0f ? "N/A" : "" + StringHelper.formatFloat(secc.getMaxScore(), 2);
        sec_score.addElement("score_max").addText(strVal);
        strVal = secc.getCutValue() == -1 ? "N/A" : "" + secc.getCutValue();
        sec_score.addElement("score_cut").addText(strVal);

        // iterate over all items in this section context
        final List itemsc = secc.getSectionItemContexts();
        for (final Iterator it_it = itemsc.iterator(); it_it.hasNext();) {
            final ItemContext itemc = (ItemContext) it_it.next();
            final Element itres = secres.addElement("item_result");
            itres.addAttribute("ident_ref", itemc.getIdent());
            itres.addAttribute("asi_title", itemc.getEl_item().attributeValue("title"));
            final Element it_duration = itres.addElement("duration");
            it_duration.addText(QTIHelper.getISODuration(itemc.getTimeSpent()));

            // process item score
            final DecimalVariable scoreVar = (DecimalVariable) (itemc.getVariables().getSCOREVariable());
            final Element it_score = itres.addElement("outcomes").addElement("score");
            it_score.addAttribute("varname", "SCORE");
            it_score.addElement("score_value")
                    .addText(StringHelper.formatFloat(scoreVar.getTruncatedValue(), 2));
            strVal = scoreVar.hasMinValue() ? "" + scoreVar.getMinValue() : "0.0";
            it_score.addElement("score_min").addText(strVal);
            strVal = scoreVar.hasMaxValue() ? "" + scoreVar.getMaxValue() : "N/A";
            it_score.addElement("score_max").addText(strVal);
            strVal = scoreVar.hasCutValue() ? "" + scoreVar.getCutValue() : "N/A";
            it_score.addElement("score_cut").addText(strVal);

            final Element el_item = itemc.getEl_item();
            final Map res_responsehash = new HashMap(3);

            // iterate over all responses of this item
            final List resps = el_item.selectNodes(
                    ".//response_lid|.//response_xy|.//response_str|.//response_num|.//response_grp");
            for (final Iterator it_resp = resps.iterator(); it_resp.hasNext();) {
                final Element resp = (Element) it_resp.next();
                final String ident = resp.attributeValue("ident");
                final String rcardinality = resp.attributeValue("rcardinality");
                final String rtiming = resp.attributeValue("rtiming");

                // add new response
                final Element res_response = itres.addElement("response");
                res_response.addAttribute("ident_ref", ident);
                res_responsehash.put(ident, res_response); // enable lookup of
                // @identref of <response>
                // (needed with <varequal>
                // elements

                // add new response_form
                // <response_lid ident="MR01" rcardinality="Multiple" rtiming="No">
                final Element res_responseform = res_response.addElement("response_form");
                res_responseform.addAttribute("cardinality", rcardinality);
                res_responseform.addAttribute("timing", rtiming);
                final String respName = resp.getName();
                final String type = respName.substring(respName.indexOf("_") + 1);
                res_responseform.addAttribute("response_type", type);

                // add user answer
                final ItemInput itemInp = itemc.getItemInput();
                final Translator trans = Util.createPackageTranslator(QTIModule.class, locale);
                if (itemInp == null) { // user did not answer this question at all
                    res_response.addElement("response_value").addText(trans.translate("ResBuilder.NoAnswer"));
                } else {
                    final List userAnswer = itemInp.getAsList(ident);
                    if (userAnswer == null) { // user did not answer this question at
                        // all
                        res_response.addElement("response_value")
                                .addText(trans.translate("ResBuilder.NoAnswer"));
                    } else { // the user chose at least one option of an answer (did not
                             // simply click send)
                        for (final Iterator it_ans = userAnswer.iterator(); it_ans.hasNext();) {
                            res_response.addElement("response_value").addText((String) it_ans.next());
                        }
                    }
                }

            }

            /*
             * The simple element correct_response can only list correct elements, that is, no "or" or "and" elements may be in the conditionvar. Pragmatic solution:
             * if condition has ors or ands, then put whole conditionvar into <extension_response> (proprietary), and for easier cases (just "varequal" "not"
             * elements) use correct_response.
             */

            final Map corr_answers = new HashMap(); // keys: respIdents, values: HashSet
            // of correct answers for this
            // respIdent
            final List respconds = el_item.selectNodes(".//respcondition");
            for (final Iterator it_respc = respconds.iterator(); it_respc.hasNext();) {
                final Element el_respc = (Element) it_respc.next();

                // check for add/set in setvar elements (check for single instance
                // only -> spec allows for multiple instances)
                final Element el_setvar = (Element) el_respc.selectSingleNode(".//setvar");
                if (el_setvar == null) {
                    continue;
                }
                if (el_setvar.attributeValue("action").equals("Add")
                        || el_setvar.attributeValue("action").equals("Set")) {
                    // This resrocessing gives points -> assume correct answer
                    float numPoints = 0;
                    try {
                        numPoints = Float.parseFloat(el_setvar.getTextTrim());
                    } catch (final NumberFormatException nfe) {
                        //
                    }
                    if (numPoints <= 0) {
                        continue;
                    }
                    Element conditionvar = (Element) el_respc.selectSingleNode(".//conditionvar");
                    // there is an evaluation defined (a "resprocessing" element exists)
                    // if (xpath(count(.//varequal) + count(.//not) = count(.//*)) is
                    // true, then there are only "not" and "varequal" elements
                    final XPath xCanHandle = DocumentHelper
                            .createXPath("count(.//varequal) + count(.//not) = count(.//*)");
                    boolean canHandle = xCanHandle.matches(conditionvar);
                    if (!canHandle) { // maybe we have <condvar> <and> <...>, try again
                        final Element el_and = (Element) conditionvar.selectSingleNode("and");
                        if (el_and != null) {
                            canHandle = xCanHandle.matches(el_and);
                            if (canHandle) { // simultate the el_and to be the conditionvar
                                conditionvar = el_and;
                            }
                        } else { // and finally, maybe we have an <or> element ..
                            final Element el_or = (Element) conditionvar.selectSingleNode("or");
                            if (el_or != null) {
                                canHandle = xCanHandle.matches(el_or);
                                if (canHandle) { // simultate the el_and to be the conditionvar
                                    conditionvar = el_or;
                                }
                            }
                        }
                    }

                    if (!canHandle) {
                        // qti res 1.2.1 can't handle it
                        final Element condcopy = conditionvar.createCopy();
                        itres.addElement("extension_item_result").add(condcopy);
                    } else {
                        /*
                         * easy case: get all varequal directly under the conditionvar element and assume the "not" elements do not contain "not" elements again...
                         * <!ELEMENT response (qti_comment? , response_form? , num_attempts? , response_value* , extension_response?)> <!ELEMENT response_form
                         * (correct_response* , extension_responseform?)> <!ELEMENT correct_response (#PCDATA)>
                         */
                        final List vareqs = conditionvar.selectNodes("./varequal");
                        for (final Iterator it_vareq = vareqs.iterator(); it_vareq.hasNext();) {
                            /*
                             * get the identifier of the response, so that we can attach the <correct_response> to the right <response> element quote: ims qti asi xml
                             * binding :3.6.23.1 <varequal> Element: respident (required). The identifier of the corresponding <response_lid>, <response_xy>, etc.
                             * element (this was assigned using its ident attribute).
                             */
                            final Element vareq = (Element) it_vareq.next();
                            final String respIdent = vareq.attributeValue("respident");
                            Set respIdent_corr_answers = (Set) corr_answers.get(respIdent);
                            if (respIdent_corr_answers == null) {
                                respIdent_corr_answers = new HashSet(3);
                            }
                            respIdent_corr_answers.add(vareq.getText());
                            corr_answers.put(respIdent, respIdent_corr_answers);
                        } // for varequal
                    } // else varequal
                } // add/set setvar
            } // for resprocessing
            final Set resp_ids = corr_answers.keySet();
            for (final Iterator idents = resp_ids.iterator(); idents.hasNext();) {
                final String respIdent = (String) idents.next();
                final Set respIdent_corr_answers = (Set) corr_answers.get(respIdent);
                final Element res_response = (Element) res_responsehash.get(respIdent);
                final Element res_respform = res_response.element("response_form");
                for (final Iterator iter = respIdent_corr_answers.iterator(); iter.hasNext();) {
                    final String answer = (String) iter.next();
                    res_respform.addElement("correct_response").addText(answer);
                }
            }
        } // for response_xy
    }
    return res_doc;
}

From source file:org.openadaptor.auxil.processor.map.AttributeMapProcessorTestCase.java

License:Open Source License

private Document buildXmlDocument(String root) {
    Document doc = DocumentHelper.createDocument();
    Element rootElement = DocumentHelper.createElement(root);
    doc.setRootElement(rootElement);
    rootElement.add(createElement(KEY_ONE, VALUE_ONE));
    rootElement.add(createElement(KEY_TWO, VALUE_TWO));
    rootElement.add(createElement(KEY_ONE, "AnotherValue"));
    Element l1 = createElement(KEY_L_1, VAL_L_1);
    l1.add(createElement(KEY_L_2_1, VAL_L_2_1));
    l1.add(createElement(KEY_L_2_2, VAL_L_2_2));
    rootElement.add(l1);//from w w  w  .  java2 s . c o  m
    return doc;
}

From source file:org.orbeon.oxf.processor.EmailProcessor.java

License:Open Source License

private void handlePart(PipelineContext pipelineContext, String dataInputSystemId, Part parentPart,
        Element partOrBodyElement) throws Exception {
    final String name = partOrBodyElement.attributeValue("name");
    String contentTypeAttribute = partOrBodyElement.attributeValue("content-type");
    final String contentType = NetUtils.getContentTypeMediaType(contentTypeAttribute);
    final String charset;
    {/*w ww . ja v a2 s  .  c  om*/
        final String c = NetUtils.getContentTypeCharset(contentTypeAttribute);
        charset = (c != null) ? c : DEFAULT_CHARACTER_ENCODING;
    }
    final String contentTypeWithCharset = contentType + "; charset=" + charset;
    final String src = partOrBodyElement.attributeValue("src");

    // Either a String or a FileItem
    final Object content;
    if (src != null) {
        // Content of the part is not inline

        // Generate a FileItem from the source
        final SAXSource source = getSAXSource(EmailProcessor.this, pipelineContext, src, dataInputSystemId,
                contentType);
        content = handleStreamedPartContent(pipelineContext, source);
    } else {
        // Content of the part is inline

        // In the cases of text/html and XML, there must be exactly one root element
        final boolean needsRootElement = "text/html".equals(contentType);// || ProcessorUtils.isXMLContentType(contentType);
        if (needsRootElement && partOrBodyElement.elements().size() != 1)
            throw new ValidationException(
                    "The <body> or <part> element must contain exactly one element for text/html",
                    (LocationData) partOrBodyElement.getData());

        // Create Document and convert it into a String
        final Element rootElement = (Element) (needsRootElement ? partOrBodyElement.elements().get(0)
                : partOrBodyElement);
        final Document partDocument = new NonLazyUserDataDocument();
        partDocument.setRootElement((Element) rootElement.clone());
        content = handleInlinePartContent(partDocument, contentType);
    }

    if (!XMLUtils.isTextOrJSONContentType(contentType)) {
        // This is binary content (including application/xml)
        if (content instanceof FileItem) {
            final FileItem fileItem = (FileItem) content;
            parentPart.setDataHandler(new DataHandler(new DataSource() {
                public String getContentType() {
                    return contentType;
                }

                public InputStream getInputStream() throws IOException {
                    return fileItem.getInputStream();
                }

                public String getName() {
                    return name;
                }

                public OutputStream getOutputStream() throws IOException {
                    throw new IOException("Write operation not supported");
                }
            }));
        } else {
            byte[] data = NetUtils.base64StringToByteArray((String) content);
            parentPart.setDataHandler(new DataHandler(new SimpleBinaryDataSource(name, contentType, data)));
        }
    } else {
        // This is text content (including text/xml)
        if (content instanceof FileItem) {
            // The text content was encoded when written to the FileItem
            final FileItem fileItem = (FileItem) content;
            parentPart.setDataHandler(new DataHandler(new DataSource() {
                public String getContentType() {
                    // This always contains a charset
                    return contentTypeWithCharset;
                }

                public InputStream getInputStream() throws IOException {
                    // This is encoded with the appropriate charset (user-defined, or the default)
                    return fileItem.getInputStream();
                }

                public String getName() {
                    return name;
                }

                public OutputStream getOutputStream() throws IOException {
                    throw new IOException("Write operation not supported");
                }
            }));
        } else {
            parentPart.setDataHandler(
                    new DataHandler(new SimpleTextDataSource(name, contentTypeWithCharset, (String) content)));
        }
    }

    // Set content-disposition header
    String contentDisposition = partOrBodyElement.attributeValue("content-disposition");
    if (contentDisposition != null)
        parentPart.setDisposition(contentDisposition);

    // Set content-id header
    String contentId = partOrBodyElement.attributeValue("content-id");
    if (contentId != null)
        parentPart.setHeader("content-id", "<" + contentId + ">");
    //part.setContentID(contentId);
}

From source file:org.orbeon.oxf.transformer.xupdate.statement.Utils.java

License:Open Source License

/**
 * Evaluate a sequence a statements, and insert the result of the
 * evaluation the given parent node at the given position.
 *//*  w  w  w. ja v  a 2s  . c  om*/
public static void insert(LocationData locationData, Node parent, int position, Object toInsert) {
    List nodesToInsert = xpathObjectToDOM4JList(locationData, toInsert);
    if (parent instanceof Element)
        Collections.reverse(nodesToInsert);
    for (Iterator j = nodesToInsert.iterator(); j.hasNext();) {
        Object object = j.next();
        Node node = object instanceof String || object instanceof Number
                ? Dom4jUtils.createText(object.toString())
                : (Node) ((Node) object).clone();
        if (parent instanceof Element) {
            Element element = (Element) parent;
            if (node instanceof Attribute) {
                element.attributes().add(node);
            } else {
                element.content().add(position, node);
            }
        } else if (parent instanceof Attribute) {
            Attribute attribute = (Attribute) parent;
            attribute.setValue(attribute.getValue() + node.getText());
        } else if (parent instanceof Document) {
            // Update a document element
            final Document document = (Document) parent;
            if (node instanceof Element) {
                if (document.getRootElement() != null)
                    throw new ValidationException("Document already has a root element", locationData);
                document.setRootElement((Element) node);
            } else if (node instanceof ProcessingInstruction) {
                document.add(node);
            } else {
                throw new ValidationException(
                        "Only an element or processing instruction can be at the root of a document",
                        locationData);
            }

        } else {
            throw new ValidationException("Cannot insert into a node of type '" + parent.getClass() + "'",
                    locationData);
        }
    }
}

From source file:org.orbeon.oxf.xforms.action.actions.XFormsInsertAction.java

License:Open Source License

private static List<Node> doInsert(Node insertionNode, List<Node> clonedNodes, XFormsInstance modifiedInstance,
        boolean doDispatch) {
    final List<Node> insertedNodes = new ArrayList<Node>(clonedNodes.size());
    if (insertionNode instanceof Element) {
        // Insert inside an element
        final Element insertContextElement = (Element) insertionNode;

        int otherNodeIndex = 0;
        for (Node clonedNode : clonedNodes) {

            if (clonedNode != null) {// NOTE: we allow passing some null nodes so we check on null
                if (clonedNode instanceof Attribute) {
                    // Add attribute to element

                    // NOTE: In XML, attributes are unordered. dom4j handles them as a list so has order, but the
                    // XForms spec shouldn't rely on attribute order. We could try to keep the order, but it is harder
                    // as we have to deal with removing duplicate attributes and find a reasonable insertion strategy.
                    final Attribute clonedAttribute = (Attribute) clonedNode;
                    final Attribute existingAttribute = insertContextElement
                            .attribute(clonedAttribute.getQName());

                    if (existingAttribute != null)
                        insertContextElement.remove(existingAttribute);

                    insertContextElement.add(clonedAttribute);

                    if (existingAttribute != null) {

                        // Dispatch xxforms-replace event if required and possible
                        // NOTE: For now, still dispatch xforms-insert for backward compatibility.
                        if (doDispatch && modifiedInstance != null) {
                            final DocumentWrapper documentWrapper = (DocumentWrapper) modifiedInstance
                                    .documentInfo();

                            Dispatch.dispatchEvent(new XXFormsReplaceEvent(modifiedInstance,
                                    documentWrapper.wrap(existingAttribute),
                                    documentWrapper.wrap(clonedAttribute)));
                        }/*w  w  w .j a va 2 s. c om*/
                    }

                    insertedNodes.add(clonedAttribute);

                } else if (!(clonedNode instanceof Document)) {
                    // Add other node to element
                    Dom4jUtils.content(insertContextElement).add(otherNodeIndex++, clonedNode);
                    insertedNodes.add(clonedNode);
                } else {
                    // "If a cloned node cannot be placed at the target location due to a node type conflict, then the
                    // insertion for that particular clone node is ignored."
                }
            }
        }
        return insertedNodes;
    } else if (insertionNode instanceof Document) {
        final Document insertContextDocument = (Document) insertionNode;

        // "If there is more than one cloned node to insert, only the first node that does not cause a conflict is
        // considered."
        for (Node clonedNode : clonedNodes) {
            // Only an element can be inserted at the root of an instance
            if (clonedNode instanceof Element) {

                final Element formerRootElement = insertContextDocument.getRootElement();
                insertContextDocument.setRootElement((Element) clonedNode);

                // Dispatch xxforms-replace event if required and possible
                // NOTE: For now, still dispatch xforms-insert for backward compatibility.
                if (doDispatch && modifiedInstance != null) {
                    final DocumentWrapper documentWrapper = (DocumentWrapper) modifiedInstance.documentInfo();

                    Dispatch.dispatchEvent(
                            new XXFormsReplaceEvent(modifiedInstance, documentWrapper.wrap(formerRootElement),
                                    documentWrapper.wrap(insertContextDocument.getRootElement())));
                }

                insertedNodes.add(clonedNode);
                return insertedNodes;
            }
        }

        // NOTE: The spec does not allow inserting comments and PIs at the root of an instance document at this
        // point.

        return insertedNodes;
    } else {
        throw new OXFException("Unsupported insertion node type: " + insertionNode.getClass().getName());
    }
}

From source file:org.orbeon.oxf.xforms.event.events.XFormsSubmitSerializeEvent.java

License:Open Source License

public SequenceIterator getAttribute(String name) {
    if ("submission-body".equals(name)) {

        if (submissionBodyElement == null) {
            // Create a document and root element
            final Document document = Dom4jUtils.createDocument();
            submissionBodyElement = Dom4jUtils.createElement("submission-body");
            document.setRootElement(submissionBodyElement);
        }/*  w  w  w . j  a  v a 2 s. co m*/

        // Return document element
        final Item item = containingDocument().getStaticState().documentWrapper().wrap(submissionBodyElement);
        return SingletonIterator.makeIterator(item);
    } else if (XXFORMS_BINDING_ATTRIBUTE.equals(name)) {
        // Return the node to which the submission is bound if any
        if (boundNode != null)
            return SingletonIterator.makeIterator(boundNode);
        else
            return EmptyIterator.getInstance();
    } else if (XXFORMS_SERIALIZATION_ATTRIBUTE.equals(name)) {
        // Return the requested serialization
        return SingletonIterator.makeIterator(new StringValue(requestedSerialization));
    } else {
        return super.getAttribute(name);
    }
}

From source file:org.orbeon.oxf.xml.dom4j.Dom4jUtils.java

License:Open Source License

/**
 * Return a new document with all parent namespaces copied to the new root element, assuming they are not already
 * declared on the new root element.//from w  w  w  .  j  a v a2s.com
 *
 * @param newRoot   element which must become the new root element of the document
 * @param detach    if true the element is detached, otherwise it is deep copied
 * @return          new document
 */
public static Document createDocumentCopyParentNamespaces(final Element newRoot, boolean detach) {

    final Element parentElement = newRoot.getParent();
    final Document document;
    {
        if (detach) {
            // Detach
            document = createDocument();
            document.setRootElement((Element) newRoot.detach());
        } else {
            // Copy
            document = createDocumentCopyElement(newRoot);
        }
    }

    copyMissingNamespaces(parentElement, document.getRootElement());

    return document;
}

From source file:org.pentaho.platform.engine.services.SoapHelper.java

License:Open Source License

public static Document createSoapDocument() {
    Document document = DocumentHelper.createDocument();
    Element envelope = createSoapEnvelope();
    document.setRootElement(envelope);
    envelope.add(createSoapBody());//from www  .j a va 2 s.c  o  m
    return document;
}