· 6 years ago · Nov 27, 2019, 10:44 AM
1
2package eg.edu.alexu.csd.oop.db.cs39;
3
4import java.io.BufferedReader;
5import java.io.BufferedWriter;
6import java.io.FileReader;
7import java.io.FileWriter;
8import java.io.IOException;
9import java.sql.SQLException;
10import java.util.HashMap;
11import java.util.Map;
12import java.util.Vector;
13
14public class IDataBase implements Database {
15
16 Parser parser = new Parser();
17 Partitions p = new Partitions();
18 // Map of all created databases
19 Map<String, DB> m = new HashMap<String, DB>();
20 DB lastDB;
21 Command DBcommandCreate;
22 Command DBcommandDrop;
23 Command DropTable;
24 Command CreateTable;
25 Select selecTable;
26 Insert insertTable;
27 Update updateTable;
28 String querySmall;
29 Delete deleteTable;
30 String LastDBpath;
31
32 public void QueryManagement(String query) throws SQLException {
33 // create db
34 if (parser.checkInput(query) == 2) {
35 // drop-if-exist should be handled
36 p.CreateDatabase(query);
37 LastDBpath = this.createDatabase(p.getDatabasename(), false);
38
39 } else if (parser.checkInput(query) == 3) {
40 this.executeStructureQuery(query);
41 }
42 // create table,drop table,called internally when create db , drop db
43 else if (parser.checkInput(query) == 4 || parser.checkInput(query) == 8) {
44
45 this.executeStructureQuery(query);
46 }
47 // update method
48 else if (parser.checkInput(query) == 5 || parser.checkInput(query) == 6 || parser.checkInput(query) == 7) {
49
50 this.executeUpdateQuery(query);
51 }
52 // select
53 else if (parser.checkInput(query) == 9||parser.checkInput(query) == 1) {
54 this.executeQuery(query);
55 } else {
56
57 }
58
59 }
60
61 @Override
62 public String createDatabase(String databaseName, boolean dropIfExists) {
63
64 if (m.containsKey(databaseName) == false) {
65
66 DBcommandCreate = new CreateDB(databaseName);
67 try {
68 executeStructureQuery("createdatabase");
69 } catch (SQLException e) {
70 e.printStackTrace();
71 }
72 return DBcommandCreate.getpathofDB();
73 } else if (m.containsKey(databaseName) == true && dropIfExists) {
74 DBcommandDrop = new DropDB(databaseName, m);
75 try {
76 executeStructureQuery("dropdatabase");
77 } catch (SQLException e) {
78 e.printStackTrace();
79 }
80 DBcommandCreate = new CreateDB(databaseName);
81 try {
82 executeStructureQuery("createdatabase");
83 } catch (SQLException e) {
84 e.printStackTrace();
85 }
86 return DBcommandCreate.getpathofDB();
87 } else // It exists and it is not required to drop it
88 {
89 return m.get(databaseName).getAbsolutePath();
90 }
91
92 }
93
94 @Override
95 public boolean executeStructureQuery(String query) throws SQLException {
96
97 querySmall = query.toLowerCase();
98
99 if (query == "createdatabase") {
100 DBcommandCreate.execute();
101 m.put(DBcommandCreate.getnameofDB().toUpperCase(), DBcommandCreate.getDB());
102 lastDB = DBcommandCreate.getDB();
103 return true;
104 } else if (query == "dropdatabase") {
105 DBcommandDrop.execute();
106 m.remove(DBcommandDrop.getnameofDB());
107
108 return true;
109 } else if (querySmall.contains("drop") && querySmall.contains("database")) {
110 p.DropDatabase(query);
111 System.out.println(p.getDropDataBaseName()+" zx");
112 DBcommandDrop = new DropDB(p.getDropDataBaseName(), m);
113 DBcommandDrop.execute();
114 m.remove(p.getDropDataBaseName());
115
116
117
118 return true;
119 } else if (querySmall.contains("create") && querySmall.contains("table")) {
120 // i will call class partitions with string query ..to get table name,names ,
121 // types ,parent DB..
122 p.CreateTable(query);
123 // System.out.println("n!!!!" + p.getTablename());
124 CreateTable = new CreateTable(p.getTablename(), p.getcolumns(), p.gettypes(), lastDB.getDatabaseName(),
125 lastDB);
126 CreateTable.execute();
127
128 return true;
129 } else if (querySmall.contains("drop") && querySmall.contains("table")) {
130 // i will call class partitions with string query ..to get table name.
131 p.DropTable(query);
132 DropTable = new DropTable(p.getTablename(), lastDB);
133 DropTable.execute();
134
135 return true;
136 } else {
137 // no query is right ...
138 return false;
139 }
140
141 }
142
143 public Vector<String> getNames(String query) throws SQLException {
144
145 selecTable = new Select(query, lastDB, 0, null, query);
146 try {
147 return selecTable.getNames();
148 } catch (Exception e) {
149 e.printStackTrace();
150 return null; // should be handled
151 }
152 }
153
154 @Override
155 public Object[][] executeQuery(String query) throws SQLException {
156 if (parser.checkInput(query) == 1) {
157 p.SelectTable(query);
158 selecTable = new Select(p.getTablename(), lastDB, 0, null, query);
159 try {
160 return selecTable.execute();
161 } catch (Exception e) {
162 e.printStackTrace();
163 return null; // should be handled
164 }
165 } else {
166 p.Select(query);
167 selecTable = new Select(p.getTablename(), lastDB, p.getOperator(), p.getSelectcolumn(), p.getSelectvalue());
168 try {
169 return selecTable.execute();
170 } catch (Exception e) {
171 e.printStackTrace();
172 return null; // should be handled
173 }
174 }
175 }
176
177 @Override
178 public int executeUpdateQuery(String query) throws SQLException {
179
180 // insert //update //delete
181 querySmall = query.toLowerCase();
182 if (querySmall.contains("insert")) {
183 p.parent=lastDB;
184 p.Insert(query);
185 insertTable = new Insert(p.getTablename() , lastDB, p.getvalues());
186 try {
187
188 return insertTable.execute();
189
190 } catch (Exception e) {
191 e.printStackTrace();
192
193 return 0;
194 }
195
196 } else if (querySmall.contains("update")) {
197 p.Update(query);
198 updateTable = new Update(p.getTablename(), lastDB, p.getOperator(), p.getUpdatevalue2(),
199 p.getUpdatecolumn2(), p.getUpdatecolumn1(), p.getUpdatevalue1());
200 try {
201 return updateTable.execute();
202 } catch (Exception e) {
203 return 0;
204 }
205 } else if (querySmall.contains("delete")) {
206 p.Delete(query);
207 deleteTable = new Delete(p.getTablename(), lastDB, p.getDeletevalue(), p.getDeletecolumn());
208 try {
209 return deleteTable.execute();
210 } catch (Exception e) {
211 e.printStackTrace();
212 return 0;
213 }
214 } else {
215 return 0;
216 }
217 }
218 public void save() throws Exception
219 {
220 savedatabasenames();
221 for (Map.Entry<String, DB> entry : m.entrySet()) {
222 entry.getValue().SaveDataBase();
223 }
224 }
225 public void savedatabasenames() throws Exception
226 {
227 BufferedWriter bw = new BufferedWriter(new FileWriter(".\\DatabaseNames.txt"));
228 for (Map.Entry<String, DB> entry : m.entrySet()) {
229 bw.write(entry.getValue().getDatabaseName());
230 bw.newLine();
231 }
232 bw.close();
233 }
234 public void load() throws IOException
235 {
236 BufferedReader br = new BufferedReader(new FileReader(".\\DatabaseNames.txt"));
237 String databaseaname;
238 while ( (databaseaname = br.readLine()) !=null)
239 {
240 DB loaded = new DB().LoadDataBase(databaseaname);
241 m.put(databaseaname, loaded);
242 }
243 br.close();
244 }
245}