user595234
user595234

Reputation: 6259

java output a tree for a format

I want to use java to output a tree for JQuery Dynatree, but failed.

public class Category {
    String name;

    Category parentCategory;

    public Category(String name, Category parentCategory) {
        super();
        this.name = name;
        this.parentCategory = parentCategory;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Category getParentCategory() {
        return parentCategory;
    }

    public void setParentCategory(Category parentCategory) {
        this.parentCategory = parentCategory;
    }
}

Main class

import java.util.ArrayList;
import java.util.List;

public class Main {

    static Category root;
    static Category category1;
    static Category category11;
    static Category category12;
    static Category category2;
    static Category category21;
    static Category category22;

    static Category category3;

    public static void main(String[] args) {
         root = new Category("root", null);

         category1 = new Category("c1", root);
         category11 = new Category("c11", category1);
         category12 = new Category("c12", category1);

         category2 = new Category("c2", root);
         category21 = new Category("c21", category2);
         category22 = new Category("c22", category2);   

         category3 = new Category("c3", root);

         print(root);
    }

    public static void print(Category category){    
        List<Category> childList = getChild(category);

        if(category.getParentCategory() == null){ //root
            System.out.println("{title:"+category.getName()+",key:"+category.getName()+",");
        }
        else {
            //if(childList.size()==0){
            //  System.out.println("{title:"+category.getName()+",key:"+category.getName()+",");
            //}
        //  else {
                System.out.println("children:[{title:"+category.getName()+",key:"+category.getName()+",");
        //  }           
        }           

        if(childList.size()==0) return;
        for(Category child : childList){
            print(child);
        }   
        System.out.println("}]");
        System.out.println("}");
    }

    public static List<Category> getChild(Category category){
        List<Category> childList = new ArrayList<Category>();
        if("root".equals(category.getName())){
            childList.add(category1);
            childList.add(category2);
            childList.add(category3);

            return childList;
        }

        if("c1".equals(category.getName())){
            childList.add(category11);
            childList.add(category12);

            return childList;           
        }

        if("c2".equals(category.getName())){
            childList.add(category21);
            childList.add(category22);

            return childList;           
        }

        return childList;// empty

    }

}

my output is not correct, it should be this:

 {title: "root", key: "root", 
      children: [
        {title: "c1", activate: true,
          children: [
            {title: "c11", key: "c11" },
            {title: "c12", key: "c12" }
          ]
        },
        {title: "c2", select: true,
          children: [
            {title: "c21", key: "c21" },
            {title: "c22", key: "c22" }
          ]
        },
        {title: "c3", hideCheckbox: true }       
      ]
    }

My code has bug, how to fix it ? or using this design, is it possible to get this result ?

Thanks

Upvotes: 0

Views: 219

Answers (1)

nhahtdh
nhahtdh

Reputation: 56809

It seems that the output is JSON.

Have you tried gson? You don't need to write code to serialize the data, gson will serialize the object as JSON for you.

Upvotes: 1

Related Questions