class SingleSelectCapability extends ServiceCapability<List<DefaultMetadataElement>>
		implements Defaultable<DefaultMetadataElement> {

	private final List<DefaultMetadataElement> content = new ArrayList<>();

	private final ReadWriteLock contentLock = new ReentrantReadWriteLock();

	@JsonCreator
	SingleSelectCapability(@JsonProperty("id") String id) {
		this(id, null, null);
	}

	public SingleSelectCapability(String id, String title, String description) {
		super(id, ServiceCapabilityType.SINGLE_SELECT, title, description);
	}

	@Override
	public List<DefaultMetadataElement> getContent() {
		return Collections.unmodifiableList(withReadableContent(ArrayList::new));
	}

	public void addContent(DefaultMetadataElement element) {
		withWritableContent((content) -> content.add(element));
	}

	public void setContent(List<DefaultMetadataElement> newContent) {
		withWritableContent((content) -> {
			content.clear();
			content.addAll(newContent);
		});
	}

	/**
	 * Return the default element of this capability.
	 */
	@Override
	public DefaultMetadataElement getDefault() {
		return withReadableContent(
				(content) -> content.stream().filter(DefaultMetadataElement::isDefault).findFirst().orElse(null));
	}

	/**
	 * Return the element with the specified id or {@code null} if no such element exists.
	 * @param id the ID of the element to find
	 * @return the element or {@code null}
	 */
	public DefaultMetadataElement get(String id) {
		return withReadableContent(
				(content) -> content.stream().filter((it) -> id.equals(it.getId())).findFirst().orElse(null));
	}

	@Override
	public void merge(List<DefaultMetadataElement> otherContent) {<FILL_FUNCTION_BODY>}

	private <T> T withReadableContent(Function<List<DefaultMetadataElement>, T> consumer) {
		this.contentLock.readLock().lock();
		try {
			return consumer.apply(this.content);
		}
		finally {
			this.contentLock.readLock().unlock();
		}
	}

	private void withWritableContent(Consumer<List<DefaultMetadataElement>> consumer) {
		this.contentLock.writeLock().lock();
		try {
			consumer.accept(this.content);
		}
		finally {
			this.contentLock.writeLock().unlock();
		}
	}

}

		withWritableContent((content) -> otherContent.forEach((it) -> {
			if (get(it.getId()) == null) {
				this.content.add(it);
			}
		}));
	
<methods>public abstract List<io.spring.initializr.metadata.DefaultMetadataElement> getContent() ,public java.lang.String getDescription() ,public java.lang.String getId() ,public java.lang.String getTitle() ,public io.spring.initializr.metadata.ServiceCapabilityType getType() ,public abstract void merge(List<io.spring.initializr.metadata.DefaultMetadataElement>) ,public void merge(ServiceCapability<List<io.spring.initializr.metadata.DefaultMetadataElement>>) ,public void setDescription(java.lang.String) ,public void setTitle(java.lang.String) <variables>private java.lang.String description,private final non-sealed java.lang.String id,private java.lang.String title,private final non-sealed io.spring.initializr.metadata.ServiceCapabilityType type