KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > daffodilwoods > daffodildb > server > datasystem > indexsystem > TempIndexSystem


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 JavaDoc;
11 import java.io.RandomAccessFile JavaDoc;
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   /**
20    * Maintains lists of all database which are Currently in use having
21    * mapping with Database name
22    */

23
24   private HashMap databaseMap;
25   private String JavaDoc daffodilHome;
26
27   public TempIndexSystem(String JavaDoc daffodilHome0) {
28     databaseMap = new HashMap();
29     daffodilHome = daffodilHome0;
30   }
31
32
33   public synchronized _Database getDatabase(String JavaDoc databaseName) throws DException {
34     _IndexDatabase indexDatabase = (_IndexDatabase)databaseMap.get(databaseName);
35     if(indexDatabase != null)
36       return indexDatabase;
37
38     String JavaDoc 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 JavaDoc raf_file = new File JavaDoc(path);
44     RandomAccessFile JavaDoc file = null;
45     File JavaDoc ff = null;
46     try {
47        ff = new File JavaDoc(path);
48       if(ff.exists()){
49        boolean isDeleted = ff.delete();
50        if(!isDeleted)
51          throw new DException("DSE5522", new Object JavaDoc[]{});
52       }
53
54       file = new RandomAccessFile JavaDoc(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 JavaDoc[] {ex.getMessage()});
69     }
70
71     path = daffodilHome + File.separator +databaseName + File.separator + databaseName + ".ddb";
72     RandomAccessFile JavaDoc file1 = null;
73     try {
74       file1 = new RandomAccessFile JavaDoc(new File JavaDoc(path), "r");
75     }
76     catch (IOException ex1) {
77           throw new DException("DSE0",new Object JavaDoc[] {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 JavaDoc databaseName,Properties prop )throws DException{
95   }
96
97   public void dropDatabase(String JavaDoc databaseURL) throws DException{
98     DeleteFiles(databaseURL);
99     databaseMap.remove(databaseURL) ;
100   }
101
102   public void removeDatabase(String JavaDoc databaseName) throws DException{
103     DeleteFiles(databaseName);
104     databaseMap.remove(databaseName) ;
105   }
106
107   private void DeleteFiles(String JavaDoc databaseName){
108     try {
109       _IndexDatabase database = (_IndexDatabase)databaseMap.get(databaseName);
110       if(database != null)
111         ((PersistentDatabase)((IndexDatabase)database).getUnderLyingDatabase()).closeFile();
112
113       String JavaDoc path = daffodilHome+File.separator +databaseName + File.separator + DatabaseConstants.TEMPDATABASE+".ddb";
114       File JavaDoc f = new File JavaDoc(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 JavaDoc databaseName;
125       while(iterator.hasNext()){
126         databaseName = (String JavaDoc)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 JavaDoc databaseName;
138      while(iterator.hasNext()){
139        databaseName = (String JavaDoc) iterator.next();
140        list.add(databaseName);
141      }
142      for (int i = 0; i < list.size(); i++) {
143        try {
144          removeDatabase((String JavaDoc)list.get(i));
145        }
146        catch (DException ex) {
147        }
148      }
149
150  }
151
152  public void changeHome(String JavaDoc path){
153     daffodilHome = path;
154
155 }
156 }
157
Popular Tags