KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > datasystem > mergesystem > MergeSystem


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 /**
11  *
12  * <p>Title: MergeSystem</p>
13  * <p>Description: It performs all the database level operations on both the
14  * memory system and the file system.It maintains a weak hashmap for all
15  * the databases that are currently in use.
16  */

17 public class MergeSystem implements _DataSystem{
18
19     /**
20      * Used to maintain a list of all databases which are currently in use
21      */

22    private WeakHashMap databaseMap;
23
24     /**
25      * To perform database level operations on persistent system
26      */

27   private _DataSystem fileSystem;
28
29     /**
30      * To perform database level operations on memory system
31      */

32   private _DataSystem fileMemorySystem;
33
34     /**
35      * Constructs the merge system ,initializes two dataSystems one for
36      * the memory system and the other for the file system and initializes
37      * weakhasMap to maintain all databases which are currently in use
38      * @param fileMemorySystem0 To perform database level operations on
39      * memory system
40      * @param fileSystem0 To perform database level operations on
41      * persistent system
42      */

43
44     public MergeSystem( _DataSystem fileMemorySystem0,_DataSystem fileSystem0) {
45         fileSystem = fileSystem0;
46         fileMemorySystem = fileMemorySystem0;
47         databaseMap = new WeakHashMap();
48     }
49
50
51     /**
52      * creates database in file system and in memory system, It throws
53      * Exception if database already exists
54      *
55      * @param databaseName name of the database
56      * @param initialSize size with which the database will be created
57      * initially.
58      * @param incrementFactor Factor by which database size would be
59      * increased when Existing file is fully used
60      * @param unicodeSupport whether unicode support is required or not.
61      * @param multifileSupport Whether new files should be created or
62      * old file size has to increase in case of existing file is fully used
63      * @throws DException If the database already exists .
64      */

65
66     public void createDatabase(String JavaDoc 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     /**
76      * returns the database if found in map with given name. if database
77      * does not exist, gets database from memorySystem and FileSystem and
78      * makes mergeDatabase and makes mergeDatabase entry in map
79      * @param databaseName name of the database
80      * @return a database corresponing to the databaseName.
81      * @throws DException if database does not exists
82      */

83
84     public _Database getDatabase(String JavaDoc 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     /**
97      * drops database in file system and in memory system and removes
98      * entry of database from map.
99      * @param databaseName name of the database.
100      * @throws DException if Database does not exist
101      */

102
103     public void dropDatabase(String JavaDoc databaseName) throws DException{
104         fileMemorySystem.dropDatabase(databaseName);
105         fileSystem.dropDatabase(databaseName);
106         databaseMap.remove(databaseName);
107     }
108
109     public void removeDatabase(String JavaDoc 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 JavaDoc[] 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 JavaDoc ex) {
127         if(fileMemorySystem instanceof ReadOnlyTempIndexSystem)
128           return;
129       }
130     }
131
132     public TempIndexSystem getMemorySystem(){
133       return (TempIndexSystem)fileMemorySystem;
134     }
135 }
136
Popular Tags