package org.tynamo.examples.simple.pages.show;
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.annotations.CleanupRender;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Property;
import org.tynamo.examples.simple.CustomCommitAfter;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.ContextValueEncoder;
import org.apache.tapestry5.services.PageRenderLinkSource;
import org.tynamo.descriptor.CollectionDescriptor;
import org.tynamo.examples.simple.entities.Catalog;
import org.tynamo.examples.simple.pages.List;
import org.tynamo.routing.annotations.At;
import org.tynamo.services.DescriptorService;
import org.tynamo.services.PersistenceService;
import org.tynamo.util.TynamoMessages;
import org.tynamo.util.Utils;
@At(value = "/catalog/{0}", order = {"before:Show", "after:Add"})
public class CatalogShow
{
@Inject
private ContextValueEncoder contextValueEncoder;
@Inject
private Messages messages;
@Inject
private PersistenceService persitenceService;
@Inject
private DescriptorService descriptorService;
@Inject
private PageRenderLinkSource pageRenderLinkSource;
@Property(write = false)
private Class<Catalog> beanType = Catalog.class;
@Property
private Catalog bean;
@OnEvent(EventConstants.ACTIVATE)
Object activate(Catalog catalog)
{
this.bean = catalog;
// this.bean = contextValueEncoder.toValue(clazz, id);
if (bean == null) return Utils.new404(messages);
return null;
}
public CollectionDescriptor getCategoriesDescriptor()
{
return (CollectionDescriptor) descriptorService.getClassDescriptor(beanType).getPropertyDescriptor("categories");
}
@CleanupRender
void cleanup()
{
bean = null;
}
/**
* This tells Tapestry to put type & id into the URL, making it bookmarkable.
*/
@OnEvent(EventConstants.PASSIVATE)
Object[] passivate()
{
return new Object[]{bean};
}
public Object[] getEditPageContext()
{
return new Object[]{beanType, bean};
}
public String getEditLinkMessage()
{
return TynamoMessages.edit(messages, beanType);
}
public String getTitle()
{
return TynamoMessages.show(messages, bean.toString());
}
@CustomCommitAfter
@OnEvent("delete")
Link delete()
{
persitenceService.remove(bean);
return pageRenderLinkSource.createPageRenderLinkWithContext(List.class, beanType);
}
public boolean isDeleteAllowed()
{
return descriptorService.getClassDescriptor(beanType).isAllowRemove();
}
public String getListAllLinkMessage()
{
return TynamoMessages.listAll(messages, beanType);
}
}