package com.hw.ems.api.domain.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.hw.ems.api.domain.BaseBuildInfo;
import com.hw.ems.api.domain.BaseBusinessType;
import com.hw.ems.api.domain.BaseMonitorInfo;
import com.hw.ems.api.domain.BaseSubentryType;

import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Treeselect树结构实体类
 *
 * @author sf
 */
public class TreeSelect implements Serializable {
	private static final long serialVersionUID = 1L;

	/** 节点ID */
	private String id;

	/** 节点名称 */
	private String label;

	/** 子节点 */
	@JsonInclude(JsonInclude.Include.NON_EMPTY)
	private List<TreeSelect> children;

	public TreeSelect() {

	}

	public TreeSelect(BaseMonitorInfo baseMonitorInfo) {
		this.id = baseMonitorInfo.getMonitorId();
		this.label = baseMonitorInfo.getMonitorName();
		this.children = baseMonitorInfo.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
	}

    public TreeSelect(BaseBuildInfo baseBuildInfo) {
		this.id = baseBuildInfo.getObjid().toString();
		this.label = baseBuildInfo.getBuildName();
		this.children = baseBuildInfo.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
    }

	public TreeSelect(BaseSubentryType baseSubentryType) {
		this.id = baseSubentryType.getObjid().toString();
		this.label = baseSubentryType.getSubentryName();
		this.children = baseSubentryType.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
	}

	public TreeSelect(BaseBusinessType baseBusinessType) {
		this.id = baseBusinessType.getObjid().toString();
		this.label = baseBusinessType.getBusinessName();
		this.children = baseBusinessType.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getLabel() {
		return label;
	}

	public void setLabel(String label) {
		this.label = label;
	}

	public List<TreeSelect> getChildren() {
		return children;
	}

	public void setChildren(List<TreeSelect> children) {
		this.children = children;
	}
}
