001    
002    /*
003     * Copyright (C) 2011 Archie L. Cobbs. All rights reserved.
004     *
005     * $Id: PrimitiveSwitchAdapter.java 65 2011-03-26 22:30:10Z archie.cobbs $
006     */
007    
008    package org.dellroad.stuff.java;
009    
010    /**
011     * Adapter class for {@link PrimitiveSwitch} implementations.
012     *
013     * @param <R> switch method return type
014     * @since 1.0.65
015     */
016    public class PrimitiveSwitchAdapter<R> implements PrimitiveSwitch<R> {
017    
018        /**
019         * Handle the {@link Primitive#BOOLEAN} case.
020         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseDefault}.
021         */
022        @Override
023        public R caseBoolean() {
024            return caseDefault();
025        }
026    
027        /**
028         * Handle the {@link Primitive#BYTE} case.
029         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseNumber}.
030         */
031        @Override
032        public R caseByte() {
033            return caseNumber();
034        }
035    
036        /**
037         * Handle the {@link Primitive#CHARACTER} case.
038         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseDefault}.
039         */
040        @Override
041        public R caseCharacter() {
042            return caseDefault();
043        }
044    
045        /**
046         * Handle the {@link Primitive#SHORT} case.
047         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseNumber}.
048         */
049        @Override
050        public R caseShort() {
051            return caseNumber();
052        }
053    
054        /**
055         * Handle the {@link Primitive#INTEGER} case.
056         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseNumber}.
057         */
058        @Override
059        public R caseInteger() {
060            return caseNumber();
061        }
062    
063        /**
064         * Handle the {@link Primitive#FLOAT} case.
065         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseNumber}.
066         */
067        @Override
068        public R caseFloat() {
069            return caseNumber();
070        }
071    
072        /**
073         * Handle the {@link Primitive#LONG} case.
074         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseNumber}.
075         */
076        @Override
077        public R caseLong() {
078            return caseNumber();
079        }
080    
081        /**
082         * Handle the {@link Primitive#DOUBLE} case.
083         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseNumber}.
084         */
085        @Override
086        public R caseDouble() {
087            return caseNumber();
088        }
089    
090        /**
091         * Internal roll-up method.
092         * The implementation in {@link PrimitiveSwitchAdapter} delegates to {@link #caseDefault}.
093         */
094        protected R caseNumber() {
095            return caseDefault();
096        }
097    
098        /**
099         * Internal roll-up method.
100         * The implementation in {@link PrimitiveSwitchAdapter} returns {@code null}.
101         */
102        protected R caseDefault() {
103            return null;
104        }
105    }
106