Skip to content

Commit 9955165

Browse files
author
Vinayaga Sundar
committed
feat : added option to delete data from the UI
1 parent 60d8f16 commit 9955165

5 files changed

Lines changed: 219 additions & 5 deletions

File tree

debug-db/src/main/assets/debugDbHome/js/app.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,11 @@ function inflateData(result){
163163
extend: 'selected', // Bind to Selected row
164164
text: 'Edit',
165165
name: 'edit' // do not change name
166+
},
167+
{
168+
extend: 'selected',
169+
text: 'Delete',
170+
name: 'delete'
166171
}
167172
]
168173
})
@@ -179,6 +184,26 @@ function inflateData(result){
179184
//send update table data request to server
180185
updateTableData(data, callback);
181186
});
187+
188+
189+
//attach delete-updated listener
190+
$(tableId).on('delete-row.dt', function (e, updatedRowData, callback) {
191+
var deleteRowDataArray = JSON.parse(updatedRowData);
192+
193+
console.log(deleteRowDataArray);
194+
195+
//add value for each column
196+
var data = columnHeader;
197+
for(var i = 0; i < data.length; i++) {
198+
data[i].value = deleteRowDataArray[i].value;
199+
data[i].dataType = deleteRowDataArray[i].dataType;
200+
201+
}
202+
203+
//send delete table data request to server
204+
deleteTableData(data, callback);
205+
});
206+
182207
// hack to fix alignment issue when scrollX is enabled
183208
$(".dataTables_scrollHeadInner").css({"width":"100%"});
184209
$(".table ").css({"width":"100%"});
@@ -225,6 +250,45 @@ function updateTableData(updatedData, callback) {
225250
})
226251
}
227252

253+
254+
function deleteTableData(deleteData, callback) {
255+
256+
var selectedTableElement = $("#table-list .list-group-item.selected");
257+
var filteredUpdatedData = deleteData.map(function(columnData){
258+
return {
259+
title: columnData.title,
260+
isPrimary: columnData.isPrimary,
261+
value: columnData.value,
262+
dataType: columnData.dataType
263+
}
264+
});
265+
266+
console.log(filteredUpdatedData);
267+
268+
//build request parameters
269+
var requestParameters = {};
270+
requestParameters.dbName = selectedTableElement.attr('data-db-name');
271+
requestParameters.tableName = selectedTableElement.attr('data-table-name');;
272+
requestParameters.deleteData = encodeURIComponent(JSON.stringify(filteredUpdatedData));
273+
274+
//execute request
275+
$.ajax({
276+
url: "deleteTableData",
277+
type: 'GET',
278+
data: requestParameters,
279+
success: function(response) {
280+
response = JSON.parse(response);
281+
if(response.isSuccessful){
282+
console.log("Data deleted successfully");
283+
callback(true);
284+
} else {
285+
console.log("Data delete failed");
286+
callback(false);
287+
}
288+
}
289+
})
290+
}
291+
228292
function showSuccessInfo(){
229293
$("#success-info").show();
230294
$("#error-info").hide();

debug-db/src/main/assets/debugDbHome/js/dataTables.altEditor.free.js

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -412,9 +412,34 @@
412412

413413
data += "<form name='altEditor-form' role='form'>";
414414
for (var i in columnDefs) {
415+
var cellData = adata.data()[0][i];
415416

416-
data += "<div class='form-group'><label for='" + columnDefs[i].title + "'>" + columnDefs[i].title + " : </label><input type='hidden' id='" + columnDefs[i].title + "' name='" + columnDefs[i].title + "' placeholder='" + columnDefs[i].title + "' style='overflow:hidden' class='form-control' value='" + adata.data()[0][i] + "' >" + adata.data()[0][i] + "</input></div>";
417+
var inputType = "text";
418+
switch (cellData.dataType) {
419+
case 'integer':
420+
inputType = "number";
421+
break;
422+
case 'real':
423+
inputType = "number";
424+
break;
425+
case 'boolean':
426+
inputType = "checkbox";
427+
break;
428+
case 'long':
429+
inputType = "number";
430+
break;
431+
case 'float':
432+
inputType = "number";
433+
break;
434+
case 'text':
435+
inputType = "text";
436+
break;
437+
case 'string_set':
438+
inputType = "text";
439+
break;
440+
}
417441

442+
data += "<div class='form-group'><label for='" + columnDefs[i].title + "'>" + columnDefs[i].title + " : </label><input type='hidden' data-type='" + inputType + "' id='" + columnDefs[i].title + "' name='" + columnDefs[i].title + "' placeholder='" + columnDefs[i].title + "' style='overflow:hidden' class='form-control' value='" + cellData.value + "' >" + cellData.value + "</input></div>";
418443
}
419444
data += "</form>";
420445

@@ -434,6 +459,22 @@
434459
var that = this;
435460
var dt = this.s.dt;
436461

462+
var data = [];
463+
464+
$('form[name="altEditor-form"] input').each(function(i) {
465+
var addToList = true;
466+
var value = $(this).val();
467+
value = $(this).val();
468+
469+
console.log("Value : " + value);
470+
if (addToList){
471+
data.push({
472+
"value": value,
473+
"dataType": $(this).attr('data-type')
474+
});
475+
}
476+
});
477+
437478
$('#altEditor-modal .modal-body .alert').remove();
438479

439480
var message = '<div class="alert alert-success" role="alert">\
@@ -442,11 +483,25 @@
442483

443484
$('#altEditor-modal .modal-body').append(message);
444485

445-
dt.row({
446-
selected: true
447-
}).remove();
448486

449-
dt.draw();
487+
that._emitEvent("delete-row", [
488+
JSON.stringify(data),
489+
function(isDeleted) {
490+
//remove existing alert elements
491+
if (isDeleted) {
492+
dt.row({
493+
selected: true
494+
}).remove();
495+
496+
dt.draw();
497+
}
498+
499+
//remove existing alert elements
500+
$('#altEditor-modal').modal('hide');
501+
}
502+
]);
503+
504+
450505

451506
},
452507

debug-db/src/main/java/com/amitshekhar/server/RequestHandler.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,9 @@ public void handle(Socket socket) throws IOException {
106106
} else if (route.startsWith("updateTableData")) {
107107
final String response = updateTableDataAndGetResponse(route);
108108
bytes = response.getBytes();
109+
} else if (route.startsWith("deleteTableData")) {
110+
final String response = deleteTableDataAndGetResponse(route);
111+
bytes = response.getBytes();
109112
} else if (route.startsWith("query")) {
110113
final String response = executeQueryAndGetResponse(route);
111114
bytes = response.getBytes();
@@ -278,4 +281,27 @@ private String updateTableDataAndGetResponse(String route) {
278281
}
279282
}
280283

284+
285+
private String deleteTableDataAndGetResponse(String route) {
286+
UpdateRowResponse response;
287+
try {
288+
Uri uri = Uri.parse(URLDecoder.decode(route, "UTF-8"));
289+
String tableName = uri.getQueryParameter("tableName");
290+
String updatedData = uri.getQueryParameter("deleteData");
291+
List<RowDataRequest> rowDataRequests = mGson.fromJson(updatedData, new TypeToken<List<RowDataRequest>>() {
292+
}.getType());
293+
if (Constants.APP_SHARED_PREFERENCES.equals(mSelectedDatabase)) {
294+
response = PrefHelper.deleteRow(mContext, tableName, rowDataRequests);
295+
} else {
296+
response = DatabaseHelper.deleteRow(mDatabase, tableName, rowDataRequests);
297+
}
298+
return mGson.toJson(response);
299+
} catch (Exception e) {
300+
e.printStackTrace();
301+
response = new UpdateRowResponse();
302+
response.isSuccessful = false;
303+
return mGson.toJson(response);
304+
}
305+
}
306+
281307
}

debug-db/src/main/java/com/amitshekhar/utils/DatabaseHelper.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,49 @@ public static UpdateRowResponse updateRow(SQLiteDatabase db, String tableName, L
239239
return updateRowResponse;
240240
}
241241

242+
243+
244+
public static UpdateRowResponse deleteRow(SQLiteDatabase db, String tableName, List<RowDataRequest> rowDataRequests) {
245+
246+
UpdateRowResponse updateRowResponse = new UpdateRowResponse();
247+
248+
if (rowDataRequests == null || tableName == null) {
249+
updateRowResponse.isSuccessful = false;
250+
return updateRowResponse;
251+
}
252+
253+
254+
String whereClause = null;
255+
List<String> whereArgsList = new ArrayList<>();
256+
257+
for (RowDataRequest rowDataRequest : rowDataRequests) {
258+
if (rowDataRequest.isPrimary) {
259+
if (whereClause == null) {
260+
whereClause = rowDataRequest.title + "=? ";
261+
} else {
262+
whereClause = "and " + rowDataRequest.title + "=? ";
263+
}
264+
whereArgsList.add(rowDataRequest.value);
265+
}
266+
}
267+
268+
if (whereArgsList.size() == 0) {
269+
updateRowResponse.isSuccessful = true;
270+
return updateRowResponse;
271+
}
272+
273+
String[] whereArgs = new String[whereArgsList.size()];
274+
275+
for (int i = 0; i < whereArgsList.size(); i++) {
276+
whereArgs[i] = whereArgsList.get(i);
277+
}
278+
279+
db.delete(tableName, whereClause, whereArgs);
280+
updateRowResponse.isSuccessful = true;
281+
return updateRowResponse;
282+
}
283+
284+
242285
public static Response exec(SQLiteDatabase database, String sql) {
243286
Response response = new Response();
244287
try {

debug-db/src/main/java/com/amitshekhar/utils/PrefHelper.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,4 +197,30 @@ public static UpdateRowResponse updateRow(Context context, String tableName, Lis
197197

198198
return updateRowResponse;
199199
}
200+
201+
202+
public static UpdateRowResponse deleteRow(Context context, String tableName, List<RowDataRequest> rowDataRequests) {
203+
UpdateRowResponse updateRowResponse = new UpdateRowResponse();
204+
205+
if (tableName == null) {
206+
return updateRowResponse;
207+
}
208+
209+
RowDataRequest rowDataKey = rowDataRequests.get(0);
210+
211+
String key = rowDataKey.value;
212+
213+
214+
SharedPreferences preferences = context.getSharedPreferences(tableName, Context.MODE_PRIVATE);
215+
216+
try {
217+
preferences.edit()
218+
.remove(key).apply();
219+
updateRowResponse.isSuccessful = true;
220+
} catch (Exception ex) {
221+
updateRowResponse.isSuccessful = false;
222+
}
223+
224+
return updateRowResponse;
225+
}
200226
}

0 commit comments

Comments
 (0)