package com.googlecode.tawus.components;
import org.apache.tapestry5.BindingConstants;
import org.apache.tapestry5.Block;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SupportsInformalParameters;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.internal.beaneditor.BeanModelUtils;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanModelSource;
import com.googlecode.tawus.TawusEvents;
import com.googlecode.tawus.annotations.XHR;
import com.googlecode.tawus.internal.GridRuntime;
@SupportsInformalParameters
public class EntitySearchForm
{
@Inject
@Property(write = false)
private ComponentResources resources;
@SuppressWarnings("unused")
@Component(id = "editor", publishParameters = "include", parameters = { "readOnly=false", "validate=false",
"showHelp=prop:showHelp", "overrides=this", "add=add", "model=model", "object=grid.searchObject" })
private EntityEditor editor;
@SuppressWarnings("rawtypes")
@Property
@Parameter
private BeanModel model;
@Parameter(defaultPrefix = BindingConstants.LITERAL)
@Property
private String add;
@Parameter(allowNull = false, required = true, defaultPrefix = BindingConstants.COMPONENT)
@Property
private GridRuntime grid;
@SuppressWarnings("unused")
@Parameter(value = "false", defaultPrefix = BindingConstants.LITERAL)
@Property
private boolean showHelp;
@Parameter(defaultPrefix = BindingConstants.BLOCK)
private Block buttonPanel;
@Inject
private Block defaultButtonPanel;
Block defaultButtonPanel()
{
return defaultButtonPanel;
}
public Block getButtonPanel()
{
return buttonPanel;
}
@Inject
private BeanModelSource beanModelSource;
private boolean search;
/**
* On prepare
*/
@SuppressWarnings("unchecked")
void onPrepareFromForm()
{
resources.triggerEvent(EventConstants.PREPARE, null, null);
if(model == null)
{
@SuppressWarnings("rawtypes")
Class beanType = grid.getSearchObject().getClass();
model = beanModelSource.createEditModel(beanType, resources.getContainerMessages());
BeanModelUtils.modify(model, add, null, null, null);
}
}
void onSelectedFromSearch()
{
search = true;
}
void onValidateFromForm()
{
resources.triggerEvent(EventConstants.VALIDATE, null, null);
}
void onSuccess()
{
if(search)
{
grid.showGrid();
grid.enableSearch();
resources.triggerEvent(TawusEvents.SEARCH, null, null);
}
else
{
grid.cancel();
resources.triggerEvent(TawusEvents.CANCEL_SEARCH, null, null);
}
}
@XHR
Object onSubmitFromForm()
{
if(grid.getZone() != null)
{
return ((Zone) resources.getContainerResources().getEmbeddedComponent(grid.getZone())).getBody();
}
else
{
return null;
}
}
}