/*
 * 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.border;

import org.apache.wicket.markup.html.panel.IMarkupSourcingStrategy;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.markup.html.panel.PanelMarkupSourcingStrategy;
import org.apache.wicket.model.IModel;

/**
 * Whereas a Panel replaces the body markup with the associated markup file, a BorderPanel assumes a
 * that Body component renders the body markup including any number of Wicket Components.
 * <p>
 * Example:
 * 
 * <pre>
 * <u>MyPage.html</u>
 * ...
 * &lt;div wicket:id="myPanel"&gt;
 *   ...
 *   &lt;div wicket:id="body"/&gt;
 *   ...
 * &lt;/div&gt;
 * 
 * <u>MyPage.java</u>
 * ...
 * public MyPage extends WebPage {
 *   ...
 *   public MyPage() { 
 *     ...
 *     add(new MyPanel("myPanel"));
 *     ...
 *   }
 *   ...
 * }
 * 
 * <u>MyPanel.java</u>
 * ...
 * public MyPanel extends PanelBorder {
 *   ...
 *   public MyPanel(final String id) {
 *     super(id);
 *     ...
 *     add(newBody("body"));
 *     ...
 *   }
 * }
 * </pre>
 * 
 * @see BorderBehavior A behavior which add (raw) markup before and after the component
 * 
 * @author Juergen Donnerstag
 */
public abstract class BorderPanel extends Panel
{
	private static final long serialVersionUID = 1L;

	private Body body;

	/**
	 * @see org.apache.wicket.Component#Component(String)
	 */
	public BorderPanel(final String id)
	{
		this(id, null);
	}

	/**
	 * @see org.apache.wicket.Component#Component(String, IModel)
	 */
	public BorderPanel(final String id, final IModel<?> model)
	{
		super(id, model);
	}

	@Override
	protected IMarkupSourcingStrategy newMarkupSourcingStrategy()
	{
		return new PanelMarkupSourcingStrategy(true);
	}

	/**
	 * Sets the body container
	 * 
	 * @param body
	 * @return The body component
	 */
	public final Body setBodyContainer(final Body body)
	{
		this.body = body;
		return body;
	}

	/**
	 * Provide easy access to the Body component.
	 * 
	 * @return The body container
	 */
	public final Body getBodyContainer()
	{
		return body;
	}

	/**
	 * Create a new body container identified by id in the panel's markup
	 * 
	 * @param id
	 * @return Body component
	 */
	public final Body newBodyContainer(final String id)
	{
		body = new Body(id, this);
		return body;
	}
}

@@ -1431,17 +1431,28 @@
 ket:id=%22
-b
+componentInB
 ody%22/&gt
@@ -1607,20 +1607,33 @@
 %0A *     
-add(
+MyPanel border = 
 new MyPa
@@ -1646,16 +1646,111 @@
 yPanel%22)
+;%0D%0A *     add(border);%0D%0A *     border.getBodyContainer().add(new MyComponent(%22componentInBody%22)
 );%0D%0A *  
@@ -1848,19 +1848,19 @@
 nds 
-Panel
 Border
+Panel
  %7B%0D%0A
@@ -1936,24 +1936,24 @@
  *     ...%0D%0A
-
  *     add(n
@@ -1958,16 +1958,25 @@
 (newBody
+Container
 (%22body%22)

Update the javadoc according to the example in src/test/java/org.apache.wicket.markup.html.form.panelBorder.CommonBorder