package org.vaadin.mideaas.social; public abstract class OAuthService { public enum Service { DEFAULT, GITHUB, FACEBOOK, TWITTER, ETC } private final Service service; private final String apiKey; private final String apiSecret; private final UserToken token; private boolean connected = false; public static OAuthService createService(Service service, String apiKey, String apiSecret, UserToken token) { if (service==Service.TWITTER) { return new TwitterService(apiKey, apiSecret, token); } if (service==Service.FACEBOOK) { return new FacebookService(apiKey, apiSecret, token); } if (service==Service.GITHUB) { return new GitHubService(apiKey, apiSecret, token); } return null; } protected OAuthService(Service service, String apiKey, String apiSecret, UserToken token) { this.service = service; this.apiKey = apiKey; this.apiSecret = apiSecret; this.token = token; } public Service getService() { return service; } public String getApiKey() { return apiKey; } public String getApiSecret() { return apiSecret; } public UserToken getUserToken() { return token; } abstract protected void connect(); abstract protected UserProfile fetchUserProfile(); public UserProfile getUserProfile() { ensureConnection(); return fetchUserProfile(); } private void ensureConnection() { if (!connected) { connect(); } } }