001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.util.selection.keyring; 006 007import javax.annotation.Nonnull; 008import java.util.HashSet; 009import java.util.Iterator; 010import java.util.Set; 011 012import org.bouncycastle.openpgp.PGPPublicKeyRing; 013import org.bouncycastle.openpgp.PGPPublicKeyRingCollection; 014import org.pgpainless.util.MultiMap; 015 016public abstract class PublicKeyRingSelectionStrategy<O> implements KeyRingSelectionStrategy<PGPPublicKeyRing, PGPPublicKeyRingCollection, O> { 017 018 @Override 019 public Set<PGPPublicKeyRing> selectKeyRingsFromCollection(@Nonnull O identifier, @Nonnull PGPPublicKeyRingCollection keyRingCollection) { 020 Set<PGPPublicKeyRing> accepted = new HashSet<>(); 021 for (Iterator<PGPPublicKeyRing> i = keyRingCollection.getKeyRings(); i.hasNext(); ) { 022 PGPPublicKeyRing ring = i.next(); 023 if (accept(identifier, ring)) accepted.add(ring); 024 } 025 return accepted; 026 } 027 028 @Override 029 public MultiMap<O, PGPPublicKeyRing> selectKeyRingsFromCollections(@Nonnull MultiMap<O, PGPPublicKeyRingCollection> keyRingCollections) { 030 MultiMap<O, PGPPublicKeyRing> keyRings = new MultiMap<>(); 031 for (O identifier : keyRingCollections.keySet()) { 032 for (PGPPublicKeyRingCollection collection : keyRingCollections.get(identifier)) { 033 keyRings.put(identifier, selectKeyRingsFromCollection(identifier, collection)); 034 } 035 } 036 return keyRings; 037 } 038}