Home | History | Annotate | Download | only in cms
      1 package org.bouncycastle.cms;
      2 
      3 import java.util.ArrayList;
      4 import java.util.Collection;
      5 import java.util.HashMap;
      6 import java.util.Iterator;
      7 import java.util.List;
      8 import java.util.Map;
      9 
     10 public class SignerInformationStore
     11 {
     12     private ArrayList all = new ArrayList();
     13     private Map table = new HashMap();
     14 
     15     public SignerInformationStore(
     16         Collection  signerInfos)
     17     {
     18         Iterator    it = signerInfos.iterator();
     19 
     20         while (it.hasNext())
     21         {
     22             SignerInformation   signer = (SignerInformation)it.next();
     23             SignerId            sid = signer.getSID();
     24 
     25             List list = (ArrayList)table.get(sid);
     26             if (list == null)
     27             {
     28                 list = new ArrayList(1);
     29                 table.put(sid, list);
     30             }
     31 
     32             list.add(signer);
     33         }
     34 
     35         this.all = new ArrayList(signerInfos);
     36     }
     37 
     38     /**
     39      * Return the first SignerInformation object that matches the
     40      * passed in selector. Null if there are no matches.
     41      *
     42      * @param selector to identify a signer
     43      * @return a single SignerInformation object. Null if none matches.
     44      */
     45     public SignerInformation get(
     46         SignerId        selector)
     47     {
     48         Collection list = getSigners(selector);
     49 
     50         return list.size() == 0 ? null : (SignerInformation) list.iterator().next();
     51     }
     52 
     53     /**
     54      * Return the number of signers in the collection.
     55      *
     56      * @return number of signers identified.
     57      */
     58     public int size()
     59     {
     60         return all.size();
     61     }
     62 
     63     /**
     64      * Return all signers in the collection
     65      *
     66      * @return a collection of signers.
     67      */
     68     public Collection getSigners()
     69     {
     70         return new ArrayList(all);
     71     }
     72 
     73     /**
     74      * Return possible empty collection with signers matching the passed in SignerId
     75      *
     76      * @param selector a signer id to select against.
     77      * @return a collection of SignerInformation objects.
     78      */
     79     public Collection getSigners(
     80         SignerId selector)
     81     {
     82         if (selector.getIssuer() != null && selector.getSubjectKeyIdentifier() != null)
     83         {
     84             List results = new ArrayList();
     85 
     86             Collection match1 = getSigners(new SignerId(selector.getIssuer(), selector.getSerialNumber()));
     87 
     88             if (match1 != null)
     89             {
     90                 results.addAll(match1);
     91             }
     92 
     93             Collection match2 = getSigners(new SignerId(selector.getSubjectKeyIdentifier()));
     94 
     95             if (match2 != null)
     96             {
     97                 results.addAll(match2);
     98             }
     99 
    100             return results;
    101         }
    102         else
    103         {
    104             List list = (ArrayList)table.get(selector);
    105 
    106             return list == null ? new ArrayList() : new ArrayList(list);
    107         }
    108     }
    109 }
    110