/*
* Copyright (c) 2011 ICM Uniwersytet Warszawski All rights reserved.
* See LICENCE file for licensing information.
*/
package eu.emi.security.authn.x509.helpers.ns;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import eu.emi.security.authn.x509.helpers.ObserversHandler;
/**
* Provides an in-memory store of {@link NamespacePolicy} objects.
* The objects are matched either by subject name or by its MD5 hash (needed in case of
* SELF subject). This implementation is useful for EuGridPMA namespaces definitions.
* This class it thread safe.
*
* @author K. Benedyczak
*/
public class EuGridPmaNamespacesStore extends AbstractEuGridPmaNamespacesStore
{
private Map<String, Map<String, List<NamespacePolicy>>> policiesByHash2;
private Map<String, Map<String, List<NamespacePolicy>>> policiesByName;
public EuGridPmaNamespacesStore(ObserversHandler observers, boolean openssl1Mode)
{
super(observers, openssl1Mode);
policiesByHash2 = new HashMap<String, Map<String, List<NamespacePolicy>>>();
policiesByName = new HashMap<String, Map<String, List<NamespacePolicy>>>();
}
@Override
public void setPolicies(Collection<String> locations)
{
List<NamespacePolicy> policies = new ArrayList<NamespacePolicy>();
for (String location: locations)
tryLoadNsLocation(location, policies);
setPolicies(policies);
}
protected synchronized void setPolicies(List<NamespacePolicy> policies)
{
policiesByName = new HashMap<String, Map<String, List<NamespacePolicy>>>(policies.size());
policiesByHash2 = new HashMap<String, Map<String, List<NamespacePolicy>>>();
for (NamespacePolicy policy: policies)
{
if (policy.getIssuer().contains("="))
{
addPolicy(policy, policiesByName);
} else
{
addPolicy(policy, policiesByHash2);
}
}
}
@Override
protected List<NamespacePolicy> getPoliciesByIssuerHash(String definedForHash,
String issuerHash)
{
Map<String, List<NamespacePolicy>> policiesMap = policiesByHash2.get(definedForHash);
if (policiesMap == null)
return null;
return policiesMap.get(issuerHash);
}
@Override
protected List<NamespacePolicy> getPoliciesByIssuerDn(String definedForHash, String issuerDn)
{
Map<String, List<NamespacePolicy>> policiesMap = policiesByName.get(definedForHash);
if (policiesMap == null)
return null;
return policiesMap.get(issuerDn);
}
}