1 19 package org.netbeans.mdr.persistence.btreeimpl.btreeindex; 20 21 import org.netbeans.mdr.persistence.*; 22 import java.util.*; 23 import java.text.*; 24 25 31 public class MultivaluedOrderedBtree extends MultivaluedBtree 32 implements MultivaluedOrderedIndex { 33 34 public MultivaluedOrderedBtree(String name, Storage.EntryType keyType, 35 Storage.EntryType dataType, 36 boolean uniqueValues, 37 BtreePageSource pageSource) 38 throws StorageException { 39 super(name, keyType, dataType, uniqueValues, pageSource); 40 } 41 42 public MultivaluedOrderedBtree() {} 43 44 51 public List getItemsOrdered(Object key) throws StorageException { 52 return (List) getItems (key); } 54 55 61 public java.util.Collection getObjectsOrdered (Object key, SinglevaluedIndex repos) throws StorageException { 62 return getObjects (key, repos); 63 } 64 65 72 public void add(Object key, int index, Object data) throws StorageException { 73 beginWrite(); 74 try { 75 if (index < 0) { 76 failed = true; 77 } else { 78 failed = false; 79 btreePut(key, data, ADD, index); 80 updateKeyModCount (key); 81 } 82 if (failed) { 83 throw new StorageBadRequestException( 84 MessageFormat.format("Index {0} is out of range for key {1}", 85 new Object [] {new Integer (index), key})); 86 } 87 } finally { 88 endWrite(); 89 } 90 } 91 92 98 public void add(Object key, Object data) throws StorageException { 99 100 add(key, Integer.MAX_VALUE, data); 101 } 102 103 109 public boolean remove(Object key, int index) throws StorageException { 110 beginWrite(); 111 try { 112 boolean result; 113 byte[] keyBuffer; 114 115 if ((keyBuffer = keyInfo.toBuffer(key)) == null) { 116 throw new StorageBadRequestException( 117 MessageFormat.format( 118 "Invalid key type for this index: {0} received, {1} expected", 119 new Object [] { 120 key.getClass().getName(), 121 keyInfo.typeName()} )); 122 } 123 124 BtreePage root = pageSource.getPage(rootPageId, this); 125 result = root.remove(keyBuffer, index); 126 if (result) 127 updateKeyModCount (key); 128 pageSource.unpinPage(root); 129 return result; 130 } finally { 131 endWrite(); 132 } 133 } 134 135 143 public void replace(Object key, int index, Object data) 144 throws StorageException { 145 beginWrite(); 146 try { 147 failed = false; 148 btreePut(key, data, REPLACE, index); 149 updateKeyModCount (key); 150 if (failed) { 151 throw new StorageBadRequestException( 152 MessageFormat.format("Index {0} is out of range for key {1}", 153 new Object [] {new Integer (index), key})); 154 } 155 } finally { 156 endWrite(); 157 } 158 } 159 } 160 | Popular Tags |