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