001    package org.trails.link;
002    
003    
004    import org.apache.tapestry.IRequestCycle;
005    import org.apache.tapestry.annotations.ComponentClass;
006    import org.apache.tapestry.annotations.InjectObject;
007    import org.apache.tapestry.annotations.Parameter;
008    import org.apache.tapestry.engine.IEngineService;
009    import org.apache.tapestry.engine.ILink;
010    import org.apache.tapestry.link.AbstractLinkComponent;
011    import org.apache.tapestry.link.ILinkRenderer;
012    import org.trails.descriptor.CollectionDescriptor;
013    import org.trails.descriptor.IClassDescriptor;
014    import org.trails.engine.TrailsPagesServiceParameter;
015    import org.trails.page.PageType;
016    
017    /**
018     * A component for creating a link to {@link org.trails.page.TrailsPage} using
019     * the {@link org.trails.engine.TrailsPagesService}.
020     */
021    
022    @ComponentClass
023    public abstract class TrailsLink extends AbstractLinkComponent
024    {
025    
026            @InjectObject(value = "service:trails.core.TrailsPagesService")
027            public abstract IEngineService getTrailsPagesService();
028    
029            public ILink getLink(IRequestCycle cycle)
030            {
031                    TrailsPagesServiceParameter esp = new TrailsPagesServiceParameter(getPageType(), getClassDescriptor(), getModel(), getAssociationDescriptor(), getParent());
032                    return getTrailsPagesService().getLink(false, esp);
033            }
034    
035            @Parameter(required = true)
036            public abstract PageType getPageType();
037    
038            @Parameter(required = true)
039            public abstract IClassDescriptor getClassDescriptor();
040    
041            @Parameter
042            public abstract Object getModel();
043    
044            @Parameter
045            public abstract CollectionDescriptor getAssociationDescriptor();
046    
047            @Parameter
048            public abstract Object getParent();
049    
050            @Parameter
051            public abstract boolean isDisabled();
052    
053            @Parameter
054            public abstract ILinkRenderer getRenderer();
055    
056            @Parameter
057            public abstract String getAnchor();
058    
059            /**
060             * Forces the link to be generated as an absolute URL with the given scheme
061             * (unless the scheme matches the scheme for the current request).
062             *
063             * @return
064             */
065            @Parameter
066            public abstract String getScheme();
067    
068            /**
069             * Forces the link to be generated as an absolute URL with the given port
070             * (unless the port matches the port for the current request).
071             *
072             * @return
073             */
074            @Parameter
075            public abstract Integer getPort();
076    
077            @Parameter
078            public abstract String getTarget();
079    
080    }