package org.tynamo.examples.simple.pages;
import org.apache.tapestry5.Block;
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.annotations.Component;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.annotations.SetupRender;
import org.apache.tapestry5.corelib.components.Grid;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;
import org.tynamo.components.ModelSearch;
import org.tynamo.descriptor.annotation.beaneditor.BeanModel;
import org.tynamo.descriptor.annotation.beaneditor.BeanModels;
import org.tynamo.examples.simple.entities.Person;
import org.tynamo.routing.annotations.At;
import org.tynamo.services.PersistenceService;
import org.tynamo.util.TynamoMessages;
import org.tynamo.util.Utils;
/**
* Page for listing elements of a given type.
*
* @note:
* When extending this page for customization purposes, it's better to copy & paste code than trying to use inheritance.
*
*/
@At("/{0}")
@BeanModels({
@BeanModel(beanType = Person.class, include = "id, firstName, lastName")
})
public class List
{
@Inject
private PersistenceService persistenceService;
@Inject
private Messages messages;
@Property(write = false)
private Class beanType;
@Property
private Object bean;
@Inject
@Property
private Block resultcountBlock;
@InjectComponent
private Grid grid;
@Component(parameters = "beanType=beanType")
@Property(write = false)
private ModelSearch modelSearch;
@OnEvent(EventConstants.ACTIVATE)
Object onActivate(Class clazz)
{
if (clazz == null) return Utils.new404(messages);
this.beanType = clazz;
return null;
}
@OnEvent(EventConstants.PASSIVATE)
Object[] passivate()
{
return new Object[]{beanType};
}
/**
* This is where you can perform any one-time per-render setup for your component. This is a good place to read
* component parameters and use them to set temporary instance variables.
* More info: http://tapestry.apache.org/tapestry5.1/guide/rendering.html
* {@see org.apache.tapestry5.annotations.SetupRender}
*/
@SetupRender
void setupRender()
{
grid.reset();
}
public Object[] getShowPageContext()
{
return new Object[]{beanType, bean};
}
public String getTitle()
{
return TynamoMessages.list(messages, beanType);
}
public String getNewLinkMessage()
{
return TynamoMessages.add(messages, beanType);
}
void onActionFromResetSearchCriteria() {
modelSearch.resetSearchCriteria();
}
@Inject
private Request request;
void onSearchTermsChanged() {
String searchTerms = request.getParameter("param");
if (searchTerms != null) modelSearch.setSearchTerms(searchTerms);
// return request.isXHR() ? termZone.getBody() : null;
}
public int getBeanCount() {
return persistenceService.count(beanType);
}
}