Example usage for org.xml.sax.helpers AttributesImpl addAttribute

List of usage examples for org.xml.sax.helpers AttributesImpl addAttribute

Introduction

In this page you can find the example usage for org.xml.sax.helpers AttributesImpl addAttribute.

Prototype

public void addAttribute(String uri, String localName, String qName, String type, String value) 

Source Link

Document

Add an attribute to the end of the list.

Usage

From source file:org.apache.axis.message.MessageElement.java

/**
 * set an attribute or alter an existing one
 * @see org.w3c.dom.Element#setAttributeNS(String, String, String)
 * @param namespaceURI namepsace//from  w w  w. j a  va  2 s  .c o m
 * @param qualifiedName qualified name of the attribue
 * @param value value
 * @throws DOMException
 */
public void setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException {
    AttributesImpl attributes = makeAttributesEditable();
    String localName = qualifiedName.substring(qualifiedName.indexOf(":") + 1, qualifiedName.length());

    if (namespaceURI == null) {
        namespaceURI = "intentionalNullURI";
    }
    attributes.addAttribute(namespaceURI, localName, qualifiedName, "CDATA", value);
}

From source file:org.apache.cocoon.components.notification.Notifier.java

/**
 * Generate notification information in XML format.
 *//*from   w  w w.  j  av a2s  . co m*/
public static void notify(Notifying n, ContentHandler ch, String mimetype) throws SAXException {
    final String PREFIX = Constants.ERROR_NAMESPACE_PREFIX;
    final String URI = Constants.ERROR_NAMESPACE_URI;

    // Start the document
    ch.startDocument();
    ch.startPrefixMapping(PREFIX, URI);

    // Root element.
    AttributesImpl atts = new AttributesImpl();

    atts.addAttribute(URI, "type", PREFIX + ":type", "CDATA", n.getType());
    atts.addAttribute(URI, "sender", PREFIX + ":sender", "CDATA", n.getSender());
    ch.startElement(URI, "notify", PREFIX + ":notify", atts);
    ch.startElement(URI, "title", PREFIX + ":title", new AttributesImpl());
    ch.characters(n.getTitle().toCharArray(), 0, n.getTitle().length());
    ch.endElement(URI, "title", PREFIX + ":title");
    ch.startElement(URI, "source", PREFIX + ":source", new AttributesImpl());
    ch.characters(n.getSource().toCharArray(), 0, n.getSource().length());
    ch.endElement(URI, "source", PREFIX + ":source");
    ch.startElement(URI, "message", PREFIX + ":message", new AttributesImpl());

    if (n.getMessage() != null) {
        ch.characters(n.getMessage().toCharArray(), 0, n.getMessage().length());
    }

    ch.endElement(URI, "message", PREFIX + ":message");
    ch.startElement(URI, "description", PREFIX + ":description", XMLUtils.EMPTY_ATTRIBUTES);
    ch.characters(n.getDescription().toCharArray(), 0, n.getDescription().length());
    ch.endElement(URI, "description", PREFIX + ":description");

    Map extraDescriptions = n.getExtraDescriptions();
    for (Iterator i = extraDescriptions.entrySet().iterator(); i.hasNext();) {
        final Map.Entry me = (Map.Entry) i.next();
        String key = (String) me.getKey();
        String value = String.valueOf(me.getValue());
        atts = new AttributesImpl();
        atts.addAttribute(URI, "description", PREFIX + ":description", "CDATA", key);
        ch.startElement(URI, "extra", PREFIX + ":extra", atts);
        ch.characters(value.toCharArray(), 0, value.length());
        ch.endElement(URI, "extra", PREFIX + ":extra");
    }

    // End root element.
    ch.endElement(URI, "notify", PREFIX + ":notify");

    // End the document.
    ch.endPrefixMapping(PREFIX);
    ch.endDocument();
}

From source file:org.apache.cocoon.components.source.impl.QDoxSource.java

/**
 * Method saxStartElement./*  www  .j  a v  a  2  s .  c  o  m*/
 *
 * @param handler
 * @param localName
 * @param attrs
 */
private void saxStartElement(ContentHandler handler, String localName, String[][] attrs) throws SAXException {
    AttributesImpl saxAttrs = new AttributesImpl();
    for (int i = 0; i < attrs.length; i++) {
        if (attrs[i].length == 2) {
            saxAttrs.addAttribute("", attrs[i][0], attrs[i][0], ATTR_TYPE, attrs[i][1]);
        } else if (attrs[i].length == 5) {
            saxAttrs.addAttribute(attrs[i][0], attrs[i][1], attrs[i][2], attrs[i][3], attrs[i][4]);
        }
    }

    handler.startElement(NS_URI, localName, NS_PREFIX + ':' + localName, saxAttrs);
}

From source file:org.apache.cocoon.components.source.impl.WebDAVSource.java

private void resourcesToSax(WebdavResource[] resources, ContentHandler handler) throws SAXException {
    for (int i = 0; i < resources.length; i++) {
        if (getLogger().isDebugEnabled()) {
            final String message = "RESOURCE: " + resources[i].getDisplayName();
            getLogger().debug(message);/*from  www .  java 2s.c  om*/
        }
        if (resources[i].isCollection()) {
            try {
                WebdavResource[] childs = resources[i].listWebdavResources();
                AttributesImpl attrs = new AttributesImpl();
                attrs.addAttribute(NAMESPACE, COLLECTION_NAME, PREFIX + ":name", "CDATA",
                        resources[i].getDisplayName());
                handler.startElement(NAMESPACE, COLLECTION_NAME, PREFIX + ":" + COLLECTION_NAME, attrs);
                this.resourcesToSax(childs, handler);
                handler.endElement(NAMESPACE, COLLECTION_NAME, PREFIX + ":" + COLLECTION_NAME);
            } catch (HttpException e) {
                if (getLogger().isDebugEnabled()) {
                    final String message = "Unable to get WebDAV children. Server responded "
                            + e.getReasonCode() + " (" + e.getReason() + ") - " + e.getMessage();
                    getLogger().debug(message);
                }
            } catch (SAXException e) {
                if (getLogger().isDebugEnabled()) {
                    final String message = "Unable to get WebDAV children: " + e.getMessage();
                    getLogger().debug(message, e);
                }
            } catch (IOException e) {
                if (getLogger().isDebugEnabled()) {
                    final String message = "Unable to get WebDAV children: " + e.getMessage();
                    getLogger().debug(message, e);
                }
            } catch (Exception e) {
                if (getLogger().isDebugEnabled()) {
                    final String message = "Unable to get WebDAV children: " + e.getMessage();
                    getLogger().debug(message, e);
                }
            }
        } else {
            AttributesImpl attrs = new AttributesImpl();
            attrs.addAttribute(NAMESPACE, "name", PREFIX + ":name", "CDATA", resources[i].getDisplayName());
            handler.startElement(NAMESPACE, RESOURCE_NAME, PREFIX + ":" + RESOURCE_NAME, attrs);
            handler.endElement(NAMESPACE, RESOURCE_NAME, PREFIX + ":" + RESOURCE_NAME);
        }
    }
}

From source file:org.apache.cocoon.forms.transformation.FormsPipelineConfig.java

public void addFormAttributes(AttributesImpl attrs) {
    if (getFormAction() != null) {
        attrs.addAttribute("", "action", "action", "CDATA", getFormAction());
    }//from ww  w. j a v a  2  s.co m
    if (getFormMethod() != null) {
        attrs.addAttribute("", "method", "method", "CDATA", getFormMethod());
    }
}

From source file:org.apache.cocoon.generation.HttpProxyGenerator.java

/**
 * Generate debugging output as XML data from the current configuration.
 *
 * @throws SAXException If an error occurred parsing or processing XML in the pipeline.
 * @throws IOException If an I/O error occurred accessing the HTTP server.
 *//* w w  w. ja  va  2 s.c o m*/
private void generateDebugOutput() throws SAXException, IOException {
    super.xmlConsumer.startDocument();

    AttributesImpl attributes = new AttributesImpl();
    attributes.addAttribute("", "method", "method", "CDATA", this.method.getName());
    attributes.addAttribute("", "url", "url", "CDATA", this.method.getURI().toString());
    attributes.addAttribute("", "protocol", "protocol", "CDATA",
            (this.method.isHttp11() ? "HTTP/1.1" : "HTTP/1.0"));
    super.xmlConsumer.startElement("", "request", "request", attributes);

    if (this.method instanceof PostMethod) {
        String body = ((PostMethod) this.method).getRequestBodyAsString();

        attributes.clear();
        attributes.addAttribute("", "name", "name", "CDATA", "Content-Type");
        attributes.addAttribute("", "value", "value", "CDATA", "application/x-www-form-urlencoded");
        super.xmlConsumer.startElement("", "header", "header", attributes);
        super.xmlConsumer.endElement("", "header", "header");

        attributes.clear();
        attributes.addAttribute("", "name", "name", "CDATA", "Content-Length");
        attributes.addAttribute("", "value", "value", "CDATA", Integer.toString(body.length()));
        super.xmlConsumer.startElement("", "header", "header", attributes);
        super.xmlConsumer.endElement("", "header", "header");

        attributes.clear();
        super.xmlConsumer.startElement("", "body", "body", attributes);
        super.xmlConsumer.characters(body.toCharArray(), 0, body.length());
        super.xmlConsumer.endElement("", "body", "body");
    }

    super.xmlConsumer.endElement("", "request", "request");

    super.xmlConsumer.endDocument();
    return;
}

From source file:org.apache.cocoon.generation.JXTemplateGenerator.java

private void execute(final XMLConsumer consumer, MyJexlContext jexlContext, JXPathContext jxpathContext,
        StartElement macroCall, Event startEvent, Event endEvent) throws SAXException {
    Event ev = startEvent;/* w  ww  .  ja  va 2s. c  o m*/
    LocationFacade loc = new LocationFacade(ev.location);
    consumer.setDocumentLocator(loc);
    while (ev != endEvent) {
        loc.setDocumentLocation(ev.location);
        if (ev instanceof Characters) {
            TextEvent text = (TextEvent) ev;
            Iterator iter = text.substitutions.iterator();
            while (iter.hasNext()) {
                Object subst = iter.next();
                char[] chars;
                if (subst instanceof char[]) {
                    chars = (char[]) subst;
                } else {
                    JXTExpression expr = (JXTExpression) subst;
                    try {
                        Object val = getNode(expr, jexlContext, jxpathContext);
                        if (val instanceof Node) {
                            executeDOM(consumer, jexlContext, jxpathContext, (Node) val);
                            continue;
                        } else if (val instanceof NodeList) {
                            NodeList nodeList = (NodeList) val;
                            int len = nodeList.getLength();
                            for (int i = 0; i < len; i++) {
                                Node n = nodeList.item(i);
                                executeDOM(consumer, jexlContext, jxpathContext, n);
                            }
                            continue;
                        } else if (val instanceof Node[]) {
                            Node[] nodeList = (Node[]) val;
                            int len = nodeList.length;
                            for (int i = 0; i < len; i++) {
                                Node n = nodeList[i];
                                executeDOM(consumer, jexlContext, jxpathContext, n);
                            }
                            continue;
                        } else if (val instanceof XMLizable) {
                            ((XMLizable) val).toSAX(new IncludeXMLConsumer(consumer));
                            continue;
                        }
                        chars = val != null ? val.toString().toCharArray() : ArrayUtils.EMPTY_CHAR_ARRAY;
                    } catch (Exception e) {
                        throw new JXTException(e.getMessage(), ev.location, e);
                    }
                }
                consumer.characters(chars, 0, chars.length);
            }
        } else if (ev instanceof EndElement) {
            EndElement endElement = (EndElement) ev;
            StartElement startElement = endElement.startElement;
            StartDefine def = (StartDefine) definitions.get(startElement.qname);
            if (def == null) {
                consumer.endElement(startElement.namespaceURI, startElement.localName, startElement.raw);
                namespaces.leaveScope(consumer);
            }
        } else if (ev instanceof EndPrefixMapping) {
            EndPrefixMapping endPrefixMapping = (EndPrefixMapping) ev;
            namespaces.removeDeclaration(endPrefixMapping.prefix);
        } else if (ev instanceof IgnorableWhitespace) {
            TextEvent text = (TextEvent) ev;
            characters(jexlContext, jxpathContext, text, new CharHandler() {
                public void characters(char[] ch, int offset, int len) throws SAXException {
                    consumer.ignorableWhitespace(ch, offset, len);
                }
            });
        } else if (ev instanceof SkippedEntity) {
            SkippedEntity skippedEntity = (SkippedEntity) ev;
            consumer.skippedEntity(skippedEntity.name);
        } else if (ev instanceof StartIf) {
            StartIf startIf = (StartIf) ev;
            Object val;
            try {
                val = getValue(startIf.test, jexlContext, jxpathContext, Boolean.TRUE);
            } catch (Exception e) {
                throw new JXTException(e.getMessage(), ev.location, e);
            }
            boolean result = false;
            if (val instanceof Boolean) {
                result = ((Boolean) val).booleanValue();
            } else {
                result = (val != null);
            }
            if (!result) {
                ev = startIf.endInstruction.next;
                continue;
            }
        } else if (ev instanceof StartForEach) {
            StartForEach startForEach = (StartForEach) ev;
            final Object items = startForEach.items;
            Iterator iter = null;
            int begin, end, step;
            String var, varStatus;
            try {
                if (items != null) {
                    JXTExpression expr = (JXTExpression) items;
                    if (expr.compiledExpression instanceof CompiledExpression) {
                        CompiledExpression compiledExpression = (CompiledExpression) expr.compiledExpression;
                        Object val = compiledExpression.getPointer(jxpathContext, expr.raw).getNode();
                        // FIXME: workaround for JXPath bug
                        iter = val instanceof NativeArray
                                ? new JSIntrospector.NativeArrayIterator((NativeArray) val)
                                : compiledExpression.iteratePointers(jxpathContext);
                    } else if (expr.compiledExpression instanceof Expression) {
                        Expression e = (Expression) expr.compiledExpression;
                        Object result = e.evaluate(jexlContext);
                        if (result != null) {
                            iter = Introspector.getUberspect().getIterator(result,
                                    new Info(ev.location.getURI(), ev.location.getLineNumber(),
                                            ev.location.getColumnNumber()));
                        }
                        if (iter == null) {
                            iter = EMPTY_ITER;
                        }
                    } else {
                        // literal value
                        iter = new Iterator() {
                            Object val = items;

                            public boolean hasNext() {
                                return val != null;
                            }

                            public Object next() {
                                Object res = val;
                                val = null;
                                return res;
                            }

                            public void remove() {
                                // EMPTY
                            }
                        };
                    }
                } else {
                    iter = NULL_ITER;
                }
                begin = startForEach.begin == null ? 0
                        : getIntValue(startForEach.begin, jexlContext, jxpathContext);
                end = startForEach.end == null ? Integer.MAX_VALUE
                        : getIntValue(startForEach.end, jexlContext, jxpathContext);
                step = startForEach.step == null ? 1
                        : getIntValue(startForEach.step, jexlContext, jxpathContext);
                var = getStringValue(startForEach.var, jexlContext, jxpathContext);
                varStatus = getStringValue(startForEach.varStatus, jexlContext, jxpathContext);
            } catch (Exception exc) {
                throw new JXTException(exc.getMessage(), ev.location, exc);
            }
            MyJexlContext localJexlContext = new MyJexlContext(jexlContext);
            MyVariables localJXPathVariables = new MyVariables((MyVariables) jxpathContext.getVariables());
            int i = 0;
            // Move to the begin row
            while (i < begin && iter.hasNext()) {
                iter.next();
                i++;
            }
            LoopTagStatus status = null;
            if (varStatus != null) {
                status = new LoopTagStatus();
                status.begin = begin;
                status.end = end;
                status.step = step;
                status.first = true;
                localJexlContext.put(varStatus, status);
                localJXPathVariables.declareVariable(varStatus, status);
            }
            int skipCounter, count = 1;
            JXPathContext localJXPathContext = null;
            while (i <= end && iter.hasNext()) {
                Object value = iter.next();
                if (value instanceof Pointer) {
                    Pointer ptr = (Pointer) value;
                    localJXPathContext = jxpathContext.getRelativeContext(ptr);
                    localJXPathContext.setNamespaceContextPointer(new NamespacesTablePointer(namespaces));
                    try {
                        value = ptr.getNode();
                    } catch (Exception exc) {
                        throw new JXTException(exc.getMessage(), ev.location, null);
                    }
                } else {
                    localJXPathContext = jxpathContextFactory.newContext(jxpathContext, value);
                    localJXPathContext.setNamespaceContextPointer(new NamespacesTablePointer(namespaces));
                }
                localJXPathContext.setVariables(localJXPathVariables);
                if (var != null) {
                    localJexlContext.put(var, value);
                }
                if (status != null) {
                    status.index = i;
                    status.count = count;
                    status.first = i == begin;
                    status.current = value;
                    status.last = (i == end || !iter.hasNext());
                }
                execute(consumer, localJexlContext, localJXPathContext, macroCall, startForEach.next,
                        startForEach.endInstruction);
                // Skip rows
                skipCounter = step;
                while (--skipCounter > 0 && iter.hasNext()) {
                    iter.next();
                }
                // Increase index
                i += step;
                count++;
            }
            ev = startForEach.endInstruction.next;
            continue;
        } else if (ev instanceof StartChoose) {
            StartChoose startChoose = (StartChoose) ev;
            StartWhen startWhen = startChoose.firstChoice;
            while (startWhen != null) {
                Object val;
                try {
                    val = getValue(startWhen.test, jexlContext, jxpathContext, Boolean.TRUE);
                } catch (Exception e) {
                    throw new JXTException(e.getMessage(), ev.location, e);
                }
                boolean result;
                if (val instanceof Boolean) {
                    result = ((Boolean) val).booleanValue();
                } else {
                    result = (val != null);
                }
                if (result) {
                    execute(consumer, jexlContext, jxpathContext, macroCall, startWhen.next,
                            startWhen.endInstruction);
                    break;
                }
                startWhen = startWhen.nextChoice;
            }
            if (startWhen == null && startChoose.otherwise != null) {
                execute(consumer, jexlContext, jxpathContext, macroCall, startChoose.otherwise.next,
                        startChoose.otherwise.endInstruction);
            }
            ev = startChoose.endInstruction.next;
            continue;
        } else if (ev instanceof StartSet) {
            StartSet startSet = (StartSet) ev;
            Object value = null;
            String var = null;
            try {
                if (startSet.var != null) {
                    var = getStringValue(startSet.var, jexlContext, jxpathContext);
                }
                if (startSet.value != null) {
                    value = getNode(startSet.value, jexlContext, jxpathContext);
                }
            } catch (Exception exc) {
                throw new JXTException(exc.getMessage(), ev.location, exc);
            }
            if (value == null) {
                NodeList nodeList = toDOMNodeList("set", startSet, jexlContext, macroCall);
                // JXPath doesn't handle NodeList, so convert it to an array
                int len = nodeList.getLength();
                Node[] nodeArr = new Node[len];
                for (int i = 0; i < len; i++) {
                    nodeArr[i] = nodeList.item(i);
                }
                value = nodeArr;
            }
            if (var != null) {
                jxpathContext.getVariables().declareVariable(var, value);
                jexlContext.put(var, value);
            }
            ev = startSet.endInstruction.next;
            continue;
        } else if (ev instanceof StartElement) {
            StartElement startElement = (StartElement) ev;
            StartDefine def = (StartDefine) definitions.get(startElement.qname);
            if (def != null) {
                Map attributeMap = new HashMap();
                Iterator i = startElement.attributeEvents.iterator();
                while (i.hasNext()) {
                    String attributeName;
                    Object attributeValue;
                    AttributeEvent attrEvent = (AttributeEvent) i.next();
                    attributeName = attrEvent.localName;
                    if (attrEvent instanceof CopyAttribute) {
                        CopyAttribute copy = (CopyAttribute) attrEvent;
                        attributeValue = copy.value;
                    } else if (attrEvent instanceof SubstituteAttribute) {
                        SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent;
                        if (substEvent.substitutions.size() == 1
                                && substEvent.substitutions.get(0) instanceof JXTExpression) {
                            JXTExpression expr = (JXTExpression) substEvent.substitutions.get(0);
                            Object val;
                            try {
                                val = getNode(expr, jexlContext, jxpathContext);
                            } catch (Exception e) {
                                throw new JXTException(e.getMessage(), ev.location, e);
                            }
                            attributeValue = val != null ? val : "";
                        } else {
                            StringBuffer buf = new StringBuffer();
                            Iterator iterSubst = substEvent.substitutions.iterator();
                            while (iterSubst.hasNext()) {
                                Subst subst = (Subst) iterSubst.next();
                                if (subst instanceof Literal) {
                                    Literal lit = (Literal) subst;
                                    buf.append(lit.value);
                                } else if (subst instanceof JXTExpression) {
                                    JXTExpression expr = (JXTExpression) subst;
                                    Object val;
                                    try {
                                        val = getValue(expr, jexlContext, jxpathContext);
                                    } catch (Exception e) {
                                        throw new JXTException(e.getMessage(), ev.location, e);
                                    }
                                    buf.append(val != null ? val.toString() : "");
                                }
                            }
                            attributeValue = buf.toString();
                        }
                    } else {
                        throw new Error("this shouldn't have happened");
                    }
                    attributeMap.put(attributeName, attributeValue);
                }
                MyVariables parent = (MyVariables) jxpathContext.getVariables();
                MyVariables vars = new MyVariables(parent);
                MyJexlContext localJexlContext = new MyJexlContext(jexlContext);
                HashMap macro = new HashMap();
                macro.put("body", startElement);
                macro.put("arguments", attributeMap);
                localJexlContext.put("macro", macro);
                vars.declareVariable("macro", macro);
                Iterator iter = def.parameters.entrySet().iterator();
                while (iter.hasNext()) {
                    Map.Entry e = (Map.Entry) iter.next();
                    String key = (String) e.getKey();
                    StartParameter startParam = (StartParameter) e.getValue();
                    Object default_ = startParam.default_;
                    Object val = attributeMap.get(key);
                    if (val == null) {
                        val = default_;
                    }
                    localJexlContext.put(key, val);
                    vars.declareVariable(key, val);
                }
                JXPathContext localJXPathContext = jxpathContextFactory.newContext(null,
                        jxpathContext.getContextBean());
                localJXPathContext.setNamespaceContextPointer(new NamespacesTablePointer(namespaces));
                localJXPathContext.setVariables(vars);
                call(ev.location, startElement, consumer, localJexlContext, localJXPathContext, def.body,
                        def.endInstruction);
                ev = startElement.endElement.next;
                continue;
            }
            Iterator i = startElement.attributeEvents.iterator();
            AttributesImpl attrs = new AttributesImpl();
            while (i.hasNext()) {
                AttributeEvent attrEvent = (AttributeEvent) i.next();
                if (attrEvent instanceof CopyAttribute) {
                    CopyAttribute copy = (CopyAttribute) attrEvent;
                    attrs.addAttribute(copy.namespaceURI, copy.localName, copy.raw, copy.type, copy.value);
                } else if (attrEvent instanceof SubstituteAttribute) {
                    StringBuffer buf = new StringBuffer();
                    SubstituteAttribute substEvent = (SubstituteAttribute) attrEvent;
                    Iterator iterSubst = substEvent.substitutions.iterator();
                    while (iterSubst.hasNext()) {
                        Subst subst = (Subst) iterSubst.next();
                        if (subst instanceof Literal) {
                            Literal lit = (Literal) subst;
                            buf.append(lit.value);
                        } else if (subst instanceof JXTExpression) {
                            JXTExpression expr = (JXTExpression) subst;
                            Object val;
                            try {
                                val = getValue(expr, jexlContext, jxpathContext);
                            } catch (Exception e) {
                                throw new JXTException(e.getMessage(), ev.location, e);
                            }
                            buf.append(val != null ? val.toString() : "");
                        }
                    }
                    attrs.addAttribute(attrEvent.namespaceURI, attrEvent.localName, attrEvent.raw,
                            attrEvent.type, buf.toString());
                }
            }
            namespaces.enterScope(consumer);
            consumer.startElement(startElement.namespaceURI, startElement.localName, startElement.raw, attrs);
        } else if (ev instanceof StartFormatNumber) {
            StartFormatNumber startFormatNumber = (StartFormatNumber) ev;
            try {
                String result = startFormatNumber.format(jexlContext, jxpathContext);
                if (result != null) {
                    char[] chars = result.toCharArray();
                    consumer.characters(chars, 0, chars.length);
                }
            } catch (Exception e) {
                throw new JXTException(e.getMessage(), ev.location, e);
            }
        } else if (ev instanceof StartFormatDate) {
            StartFormatDate startFormatDate = (StartFormatDate) ev;
            try {
                String result = startFormatDate.format(jexlContext, jxpathContext);
                if (result != null) {
                    char[] chars = result.toCharArray();
                    consumer.characters(chars, 0, chars.length);
                }
            } catch (Exception e) {
                throw new JXTException(e.getMessage(), ev.location, e);
            }
        } else if (ev instanceof StartPrefixMapping) {
            StartPrefixMapping startPrefixMapping = (StartPrefixMapping) ev;
            namespaces.addDeclaration(startPrefixMapping.prefix, startPrefixMapping.uri);
        } else if (ev instanceof StartComment) {
            StartComment startJXComment = (StartComment) ev;
            // Parse the body of the comment
            NodeList nodeList = toDOMNodeList("comment", startJXComment, jexlContext, macroCall);
            // JXPath doesn't handle NodeList, so convert it to an array
            int len = nodeList.getLength();
            final StringBuffer buf = new StringBuffer();
            Properties omit = XMLUtils.createPropertiesForXML(true);
            for (int i = 0; i < len; i++) {
                try {
                    String str = XMLUtils.serializeNode(nodeList.item(i), omit);
                    buf.append(StringUtils.substringAfter(str, ">")); // cut the XML header
                } catch (Exception e) {
                    throw new JXTException(e.getMessage(), startJXComment.location, e);
                }
            }
            char[] chars = new char[buf.length()];
            buf.getChars(0, chars.length, chars, 0);
            consumer.comment(chars, 0, chars.length);
            ev = startJXComment.endInstruction.next;
            continue;
        } else if (ev instanceof EndCDATA) {
            consumer.endCDATA();
        } else if (ev instanceof EndDTD) {
            consumer.endDTD();
        } else if (ev instanceof EndEntity) {
            consumer.endEntity(((EndEntity) ev).name);
        } else if (ev instanceof StartCDATA) {
            consumer.startCDATA();
        } else if (ev instanceof StartDTD) {
            StartDTD startDTD = (StartDTD) ev;
            consumer.startDTD(startDTD.name, startDTD.publicId, startDTD.systemId);
        } else if (ev instanceof StartEntity) {
            consumer.startEntity(((StartEntity) ev).name);
        } else if (ev instanceof StartOut) {
            StartOut startOut = (StartOut) ev;
            Object val;
            try {
                val = getNode(startOut.compiledExpression, jexlContext, jxpathContext, startOut.lenient);
                if (val instanceof Node) {
                    executeDOM(consumer, jexlContext, jxpathContext, (Node) val);
                } else if (val instanceof NodeList) {
                    NodeList nodeList = (NodeList) val;
                    int len = nodeList.getLength();
                    for (int i = 0; i < len; i++) {
                        Node n = nodeList.item(i);
                        executeDOM(consumer, jexlContext, jxpathContext, n);
                    }
                } else if (val instanceof Node[]) {
                    Node[] nodeList = (Node[]) val;
                    int len = nodeList.length;
                    for (int i = 0; i < len; i++) {
                        Node n = nodeList[i];
                        executeDOM(consumer, jexlContext, jxpathContext, n);
                    }
                } else if (val instanceof XMLizable) {
                    ((XMLizable) val).toSAX(new IncludeXMLConsumer(consumer));
                } else {
                    char[] ch = val == null ? ArrayUtils.EMPTY_CHAR_ARRAY : val.toString().toCharArray();
                    consumer.characters(ch, 0, ch.length);
                }
            } catch (Exception e) {
                throw new JXTException(e.getMessage(), ev.location, e);
            }
        } else if (ev instanceof StartTemplate) {
            // EMPTY
        } else if (ev instanceof StartEval) {
            StartEval startEval = (StartEval) ev;
            JXTExpression expr = startEval.value;
            try {
                Object val = getNode(expr, jexlContext, jxpathContext);
                if (!(val instanceof StartElement)) {
                    throw new Exception("macro invocation required instead of: " + val);
                }
                StartElement call = (StartElement) val;
                execute(consumer, jexlContext, jxpathContext, call, call.next, call.endElement);
            } catch (Exception exc) {
                throw new JXTException(exc.getMessage(), ev.location, exc);
            }
            ev = startEval.endInstruction.next;
            continue;
        } else if (ev instanceof StartEvalBody) {
            StartEvalBody startEval = (StartEvalBody) ev;
            try {
                execute(consumer, jexlContext, jxpathContext, null, macroCall.next, macroCall.endElement);
            } catch (Exception exc) {
                throw new JXTException(exc.getMessage(), ev.location, exc);
            }
            ev = startEval.endInstruction.next;
            continue;
        } else if (ev instanceof StartDefine) {
            StartDefine startDefine = (StartDefine) ev;
            definitions.put(startDefine.qname, startDefine);
            ev = startDefine.endInstruction.next;
            continue;
        } else if (ev instanceof StartImport) {
            StartImport startImport = (StartImport) ev;
            String uri;
            AttributeEvent e = startImport.uri;
            if (e instanceof CopyAttribute) {
                CopyAttribute copy = (CopyAttribute) e;
                uri = copy.value;
            } else {
                StringBuffer buf = new StringBuffer();
                SubstituteAttribute substAttr = (SubstituteAttribute) e;
                Iterator i = substAttr.substitutions.iterator();
                while (i.hasNext()) {
                    Subst subst = (Subst) i.next();
                    if (subst instanceof Literal) {
                        Literal lit = (Literal) subst;
                        buf.append(lit.value);
                    } else if (subst instanceof JXTExpression) {
                        JXTExpression expr = (JXTExpression) subst;
                        Object val;
                        try {
                            val = getValue(expr, jexlContext, jxpathContext);
                        } catch (Exception exc) {
                            throw new JXTException(exc.getMessage(), ev.location, exc);
                        }
                        buf.append(val != null ? val.toString() : "");
                    }
                }
                uri = buf.toString();
            }
            Source input = null;
            StartDocument doc;
            try {
                input = resolver.resolveURI(uri);
                SourceValidity validity = null;
                synchronized (cache) {
                    doc = (StartDocument) cache.get(input.getURI());
                    if (doc != null) {
                        boolean recompile = false;
                        if (doc.compileTime == null) {
                            recompile = true;
                        } else {
                            int valid = doc.compileTime.isValid();
                            if (valid == SourceValidity.UNKNOWN) {
                                validity = input.getValidity();
                                valid = doc.compileTime.isValid(validity);
                            }
                            if (valid != SourceValidity.VALID) {
                                recompile = true;
                            }
                        }
                        if (recompile) {
                            doc = null; // recompile
                        }
                    }
                }
                if (doc == null) {
                    Parser parser = new Parser();
                    // call getValidity before using the stream is faster if the source is a SitemapSource
                    if (validity == null) {
                        validity = input.getValidity();
                    }
                    SourceUtil.parse(this.manager, input, parser);
                    doc = parser.getStartEvent();
                    doc.compileTime = validity;
                    synchronized (cache) {
                        cache.put(input.getURI(), doc);
                    }
                }
            } catch (Exception exc) {
                throw new JXTException(exc.getMessage(), ev.location, exc);
            } finally {
                resolver.release(input);
            }
            JXPathContext selectJXPath = jxpathContext;
            MyJexlContext selectJexl = jexlContext;
            if (startImport.select != null) {
                try {
                    Object obj = getValue(startImport.select, jexlContext, jxpathContext);
                    selectJXPath = jxpathContextFactory.newContext(null, obj);
                    selectJXPath.setNamespaceContextPointer(new NamespacesTablePointer(namespaces));
                    selectJXPath.setVariables(variables);
                    selectJexl = new MyJexlContext(jexlContext);
                    fillContext(obj, selectJexl);
                } catch (Exception exc) {
                    throw new JXTException(exc.getMessage(), ev.location, exc);
                }
            }
            try {
                execute(consumer, selectJexl, selectJXPath, macroCall, doc.next, doc.endDocument);
            } catch (Exception exc) {
                throw new JXTException(
                        "Exception occurred in imported template " + uri + ": " + exc.getMessage(), ev.location,
                        exc);
            }
            ev = startImport.endInstruction.next;
            continue;
        } else if (ev instanceof StartDocument) {
            if (((StartDocument) ev).endDocument != null) {
                // if this isn't a document fragment
                consumer.startDocument();
            }
        } else if (ev instanceof EndDocument) {
            consumer.endDocument();
        } else if (ev instanceof ProcessingInstruction) {
            ProcessingInstruction pi = (ProcessingInstruction) ev;
            consumer.processingInstruction(pi.target, pi.data);
        }
        ev = ev.next;
    }
}

From source file:org.apache.cocoon.generation.TextGenerator.java

/**
 * Generate XML data./*  w w w  . j a va2s  .c  o m*/
 *
 * @throws IOException
 * @throws ProcessingException
 * @throws SAXException
 */
public void generate() throws IOException, SAXException, ProcessingException {
    InputStreamReader in = null;

    try {
        final InputStream sis = this.inputSource.getInputStream();
        if (sis == null) {
            throw new ProcessingException("Source '" + this.inputSource.getURI() + "' not found");
        }

        if (encoding != null) {
            in = new InputStreamReader(sis, encoding);
        } else {
            in = new InputStreamReader(sis);
        }
    } catch (SourceException se) {
        throw new ProcessingException("Error during resolving of '" + this.source + "'.", se);
    }

    LocatorImpl locator = new LocatorImpl();

    locator.setSystemId(this.inputSource.getURI());
    locator.setLineNumber(1);
    locator.setColumnNumber(1);

    contentHandler.setDocumentLocator(locator);
    contentHandler.startDocument();
    contentHandler.startPrefixMapping("", URI);

    AttributesImpl atts = new AttributesImpl();
    if (localizable) {
        atts.addAttribute("", "source", "source", "CDATA", locator.getSystemId());
        atts.addAttribute("", "line", "line", "CDATA", String.valueOf(locator.getLineNumber()));
        atts.addAttribute("", "column", "column", "CDATA", String.valueOf(locator.getColumnNumber()));
    }

    contentHandler.startElement(URI, "text", "text", atts);

    LineNumberReader reader = new LineNumberReader(in);
    String line;
    String newline = null;

    while (true) {
        if (newline == null) {
            line = convertNonXmlChars(reader.readLine());
        } else {
            line = newline;
        }
        if (line == null) {
            break;
        }
        newline = convertNonXmlChars(reader.readLine());
        if (newline != null) {
            line += SystemUtils.LINE_SEPARATOR;
        }
        locator.setLineNumber(reader.getLineNumber());
        locator.setColumnNumber(1);
        contentHandler.characters(line.toCharArray(), 0, line.length());
        if (newline == null) {
            break;
        }
    }
    reader.close();
    contentHandler.endElement(URI, "text", "text");
    contentHandler.endPrefixMapping("");
    contentHandler.endDocument();
}

From source file:org.apache.cocoon.generation.TextGenerator2.java

/**
 * Generate XML data./* ww  w .ja  va2 s.  co  m*/
 *
 * @throws IOException
 * @throws ProcessingException
 * @throws SAXException
 */
public void generate() throws IOException, SAXException, ProcessingException {
    InputStreamReader in = null;
    try {
        final InputStream sis = this.inputSource.getInputStream();
        if (sis == null) {
            throw new ProcessingException("Source '" + this.inputSource.getURI() + "' not found");
        }
        if (encoding != null) {
            in = new InputStreamReader(sis, encoding);
        } else {
            in = new InputStreamReader(sis);
        }
    } catch (SourceException se) {
        throw new ProcessingException("Error during resolving of '" + this.source + "'.", se);
    }
    LocatorImpl locator = new LocatorImpl();
    locator.setSystemId(this.inputSource.getURI());
    locator.setLineNumber(1);
    locator.setColumnNumber(1);
    /* Do not pass the source URI to the contentHandler, assuming that that is the LexicalTransformer. It does not have to be.
      contentHandler.setDocumentLocator(locator);
    */
    contentHandler.startDocument();
    AttributesImpl atts = new AttributesImpl();
    if (localizable) {
        atts.addAttribute("", "source", "source", "CDATA", locator.getSystemId());
        atts.addAttribute("", "line", "line", "CDATA", String.valueOf(locator.getLineNumber()));
        atts.addAttribute("", "column", "column", "CDATA", String.valueOf(locator.getColumnNumber()));
    }
    String nsPrefix = this.element.contains(":") ? this.element.replaceFirst(":.+$", "") : "";
    String localName = this.element.replaceFirst("^.+:", "");
    if (this.namespace.length() > 1)
        contentHandler.startPrefixMapping(nsPrefix, this.namespace);
    contentHandler.startElement(this.namespace, localName, this.element, atts);
    LineNumberReader reader = new LineNumberReader(in);
    String line;
    String newline = null;
    while (true) {
        if (newline == null) {
            line = convertNonXmlChars(reader.readLine());
        } else {
            line = newline;
        }
        if (line == null) {
            break;
        }
        newline = convertNonXmlChars(reader.readLine());
        if (newline != null) {
            line += SystemUtils.LINE_SEPARATOR;
        }
        locator.setLineNumber(reader.getLineNumber());
        locator.setColumnNumber(1);
        contentHandler.characters(line.toCharArray(), 0, line.length());
        if (newline == null) {
            break;
        }
    }
    reader.close();
    contentHandler.endElement(this.namespace, localName, this.element);
    if (this.namespace.length() > 1)
        contentHandler.endPrefixMapping(nsPrefix);
    contentHandler.endDocument();
}

From source file:org.apache.cocoon.generation.XPathDirectoryGenerator.java

/**
 * Performs an XPath query on the file.//  w  ww.  ja  v a 2s.  c om
 *
 * @param xmlFile the File the XPath is performed on.
 *
 * @throws SAXException if something goes wrong while adding the XML snippet.
 */
protected void performXPathQuery(File xmlFile) throws SAXException {
    this.doc = null;

    Source source = null;

    try {
        source = resolver.resolveURI(xmlFile.toURL().toExternalForm());
        this.doc = this.parser.parseDocument(SourceUtil.getInputSource(source));
    } catch (SAXException e) {
        getLogger().error("Warning:" + xmlFile.getName() + " is not a valid XML file. Ignoring.", e);
    } catch (ProcessingException e) {
        getLogger().error("Warning: Problem while reading the file " + xmlFile.getName() + ". Ignoring.", e);
    } catch (IOException e) {
        getLogger().error("Warning: Problem while reading the file " + xmlFile.getName() + ". Ignoring.", e);
    } finally {
        resolver.release(source);
    }

    if (doc != null) {
        NodeList nl = (null == this.prefixResolver)
                ? this.processor.selectNodeList(this.doc.getDocumentElement(), this.xpath)
                : this.processor.selectNodeList(this.doc.getDocumentElement(), this.xpath, this.prefixResolver);
        AttributesImpl attributes = new AttributesImpl();
        attributes.addAttribute("", QUERY_ATTR_NAME, QUERY_ATTR_NAME, "CDATA", xpath);
        super.contentHandler.startElement(URI, XPATH_NODE_NAME, PREFIX + ":" + XPATH_NODE_NAME, attributes);

        DOMStreamer ds = new DOMStreamer(super.xmlConsumer);

        for (int i = 0; i < nl.getLength(); i++) {
            ds.stream(nl.item(i));
        }

        super.contentHandler.endElement(URI, XPATH_NODE_NAME, PREFIX + ":" + XPATH_NODE_NAME);
    }
}