package com.googlecode.tawus.components;
import org.apache.tapestry5.ComponentAction;
import org.apache.tapestry5.PropertyOverrides;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.Environmental;
import org.apache.tapestry5.annotations.Parameter;
import org.apache.tapestry5.beaneditor.BeanModel;
import org.apache.tapestry5.corelib.components.PropertyEditor;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.BeanBlockSource;
import org.apache.tapestry5.services.Environment;
import org.apache.tapestry5.services.FormSupport;
import com.googlecode.tawus.internal.table.TdEditorContext;
import com.googlecode.tawus.services.TawusBeanBlockSource;
@SuppressWarnings("unused")
public class EntityPropertyEditor
{
static public class SetupEnvironment implements ComponentAction<EntityPropertyEditor>
{
private static final long serialVersionUID = 1L;
private int columnSpan;
private String cssClassPrefix;
private int rowSpan;
private boolean showHelp;
private String helpText;
public SetupEnvironment(int rowSpan, int columnSpan, String cssClassPrefix, String helpText, boolean showHelp)
{
this.rowSpan = rowSpan;
this.columnSpan = columnSpan;
this.cssClassPrefix = cssClassPrefix;
this.showHelp = showHelp;
this.helpText = helpText;
}
public void execute(EntityPropertyEditor editor)
{
editor.setupEnvironment(rowSpan, columnSpan, cssClassPrefix, helpText, showHelp);
}
}
static public class CleanupEnvironment implements ComponentAction<EntityPropertyEditor>
{
private static final long serialVersionUID = 1L;
public void execute(EntityPropertyEditor editor)
{
editor.cleanupEnvironment();
}
}
private static CleanupEnvironment CLEANUP_ENVIRONMENT = new CleanupEnvironment();
@Component(id = "propertyEditor", parameters = { "overrides=inherit:overrides", "object=inherit:object",
"model=inherit:model", "property=inherit:property", "beanBlockSource=prop:beanBlockSource" })
private PropertyEditor propertyEditor;
@Parameter(required = true)
private int rowSpan;
@Parameter(required = true)
private int columnSpan;
@Parameter(required = true)
private String cssClassPrefix;
@Parameter(required = true)
private boolean showHelp;
@Parameter
private PropertyOverrides overrides;
@Parameter
private Object object;
@Parameter
private BeanModel<?> model;
@Parameter
private String property;
@Inject
private Environment environment;
@Environmental
private FormSupport formSupport;
@Inject
private TawusBeanBlockSource beanBlockSource;
public void setupEnvironment(final int rowSpan,
final int columnSpan,
final String cssClassPrefix,
final String helpText,
final boolean showHelp)
{
environment.push(TdEditorContext.class, new TdEditorContext()
{
public int getColumnSpan()
{
return columnSpan;
}
public String getCssClassPrefix()
{
return cssClassPrefix;
}
public String getHelpText()
{
return helpText;
}
public int getRowSpan()
{
return rowSpan;
}
public boolean getShowHelp()
{
return showHelp;
}
});
}
public void cleanupEnvironment()
{
environment.pop(TdEditorContext.class);
}
void setupRender()
{
formSupport.storeAndExecute(this, new SetupEnvironment(rowSpan, columnSpan, cssClassPrefix, getHelpText(),
showHelp));
}
void cleanupRender()
{
formSupport.storeAndExecute(this, CLEANUP_ENVIRONMENT);
}
public BeanBlockSource getBeanBlockSource()
{
return beanBlockSource.getBeanBlockSource();
}
public String getHelpText()
{
final Messages messages = overrides.getOverrideMessages();
final String message;
if(messages.contains(property + "-help"))
{
message = messages.get(property + "-help");
}
else
{
message = "";
}
return message;
}
}