1 package com.daffodilwoods.daffodildb.server.datasystem.mergesystem; 2 3 import com.daffodilwoods.database.resource.*; 4 import com.daffodilwoods.daffodildb.server.datasystem.interfaces.*; 5 import java.util.*; 6 7 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.TempIndexSystem; 8 import com.daffodilwoods.daffodildb.server.datasystem.indexsystem.ReadOnlyTempIndexSystem; 9 10 17 public class MergeSystem implements _DataSystem{ 18 19 22 private WeakHashMap databaseMap; 23 24 27 private _DataSystem fileSystem; 28 29 32 private _DataSystem fileMemorySystem; 33 34 43 44 public MergeSystem( _DataSystem fileMemorySystem0,_DataSystem fileSystem0) { 45 fileSystem = fileSystem0; 46 fileMemorySystem = fileMemorySystem0; 47 databaseMap = new WeakHashMap(); 48 } 49 50 51 65 66 public void createDatabase(String databaseName, Properties prop) throws DException { 67 _Database database = (_Database)databaseMap.get(databaseName); 68 if(database != null) 69 throw new DException("DSE314",null); 70 fileSystem.createDatabase(databaseName,prop); 71 fileMemorySystem.createDatabase(databaseName,prop); 72 } 73 74 75 83 84 public _Database getDatabase(String databaseName) throws DException{ 85 _Database database = (_Database)databaseMap.get(databaseName); 86 if(database != null) 87 return database; 88 _Database fileDatabase = fileSystem.getDatabase(databaseName); 89 _Database fileMemoryDatabase = null; 90 fileMemoryDatabase = fileMemorySystem.getDatabase(databaseName); 91 database = new MergeDatabase((_IndexDatabase)fileMemoryDatabase,(_IndexDatabase)fileDatabase); 92 databaseMap.put(databaseName,database); 93 return database; 94 } 95 96 102 103 public void dropDatabase(String databaseName) throws DException{ 104 fileMemorySystem.dropDatabase(databaseName); 105 fileSystem.dropDatabase(databaseName); 106 databaseMap.remove(databaseName); 107 } 108 109 public void removeDatabase(String databaseName) throws DException{ 110 fileMemorySystem.removeDatabase(databaseName); 111 fileSystem.removeDatabase(databaseName); 112 databaseMap.remove(databaseName); 113 } 114 115 public void closeAllDatabases() throws DException{ 116 try { 117 ( (TempIndexSystem) fileMemorySystem).closeAllDatabases(); 118 Object [] databaseNames = databaseMap.keySet().toArray() ; 119 for (int i = 0; i < databaseNames.length; i++) { 120 fileSystem.removeDatabase(databaseNames[i].toString() ) ; 121 databaseMap.remove(databaseNames[i]); 122 } 123 124 125 } 126 catch (ClassCastException ex) { 127 if(fileMemorySystem instanceof ReadOnlyTempIndexSystem) 128 return; 129 } 130 } 131 132 public TempIndexSystem getMemorySystem(){ 133 return (TempIndexSystem)fileMemorySystem; 134 } 135 } 136 | Popular Tags |