Coverage Report - org.crosswire.jsword.passage.TreeKey
 
Classes in this File Line Coverage Branch Coverage Complexity
TreeKey
0%
0/55
0%
0/26
1.9
 
 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.passage;
 21  
 
 22  
 import java.util.ArrayList;
 23  
 import java.util.Iterator;
 24  
 import java.util.List;
 25  
 
 26  
 import org.slf4j.Logger;
 27  
 import org.slf4j.LoggerFactory;
 28  
 
 29  
 /**
 30  
  * A Key that knows where the data is in the real file.
 31  
  * 
 32  
  * @see gnu.lgpl.License The GNU Lesser General Public License for details.
 33  
  * @author DM Smith
 34  
  */
 35  0
 public class TreeKey extends AbstractKeyList {
 36  
     /**
 37  
      * Setup with the key name and positions of data in the file
 38  
      *
 39  
      * @param name the key for this TreeKey 
 40  
      * @param parent the parent node for this TreeKey
 41  
      */
 42  
     public TreeKey(String name, Key parent) {
 43  0
         super(name);
 44  0
         this.parent = parent;
 45  0
         this.children = new ArrayList<Key>();
 46  0
     }
 47  
 
 48  
     /**
 49  
      * Setup with the key name. Use solely for searching.
 50  
      *
 51  
      * @param text the key for this TreeKey 
 52  
       */
 53  
     public TreeKey(String text) {
 54  0
         this(text, null);
 55  0
     }
 56  
 
 57  
     /* (non-Javadoc)
 58  
      * @see org.crosswire.jsword.passage.Key#canHaveChildren()
 59  
      */
 60  
     public boolean canHaveChildren() {
 61  0
         return true;
 62  
     }
 63  
 
 64  
     /* (non-Javadoc)
 65  
      * @see org.crosswire.jsword.passage.Key#getChildCount()
 66  
      */
 67  
     public int getChildCount() {
 68  0
         return children.size();
 69  
     }
 70  
 
 71  
     /* (non-Javadoc)
 72  
      * @see org.crosswire.jsword.passage.Key#getCardinality()
 73  
      */
 74  
     public int getCardinality() {
 75  0
         int cardinality = 1; // count this node
 76  0
         for (Key child : children) {
 77  0
             cardinality += child.getCardinality();
 78  
         }
 79  
 
 80  0
         return cardinality;
 81  
     }
 82  
 
 83  
     @Override
 84  
     public boolean isEmpty() {
 85  0
         return children.isEmpty();
 86  
     }
 87  
 
 88  
     @Override
 89  
     public boolean contains(Key key) {
 90  0
         if (children.contains(key)) {
 91  0
             return true;
 92  
         }
 93  
 
 94  0
         for (Key child : children) {
 95  0
             if (child.contains(key)) {
 96  0
                 return true;
 97  
             }
 98  
         }
 99  
 
 100  0
         return false;
 101  
     }
 102  
 
 103  
     /* (non-Javadoc)
 104  
      * @see java.lang.Iterable#iterator()
 105  
      */
 106  
     public Iterator<Key> iterator() {
 107  0
         return new KeyIterator(this);
 108  
     }
 109  
 
 110  
     /* (non-Javadoc)
 111  
      * @see org.crosswire.jsword.passage.Key#addAll(org.crosswire.jsword.passage.Key)
 112  
      */
 113  
     public void addAll(Key key) {
 114  0
         children.add(key);
 115  0
     }
 116  
 
 117  
     /* (non-Javadoc)
 118  
      * @see org.crosswire.jsword.passage.Key#removeAll(org.crosswire.jsword.passage.Key)
 119  
      */
 120  
     public void removeAll(Key key) {
 121  0
         children.remove(key);
 122  0
     }
 123  
 
 124  
     /* (non-Javadoc)
 125  
      * @see org.crosswire.jsword.passage.Key#clear()
 126  
      */
 127  
     public void clear() {
 128  0
         children.clear();
 129  0
     }
 130  
 
 131  
     /* (non-Javadoc)
 132  
      * @see org.crosswire.jsword.passage.Key#get(int)
 133  
      */
 134  
     public Key get(int index) {
 135  0
         return children.get(index);
 136  
     }
 137  
 
 138  
     /* (non-Javadoc)
 139  
      * @see org.crosswire.jsword.passage.Key#indexOf(org.crosswire.jsword.passage.Key)
 140  
      */
 141  
     public int indexOf(Key that) {
 142  0
         return children.indexOf(that);
 143  
     }
 144  
 
 145  
     /* (non-Javadoc)
 146  
      * @see org.crosswire.jsword.passage.Key#getParent()
 147  
      */
 148  
     public Key getParent() {
 149  0
         return parent;
 150  
     }
 151  
 
 152  
     /** equality is tricky if comparing TreeKeys (as used by GenBooks) because some child keys can have the same name but different parents
 153  
      */
 154  
     @Override
 155  
     public boolean equals(Object obj) {
 156  
         // Since this can not be null
 157  0
         if (obj == null) {
 158  0
             return false;
 159  
         }
 160  
 
 161  
         // Check that that is the same as this
 162  
         // Don't use instanceOf since that breaks inheritance
 163  0
         if (!obj.getClass().equals(this.getClass())) {
 164  0
             return false;
 165  
         }
 166  
 
 167  0
         TreeKey otherTreeKey = (TreeKey) obj;
 168  0
         if (!getName().equals(otherTreeKey.getName())) {
 169  0
             return false;
 170  
         }
 171  
 
 172  
         // names match so now work up the tree comparing parents
 173  0
         if (getParent() == null) {
 174  0
             return otherTreeKey.getParent() == null;
 175  
         }
 176  
 
 177  
         // KeyTrees nodes can have the same name but different parents
 178  0
         return getParent().equals(otherTreeKey.getParent());
 179  
     }
 180  
 
 181  
     /* (non-Javadoc)
 182  
      * @see org.crosswire.jsword.passage.Key#blur(int, org.crosswire.jsword.passage.RestrictionType)
 183  
      */
 184  
     public void blur(int by, RestrictionType restrict) {
 185  0
         log.warn("attempt to blur a non-blur-able list");
 186  0
     }
 187  
 
 188  
     @Override
 189  
     public TreeKey clone() {
 190  0
         return (TreeKey) super.clone();
 191  
     }
 192  
 
 193  
     @Override
 194  
     public String getRootName() {
 195  0
         String rootName = getName();
 196  0
         for (Key parentKey = this; parentKey != null && parentKey.getName().length() > 0; parentKey = parentKey.getParent()) {
 197  0
             rootName = parentKey.getName();
 198  
         }
 199  0
         return rootName;
 200  
     }
 201  
 
 202  
     @Override
 203  
     public String getOsisRef() {
 204  0
         return getOsisID();
 205  
     }
 206  
 
 207  
     @Override
 208  
     public String getOsisID() {
 209  0
         StringBuilder b = new StringBuilder(100);
 210  0
         b.append(getName());
 211  0
         for (Key parentKey = this.getParent(); parentKey != null && parentKey.getName().length() > 0; parentKey = parentKey.getParent()) {
 212  0
             b.insert(0, "/");
 213  0
             b.insert(0, parentKey.getName());
 214  
         }
 215  
         // Remove the leading .
 216  0
         return b.toString();
 217  
     }
 218  
 
 219  
     /**
 220  
      * The parent of this key.
 221  
      */
 222  
     private Key parent;
 223  
 
 224  
     /**
 225  
      * The immediate children of this tree node.
 226  
      */
 227  
     private List<Key> children;
 228  
 
 229  
     /**
 230  
      * The log stream
 231  
      */
 232  0
     private static final Logger log = LoggerFactory.getLogger(TreeKey.class);
 233  
 
 234  
     /**
 235  
      * Serialization ID
 236  
      */
 237  
     private static final long serialVersionUID = -6560408145705717977L;
 238  
 }