package org.openstack.atlas.util.ca.util;
import java.security.cert.X509Certificate;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bouncycastle.jce.provider.X509CertificateObject;
import org.openstack.atlas.util.ca.primitives.RsaConst;
public class X509Map {
private Set<X509MapValue> mapValSet;
private Map<String, Set<X509MapValue>> fileMap;
private Map<X509CertificateObject, Set<X509MapValue>> x509Map;
static {
RsaConst.init();
}
public X509Map() {
mapValSet = new HashSet<X509MapValue>();
fileMap = new HashMap<String, Set<X509MapValue>>();
x509Map = new HashMap<X509CertificateObject, Set<X509MapValue>>();
}
public X509Map(Collection<X509MapValue> map) {
mapValSet = new HashSet<X509MapValue>();
fileMap = new HashMap<String, Set<X509MapValue>>();
x509Map = new HashMap<X509CertificateObject, Set<X509MapValue>>();
for (X509MapValue mapVal : map) {
if (!fileMap.containsKey(mapVal.getFileName())) {
fileMap.put(mapVal.getFileName(), new HashSet<X509MapValue>());
}
if (!x509Map.containsKey(mapVal.getX509CertificateObject())) {
x509Map.put(mapVal.getX509CertificateObject(), new HashSet<X509MapValue>());
}
mapValSet.add(mapVal);
fileMap.get(mapVal.getFileName()).add(mapVal);
x509Map.get(mapVal.getX509CertificateObject()).add(mapVal);
}
}
public void clear() {
mapValSet = new HashSet<X509MapValue>();
fileMap = new HashMap<String, Set<X509MapValue>>();
x509Map = new HashMap<X509CertificateObject, Set<X509MapValue>>();
}
public void putAll(Collection<X509MapValue> mapVals) {
for (X509MapValue mapVal : mapVals) {
put(mapVal);
}
}
public void put(X509MapValue mapVal) {
mapValSet.add(mapVal);
if (!fileMap.containsKey(mapVal.getFileName())) {
fileMap.put(mapVal.getFileName(), new HashSet<X509MapValue>());
}
if (!x509Map.containsKey(mapVal.getX509CertificateObject())) {
x509Map.put(mapVal.getX509CertificateObject(), new HashSet<X509MapValue>());
}
fileMap.get(mapVal.getFileName()).add(mapVal);
x509Map.get(mapVal.getX509CertificateObject()).add(mapVal);
}
public Set<String> fileKeys() {
return fileMap.keySet();
}
public Set<X509CertificateObject> x509CertificateObjectKeys() {
return x509Map.keySet();
}
public Set<X509MapValue> getFile(String fileName) {
Set<X509MapValue> resultSet = fileMap.get(fileName);
if (resultSet == null) {
return new HashSet<X509MapValue>(); // Its impolite to return null when an Empty list is better
}
return resultSet;
}
public Set<X509MapValue> getX509CertificateObject(X509Certificate x509obj) {
Set<X509MapValue> resultSet = x509Map.get(x509obj);
if (resultSet == null) {
return new HashSet<X509MapValue>(); // See above comment
}
return resultSet;
}
public Set<X509MapValue> values() {
return new HashSet<X509MapValue>(mapValSet);
}
public Set<X509Certificate> valuesAsX509CertificateObjects(){
Set<X509Certificate> values = new HashSet<X509Certificate>();
for(X509MapValue mapVal : mapValSet){
X509Certificate x509obj = mapVal.getX509CertificateObject();
values.add(x509obj);
}
return values;
}
public Set<X509Certificate> valuesAsX509Certificates(){
Set<X509Certificate> values = new HashSet<X509Certificate>();
for(X509MapValue mapVal : mapValSet){
X509Certificate x509 = mapVal.getX509Certificate();
values.add(x509);
}
return values;
}
}