/** * @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); } }