1 package com.daffodilwoods.daffodildb.server.datasystem.indexsystem; 2 3 import java.util.*; 4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 5 import com.daffodilwoods.database.general.*; 6 import com.daffodilwoods.database.resource.DException; 7 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.PersistentDatabase; 8 import com.daffodilwoods.daffodildb.server.serversystem.ServerSystem; 9 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.*; 10 import java.io.File ; 11 import java.io.RandomAccessFile ; 12 import java.io.*; 13 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.versioninfo.VersionHandlerFactory; 14 import com.daffodilwoods.daffodildb.server.datasystem.persistentsystem.versioninfo.VersionHandler; 15 16 public class TempIndexSystem implements _DataSystem{ 17 18 19 23 24 private HashMap databaseMap; 25 private String daffodilHome; 26 27 public TempIndexSystem(String daffodilHome0) { 28 databaseMap = new HashMap(); 29 daffodilHome = daffodilHome0; 30 } 31 32 33 public synchronized _Database getDatabase(String databaseName) throws DException { 34 _IndexDatabase indexDatabase = (_IndexDatabase)databaseMap.get(databaseName); 35 if(indexDatabase != null) 36 return indexDatabase; 37 38 String path = daffodilHome + File.separator +databaseName + File.separator + DatabaseConstants.TEMPDATABASE+".ddb"; 39 40 41 long size = 2*1024*1024; 42 int clusterSize = Integer.parseInt(DatabaseConstants.TEMPDATABASECLUSTERSIZE.trim()); 43 File raf_file = new File (path); 44 RandomAccessFile file = null; 45 File ff = null; 46 try { 47 ff = new File (path); 48 if(ff.exists()){ 49 boolean isDeleted = ff.delete(); 50 if(!isDeleted) 51 throw new DException("DSE5522", new Object []{}); 52 } 53 54 file = new RandomAccessFile (raf_file,"rw"); 55 file.setLength(size); 56 file.seek(0); 57 file.write(new byte[clusterSize]); 58 } 59 catch (IOException ex) { 60 if(file != null){ 61 try{ 62 file.close(); 63 }catch(IOException iex){ 64 65 } 66 file = null; 67 } 68 throw new DException("DSE0",new Object [] {ex.getMessage()}); 69 } 70 71 path = daffodilHome + File.separator +databaseName + File.separator + databaseName + ".ddb"; 72 RandomAccessFile file1 = null; 73 try { 74 file1 = new RandomAccessFile (new File (path), "r"); 75 } 76 catch (IOException ex1) { 77 throw new DException("DSE0",new Object [] {ex1.getMessage()}); 78 } 79 VersionHandler versionHandler = VersionHandlerFactory.getVersionHandler(file1); 80 try { 81 file1.close(); 82 } 83 catch (IOException ex2) { 84 ex2.printStackTrace(); 85 } 86 versionHandler.setClusterSize(clusterSize); 87 DRandomAccessFileUpto3_2 dRandomAccessFile = versionHandler.getDRandomAccessFile (file,size,path,10,false,null,clusterSize); 88 indexDatabase = new TempIndexDatabase(new PersistentDatabase(dRandomAccessFile,DatabaseConstants.TEMPDATABASE,false,versionHandler,daffodilHome)); 89 databaseMap.put(databaseName,indexDatabase); 90 return indexDatabase; 91 } 92 93 94 public void createDatabase(String databaseName,Properties prop )throws DException{ 95 } 96 97 public void dropDatabase(String databaseURL) throws DException{ 98 DeleteFiles(databaseURL); 99 databaseMap.remove(databaseURL) ; 100 } 101 102 public void removeDatabase(String databaseName) throws DException{ 103 DeleteFiles(databaseName); 104 databaseMap.remove(databaseName) ; 105 } 106 107 private void DeleteFiles(String databaseName){ 108 try { 109 _IndexDatabase database = (_IndexDatabase)databaseMap.get(databaseName); 110 if(database != null) 111 ((PersistentDatabase)((IndexDatabase)database).getUnderLyingDatabase()).closeFile(); 112 113 String path = daffodilHome+File.separator +databaseName + File.separator + DatabaseConstants.TEMPDATABASE+".ddb"; 114 File f = new File (path); 115 f.delete(); 116 } 117 catch (DException ex) { 118 } 119 } 120 121 protected void finalize() { 122 try { 123 Iterator iterator = databaseMap.keySet().iterator(); 124 String databaseName; 125 while(iterator.hasNext()){ 126 databaseName = (String )iterator.next(); 127 dropDatabase(databaseName); 128 } 129 } 130 catch (DException ex) { 131 } 132 } 133 134 public synchronized void closeAllDatabases() throws DException{ 135 Iterator iterator = databaseMap.keySet().iterator(); 136 ArrayList list = new ArrayList(); 137 String databaseName; 138 while(iterator.hasNext()){ 139 databaseName = (String ) iterator.next(); 140 list.add(databaseName); 141 } 142 for (int i = 0; i < list.size(); i++) { 143 try { 144 removeDatabase((String )list.get(i)); 145 } 146 catch (DException ex) { 147 } 148 } 149 150 } 151 152 public void changeHome(String path){ 153 daffodilHome = path; 154 155 } 156 } 157 | Popular Tags |