KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > datasystem > indexsystem > MemoryNode


1 package com.daffodilwoods.daffodildb.server.datasystem.indexsystem;
2
3 import com.daffodilwoods.daffodildb.server.datasystem.btree.*;
4 import com.daffodilwoods.database.resource.DException;
5 import com.daffodilwoods.daffodildb.server.datasystem.interfaces._DatabaseUser;
6
7 public class MemoryNode implements _Node {
8
9     private BTreeElement[] nodeElements;
10     private int elementCount;
11     private short level;
12     private static int nodeSize;
13     private BTreeNode nextNode;
14     private BTreeNode previousNode;
15     private boolean isLeafNode = true;
16     private BTreeNode parentNode;
17     /*
18  Thid flag is taken while resolving a bug 12510.
19  So that node can be removed from map during insert operation of a btree
20  while loading child nodes of a non leaf node in shift right half
21  which is spliting so during loading of nodes any node can be removed
22  from map which is used in insert method.
23  So this flag is seted false for those nodes which are currently used
24  in insert method and reseted to true later while those can be
25  removed from map.
26  */

27  private boolean isCanBeRemovedFromMap ;
28
29
30
31     public MemoryNode(int nodeSize0) throws DException {
32       nodeSize = nodeSize0;
33       nodeElements = new BTreeElement[nodeSize];
34         isCanBeRemovedFromMap = true;
35    }
36
37
38     public void insert(int position, BTreeElement btreeElement,boolean flag) throws DException {
39         nodeElements[position] = btreeElement;
40         btreeElement.setPosition(position);
41     }
42
43     public void delete(int position) throws DException {
44         if(!isLeafNode)
45             throw new DException("DSE2041",null);
46           BTreeElement element;
47         for(int i = position ; i < getElementCount() - 1 ; i++ ){
48            element = getElement(i+1);
49             update(i,element,false);
50         }
51         updateElementCount(false);
52     }
53
54   public void updateBtree(BTreeKey btreekey,Object JavaDoc newKey,Object JavaDoc newValue) throws DException{
55     BTreeElement element = nodeElements[btreekey.getPosition()] ;
56     element.setKey(newKey);
57     element.setValue(newValue);
58   }
59
60     public BTreeElement getElement(int index) throws DException {
61         try {
62             return nodeElements[index];
63         }catch (ArrayIndexOutOfBoundsException JavaDoc ex) {
64             throw new DException("DSE2043",new Object JavaDoc[] {new Integer JavaDoc(index),new Integer JavaDoc(getElementCount())});
65         }
66     }
67
68     public boolean isLeafNode() throws DException {
69         return isLeafNode;
70     }
71
72     public void updateNode(int position,boolean flag) throws DException{
73         if(getElementCount() >= nodeSize)
74             throw new DException("DSE2044",null);
75         for( int i = elementCount ; i > position ; i-- ){
76             insert(i,getElement(i-1),flag);
77         }
78     }
79
80
81     public Object JavaDoc getParentNode(_DatabaseUser user) throws DException{
82         return parentNode;
83     }
84
85     public int getElementCount()throws DException{
86         return elementCount;
87     }
88
89     private void update(int position, BTreeElement element, boolean flag) throws DException {
90         nodeElements[position] = element;
91         element.setPosition(position);
92     }
93
94     /**
95      * Creates new Element having key and value
96      * @param key column values of btree
97      * @param value Memory Table Key
98      * @return new element having key and value
99      */

100
101     public BTreeElement createElement(boolean leaf,_DatabaseUser user, Object JavaDoc key,Object JavaDoc value,BTreeNode leftNode,BTreeNode childNode) throws DException{
102         return new BTreeElement(key,value);
103     }
104
105     public short getLevel(){
106         return level;
107     }
108
109     public void setLevel(short level0) throws DException{
110         level = level0;
111     }
112
113     public void updateElementCount(boolean increase) throws DException{
114         elementCount += increase ? 1 : -1;
115     }
116
117     public int getSplitPoint() throws DException{
118         return nodeSize/2 + 1;
119     }
120
121     public void insertRange(Object JavaDoc element ,int startPosition,int endPosition)throws DException{
122         BTreeElement [] elements = (BTreeElement[])element;
123         BTreeElement btreeElement;
124         int count = 0;
125         for(int i = startPosition,j=1 ; i <= endPosition ; i++){
126           count++;
127            btreeElement = elements[i];
128             insert(j++,btreeElement,false);
129             updateElementCount(true);
130         }
131     }
132
133     public void deleteRange(int startPosition,int endPosition)throws DException{
134       elementCount = endPosition - startPosition +1;
135     }
136
137     public Object JavaDoc getElements()throws DException{
138         return nodeElements;
139     }
140
141     public Object JavaDoc getNextNode(_DatabaseUser user)throws DException {
142         return nextNode;
143     }
144
145     public Object JavaDoc getPreviousNode(_DatabaseUser user)throws DException {
146         return previousNode;
147     }
148
149     public Object JavaDoc getNodeKey() throws DException{
150         return btreeNode;
151     }
152
153     public void setNextNode(BTreeNode node0)throws DException {
154         nextNode = node0;
155     }
156
157     public void setPreviousNode(BTreeNode node0)throws DException {
158         previousNode = node0;
159     }
160
161     public void setLeafNode(boolean flag)throws DException{
162         isLeafNode = flag;
163     }
164
165     public void insertDummyElement(BTreeElement element) throws DException {
166         nodeElements[0] = element;
167         nodeElements[0].setPosition(0);
168         elementCount += 1;
169     }
170
171     public void setParentNode(BTreeNode node) throws DException {
172         parentNode = node;
173     }
174
175
176     public void updateChild(int position,Object JavaDoc key) throws DException{
177         /**@todo Implement this com.daffodilwoods.daffodildb.server.datasystem.btree._Node method*/
178         throw new java.lang.UnsupportedOperationException JavaDoc("Method getParentElement() not yet implemented.");
179     }
180
181     BTreeNode btreeNode;
182     public void setNode(BTreeNode node) {
183         btreeNode = node;
184     }
185
186     public Object JavaDoc getKey(int index) throws DException{
187         return getElement(index).getKey();
188     }
189
190     public Object JavaDoc getChildNodeKey(int position) throws DException{
191         return getElement(position).getChild();
192     }
193
194     public Object JavaDoc getValue(int index) throws DException{
195         return getElement(index).getValue();
196     }
197    public void setIsNodeCanBeRemovedFromMap(boolean isNodeCanBeRemovedFromMap){
198 isCanBeRemovedFromMap = isNodeCanBeRemovedFromMap;
199 }
200
201 public boolean isNodeCanBeRemovedFromMap(){
202 return isCanBeRemovedFromMap;
203 }
204
205 }
206
207
Popular Tags