/**
  * @return a set with all registered custom repository classes
  * @since 6.5
  */
 public Set<Class<? extends Repository>> getClasses() {
   Set<Class<? extends Repository>> repositoryClasses = new HashSet<>();
   for (CustomRepositoryFactory factory : getFactories()) {
     repositoryClasses.add(factory.getRepositoryClass());
   }
   return repositoryClasses;
 }
 /**
  * @param xmlTag the XML tag used to lookup the {@link CustomRepositoryFactory}
  * @return the {@link CustomRepositoryFactory} for the provided XML tag or {@code null} if no
  *     factory is available for the provided tag
  * @since 6.5
  */
 public CustomRepositoryFactory getFactory(String xmlTag) {
   if (xmlTag == null) {
     throw new IllegalArgumentException("XML tag must not be null");
   }
   for (CustomRepositoryFactory factory : getFactories()) {
     if (xmlTag.equals(factory.getXMLTag())) {
       return factory;
     }
   }
   return null;
 }
 /**
  * Registers a new {@link CustomRepositoryFactory} instance.
  *
  * @param factory the new {@link CustomRepositoryFactory} instance
  * @throws RepositoryException thrown if a factory for the {@link Repository} class or XML tag is
  *     already registered
  * @since 6.5
  */
 public void register(CustomRepositoryFactory factory) throws RepositoryException {
   synchronized (factories) {
     if (getClasses().contains(factory.getRepositoryClass())) {
       throw new RepositoryException(
           String.format(
               "Factory for custom repository class %s already registered!",
               factory.getRepositoryClass().getSimpleName()));
     } else if (getFactory(factory.getXMLTag()) != null) {
       throw new RepositoryException(
           String.format("Factory for XML tag %s already registered!", factory.getXMLTag()));
     }
     factories.add(factory);
   }
 }