CVS: TapestryBook/bannerads/src/bannerads/components BannerAd.java,NONE,1.1 BannerService.java,NONE,1.1
Howard Lewis Ship <[email protected]> Thu, 01 May 2003 10:39:24 -0700
| Newsgroups | gmane.comp.java.tapestry.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/tapestry/TapestryBook/bannerads/src/bannerads/components
In directory sc8-pr-cvs1:/tmp/cvs-serv13484/bannerads/src/bannerads/components
Added Files:
BannerAd.java BannerService.java
Log Message:
Add new example for banner ads (services + components).
--- NEW FILE: BannerAd.java ---
package bannerads.components;
import org.apache.tapestry.AbstractComponent;
import org.apache.tapestry.IEngine;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.engine.IEngineService;
import org.apache.tapestry.engine.ILink;
import bannerads.IBanner;
import bannerads.IBannerSource;
/**
* Renders a <a> tag around a <img> tag; this consistitues a
* banner impression.
*/
public class BannerAd extends AbstractComponent
{
protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
{
if (cycle.isRewinding())
return;
IBanner banner = getRandomBanner(cycle);
IEngineService service = cycle.getEngine().getService(BannerService.SERVICE_NAME);
ILink link = service.getLink(cycle, this, new Object[] { banner.getId()});
writer.begin("a");
writer.attribute("href", link.getURL());
renderInformalParameters(writer, cycle);
writer.beginEmpty("img");
writer.attribute("src", banner.getImageURL());
writer.attribute("width", banner.getWidth());
writer.attribute("height", banner.getHeight());
writer.attribute("alt", banner.getTitle());
writer.attribute("border", 0);
writer.end(); // <a>
}
private IBanner getRandomBanner(IRequestCycle cycle)
{
IEngine engine = cycle.getEngine();
IBannerSource source =
(IBannerSource) engine.getSpecification().getExtension(
BannerService.BANNER_SOURCE_EXTENSION_NAME,
IBannerSource.class);
source.initialize(cycle);
return source.getRandomBanner();
}
}
--- NEW FILE: BannerService.java ---
package bannerads.components;
import java.io.IOException;
import javax.servlet.ServletException;
import org.apache.tapestry.IComponent;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.RedirectException;
import org.apache.tapestry.engine.AbstractService;
import org.apache.tapestry.engine.IEngineServiceView;
import org.apache.tapestry.engine.ILink;
import org.apache.tapestry.request.ResponseOutputStream;
import bannerads.IBanner;
import bannerads.IBannerSource;
public class BannerService extends AbstractService
{
public static final String SERVICE_NAME = "bannerads.banner";
/**
* Name ("<code>bannerads.banner-source</code>")
* of an application extension that implements
* {@link bannerads.IBannerSource}.
*/
public static final String BANNER_SOURCE_EXTENSION_NAME = "bannerads.banner-source";
/**
* The lone parameter should be the banner id.
*/
public ILink getLink(IRequestCycle cycle, IComponent component, Object[] parameters)
{
return constructLink(cycle, SERVICE_NAME, null, parameters, false);
}
public void service(
IEngineServiceView engine,
IRequestCycle cycle,
ResponseOutputStream output)
throws ServletException, IOException
{
IBannerSource source =
(IBannerSource) engine.getSpecification().getExtension(
BANNER_SOURCE_EXTENSION_NAME,
IBannerSource.class);
source.initialize(cycle);
Object[] parameters = getParameters(cycle);
String bannerId = (String) parameters[0];
IBanner banner = source.getBanner(bannerId);
source.recordClickthru(bannerId);
throw new RedirectException(banner.getClickThruURL());
}
public String getName()
{
return SERVICE_NAME;
}
}
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf