package org.tynamo.examples.psi.pages.edit;

import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresUser;
import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.Link;
import org.apache.tapestry5.annotations.CleanupRender;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Property;
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.examples.psi.CustomCommitAfter;
import org.tynamo.examples.psi.model.MetaTag;
import org.tynamo.examples.psi.pages.Show;
import org.tynamo.routing.annotations.At;
import org.tynamo.services.PersistenceService;
import org.tynamo.util.TynamoMessages;
import org.tynamo.util.Utils;

/**
 * Page for editing and updating objects.
 * 
 * @note: When extending this page for customization purposes, it's better to
 *        copy & paste code than trying to use inheritance.
 * 
 */

@RequiresUser
@RequiresAuthentication
@At("/{0}/edit")
public class MetaTagEdit
{
    @Inject
    private ContextValueEncoder contextValueEncoder;

    @Inject
    private Messages messages;

    @Inject
    private PersistenceService persistenceService;

    @Inject
    private PageRenderLinkSource pageRenderLinkSource;

    @Property(write = false)
    private Class beanType = MetaTag.class;

    @Property
    private Object bean;

    private boolean continueEditing;

    @InjectPage
    private MetaTagEdit metaTagEditPage;
    
    @OnEvent(EventConstants.ACTIVATE)
    //void onActivate(Class clazz, long id)    
    //void activate(Class clazz, long id)    
    //Object activate(Class clazz, long id)
    //Object activate(Class clazz, Long id)
    //Object onActivate(Class clazz, Object bean, Integer id)
    Object activate( int id )
    {
        Class clazz = MetaTag.class;
        if (clazz == null)
            return Utils.new404(messages);
        this.bean = contextValueEncoder.toValue(clazz, new Integer 
(id).toString());
        this.beanType = clazz;
        if (bean == null)
            return Utils.new404(messages);
        return null;
    }

    /*
     * void onActivate() { this.bean =
     * contextValueEncoder.toValue(MetaTag.class, id.toString()); this.beanType
     * = MetaTag.class;
     * 
     * beanModel = beanModelSource.createEditModel(beanType, messages); }
     */
    @OnEvent(EventConstants.PASSIVATE)
    Object[] onPassivate()
    {
        return new Object[]
        { ((MetaTag) bean).getId() };
    }

    @CleanupRender
    void cleanup()
    {
        bean = null;
        beanType = null;
    }

    @OnEvent(value = "return")
    void onSaveAndReturn()
    {
        this.continueEditing = false;
    }

    @OnEvent(value = "stay")
    void onSaveAndContinue()
    {
        this.continueEditing = true;
    }

    @Log
    @CustomCommitAfter
    @OnEvent(EventConstants.SUCCESS)
    Link success()
    {
        persistenceService.save(bean);
        return !continueEditing ? back() : null;
    }

    @OnEvent("cancel")
    Link back()
    {
        return pageRenderLinkSource.createPageRenderLinkWithContext(Show.class, 
beanType, bean);
    }

    public String getListAllLinkMessage()
    {
        return TynamoMessages.listAll(messages, beanType);
    }

    public String getTitle()
    {
        return TynamoMessages.edit(messages, beanType);
    }

}

                                          

Reply via email to