// Path: src/main/java/com/getui/logful/server/auth/model/OAuth2AuthenticationAccessToken.java
// @Document(collection = "oauth2_access_token")
// public class OAuth2AuthenticationAccessToken extends BasePersistenceEntity {
// 
//     @Indexed
//     private String id;
// 
//     private String tokenId;
// 
//     private OAuth2AccessToken oAuth2AccessToken;
// 
//     private String authenticationId;
// 
//     private String userName;
// 
//     private String clientId;
// 
//     private OAuth2Authentication authentication;
// 
//     private String refreshToken;
// 
//     public OAuth2AuthenticationAccessToken() {
// 
//     }
// 
//     public OAuth2AuthenticationAccessToken(final OAuth2AccessToken oAuth2AccessToken,
//                                            final OAuth2Authentication authentication,
//                                            final String authenticationId) {
//         this.tokenId = oAuth2AccessToken.getValue();
//         this.oAuth2AccessToken = oAuth2AccessToken;
//         this.authenticationId = authenticationId;
//         this.userName = authentication.getName();
//         this.clientId = authentication.getOAuth2Request().getClientId();
//         this.authentication = authentication;
//         this.refreshToken = oAuth2AccessToken.getRefreshToken().getValue();
//     }
// 
//     @Override
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getTokenId() {
//         return tokenId;
//     }
// 
//     public OAuth2AccessToken getoAuth2AccessToken() {
//         return oAuth2AccessToken;
//     }
// 
//     public String getAuthenticationId() {
//         return authenticationId;
//     }
// 
//     public String getUserName() {
//         return userName;
//     }
// 
//     public String getClientId() {
//         return clientId;
//     }
// 
//     public OAuth2Authentication getAuthentication() {
//         return authentication;
//     }
// 
//     public String getRefreshToken() {
//         return refreshToken;
//     }
// }
// 
// Path: src/main/java/com/getui/logful/server/auth/model/OAuth2AuthenticationRefreshToken.java
// @Document(collection = "oauth2_refresh_token")
// public class OAuth2AuthenticationRefreshToken extends BasePersistenceEntity {
// 
//     @Indexed
//     private String id;
// 
//     private String tokenId;
// 
//     private OAuth2RefreshToken oAuth2RefreshToken;
// 
//     private OAuth2Authentication authentication;
// 
//     public OAuth2AuthenticationRefreshToken() {
// 
//     }
// 
//     public OAuth2AuthenticationRefreshToken(OAuth2RefreshToken oAuth2RefreshToken, OAuth2Authentication authentication) {
//         this.oAuth2RefreshToken = oAuth2RefreshToken;
//         this.authentication = authentication;
//         this.tokenId = oAuth2RefreshToken.getValue();
//     }
// 
//     @Override
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getTokenId() {
//         return tokenId;
//     }
// 
//     public OAuth2RefreshToken getoAuth2RefreshToken() {
//         return oAuth2RefreshToken;
//     }
// 
//     public OAuth2Authentication getAuthentication() {
//         return authentication;
//     }
// }


import com.getui.logful.server.auth.model.OAuth2AuthenticationAccessToken;
import com.getui.logful.server.auth.model.OAuth2AuthenticationRefreshToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.stereotype.Repository;
            accessToken.setId(temp.getId());
        }
        operations.save(accessToken);
    }

    public void storeRefreshToken(OAuth2AuthenticationRefreshToken refreshToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tokenId").is(refreshToken.getTokenId()));
        OAuth2AuthenticationRefreshToken temp = operations.findOne(query, OAuth2AuthenticationRefreshToken.class);
        if (temp != null) {
            refreshToken.setId(temp.getId());
        }
        operations.save(refreshToken);
    }

    public void removeRefreshToken(OAuth2RefreshToken refreshToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tokenId").is(refreshToken.getValue()));
        operations.remove(query, OAuth2AuthenticationRefreshToken.class);
    }

    public void removeAccessTokenUsingRefreshToken(OAuth2RefreshToken refreshToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("refreshToken").is(refreshToken.getValue()));
        operations.remove(query, OAuth2AuthenticationAccessToken.class);
    }

    public void removeAccessToken(OAuth2AccessToken accessToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tokenId").is(accessToken.getValue()));
// Path: src/main/java/com/getui/logful/server/auth/model/OAuth2AuthenticationAccessToken.java
// @Document(collection = "oauth2_access_token")
// public class OAuth2AuthenticationAccessToken extends BasePersistenceEntity {
// 
//     @Indexed
//     private String id;
// 
//     private String tokenId;
// 
//     private OAuth2AccessToken oAuth2AccessToken;
// 
//     private String authenticationId;
// 
//     private String userName;
// 
//     private String clientId;
// 
//     private OAuth2Authentication authentication;
// 
//     private String refreshToken;
// 
//     public OAuth2AuthenticationAccessToken() {
// 
//     }
// 
//     public OAuth2AuthenticationAccessToken(final OAuth2AccessToken oAuth2AccessToken,
//                                            final OAuth2Authentication authentication,
//                                            final String authenticationId) {
//         this.tokenId = oAuth2AccessToken.getValue();
//         this.oAuth2AccessToken = oAuth2AccessToken;
//         this.authenticationId = authenticationId;
//         this.userName = authentication.getName();
//         this.clientId = authentication.getOAuth2Request().getClientId();
//         this.authentication = authentication;
//         this.refreshToken = oAuth2AccessToken.getRefreshToken().getValue();
//     }
// 
//     @Override
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getTokenId() {
//         return tokenId;
//     }
// 
//     public OAuth2AccessToken getoAuth2AccessToken() {
//         return oAuth2AccessToken;
//     }
// 
//     public String getAuthenticationId() {
//         return authenticationId;
//     }
// 
//     public String getUserName() {
//         return userName;
//     }
// 
//     public String getClientId() {
//         return clientId;
//     }
// 
//     public OAuth2Authentication getAuthentication() {
//         return authentication;
//     }
// 
//     public String getRefreshToken() {
//         return refreshToken;
//     }
// }
// 
// Path: src/main/java/com/getui/logful/server/auth/model/OAuth2AuthenticationRefreshToken.java
// @Document(collection = "oauth2_refresh_token")
// public class OAuth2AuthenticationRefreshToken extends BasePersistenceEntity {
// 
//     @Indexed
//     private String id;
// 
//     private String tokenId;
// 
//     private OAuth2RefreshToken oAuth2RefreshToken;
// 
//     private OAuth2Authentication authentication;
// 
//     public OAuth2AuthenticationRefreshToken() {
// 
//     }
// 
//     public OAuth2AuthenticationRefreshToken(OAuth2RefreshToken oAuth2RefreshToken, OAuth2Authentication authentication) {
//         this.oAuth2RefreshToken = oAuth2RefreshToken;
//         this.authentication = authentication;
//         this.tokenId = oAuth2RefreshToken.getValue();
//     }
// 
//     @Override
//     public String getId() {
//         return id;
//     }
// 
//     public void setId(String id) {
//         this.id = id;
//     }
// 
//     public String getTokenId() {
//         return tokenId;
//     }
// 
//     public OAuth2RefreshToken getoAuth2RefreshToken() {
//         return oAuth2RefreshToken;
//     }
// 
//     public OAuth2Authentication getAuthentication() {
//         return authentication;
//     }
// }


// Path: src/main/java/com/getui/logful/server/auth/repository/OAuth2TokenCommonRepository.java
import com.getui.logful.server.auth.model.OAuth2AuthenticationAccessToken;
import com.getui.logful.server.auth.model.OAuth2AuthenticationRefreshToken;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.security.oauth2.common.OAuth2AccessToken;
import org.springframework.security.oauth2.common.OAuth2RefreshToken;
import org.springframework.stereotype.Repository;

            accessToken.setId(temp.getId());
        }
        operations.save(accessToken);
    }

    public void storeRefreshToken(OAuth2AuthenticationRefreshToken refreshToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tokenId").is(refreshToken.getTokenId()));
        OAuth2AuthenticationRefreshToken temp = operations.findOne(query, OAuth2AuthenticationRefreshToken.class);
        if (temp != null) {
            refreshToken.setId(temp.getId());
        }
        operations.save(refreshToken);
    }

    public void removeRefreshToken(OAuth2RefreshToken refreshToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tokenId").is(refreshToken.getValue()));
        operations.remove(query, OAuth2AuthenticationRefreshToken.class);
    }

    public void removeAccessTokenUsingRefreshToken(OAuth2RefreshToken refreshToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("refreshToken").is(refreshToken.getValue()));
        operations.remove(query, OAuth2AuthenticationAccessToken.class);
    }

    public void removeAccessToken(OAuth2AccessToken accessToken) {
        Query query = new Query();
        query.addCriteria(Criteria.where("tokenId").is(accessToken.getValue()));
        operations.remove(query, OAuth2AuthenticationAccessToken.class);