/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2013 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.web.wicket.flowlayout;

import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.projectforge.web.wicket.WicketUtils;

/**
 * Represents a simple text panel enclosed in a div element.
 * @author Kai Reinhard (k.reinhard@micromata.de)
 * 
 */
public class DivTextPanel extends Panel
{
  private static final long serialVersionUID = 4900467057369413432L;

  public static final String WICKET_ID = "text";

  private final Label label;

  private final WebMarkupContainer div;

  public DivTextPanel(final String id, final String text, final Behavior... behaviors)
  {
    super(id);
    add(div = new WebMarkupContainer("div"));
    label = new Label(WICKET_ID, text);
    init(behaviors);
  }

  public DivTextPanel(final String id, final IModel<String> text, final Behavior... behaviors)
  {
    super(id);
    add(div = new WebMarkupContainer("div"));
    label = new Label(WICKET_ID, text);
    init(behaviors);
  }

  public DivTextPanel(final String id, final Label label)
  {
    super(id);
    add(div = new WebMarkupContainer("div"));
    this.label = label;
    div.add(label);
  }

  /**
   * Calls setRenderBodyOnly(false) and setOutputMarkupId(true) for the enclosed label.
   * @return the label
   */
  public Label getLabel4Ajax()
  {
    label.setRenderBodyOnly(false).setOutputMarkupId(true);
    return label;
  }

  /**
   * @return the label
   */
  public Label getLabel()
  {
    return label;
  }

  /**
   * @return the div
   */
  public WebMarkupContainer getDiv()
  {
    return div;
  }

  /**
   * @see org.apache.wicket.Component#setMarkupId(java.lang.String)
   */
  @Override
  public DivTextPanel setMarkupId(final String markupId)
  {
    label.setOutputMarkupId(true);
    label.setMarkupId(markupId);
    return this;
  }

  /**
   * @see WicketUtils#setStrong(org.apache.wicket.markup.html.form.FormComponent)
   * @return this for chaining.
   */
  public DivTextPanel setStrong()
  {
    WicketUtils.setStrong(label);
    return this;
  }

  private void init(final Behavior... behaviors)
  {
    label.add(behaviors);
    div.add(label);
  }
}
