TreeNode.java |
1 /** 2 * Distribution License: 3 * JSword is free software; you can redistribute it and/or modify it under 4 * the terms of the GNU Lesser General Public License, version 2.1 or later 5 * as published by the Free Software Foundation. This program is distributed 6 * in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even 7 * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 8 * See the GNU Lesser General Public License for more details. 9 * 10 * The License is available on the internet at: 11 * http://www.gnu.org/copyleft/lgpl.html 12 * or by writing to: 13 * Free Software Foundation, Inc. 14 * 59 Temple Place - Suite 330 15 * Boston, MA 02111-1307, USA 16 * 17 * © CrossWire Bible Society, 2005 - 2016 18 * 19 */ 20 package org.crosswire.jsword.book.sword; 21 22 import java.io.Serializable; 23 24 /** 25 * A node that knows where the data is in the real file and where it is in 26 * relationship to other nodes. 27 * 28 * @see gnu.lgpl.License The GNU Lesser General Public License for details. 29 * @author DM Smith 30 */ 31 class TreeNode implements Cloneable, Serializable { 32 /** 33 * TreeNode default ctor. 34 */ 35 TreeNode() { 36 this(-1); 37 } 38 39 /** 40 * Setup with the positions of data in the file 41 * 42 * @param theOffset 43 */ 44 TreeNode(int theOffset) { 45 offset = theOffset; 46 name = ""; 47 parent = -1; 48 nextSibling = -1; 49 firstChild = -1; 50 userData = new byte[0]; 51 } 52 53 /** 54 * @return the offset 55 */ 56 public int getOffset() { 57 return offset; 58 } 59 60 /** 61 * @param newOffset 62 * the offset to set 63 */ 64 public void setOffset(int newOffset) { 65 offset = newOffset; 66 } 67 68 /** 69 * @return the name 70 */ 71 public String getName() { 72 return name; 73 } 74 75 /** 76 * @param newName 77 * the name to set 78 */ 79 public void setName(String newName) { 80 name = newName; 81 } 82 83 /** 84 * @return the userData 85 */ 86 public byte[] getUserData() { 87 return userData.clone(); 88 } 89 90 /** 91 * @param theUserData 92 * the userData to set 93 */ 94 public void setUserData(byte[] theUserData) { 95 userData = theUserData.clone(); 96 } 97 98 /** 99 * @return the firstChild 100 */ 101 public int getFirstChild() { 102 return firstChild; 103 } 104 105 /** 106 * @return whether there are children 107 */ 108 public boolean hasChildren() { 109 return firstChild != -1; 110 } 111 112 /** 113 * @param firstChild 114 * the firstChild to set 115 */ 116 public void setFirstChild(int firstChild) { 117 this.firstChild = firstChild; 118 } 119 120 /** 121 * @return the nextSibling 122 */ 123 public int getNextSibling() { 124 return nextSibling; 125 } 126 127 /** 128 * @return if there are more siblings 129 */ 130 public boolean hasNextSibling() { 131 return nextSibling != -1; 132 } 133 134 /** 135 * @param nextSibling 136 * the nextSibling to set 137 */ 138 public void setNextSibling(int nextSibling) { 139 this.nextSibling = nextSibling; 140 } 141 142 /** 143 * @return the parent 144 */ 145 public int getParent() { 146 return parent; 147 } 148 149 /** 150 * @param parent 151 * the parent to set 152 */ 153 public void setParent(int parent) { 154 this.parent = parent; 155 } 156 157 @Override 158 public TreeNode clone() { 159 TreeNode clone = null; 160 try { 161 clone = (TreeNode) super.clone(); 162 } catch (CloneNotSupportedException e) { 163 assert false : e; 164 } 165 return clone; 166 } 167 168 /** 169 * The offset of this TreeNode in the offset. 170 */ 171 private int offset; 172 173 /** 174 * The name of this TreeNode. Note, this is not the path. To get the path, 175 * one needs to traverse to the parent to construct the path. 176 */ 177 private String name; 178 179 /** 180 * Optional, extra data associated with this TreeNode. For example, this is 181 * used to store offset and length for a raw genbook. 182 */ 183 private byte[] userData; 184 185 /** 186 * The offset of the parent record in the offset. Root nodes are indicated 187 * with a value of -1. That is, this TreeNode does not have a parent. 188 */ 189 private int parent; 190 191 /** 192 * The offset of the next sibling record in the offset. Final siblings are 193 * indicated with a value of -1. That is, this TreeNode does not have a next 194 * sibling. 195 */ 196 private int nextSibling; 197 198 /** 199 * The offset of the first child record in the offset. Leaf nodes are 200 * indicated with a value of -1. That is, this TreeNode does not have any 201 * children. 202 */ 203 private int firstChild; 204 205 /** 206 * Serialization ID 207 */ 208 private static final long serialVersionUID = -2472601787934480762L; 209 210 } 211