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

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

Introduction

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

Prototype

@Override
    public final CharSequence getInputFromPositionMarker(final int toPos) 

Source Link

Usage

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

License:Open Source License

/**
 * @param bodyText/*from  ww w. java 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: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 www  . j av  a  2s  . 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;
    }
}