All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aksw.commons.util.slot.SlottedBuilderImpl Maven / Gradle / Ivy

There is a newer version: 0.9.9
Show newest version
package org.aksw.commons.util.slot;

import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;

public class SlottedBuilderImpl
    implements SlottedBuilder
{
    /** The assembler that assembles the 'whole' from the 'parts' */
    protected Function, ? extends W> assembler;

    protected Set> slots = new LinkedHashSet<>();

    public SlottedBuilderImpl(Function, ? extends W> assembler) {
        super();
        this.assembler = assembler;
    }

    public class SlotImpl
        implements Slot

{ protected Supplier

supplier; @Override public Supplier

getSupplier() { return supplier; } @Override public Slot

setSupplier(Supplier

partSupplier) { this.supplier = partSupplier; return this; } @Override public void close() { synchronized (slots) { slots.remove(this); } } @Override public String toString() { return "SlotImpl [suppliedValue=" + supplier.get() + "]"; } } @Override public synchronized Slot

newSlot() { Slot

result = new SlotImpl(); synchronized (slots) { slots.add(result); } return result; } @Override public W build() { synchronized (slots) { Collection

parts = slots.stream() .filter(slot -> slot != null) .map(Slot::getSupplier) .filter(supplier -> supplier != null) .map(Supplier::get) .filter(part -> part != null) .collect(Collectors.toList()); W result = assembler.apply(parts); return result; } } public static SlottedBuilder create(Function, ? extends W> assembler) { return new SlottedBuilderImpl(assembler); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy