org.openid4java.consumer.InMemoryConsumerAssociationStore Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2006-2008 Sxip Identity Corporation
*/
package org.openid4java.consumer;
import org.openid4java.association.Association;
import java.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author Marius Scurtescu, Johnny Bufu
*/
public class InMemoryConsumerAssociationStore implements ConsumerAssociationStore
{
private static Log _log = LogFactory.getLog(InMemoryConsumerAssociationStore.class);
private static final boolean DEBUG = _log.isDebugEnabled();
private Map _opMap = new HashMap();
public synchronized void save(String opUrl, Association association)
{
removeExpired();
Map handleMap = (Map) _opMap.get(opUrl);
if (handleMap == null)
{
handleMap = new HashMap();
_opMap.put(opUrl, handleMap);
}
String handle = association.getHandle();
if(DEBUG)
_log.debug("Adding association to the in-memory store: " + handle +
" with OP: " + opUrl);
handleMap.put(association.getHandle(), association);
}
public synchronized Association load(String opUrl, String handle)
{
removeExpired();
if (_opMap.containsKey(opUrl))
{
Map handleMap = (Map) _opMap.get(opUrl);
if (handleMap.containsKey(handle))
{
return (Association) handleMap.get(handle);
}
}
return null;
}
public synchronized Association load(String opUrl)
{
removeExpired();
Association latest = null;
if (_opMap.containsKey(opUrl))
{
Map handleMap = (Map) _opMap.get(opUrl);
Iterator handles = handleMap.keySet().iterator();
while (handles.hasNext())
{
String handle = (String) handles.next();
Association association = (Association) handleMap.get(handle);
if (latest == null ||
latest.getExpiry().before(association.getExpiry()))
latest = association;
}
}
return latest;
}
public synchronized void remove(String opUrl, String handle)
{
removeExpired();
if (_opMap.containsKey(opUrl))
{
Map handleMap = (Map) _opMap.get(opUrl);
_log.info("Removing association: " + handle + " widh OP: " + opUrl);
handleMap.remove(handle);
if (handleMap.size() == 0)
_opMap.remove(opUrl);
}
}
private synchronized void removeExpired()
{
Set opToRemove = new HashSet();
Iterator opUrls = _opMap.keySet().iterator();
while (opUrls.hasNext())
{
String opUrl = (String) opUrls.next();
Map handleMap = (Map) _opMap.get(opUrl);
Set handleToRemove = new HashSet();
Iterator handles = handleMap.keySet().iterator();
while (handles.hasNext())
{
String handle = (String) handles.next();
Association association = (Association) handleMap.get(handle);
if (association.hasExpired())
{
handleToRemove.add(handle);
}
}
handles = handleToRemove.iterator();
while (handles.hasNext())
{
String handle = (String) handles.next();
_log.info("Removing expired association: " + handle +
" with OP: " + opUrl);
handleMap.remove(handle);
}
if (handleMap.size() == 0)
opToRemove.add(opUrl);
}
opUrls = opToRemove.iterator();
while (opUrls.hasNext())
{
String opUrl = (String) opUrls.next();
_opMap.remove(opUrl);
}
}
protected synchronized int size()
{
int total = 0;
Iterator opUrls = _opMap.keySet().iterator();
while (opUrls.hasNext())
{
String opUrl = (String) opUrls.next();
Map handleMap = (Map) _opMap.get(opUrl);
total += handleMap.size();
}
return total;
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy