001    package com.nimbusds.oauth2.sdk.token;
002    
003    
004    import net.minidev.json.JSONObject;
005    
006    
007    /**
008     * Access and refresh token pair. This class is immutable.
009     *
010     * @author Vladimir Dzhuvinov
011     */
012    public final class TokenPair {
013    
014    
015            /**
016             * Access token.
017             */
018            private final AccessToken accessToken;
019    
020    
021            /**
022             * Refresh token, {@code null} if not specified.
023             */
024            private final RefreshToken refreshToken;
025    
026    
027            /**
028             * Creates a new access and refresh token pair.
029             *
030             * @param accessToken  The access token. Must not be {@code null}.
031             * @param refreshToken The refresh token. If none {@code null}.
032             */
033            public TokenPair(final AccessToken accessToken, final RefreshToken refreshToken) {
034    
035                    if (accessToken == null)
036                            throw new IllegalArgumentException("The access token must not be null");
037    
038                    this.accessToken = accessToken;
039    
040                    this.refreshToken = refreshToken;
041            }
042            
043    
044            /**
045             * Gets the access token.
046             *
047             * @return The access token.
048             */
049            public AccessToken getAccessToken() {
050    
051                    return accessToken;
052            }
053    
054    
055            /**
056             * Gets the refresh token.
057             *
058             * @return The refresh token. If none {@code null}.
059             */
060            public RefreshToken getRefreshToken() {
061    
062                    return refreshToken;
063            }
064    
065    
066            /**
067             * Returns the JSON object representation of this token pair.
068             *
069             * <p>Example JSON object:
070             *
071             * <pre>
072             * {
073             *   "access_token"  : "dZdt8BlltORMTz5U",
074             *   "refresh_token" : "E87zjAoeNXaSoF1U"
075             * }
076             * </pre>
077             *
078             * @return The JSON object representation.
079             */
080            public JSONObject toJSONObject() {
081    
082                    JSONObject o = accessToken.toJSONObject();
083    
084                    if (refreshToken != null)
085                            o.putAll(refreshToken.toJSONObject());
086    
087                    return o;
088            }
089    
090    
091            @Override
092            public String toString() {
093    
094                    return "TokenPair [accessToken=" + accessToken + 
095                           " refreshToken=" + refreshToken + "]";
096            }
097    }