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

import org.apache.wicket.markup.html.form.FormComponentPanel;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;

/**
 * This is not a real DateField. It only servers some testing purposes (derived from
 * FormComponentPanel)
 */
public class MyDateField extends FormComponentPanel<String>
{
	private static final long serialVersionUID = 1L;

	private String date;

	private final TextField<String> dateField;

	/**
	 * Construct.
	 * 
	 * @param id
	 */
	public MyDateField(String id)
	{
		this(id, null);
	}

	/**
	 * Construct.
	 * 
	 * @param id
	 * @param model
	 */
	public MyDateField(String id, IModel<String> model)
	{
		super(id, model);
		setType(String.class);
		PropertyModel<String> dateFieldModel = new PropertyModel<String>(this, "date");
		add(dateField = new TextField<String>("date", dateFieldModel));
	}

	/**
	 * Gets date.
	 * 
	 * @return date
	 */
	public String getDate()
	{
		return date;
	}

	/**
	 * Sets date.
	 * 
	 * @param date
	 *            date
	 */
	public void setDate(String date)
	{
		this.date = date;
		setDefaultModelObject(date);
	}

	/**
	 * Sets the converted input. In this case, we're really just interested in the nested date
	 * field, as that is the element that receives the real user input. So we're just passing that
	 * on.
	 * <p>
	 * Note that overriding this method is a better option than overriding {@link #updateModel()}
	 * like the first versions of this class did. The reason for that is that this method can be
	 * used by form validators without having to depend on the actual model being updated, and this
	 * method is called by the default implementation of {@link #updateModel()} anyway (so we don't
	 * have to override that anymore).
	 * </p>
	 * 
	 * @see org.apache.wicket.markup.html.form.FormComponent#convertInput()
	 */
	@Override
	public void convertInput()
	{
		setConvertedInput(dateField.getConvertedInput() + "-converted");
	}

	/**
	 * @see org.apache.wicket.Component#onBeforeRender()
	 */
	@Override
	protected void onBeforeRender()
	{
		dateField.setRequired(isRequired());

		String d = (String)getDefaultModelObject();
		if (d != null)
		{
			date = d;
		}
		else
		{
			date = null;
		}

		super.onBeforeRender();
	}
}
