CVS: TapestryBook/examples-library/src/java/bannerads/library/impl Banner.java,NONE,1.1 XMLBannerSource.java,NONE,1.1
Howard Lewis Ship <[email protected]> Sun, 13 Jul 2003 15:42:17 -0700
| Newsgroups | gmane.comp.java.tapestry.cvs |
|---|---|
| Message-ID | <[email protected]> |
Update of /cvsroot/tapestry/TapestryBook/examples-library/src/java/bannerads/library/impl
In directory sc8-pr-cvs1:/tmp/cvs-serv3466/examples-library/src/java/bannerads/library/impl
Added Files:
Banner.java XMLBannerSource.java
Log Message:
Move the examples and bannerads libraries into a new examples-library subproject.
--- NEW FILE: Banner.java ---
package bannerads.library.impl;
import bannerads.library.IBanner;
public class Banner implements IBanner
{
private String _id;
private String _imageURL;
private int _width;
private int _height;
private String _clickThruURL;
private String _title;
private int _impressions;
private int _clickThrus;
public String getClickThruURL()
{
return _clickThruURL;
}
public int getHeight()
{
return _height;
}
public String getId()
{
return _id;
}
public String getImageURL()
{
return _imageURL;
}
public String getTitle()
{
return _title;
}
public int getWidth()
{
return _width;
}
public void setClickThruURL(String string)
{
_clickThruURL = string;
}
public void setHeight(int height)
{
_height = height;
}
public void setId(String string)
{
_id = string;
}
public void setImageURL(String string)
{
_imageURL = string;
}
public void setTitle(String string)
{
_title = string;
}
public void setWidth(int width)
{
_width = width;
}
public int getClickThrus()
{
return _clickThrus;
}
public int getImpressions()
{
return _impressions;
}
public void incrementClickThrus()
{
_clickThrus++;
}
public void incrementImpressions()
{
_impressions++;
}
}
--- NEW FILE: XMLBannerSource.java ---
package bannerads.library.impl;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import javax.servlet.ServletContext;
import org.apache.commons.digester.Digester;
import org.apache.tapestry.ApplicationRuntimeException;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.IResourceLocation;
import org.apache.tapestry.Tapestry;
import org.apache.tapestry.resource.ContextResourceLocation;
import bannerads.library.IBanner;
import bannerads.library.IBannerSource;
public class XMLBannerSource implements IBannerSource
{
private Random random = new Random();
private String _bannersFile = "banners.xml";
/**
* Map of {@link Banner} keyed on (String) banner id.
*/
private Map _banners;
private List _bannerIds;
public IBanner getRandomBanner()
{
int count = _bannerIds.size();
int index = random.nextInt(count);
String id = (String) _bannerIds.get(index);
return getBanner(id);
}
public IBanner getBanner(String bannerId)
{
return (IBanner) _banners.get(bannerId);
}
public void recordImpression(String bannerId)
{
Banner b = (Banner) getBanner(bannerId);
b.incrementImpressions();
}
public void recordClickthru(String bannerId)
{
Banner b = (Banner) getBanner(bannerId);
b.incrementClickThrus();
}
/**
* Initializes the list of banners from the a file
* stored in WEB-INF.
*/
public synchronized void initialize(IRequestCycle cycle)
{
if (_banners == null)
{
ServletContext servletContext =
cycle.getRequestContext().getServlet().getServletContext();
IResourceLocation location =
new ContextResourceLocation(servletContext, "WEB-INF/" + _bannersFile);
Banner[] banners = read(location);
_banners = new HashMap();
_bannerIds = new ArrayList();
for (int i = 0; i < banners.length; i++)
{
String id = banners[i].getId();
_bannerIds.add(id);
_banners.put(id, banners[i]);
}
}
}
public String getBannersFile()
{
return _bannersFile;
}
public void setBannersFile(String string)
{
_bannersFile = string;
}
public Banner[] read(IResourceLocation location)
{
Digester digester = new Digester();
digester.addObjectCreate("banner-ads", ArrayList.class);
digester.addObjectCreate("banner-ads/banner", Banner.class);
// The attribute names match the property names, so this can do it all.
digester.addSetProperties("banner-ads/banner");
// This adds each banner instance to the list, by
// invoking method add() on the ArrayList.
digester.addSetNext("banner-ads/banner", "add");
URL fileURL = location.getResourceURL();
List banners = null;
try
{
InputStream stream = fileURL.openStream();
banners = (List) digester.parse(stream);
stream.close();
}
catch (Exception ex)
{
throw new ApplicationRuntimeException("Unable to read banner ads file " + location, ex);
}
int count = Tapestry.size(banners);
return (Banner[]) banners.toArray(new Banner[count]);
}
public List getBannerIds()
{
return new ArrayList(_bannerIds);
}
}
-------------------------------------------------------
This SF.Net email sponsored by: Parasoft
Error proof Web apps, automate testing & more.
Download & eval WebKing and get a free book.
www.parasoft.com/bulletproofapps1