GpgSignatureVerifierFactory.java

  1. /*
  2.  * Copyright (C) 2021, 2022 Thomas Wolf <thomas.wolf@paranor.ch> and others
  3.  *
  4.  * This program and the accompanying materials are made available under the
  5.  * terms of the Eclipse Distribution License v. 1.0 which is available at
  6.  * https://www.eclipse.org/org/documents/edl-v10.php.
  7.  *
  8.  * SPDX-License-Identifier: BSD-3-Clause
  9.  */
  10. package org.eclipse.jgit.lib;

  11. import java.util.Iterator;
  12. import java.util.ServiceConfigurationError;
  13. import java.util.ServiceLoader;

  14. import org.slf4j.Logger;
  15. import org.slf4j.LoggerFactory;

  16. /**
  17.  * A {@code GpgSignatureVerifierFactory} creates {@link GpgSignatureVerifier} instances.
  18.  *
  19.  * @since 5.11
  20.  */
  21. public abstract class GpgSignatureVerifierFactory {

  22.     private static final Logger LOG = LoggerFactory
  23.             .getLogger(GpgSignatureVerifierFactory.class);

  24.     private static class DefaultFactory {

  25.         private static volatile GpgSignatureVerifierFactory defaultFactory = loadDefault();

  26.         private static GpgSignatureVerifierFactory loadDefault() {
  27.             try {
  28.                 ServiceLoader<GpgSignatureVerifierFactory> loader = ServiceLoader
  29.                         .load(GpgSignatureVerifierFactory.class);
  30.                 Iterator<GpgSignatureVerifierFactory> iter = loader.iterator();
  31.                 if (iter.hasNext()) {
  32.                     return iter.next();
  33.                 }
  34.             } catch (ServiceConfigurationError e) {
  35.                 LOG.error(e.getMessage(), e);
  36.             }
  37.             return null;
  38.         }

  39.         private DefaultFactory() {
  40.             // No instantiation
  41.         }

  42.         public static GpgSignatureVerifierFactory getDefault() {
  43.             return defaultFactory;
  44.         }

  45.         /**
  46.          * Sets the default factory.
  47.          *
  48.          * @param factory
  49.          *            the new default factory
  50.          */
  51.         public static void setDefault(GpgSignatureVerifierFactory factory) {
  52.             defaultFactory = factory;
  53.         }
  54.     }

  55.     /**
  56.      * Retrieves the default factory.
  57.      *
  58.      * @return the default factory or {@code null} if none set
  59.      */
  60.     public static GpgSignatureVerifierFactory getDefault() {
  61.         return DefaultFactory.getDefault();
  62.     }

  63.     /**
  64.      * Sets the default factory.
  65.      *
  66.      * @param factory
  67.      *            the new default factory
  68.      */
  69.     public static void setDefault(GpgSignatureVerifierFactory factory) {
  70.         DefaultFactory.setDefault(factory);
  71.     }

  72.     /**
  73.      * Creates a new {@link GpgSignatureVerifier}.
  74.      *
  75.      * @return the new {@link GpgSignatureVerifier}
  76.      */
  77.     public abstract GpgSignatureVerifier getVerifier();

  78. }