// Path: src/main/java/social/roo/model/dto/NodeDto.java
// @Data
// public class NodeDto {
// 
//     private String title;
//     private String slug;
//     private List<Node> children;
// 
// }
// 
// Path: src/main/java/social/roo/model/entity/Node.java
// @Table(value = "roo_node")
// @Data
// public class Node extends ActiveRecord {
// 
//     /**
//      * id
//      */
//     private Integer id;
//     /**
//      * 父id
//      */
//     private Integer pid;
//     /**
//      *
//      */
//     private String  slug;
//     /**
//      * 节点名称
//      */
//     private String  title;
//     /**
//      * 节点描述
//      */
//     private String  description;
//     /**
//      * 节点下的主题数
//      */
//     private Integer topics;
//     private Integer state;
// }
// 
// Path: src/main/java/social/roo/model/entity/Setting.java
// @Table(value = "roo_setting", pk = "skey")
// @Data
// public class Setting extends ActiveRecord{
// 
//     /**
//      * 配置键
//      */
//     private String  skey;
//     /**
//      * 配置值
//      */
//     private String  svalue;
//     /**
//      * 0禁用 1正常
//      */
//     private Integer state;
// 
// }


import jetbrick.template.JetGlobalContext;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import social.roo.model.dto.NodeDto;
import social.roo.model.entity.Node;
import social.roo.model.entity.Setting;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

    /**
     * 刷新节点
     *
     * @return
     */
    public Roo refreshNodes() {
        List<Node> parent = new Node().where("pid", 0).and("state", 1).findAll();
        List<NodeDto> nodes = parent.stream()
                .map(this::buildNodeDto)
                .collect(Collectors.toList());
        context.set(List.class, "nodes", nodes);
        return this;
    }

    private NodeDto buildNodeDto(Node p) {
        NodeDto nodeDto = new NodeDto();
        nodeDto.setTitle(p.getTitle());
        nodeDto.setSlug(p.getSlug());
        List<Node> children = new Node().where("pid", p.getId()).and("state", 1).findAll();
        nodeDto.setChildren(children);
        return nodeDto;
    }

    /**
     * 刷新配置
     *
     * @return
     */
    public Roo refreshSettings() {
// Path: src/main/java/social/roo/model/dto/NodeDto.java
// @Data
// public class NodeDto {
// 
//     private String title;
//     private String slug;
//     private List<Node> children;
// 
// }
// 
// Path: src/main/java/social/roo/model/entity/Node.java
// @Table(value = "roo_node")
// @Data
// public class Node extends ActiveRecord {
// 
//     /**
//      * id
//      */
//     private Integer id;
//     /**
//      * 父id
//      */
//     private Integer pid;
//     /**
//      *
//      */
//     private String  slug;
//     /**
//      * 节点名称
//      */
//     private String  title;
//     /**
//      * 节点描述
//      */
//     private String  description;
//     /**
//      * 节点下的主题数
//      */
//     private Integer topics;
//     private Integer state;
// }
// 
// Path: src/main/java/social/roo/model/entity/Setting.java
// @Table(value = "roo_setting", pk = "skey")
// @Data
// public class Setting extends ActiveRecord{
// 
//     /**
//      * 配置键
//      */
//     private String  skey;
//     /**
//      * 配置值
//      */
//     private String  svalue;
//     /**
//      * 0禁用 1正常
//      */
//     private Integer state;
// 
// }


// Path: src/main/java/social/roo/Roo.java
import jetbrick.template.JetGlobalContext;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import social.roo.model.dto.NodeDto;
import social.roo.model.entity.Node;
import social.roo.model.entity.Setting;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


    /**
     * 刷新节点
     *
     * @return
     */
    public Roo refreshNodes() {
        List<Node> parent = new Node().where("pid", 0).and("state", 1).findAll();
        List<NodeDto> nodes = parent.stream()
                .map(this::buildNodeDto)
                .collect(Collectors.toList());
        context.set(List.class, "nodes", nodes);
        return this;
    }

    private NodeDto buildNodeDto(Node p) {
        NodeDto nodeDto = new NodeDto();
        nodeDto.setTitle(p.getTitle());
        nodeDto.setSlug(p.getSlug());
        List<Node> children = new Node().where("pid", p.getId()).and("state", 1).findAll();
        nodeDto.setChildren(children);
        return nodeDto;
    }

    /**
     * 刷新配置
     *
     * @return
     */
    public Roo refreshSettings() {
        List<Setting> settings = new Setting().findAll();