Home / Class/ MetadataCollector Class — spring-boot Architecture

MetadataCollector Class — spring-boot Architecture

Architecture documentation for the MetadataCollector class in MetadataCollector.java from the spring-boot codebase.

Entity Profile

Relationship Graph

Source Code

configuration-metadata/spring-boot-configuration-processor/src/main/java/org/springframework/boot/configurationprocessor/MetadataCollector.java lines 38–123

class MetadataCollector {

	private final Predicate<ItemMetadata> mergeRequired;

	private final ConfigurationMetadata previousMetadata;

	private final Set<ItemMetadata> metadataItems = new LinkedHashSet<>();

	private final Set<ItemHint> metadataHints = new LinkedHashSet<>();

	/**
	 * Creates a new {@code MetadataProcessor} instance.
	 * @param mergeRequired specify whether an item can be merged
	 * @param previousMetadata any previous metadata or {@code null}
	 */
	MetadataCollector(Predicate<ItemMetadata> mergeRequired, ConfigurationMetadata previousMetadata) {
		this.mergeRequired = mergeRequired;
		this.previousMetadata = previousMetadata;
	}

	void add(ItemMetadata metadata) {
		this.metadataItems.add(metadata);
	}

	void add(ItemMetadata metadata, Consumer<ItemMetadata> onConflict) {
		ItemMetadata existing = find(metadata.getName());
		if (existing != null) {
			onConflict.accept(existing);
			return;
		}
		add(metadata);
	}

	boolean addIfAbsent(ItemMetadata metadata) {
		ItemMetadata existing = find(metadata.getName());
		if (existing != null) {
			return false;
		}
		add(metadata);
		return true;
	}

	void add(ItemHint itemHint) {
		this.metadataHints.add(itemHint);
	}

	boolean hasSimilarGroup(ItemMetadata metadata) {
		if (!metadata.isOfItemType(ItemMetadata.ItemType.GROUP)) {
			throw new IllegalStateException("item " + metadata + " must be a group");
		}
		for (ItemMetadata existing : this.metadataItems) {
			if (existing.isOfItemType(ItemMetadata.ItemType.GROUP) && existing.getName().equals(metadata.getName())
					&& existing.getType().equals(metadata.getType())) {
				return true;
			}
		}
		return false;
	}

	ConfigurationMetadata getMetadata() {
		ConfigurationMetadata metadata = new ConfigurationMetadata();
		for (ItemMetadata item : this.metadataItems) {
			metadata.add(item);
		}
		for (ItemHint metadataHint : this.metadataHints) {
			metadata.add(metadataHint);
		}
		if (this.previousMetadata != null) {
			List<ItemMetadata> items = this.previousMetadata.getItems();
			for (ItemMetadata item : items) {
				if (this.mergeRequired.test(item)) {
					metadata.addIfMissing(item);
				}
			}
		}
		return metadata;
	}

	private ItemMetadata find(String name) {
		return this.metadataItems.stream()
			.filter((candidate) -> name.equals(candidate.getName()))
			.findFirst()
			.orElse(null);
	}

}

Domain

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free