1 package com.daffodilwoods.daffodildb.server.datasystem.persistentsystem; 2 3 import java.io.*; 4 import java.lang.ref.*; 5 import java.util.*; 6 7 import com.daffodilwoods.database.resource.*; 8 9 13 public class TempFileHandler { 14 15 18 19 private Map clusterMap; 20 21 25 private HashMap addressesMap; 26 27 30 private ClusterManager clusterManager; 31 32 public TempFileHandler(ClusterManager clusterManager0) { 33 clusterMap = Collections.synchronizedMap(new HashMap()); 34 addressesMap = new HashMap(); 35 clusterManager = clusterManager0; 36 } 37 38 49 50 long getAddressOfTempFile(ClusterCharacteristics cc) throws DException { 51 Object obj = addressesMap.get(cc); 52 if (obj != null) { 53 removeEntryFromAddressMap(cc); 54 return ( (Long ) obj).longValue(); 55 } 56 return -1; 57 } 58 59 64 void addAddressOfTempFile(ClusterCharacteristics cc, long add) throws DException { 65 addressesMap.put(cc, new Long (add)); 66 } 67 68 77 78 81 Cluster getClusterFromClustersMap(ClusterCharacteristics cc) { 82 Reference sr = (Reference) clusterMap.remove(cc); 83 return sr==null?null:(Cluster)sr.get(); 84 } 85 86 90 91 void addCluster(Cluster cls) { 92 clusterMap.put(cls.getClusterCharacteristics(), new SoftReference(cls)); 93 } 94 100 void removeEntryFromAddressMap(ClusterCharacteristics cc) throws DException { 101 addressesMap.remove(cc); 102 } 103 104 108 109 void writeInTempFile(Cluster cluster, byte[] bytes) throws DException { 110 synchronized (clusterManager.getTempFile()) { 111 try { 112 long address = clusterManager.getTempFile().length(); 113 int size = clusterManager.getFreeAddresses().size(); 114 if (size > 0) { 115 address = ( (Long ) clusterManager.getFreeAddresses().get(size - 1)).longValue(); 116 clusterManager.getTempFile().seek(address); 117 clusterManager.getTempFile().write(bytes); 118 clusterManager.getFreeAddresses().remove(size - 1); 119 size--; 120 } else { 121 clusterManager.getTempFile().seek(address); 122 clusterManager.getTempFile().write(bytes); 123 } 124 addAddressOfTempFile(cluster.clusterCharacteristics, (int) address); 125 } catch (IOException ex) { 126 throw new DException("DSE2025", new Object [] {ex.getMessage()}); 127 } 128 } 129 } 130 131 141 142 long getAddressOfTempFileForPowerFile(ClusterCharacteristics cc) throws DException { 143 Object obj = addressesMap.get(cc); 144 return obj == null ? -1 : ( (Long ) obj).longValue(); 145 } 146 } 147 | Popular Tags |