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

com.netopyr.reduxfx.vscenegraph.builders.TreeItemBuilder Maven / Gradle / Ivy

package com.netopyr.reduxfx.vscenegraph.builders;

import com.netopyr.reduxfx.vscenegraph.VNode;
import com.netopyr.reduxfx.vscenegraph.event.VEventHandler;
import com.netopyr.reduxfx.vscenegraph.event.VEventType;
import com.netopyr.reduxfx.vscenegraph.property.VChangeListener;
import com.netopyr.reduxfx.vscenegraph.property.VProperty;
import io.vavr.collection.Array;
import io.vavr.collection.Map;
import io.vavr.control.Option;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

public class TreeItemBuilder, E> extends Builder {

	private static final String VALUE = "value";
	private static final String EXPANDED = "expanded";
	private static final String CHILDREN = "children";

	private final Class elementClass;

	public TreeItemBuilder(Class nodeClass,
		Class elementClass,
		Map> childrenMap,
		Map> singleChildMap,
		Map properties,
		Map eventHandlers) {
		super(nodeClass, childrenMap, singleChildMap, properties, eventHandlers);
		this.elementClass = elementClass;
	}

	@SuppressWarnings("unchecked")
	@Override
	protected B create(
		Map> childrenMap,
		Map> singleChildMap,
		Map properties,
		Map eventHandlers) {
		return (B) new TreeItemBuilder<>(getNodeClass(), elementClass, childrenMap, singleChildMap, properties,
			eventHandlers);
	}

	@SafeVarargs
	public final B children(TreeItemBuilder... children) {
		return children(CHILDREN, children == null ? Array.empty() : Array.of(children));
	}

	public final B children(Iterable> children) {
		return children(CHILDREN, children == null ? Array.empty() : Array.ofAll(children));
	}

	public B value(E value) {
		return property(VALUE, value);
	}

	public B expanded(boolean expanded) {
		return property(EXPANDED, expanded);
	}

	public B expanded(boolean expanded, VChangeListener listener) {
		return property(EXPANDED, expanded, listener);
	}

	public B expanded(VChangeListener listener) {
		return property(EXPANDED, listener);
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)
			.appendSuper(super.toString())
			.toString();
	}
}