org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy Maven / Gradle / Ivy
/*
* 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.html.panel;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.markup.ComponentTag;
import org.apache.wicket.markup.IMarkupFragment;
import org.apache.wicket.markup.MarkupStream;
import org.apache.wicket.markup.html.internal.HtmlHeaderContainer;
import org.apache.wicket.markup.resolver.IComponentResolver;
/**
* Markup sourcing strategies determine whether a Component behaves like a "Panel" pulling its
* Markup from an associated Markup file, or like a Fragment pulling it from a another components
* Markup.
*
* @author Juergen Donnerstag
*/
public interface IMarkupSourcingStrategy
{
/**
* Will be called in addition to {@link Component#internalRenderHead(HtmlHeaderContainer)} and allows
* the strategy to contribute to the <head> section of the response.
*
* @see Component#internalRenderHead(HtmlHeaderContainer)
*
* @param component
* The component calling the strategy
* @param container
*/
void renderHead(final Component component, HtmlHeaderContainer container);
/**
* Will be called in addition to {@link Component#onComponentTag(ComponentTag)} and allows the
* strategy to modify the component's tag or any of the tag attributes.
*
* @see Component#onComponentTag(ComponentTag)
*
* @param component
* The component calling the strategy
* @param tag
*/
void onComponentTag(Component component, ComponentTag tag);
/**
* Will replace the respective component's method.
*
* It's perfectly valid to call component.onComponentTagBody(markupStream, openTag)
* from inside this method.
*
* @see Component#onComponentTagBody(MarkupStream, ComponentTag)
*
* @param component
* The component calling the strategy
* @param markupStream
* @param openTag
*/
void onComponentTagBody(final Component component, final MarkupStream markupStream,
final ComponentTag openTag);
/**
* Will replace the respective component's method. However by returning null, the
* component's method will be called.
*
* @see MarkupContainer#getMarkup(Component)
*
* @param container
* The parent containing the child. This is not the direct parent, transparent
* component {@link IComponentResolver resolver} may be in the hierarchy between.
* @param child
* The component to find the markup for.
* @return the markup fragment for the child, or {@code null}.
*/
IMarkupFragment getMarkup(final MarkupContainer container, final Component child);
}