package org.exoplatform.portal.gadget.core;
import java.util.Map;
import org.apache.shindig.gadgets.oauth.BasicOAuthStoreTokenIndex;
import org.apache.shindig.gadgets.oauth.OAuthStore.TokenInfo;
import org.chromattic.api.annotations.Create;
import org.chromattic.api.annotations.OneToMany;
import org.chromattic.api.annotations.PrimaryType;
@PrimaryType(name = "tkn:gadgettokencontainer")
public abstract class GadgetTokenContainer {
@Create
protected abstract GadgetTokenEntry createGadgetToken();
@OneToMany
protected abstract Map<String, GadgetTokenEntry> getGadgetTokens();
public GadgetToken getToken(BasicOAuthStoreTokenIndex tokenKey) {
Map<String, GadgetTokenEntry> tokens = getGadgetTokens();
for (GadgetTokenEntry tokenEntry : tokens.values()) {
BasicOAuthStoreTokenIndex key = tokenEntry.getKey();
if (tokenKey.equals(key))
return tokenEntry.getToken();
}
return null;
}
public GadgetToken removeToken(BasicOAuthStoreTokenIndex tokenKey) {
Map<String, GadgetTokenEntry> tokens = getGadgetTokens();
for (GadgetTokenEntry tokenEntry : tokens.values()) {
BasicOAuthStoreTokenIndex key = tokenEntry.getKey();
if (tokenKey.equals(key)) {
GadgetToken token = tokenEntry.getToken();
tokenEntry.remove();
return token;
}
}
return null;
}
public GadgetToken saveToken(BasicOAuthStoreTokenIndex tokenKey, TokenInfo tokenInfo, long expirationTime) {
Map<String, GadgetTokenEntry> tokens = getGadgetTokens();
GadgetTokenEntry entry = null;
for (GadgetTokenEntry item : tokens.values()) {
BasicOAuthStoreTokenIndex key = item.getKey();
if (tokenKey.equals(key)) {
entry = item;
}
}
if (entry == null) {
entry = createGadgetToken();
tokens.put("gadgettoken" + System.currentTimeMillis(), entry);
}
entry.setGadgetUri(tokenKey.getGadgetUri());
entry.setModuleId(tokenKey.getModuleId());
entry.setServiceName(tokenKey.getServiceName());
entry.setTokenName(tokenKey.getTokenName());
entry.setUserId(tokenKey.getUserId());
entry.setAccessToken(tokenInfo.getAccessToken());
entry.setTokenSecret(tokenInfo.getTokenSecret());
entry.setSessionHandle(tokenInfo.getSessionHandle() == null ? "" : tokenInfo.getSessionHandle());
entry.setTokenExpireMillis(expirationTime);
return entry.getToken();
}
}