diff src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java @ 154:b8cef4b640a3

update index for commit
author one
date Wed, 26 Nov 2014 06:23:07 +0900
parents 20af7f25ef32
children f98f2704b154 6b4aab79910d
line wrap: on
line diff
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java	Tue Nov 25 17:52:41 2014 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/shoshi/jungle/traverser/InterfaceTraverser.java	Wed Nov 26 06:23:07 2014 +0900
@@ -18,11 +18,15 @@
   ParentIndex parentIndex;
   boolean parentUpdateFlag;
   IndexManager indexManager;
-  boolean indexFlag;
+  boolean useIndex;
 
-  public InterfaceTraverser(TreeNode _root, Index index, ParentIndex parentIndex, IndexManager indexManager,
-      boolean indexFlag) {
-    this.node = _root;
+  public InterfaceTraverser(TreeNode root, IndexManager indexManager, boolean indexFlag) {
+    this(root, new Index(), new ParentIndex(), indexManager, indexFlag);
+  }
+
+  public InterfaceTraverser(TreeNode root, Index index, ParentIndex parentIndex, IndexManager indexManager,
+      boolean useIndex) {
+    this.node = root;
     this.index = index;
     this.indexManager = indexManager;
     this.parentIndex = parentIndex;
@@ -30,7 +34,7 @@
       parentUpdateFlag = true;
     else
       parentUpdateFlag = false;
-    this.indexFlag = indexFlag;
+    this.useIndex = useIndex;
   }
 
   public Index getIndex() {
@@ -50,51 +54,20 @@
     this.index = index;
   }
 
-  public Iterator<TreeNode> emptyQuery() {
+  public void createIndex() {
 
     final PathNodeIterator itNode = new PathNodeIterator(node);
-    return new Iterator<TreeNode>() {
-
-      private TreeNode matchNode = nextmatch(itNode);
-
-      private TreeNode nextmatch(PathNodeIterator itNode) {
-
-        for (; itNode.hasNext();) {
-          TreeNode targetNode = itNode.next();
-          List<String> keys = targetNode.getAttributes().getKeys();
-          for (String key : keys) {
-            String value = targetNode.getAttributes().getString(key);
-            if (value != null)
-              index = index.set(key, value, targetNode);
-            if (parentUpdateFlag)
-              parentIndex = parentIndex.set(targetNode);
-          }
-        }
-        commit();
-        return null;
+    for (; itNode.hasNext();) {
+      TreeNode targetNode = itNode.next();
+      if (parentUpdateFlag)
+        parentIndex = parentIndex.set(targetNode);
+      List<String> keys = targetNode.getAttributes().getKeys();
+      for (String key : keys) {
+        String value = targetNode.getAttributes().getString(key);
+        if (value != null)
+          index = index.set(key, value, targetNode);
       }
-
-      @Override
-      public boolean hasNext() {
-        if (matchNode == null) {
-          return false;
-        }
-        return true;
-      }
-
-      @Override
-      public TreeNode next() {
-        TreeNode currentPair = matchNode;
-        matchNode = nextmatch(itNode);
-        return currentPair;
-      }
-
-      @Override
-      public void remove() {
-      }
-
-    };
-
+    }
   }
 
   /**
@@ -112,7 +85,7 @@
      * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
      */
     List<TreeNode> nodeList = index.get(key, searchValue);
-    if (nodeList != null) {
+    if (nodeList != null && useIndex) {
 
       if (nodeList.isEmpty())
         return new NulIterator<TreeNode>();// 空のIteratorを返す
@@ -187,7 +160,7 @@
      * indexから取ってきたNodeのPathが一致した場合、そのNodeを返す
      */
     Iterator<TreeNode> NodeIterator = index.getAll(key);
-    if (NodeIterator != null) {
+    if (NodeIterator != null && useIndex) {
       List<TreeNode> filteredList = List.nil();
       for (; NodeIterator.hasNext();) {
         TreeNode targetNode = NodeIterator.next();
@@ -243,7 +216,7 @@
   public Iterator<TreeNode> find(Query query, String key, String searchValue) {
 
     List<TreeNode> nodeList = index.get(key, searchValue);
-    if (nodeList != null) {
+    if (nodeList != null && useIndex) {
       return nodeList.iterator();
     } else {
 
@@ -257,7 +230,7 @@
           for (; itNode.hasNext();) {
             TreeNode targetNode = itNode.next();
             String value = targetNode.getAttributes().getString(key);
-            if (indexFlag) {
+            if (useIndex) {
               if (value != null)
                 index = index.set(key, value, targetNode);
             }
@@ -266,7 +239,8 @@
             if (query.condition(targetNode))
               return targetNode;
           }
-          commit();
+          if (useIndex || parentUpdateFlag)
+            commit();
           return null;
         }
 
@@ -296,7 +270,7 @@
   public Iterator<TreeNode> findAll(Query query, String key) {
 
     Iterator<TreeNode> nodeList = index.getAll(key);
-    if (nodeList != null) {
+    if (nodeList != null && useIndex) {
 
       return nodeList;
 
@@ -312,7 +286,7 @@
           for (; itNode.hasNext();) {
             TreeNode targetNode = itNode.next();
             String value = targetNode.getAttributes().getString(key);
-            if (indexFlag) {
+            if (useIndex) {
               if (value != null)
                 index = index.set(key, value, targetNode);
             }
@@ -321,7 +295,8 @@
             if (query.condition(targetNode))
               return targetNode;
           }
-          commit();
+          if (useIndex || parentUpdateFlag)
+            commit();
           return null;
         }