All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.wicket.markup.MarkupParser Maven / Gradle / Ivy

Go to download

Pax Wicket Service is an OSGi extension of the Wicket framework, allowing for dynamic loading and unloading of Wicket components and pageSources.

There is a newer version: 5.0.0
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.wicket.markup;

import java.util.ArrayList;

import org.apache.wicket.Page;
import org.apache.wicket.markup.html.form.AutoLabelTagHandler;
import org.apache.wicket.markup.parser.IMarkupFilter;
import org.apache.wicket.markup.parser.IXmlPullParser;
import org.apache.wicket.markup.parser.filter.ConditionalCommentFilter;
import org.apache.wicket.markup.parser.filter.EnclosureHandler;
import org.apache.wicket.markup.parser.filter.HeadForceTagIdHandler;
import org.apache.wicket.markup.parser.filter.HtmlHandler;
import org.apache.wicket.markup.parser.filter.HtmlHeaderSectionHandler;
import org.apache.wicket.markup.parser.filter.InlineEnclosureHandler;
import org.apache.wicket.markup.parser.filter.OpenCloseTagExpander;
import org.apache.wicket.markup.parser.filter.RelativePathPrefixHandler;
import org.apache.wicket.markup.parser.filter.StyleAndScriptIdentifier;
import org.apache.wicket.markup.parser.filter.WicketLinkTagHandler;
import org.apache.wicket.markup.parser.filter.WicketMessageTagHandler;
import org.apache.wicket.markup.parser.filter.WicketNamespaceHandler;
import org.apache.wicket.markup.parser.filter.WicketRemoveTagHandler;
import org.apache.wicket.markup.parser.filter.WicketTagIdentifier;
import org.apache.wicket.util.lang.Objects;

/**
 * This is Wicket's default markup parser. It gets pre-configured with Wicket's default wicket
 * filters.
 * 
 * @see MarkupFactory
 * 
 * @author Juergen Donnerstag
 */
public class MarkupParser extends AbstractMarkupParser
{
	/** "wicket" */
	public final static String WICKET = "wicket";

	/**
	 * Constructor.
	 * 
	 * @param resource
	 *            The markup resource (file)
	 */
	public MarkupParser(final MarkupResourceStream resource)
	{
		super(resource);
	}

	/**
	 * Constructor. Usually for testing purposes only
	 * 
	 * @param markup
	 *            The markup resource.
	 */
	public MarkupParser(final String markup)
	{
		super(markup);
	}

	/**
	 * Constructor.
	 * 
	 * @param xmlParser
	 *            The streaming xml parser to read and parse the markup
	 * @param resource
	 *            The markup resource (file)
	 */
	public MarkupParser(final IXmlPullParser xmlParser, final MarkupResourceStream resource)
	{
		super(xmlParser, resource);
	}

	@Override
	public MarkupFilterList getMarkupFilters()
	{
		return (MarkupFilterList)super.getMarkupFilters();
	}

	/**
	 * Add a markup filter
	 * 
	 * @param filter
	 * @return true, if successful
	 */
	public final boolean add(final IMarkupFilter filter)
	{
		return getMarkupFilters().add(filter);
	}

	/**
	 * Add a markup filter before the 'beforeFilter'
	 * 
	 * @param filter
	 * @param beforeFilter
	 * @return true, if successful
	 */
	public final boolean add(final IMarkupFilter filter,
		final Class beforeFilter)
	{
		return getMarkupFilters().add(filter, beforeFilter);
	}

	/**
	 * a) Allow subclasses to configure individual Wicket filters
	 * 

* b) Allows to disable Wicket filters via returning false * * @param filter * @return The filter to be added. Null to ignore. */ protected IMarkupFilter onAppendMarkupFilter(final IMarkupFilter filter) { return filter; } /** * Initialize Wicket's MarkupParser with all necessary markup filters. You may subclass this * method, to add your own filters to the list. * * @param markup * @return The list of markup filter */ @Override protected MarkupFilterList initializeMarkupFilters(final Markup markup) { // MarkupFilterList is a simple extension of ArrayList providing few additional helpers final MarkupFilterList filters = new MarkupFilterList(); MarkupResourceStream markupResourceStream = markup.getMarkupResourceStream(); filters.add(new WicketTagIdentifier(markupResourceStream)); filters.add(new HtmlHandler()); filters.add(new WicketRemoveTagHandler()); filters.add(new WicketLinkTagHandler()); filters.add(new AutoLabelTagHandler()); filters.add(new WicketNamespaceHandler(markupResourceStream)); filters.add(new WicketMessageTagHandler(markupResourceStream)); // Provided the wicket component requesting the markup is known ... if ((markupResourceStream != null) && (markupResourceStream.getResource() != null)) { final ContainerInfo containerInfo = markupResourceStream.getContainerInfo(); if (containerInfo != null) { // Pages require additional handlers if (Page.class.isAssignableFrom(containerInfo.getContainerClass())) { filters.add(new HtmlHeaderSectionHandler(markup)); } filters.add(new HeadForceTagIdHandler(containerInfo.getContainerClass())); } } filters.add(new OpenCloseTagExpander()); filters.add(new RelativePathPrefixHandler(markupResourceStream)); filters.add(new EnclosureHandler()); filters.add(new InlineEnclosureHandler()); // Append it. See WICKET-4390 filters.add(new StyleAndScriptIdentifier(markup), StyleAndScriptIdentifier.class); filters.add(new ConditionalCommentFilter()); return filters; } /** * A simple extension to ArrayList to manage Wicket MarkupFilter's more easily */ public class MarkupFilterList extends ArrayList { private static final long serialVersionUID = 1L; @Override public boolean add(final IMarkupFilter filter) { return add(filter, RelativePathPrefixHandler.class); } /** * Insert a markup filter before a another one. * * @param filter * @param beforeFilter * @return true, if successful */ public boolean add(IMarkupFilter filter, final Class beforeFilter) { filter = onAdd(filter); if (filter == null) { return false; } int index = firstIndexOfClass(beforeFilter); if (index < 0) { return super.add(filter); } super.add(index, filter); return true; } /** * Finds the index of the first entry which is from the same type as the passed * {@literal filterClass} argument. * * @param filterClass * the class to search for * @return the index of the first match or -1 otherwise */ private int firstIndexOfClass(final Class filterClass) { int result = -1; if (filterClass != null) { final int size = size(); for (int index = 0; index < size; index++) { Class currentFilterClass = get(index).getClass(); if (Objects.equal(filterClass, currentFilterClass)) { result = index; break; } } } return result; } /** * a) Allow subclasses to configure individual Wicket filters which otherwise can not be * accessed. *

* b) Allows to disable Wicket filters via returning false * * @param filter * @return The filter to be added. Null to ignore */ protected IMarkupFilter onAdd(final IMarkupFilter filter) { return onAppendMarkupFilter(filter); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy