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 }