JsTreeItem.java

package sk.iway.iwcm.admin.jstree;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import sk.iway.iwcm.Tools;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts.util.ResponseUtils;

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class JsTreeItem {
    private String id; // will be autogenerated if omitted
    private String text; // node text
    private String icon; // string for custom
    private JsTreeItemState state;
    private Boolean children;
    @JsonProperty("li_attr")
    private Map<String, String> liAttr; // attributes for the generated LI node
    @JsonProperty("a_attr")
    private Map<String, String> aAttr;
    private String virtualPath;
    private JsTreeItem original;
    private String parent;
    private JsTreeItemType type;
    private String typeCustom;

    @JsonIgnore
    private List<String> textIcons;

    private void initLiAttr() {
        if (liAttr==null) liAttr = new HashMap<>();
    }
    private void initAAttr() {
        if (aAttr==null) aAttr = new HashMap<>();
    }
    /**
     * Prida CSS triedu na LI element
     * @param className
     */
    public void addLiClass(String className) {
        initLiAttr();
        String currentClass = liAttr.get("class");
        if (Tools.isEmpty(currentClass)) currentClass = className;
        else currentClass += " "+className;

        liAttr.put("class", currentClass);
    }
    /**
     * Prida CSS triedu na LI element
     * @param className
     */
    public void addAClass(String className) {
        initAAttr();
        String currentClass = aAttr.get("class");
        if (Tools.isEmpty(currentClass)) currentClass = className;
        else currentClass += " "+className;

        aAttr.put("class", currentClass);
    }
    /**
     * Prida novu ikonu k textu (vytvorenu ako span element)
     * @param className - ti ti-eye-off -> <span class="ti ti-eye-off"></span>
     */
    public void addTextIcon(String className) {
        if (textIcons == null) textIcons = new ArrayList<>();
        textIcons.add(className);
    }

    private String getTextIconHtmlCode() {
        if (textIcons == null || textIcons.size()==0) return "";
        StringBuilder html = new StringBuilder();
        for (String className : textIcons) {
            html.append("<span class=\"jstree-text-icon ").append(className).append("\"></span> ");
        }
        return html.toString();
    }

    public String getText() {
        return getTextIconHtmlCode() + ResponseUtils.filter(text);
    }
}