view src/test/java/jp/ac/u_ryukyu/ie/cr/JungleTest.java @ 0:44465893e8b8

first Commit
author Kazuma
date Wed, 30 Nov 2016 01:47:55 +0900
parents
children cd5f2ba0f894
line wrap: on
line source

package jp.ac.u_ryukyu.ie.cr;

import jp.ac.u_ryukyu.ie.cr.jungle.DefaultJungle;
import jp.ac.u_ryukyu.ie.cr.jungle.Jungle;
import jp.ac.u_ryukyu.ie.cr.jungle.JungleTree;
import jp.ac.u_ryukyu.ie.cr.jungle.JungleTreeEditor;
import jp.ac.u_ryukyu.ie.cr.jungle.data.list.DefaultNode;
import jp.ac.u_ryukyu.ie.cr.jungle.data.treemap.Node;
import jp.ac.u_ryukyu.ie.cr.jungle.persistent.NullJournal;
import jp.ac.u_ryukyu.ie.cr.jungle.store.NodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultNodePath;
import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.DefaultTreeEditor;
import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.store.impl.TreeNodeAttributes;
import jp.ac.u_ryukyu.ie.cr.jungle.transaction.DefaultTreeNode;
import jp.ac.u_ryukyu.ie.cr.jungle.traverser.DefaultTraverser;
import jp.ac.u_ryukyu.ie.cr.jungle.traverser.InterfaceTraverser;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Either;
import jp.ac.u_ryukyu.ie.cr.jungle.util.Error;
import junit.framework.Assert;
import org.junit.Test;

import java.nio.ByteBuffer;
import java.security.Key;
import java.util.Iterator;

/**
 * Created by e135768K on 2016/11/29.
 */
public class JungleTest {

    public static Jungle jungle;
    public static DefaultNodePath root = new DefaultNodePath();
    @Test
    public void GetTest () {
        jungle = new DefaultJungle(new NullJournal(), "Labo", new DefaultTreeEditor(new DefaultTraverser()));
        jungle.createNewTree("User");
        JungleTree tree = jungle.getTreeByName("User");
        // Insert
        JungleTreeEditor editor = tree.getTreeEditor();

        editor = put(editor, root, "Name", "Kono");
        editor = put(editor, root, "Age", "40");
        editor = put(editor, root, "Type", "Teacher");

        editor = put(editor, root, 0, "Name", "Takeda");
        editor = put(editor, root, 0, "Age", "20");
        editor = put(editor, root, 0, "Type", "Student");

        editor = put(editor, root, 1, "Name", "Miyagi");
        editor = put(editor, root, 1, "Age", "22");
        editor = put(editor, root, 1, "Type", "Student");

        editor = put(editor, root, 2, "Name", "Higashionna");
        editor = put(editor, root, 2, "Age", "20");
        editor = put(editor, root, 2, "Type", "Student");

        Either<Error, JungleTreeEditor> either = editor.success();
        if (either.isA())
            Assert.fail();

        tree = jungle.getTreeByName("User");

        // Find
        InterfaceTraverser traverser = tree.getTraverser(false);
        Iterator<TreeNode> iterator = traverser.find((TreeNode node) -> {
            String value = node.getAttributes().getString("Name");
            if (value == null)
                return false;
            if (value.equals("Takeda"))
                return true;
            return false;
        }, "Type", "Student");

        while (iterator.hasNext()){
            System.out.println(iterator.next().getAttributes().getString("Name"));
        }
        // Get
//        ByteBuffer kono_age = get("User", root, "Shinji");
//        ByteBuffer kazuma_age = get("User", root.add(0), "Kazuma");
//        ByteBuffer mitsuki_age = get("User", root.add(1), "Mitsuki");
//        ByteBuffer takui_age = get("User", root.add(2), "Takui");
    }

    public JungleTreeEditor put(JungleTreeEditor editor, NodePath path, int n, String key, String value) {

        Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, n);
        if (either.isA())
            Assert.fail();
        editor = either.b();

        either = editor.putAttribute(path.add(n), key, ByteBuffer.wrap(value.getBytes()));
        if (either.isA())
            Assert.fail();
        editor = either.b();
        return editor;
    }

    public JungleTreeEditor put(JungleTreeEditor editor, NodePath path, String key, String value) {

        Either<Error, JungleTreeEditor> either = editor.putAttribute(path, key, ByteBuffer.wrap(value.getBytes()));
        if (either.isA())
            Assert.fail();
        editor = either.b();
        return editor;
    }

    public ByteBuffer get (String treeName, NodePath path, String key) {
        JungleTree tree = jungle.getTreeByName(treeName);
        Either<Error, TreeNode> e = tree.getNodeOfPath(path);
        if (e.isA())
            Assert.fail();
        TreeNode node = e.b();
        return node.getAttributes().get(key);
    }

}