001    package com.nimbusds.oauth2.sdk.token;
002    
003    
004    import net.minidev.json.JSONObject;
005    
006    import com.nimbusds.oauth2.sdk.id.Identifier;
007    
008    
009    /**
010     * The base abstract class for access and refresh tokens.
011     * 
012     * <p>Related specifications:
013     *
014     * <ul>
015     *     <li>OAuth 2.0 (RFC 6749), sections 1.4 and 1.5.
016     * </ul>
017     *
018     * @author Vladimir Dzhuvinov
019     * @version $version$ (2014-01-18)
020     */
021    public abstract class Token extends Identifier {
022    
023    
024            /**
025             * Creates a new token with the specified value.
026             *
027             * @param value The token value. Must not be {@code null} or empty 
028             *              string.
029             */
030            protected Token(final String value) {
031    
032                    super(value);
033            }
034    
035    
036            /**
037             * Creates a new token with a randomly generated value of the specified
038             * length. The value will be made up of mixed-case alphanumeric ASCII 
039             * characters.
040             *
041             * @param length The number of characters. Must be a positive integer.
042             */
043            protected Token(final int length) {
044            
045                    super(length);
046            }
047            
048            
049            /**
050             * Creates a new token with a randomly generated value. The value will 
051             * be made up of 32 mixed-case alphanumeric ASCII characters.
052             */
053            protected Token() {
054            
055                    super();
056            }
057    
058    
059            /**
060             * Returns the token parameters as a JSON object, as required for the
061             * composition of an access token response. See OAuth 2.0 (RFC 6749), 
062             * section 5.1.
063             *
064             * <p>Note that JSONObject implements {@code Map<String,Object>}.
065             *
066             * <p>Example:
067             *
068             * <pre>
069             * {
070             *   "access_token"      : "2YotnFZFEjr1zCsicMWpAA",
071             *   "token_type"        : "example",
072             *   "expires_in"        : 3600,
073             *   "example_parameter" : "example_value"
074             * }
075             * </pre>
076             *
077             * @return The token parameters as a JSON object.
078             */
079            public abstract JSONObject toJSONObject();
080    }