com.opensymphony.webwork.util.Counter.java Source code

Java tutorial

Introduction

Here is the source code for com.opensymphony.webwork.util.Counter.java

Source

    /*
     * Copyright (c) 2002-2003 by OpenSymphony
     * All rights reserved.
     */

import java.io.Serializable;

    /**
     * A bean that can be used to keep track of a counter.
     * <p/>
     * Since it is an Iterator it can be used by the iterator tag
     *
     * @author Rickard berg (rickard@middleware-company.com)
     * @version $Revision: 1282 $
     * @see <related>
     */
    public class Counter implements java.util.Iterator, Serializable {

        boolean wrap = false;

        // Attributes ----------------------------------------------------
        long first = 1;
        long current = first;
        long interval = 1;
        long last = -1;

        public void setAdd(long addition) {
            current += addition;
        }

        public void setCurrent(long current) {
            this.current = current;
        }

        public long getCurrent() {
            return current;
        }

        public void setFirst(long first) {
            this.first = first;
            current = first;
        }

        public long getFirst() {
            return first;
        }

        public void setInterval(long interval) {
            this.interval = interval;
        }

        public long getInterval() {
            return interval;
        }

        public void setLast(long last) {
            this.last = last;
        }

        public long getLast() {
            return last;
        }

        // Public --------------------------------------------------------
        public long getNext() {
            long next = current;
            current += interval;

            if (wrap && (current > last)) {
                current -= ((1 + last) - first);
            }

            return next;
        }

        public long getPrevious() {
            current -= interval;

            if (wrap && (current < first)) {
                current += (last - first + 1);
            }

            return current;
        }

        public void setWrap(boolean wrap) {
            this.wrap = wrap;
        }

        public boolean isWrap() {
            return wrap;
        }

        public boolean hasNext() {
            return ((last == -1) || wrap) ? true : (current <= last);
        }

        public Object next() {
            return new Long(getNext());
        }

        public void remove() {
            // Do nothing
        }
    }
    ///////////////////
    /*
     * Copyright (c) 2002-2003 by OpenSymphony
     * All rights reserved.
     */
    package com.opensymphony.webwork.util;

    import junit.framework.TestCase;

    /**
     * User: plightbo
     * Date: Jan 7, 2004
     * Time: 7:55:35 PM
     */
    public class CounterTest extends TestCase {

        Counter c = new Counter();

        public void testCurrentAfterNext() {
            long next = c.getNext();
            long current = c.getCurrent();
            assertEquals(next + 1, current);
        }

        public void testCurrentBeforeNext() {
            long current = c.getCurrent();
            long next = c.getNext();
            assertEquals(current, next);
        }

        public void testWrap() {
            c.setWrap(true);
            c.setLast(1);

            long a = c.getNext();
            long b = c.getNext();
            assertEquals(1, a);
            assertEquals(1, b);
        }
    }