Example usage for org.apache.wicket.markup.parser XmlPullParser XmlPullParser

List of usage examples for org.apache.wicket.markup.parser XmlPullParser XmlPullParser

Introduction

In this page you can find the example usage for org.apache.wicket.markup.parser XmlPullParser XmlPullParser.

Prototype

public XmlPullParser() 

Source Link

Document

Construct.

Usage

From source file:com.servoy.j2db.server.headlessclient.dataui.StripHTMLTagsConverter.java

License:Open Source License

/**
 * @param bodyText//from  w w  w  . j  a  va 2 s . c  o  m
 * @param solution
 * @return
 */
@SuppressWarnings("nls")
public static StrippedText convertBodyText(Component component, CharSequence bodyText,
        FlattenedSolution solutionRoot) {
    StrippedText st = new StrippedText();
    if (RequestCycle.get() == null) {
        st.setBodyTxt(bodyText);
        return st;
    }

    ResourceReference rr = new ResourceReference("media"); //$NON-NLS-1$
    String solutionName = solutionRoot.getSolution().getName();

    StringBuffer bodyTxt = new StringBuffer(bodyText.length());
    XmlPullParser parser = new XmlPullParser();

    ICrypt urlCrypt = null;
    if (Application.exists())
        urlCrypt = Application.get().getSecuritySettings().getCryptFactory().newCrypt();

    try {
        parser.parse(new ByteArrayInputStream(bodyText.toString().getBytes("UTF8")), "UTF8"); //$NON-NLS-1$ //$NON-NLS-2$
        XmlTag me = (XmlTag) parser.nextTag();

        while (me != null) {
            CharSequence tmp = parser.getInputFromPositionMarker(me.getPos());
            if (tmp.toString().trim().length() > 0)
                bodyTxt.append(tmp);
            parser.setPositionMarker();

            String currentTagName = me.getName().toLowerCase();

            if (currentTagName.equals("script")) //$NON-NLS-1$
            {
                if (!me.isClose()) {
                    String srcUrl = (String) me.getAttributes().get("src"); //$NON-NLS-1$
                    if (srcUrl == null)
                        srcUrl = (String) me.getAttributes().get("SRC"); //$NON-NLS-1$
                    me = (XmlTag) parser.nextTag();
                    if (srcUrl != null) {
                        st.getJavascriptUrls()
                                .add(convertMediaReferences(srcUrl, solutionName, rr, "", true).toString());
                    } else {
                        if (me != null) {
                            st.getJavascriptScripts().add(parser.getInputFromPositionMarker(me.getPos()));
                            parser.setPositionMarker();
                        }
                    }
                } else {
                    me = (XmlTag) parser.nextTag();
                }
                continue;
            } else if (currentTagName.equals("style")) {
                if (me.isOpen()) {
                    me = (XmlTag) parser.nextTag();
                    List<CharSequence> styles = st.getStyles();
                    String style = parser.getInputFromPositionMarker(me.getPos()).toString().trim();
                    if (!"".equals(style) && !styles.contains(style)) {
                        styles.add(convertMediaReferences(style, solutionName, rr, "", false));
                    }
                    parser.setPositionMarker();
                } else {
                    me = (XmlTag) parser.nextTag();
                }
                continue;
            } else if (currentTagName.equals("link")) {
                if (me.isOpen() || me.isOpenClose()) {
                    String end = "\n";
                    if (me.isOpen())
                        end = "</link>\n";
                    st.getLinkTags().add(
                            convertMediaReferences(me.toXmlString(null) + end, solutionName, rr, "", false));
                }
                me = (XmlTag) parser.nextTag();
                continue;
            }
            if (ignoreTags.contains(currentTagName)) {
                if (currentTagName.equals("body") && (me.isOpen() || me.isOpenClose())) {
                    if (me.getAttributes().size() > 0) {
                        st.addBodyAttributes(me.getAttributes());
                    }
                    me = (XmlTag) parser.nextTag();
                } else {
                    me = (XmlTag) parser.nextTag();
                }
                continue;
            }

            if (currentTagName.equals("img") && component instanceof ILabel) {
                ILabel label = (ILabel) component;
                String onload = "Servoy.Utils.setLabelChildHeight('" + component.getMarkupId() + "', "
                        + label.getVerticalAlignment() + ");";
                onload = me.getAttributes().containsKey("onload")
                        ? me.getAttributes().getString("onload") + ";" + onload
                        : onload;
                me.getAttributes().put("onload", onload);
            }

            boolean ignoreOnclick = false;
            IValueMap attributeMap = me.getAttributes();
            // first transfer over the tabindex to anchor tags
            if (currentTagName.equals("a")) {
                int tabIndex = TabIndexHelper.getTabIndex(component);
                if (tabIndex != -1)
                    attributeMap.put("tabindex", Integer.valueOf(tabIndex));
            }
            // TODO attributes with casing?
            // now they have to be lowercase. (that is a xhtml requirement)
            for (String attribute : scanTags) {
                if (ignoreOnclick && attribute.equals("onclick")) //$NON-NLS-1$
                    continue;
                String src = attributeMap.getString(attribute);
                if (src == null) {
                    continue;
                }
                String lowercase = src.toLowerCase();
                if (lowercase.startsWith(MediaURLStreamHandler.MEDIA_URL_DEF)) {
                    String name = src.substring(MediaURLStreamHandler.MEDIA_URL_DEF.length());
                    if (name.startsWith(MediaURLStreamHandler.MEDIA_URL_BLOBLOADER)) {
                        String url = generateBlobloaderUrl(component, urlCrypt, name);
                        me.getAttributes().put(attribute, url);
                    } else {
                        String translatedUrl = MediaURLStreamHandler.getTranslatedMediaURL(solutionRoot,
                                lowercase);
                        if (translatedUrl != null) {
                            me.getAttributes().put(attribute, translatedUrl);
                        }
                    }
                } else if (component instanceof ISupportScriptCallback && lowercase.startsWith("javascript:")) {
                    String script = src;
                    if (script.length() > 13) {
                        String scriptName = script.substring(11);
                        if ("href".equals(attribute)) {
                            if (attributeMap.containsKey("externalcall")) {
                                attributeMap.remove("externalcall");
                            } else {
                                me.getAttributes().put("href", "#");
                                me.getAttributes().put("onclick",
                                        ((ISupportScriptCallback) component).getCallBackUrl(scriptName, true));
                                ignoreOnclick = true;
                            }
                        } else {
                            me.getAttributes().put(attribute, ((ISupportScriptCallback) component)
                                    .getCallBackUrl(scriptName, "onclick".equals(attribute)));
                        }
                    }
                } else if (component instanceof FormComponent<?> && lowercase.startsWith("javascript:")) {
                    String script = src;
                    if (script.length() > 13) {
                        String scriptName = script.substring(11);
                        if ("href".equals(attribute)) {
                            me.getAttributes().put("href", "#");
                            me.getAttributes().put("onclick",
                                    getTriggerJavaScript((FormComponent<?>) component, scriptName));
                            ignoreOnclick = true;
                        } else {
                            me.getAttributes().put(attribute,
                                    getTriggerJavaScript((FormComponent<?>) component, scriptName));
                        }
                    }
                }
            }
            bodyTxt.append(me.toString());
            me = (XmlTag) parser.nextTag();
        }
        bodyTxt.append(parser.getInputFromPositionMarker(-1));

        st.setBodyTxt(convertMediaReferences(convertBlobLoaderReferences(bodyTxt, component), solutionName, rr,
                "", false)); //$NON-NLS-1$
    } catch (ParseException ex) {
        Debug.error(ex);
        bodyTxt.append("<span style=\"color : #ff0000;\">"); //$NON-NLS-1$
        bodyTxt.append(ex.getMessage());
        bodyTxt.append(bodyText.subSequence(ex.getErrorOffset(),
                Math.min(ex.getErrorOffset() + 100, bodyText.length())));
        bodyTxt.append("</span></body></html>"); //$NON-NLS-1$
        st.setBodyTxt(bodyTxt);
    } catch (Exception ex) {
        Debug.error(ex);
        bodyTxt.append("<span style=\"color : #ff0000;\">"); //$NON-NLS-1$
        bodyTxt.append(ex.getMessage());
        bodyTxt.append("</span></body></html>"); //$NON-NLS-1$
        st.setBodyTxt(bodyTxt);
    }
    return st;
}

From source file:net.jawr.web.wicket.JawrWicketApplicationInitializer.java

License:Apache License

/**
 * Initialize the wicket application/*  w w w.  ja va2s .  com*/
 * 
 * @param app the aplpication to initialize
 */
public static void initApplication(Application app) {

    // Add the Jawr tag handler to the MarkupParserFactory 
    MarkupFactory factory = new MarkupFactory() {

        public MarkupParser newMarkupParser(final MarkupResourceStream resource) {
            MarkupParser parser = new MarkupParser(new XmlPullParser(), resource);
            parser.add(new JawrWicketLinkTagHandler());
            return parser;
        }
    };

    app.getMarkupSettings().setMarkupFactory(factory);

    // Add the Jawr link resolver
    app.getPageSettings().addComponentResolver(new JawrWicketLinkResolver());
}

From source file:org.madogiwa.wicket.altmark.AlternativeMarkupParserFactory.java

License:Apache License

@Override
public MarkupParser newMarkupParser(MarkupResourceStream resource) {
    MarkupParser markupParser = new MarkupParser(new XmlPullParser(), resource);
    markupParser.appendMarkupFilter(new HtmlTagIdentifier(prefix, prefixRemoving), HtmlHandler.class);
    return markupParser;
}

From source file:org.wicketstuff.poi.excel.TableParser.java

License:Apache License

private void doParse(CharSequence gridComponentMarkup, Component tableComponent)
        throws IOException, ResourceStreamNotFoundException, ParseException {
    XmlPullParser parser = new XmlPullParser();
    parser.parse(gridComponentMarkup);/*  w w w  .  j  a  v a  2 s.c o  m*/
    XmlTag tag;
    int tableDeep = 0;
    while ((tag = parser.nextTag()) != null) {
        if ("table".equals(tag.getName().toLowerCase())) {
            if (tag.isOpen()) {
                tableDeep++;
            } else {
                tableDeep--;
            }
        }
        if (tableDeep > 1) {
            // we don't want to read inner tables
            continue;
        }
        if (tag.isOpen()) {
            String tagName = tag.getName().toLowerCase();

            if ("tr".equals(tagName)) {
                if (tableDeep == 0) {
                    // means that root table is outside the component markup
                    tableDeep = 1;
                }
                int index = row == null ? 0 : row.getRowNum() + 1;
                row = targetSheet.createRow(index);
                cell = null;
            } else if ("td".equals(tagName) || "th".equals(tagName)) {
                int index = cell == null ? 0 : cell.getColumnIndex() + 1 + colsToSpan;
                if (skipColumn(index)) {
                    index += columnSpan.get(index);
                }
                colsToSpan = 0;
                CharSequence rowspan = tag.getAttribute("rowspan");
                CharSequence colspan = tag.getAttribute("colspan");
                cell = row.createCell(index);
                if (rowspan != null || colspan != null) {
                    int rowsToSpan = rowspan == null ? 0 : Integer.valueOf(rowspan.toString()) - 1;
                    colsToSpan = colspan == null ? 0 : Integer.valueOf(colspan.toString()) - 1;

                    if (rowsToSpan > 0) {
                        rowsToSpanByColumn.put(index, rowsToSpan);
                        columnSpan.put(index, colsToSpan + 1);
                    }

                    int lastRowNum = row.getRowNum() + rowsToSpan;
                    int lastColIndex = index + colsToSpan;
                    targetSheet.addMergedRegion(new CellRangeAddress(//
                            row.getRowNum(), // first row (0-based)
                            lastRowNum, // last row (0-based)
                            index, // first column (0-based)
                            lastColIndex // last column (0-based)
                    ));
                }
                cellExporter.exportCell(tag, parser, cell, tableComponent);
            }
        }
    }
}

From source file:org.wicketstuff.push.cometd.CometdPushBehavior.java

License:Apache License

/**
 * Parse the web.xml to find cometd context Path. This context path will be cache for all the
 * application//from w  w  w.  j a v a 2 s.  co  m
 * 
 * @return cometd context path
 */
private static String guessCometdServletPath() {
    final ServletContext servletContext = ((WebApplication) Application.get()).getServletContext();
    final InputStream is = servletContext.getResourceAsStream("/WEB-INF/web.xml");

    /*
     * get the servlet name from class assignable to org.mortbay.cometd.CometdServlet
     */
    try {
        final XmlPullParser parser = new XmlPullParser();
        parser.parse(is);
        String urlPattern = null;

        while (true) {
            XmlTag elem;
            // go down until servlet is found
            do
                elem = parser.nextTag();
            while (elem != null && !(elem.getName().equals("servlet") && elem.isOpen()));

            // stop if elem is null
            if (elem == null)
                break;

            // get the servlet name for org.mortbay.cometd.CometdServlet
            String servletName = null, servletClassName = null;
            do {
                elem = parser.nextTag();
                if (elem.isOpen())
                    parser.setPositionMarker();
                else if (elem.isClose() && elem.getName().equals("servlet-name"))
                    servletName = parser.getInputFromPositionMarker(elem.getPos()).toString();
                else if (elem.isClose() && elem.getName().equals("servlet-class"))
                    servletClassName = parser.getInputFromPositionMarker(elem.getPos()).toString();
            } while (servletClassName == null
                    || !CometdServlet.class.isAssignableFrom(Class.forName(servletClassName)));

            if (servletName == null)
                break;

            // go down until servlet-mapping is found
            do
                elem = parser.nextTag();
            while (elem != null && !(elem.getName().equals("servlet-mapping") && elem.isOpen()));

            // stop if elem is null
            if (elem == null)
                break;

            // get the servlet name for org.mortbay.cometd.CometdServlet
            String servletNameMapping = null;
            do {
                elem = parser.nextTag();
                if (elem.isOpen())
                    parser.setPositionMarker();
                else if (elem.isClose() && elem.getName().equals("servlet-name"))
                    servletNameMapping = parser.getInputFromPositionMarker(elem.getPos()).toString();
            } while (!servletName.equals(servletNameMapping));

            // and the urlPattern
            do {
                elem = parser.nextTag();
                if (elem.isOpen())
                    parser.setPositionMarker();
                else if (elem.isClose() && elem.getName().equals("url-pattern"))
                    urlPattern = parser.getInputFromPositionMarker(elem.getPos()).toString();
            } while (urlPattern == null);

            // all it is found
            break;
        }

        if (urlPattern == null)
            throw new ServletException("Error searching for cometd Servlet");

        // Check for leading '/' and trailing '/*'.
        if (!urlPattern.startsWith("/") || !urlPattern.endsWith("/*"))
            throw new ServletException("Url pattern for cometd should start with / and finish with /*");

        // Strip trailing '/*'.
        return servletContext.getContextPath() + urlPattern.substring(0, urlPattern.length() - 2);

    } catch (final Exception ex) {
        final String path = servletContext.getContextPath() + "/cometd";
        LOG.warn("Error finding filter cometd servlet in web.xml using default path " + path, ex);
        return path;
    }
}