Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
EDT:Tutorial: RUI With DataBase Lesson 8 Code
Access a database with EGL Rich UI > Resources
Finished code for PaymentFileMaintenance.egl after lesson 8
The following code is the text of the PaymentFileMaintenance.egl file after lesson 8.
package handlers;
import org.eclipse.edt.rui.mvc.Controller;
import org.eclipse.edt.rui.mvc.FormField;
import org.eclipse.edt.rui.mvc.FormManager;
import org.eclipse.edt.rui.mvc.MVC;
import org.eclipse.edt.rui.widgets.DataGrid;
import org.eclipse.edt.rui.widgets.DataGridColumn;
import org.eclipse.edt.rui.widgets.DataGridLib;
import org.eclipse.edt.rui.widgets.Div;
import org.eclipse.edt.rui.widgets.GridLayout;
import org.eclipse.edt.rui.widgets.GridLayoutData;
import org.eclipse.edt.rui.widgets.GridLayoutLib;
import org.eclipse.edt.rui.widgets.TextLabel;
import dojo.widgets.DojoButton;
import dojo.widgets.DojoCheckBox;
import dojo.widgets.DojoComboBox;
import dojo.widgets.DojoCurrencyTextBox;
import dojo.widgets.DojoDateTextBox;
import dojo.widgets.DojoLib;
import dojo.widgets.DojoTextField;
import dojo.widgets.DojoTitlePane;
import eglx.persistence.sql.column;
import eglx.services.DedicatedService;
import eglx.services.ServiceLib;
import eglx.ui.rui.Event;
import eglx.ui.rui.RUIHandler;
import eglx.ui.rui.Widget;
import eglx.ui.rui.view;
import eglx.ui.rui.widget;
import libraries.PaymentLib;
import records.paymentRec;
import services.SQLService;
handler PaymentFileMaintenance type RUIhandler{
initialUI =[ui], onConstructionFunction = start,
cssFile = "css/PaymentClient.css", title = "PaymentFileMaintenance"}
dbService SQLService?{@dedicatedService};
ui GridLayout{columns = 2, rows = 2, cellPadding = 4,
children =
[detailButtonLayout, editPane, buttonLayout, allPayments_ui ]
};
allPayments paymentRec[];
allPayments_ui DataGrid{
layoutData = new GridLayoutData{
row = 2, column = 1,
verticalAlignment = GridLayoutLib.VALIGN_TOP},
selectionListeners ::= cellClicked,
columns =[
new DataGridColumn{name = "category", displayName = "Type",
width = 90, formatters = [ formatCategory ]},
new DataGridColumn{name = "description", displayName = "Description",
width = 120},
new DataGridColumn{name = "amount", displayName = "Amount due",
width = 90, alignment = DataGridLib.ALIGN_RIGHT}
],
data = allPayments as any[],
selectionMode = DataGridLib.SINGLE_SELECTION};
buttonLayout GridLayout{
layoutData = new GridLayoutData{ row = 1, column = 1 },
cellPadding = 4, rows = 1, columns = 3,
children = [ sampleButton, deleteButton, addButton ] };
addButton DojoButton{
layoutData = new GridLayoutData{ row = 1, column = 1 },
text = "Add", onClick ::= addRow };
deleteButton DojoButton{
layoutData = new GridLayoutData{ row = 1, column = 2 },
text = "Delete", onClick ::= deleteRow };
sampleButton DojoButton{
layoutData = new GridLayoutData{ row = 1, column = 3 },
text = "Sample", onClick ::= sampleData };
selectedPayment paymentRec;
editPane DojoTitlePane{
layoutData = new GridLayoutData{ row = 2, column = 2,
verticalAlignment = GridLayoutLib.VALIGN_TOP },
title = "Payment record",
isOpen=true, duration=1000, width = "350",
children =
[ new Div {children = [ selectedPayment_ui ]}]
};
selectedPayment_ui GridLayout {
rows = 9, columns = 2, cellPadding = 4,
children = [ selectedPayment_paymentId_nameLabel,
selectedPayment_paymentId_field,
selectedPayment_category_nameLabel,
selectedPayment_category_comboBox,
selectedPayment_description_nameLabel,
selectedPayment_description_field,
selectedPayment_amount_nameLabel,
selectedPayment_amount_textBox,
selectedPayment_fixedPayment_nameLabel,
selectedPayment_fixedPayment_checkBox,
selectedPayment_dueDate_nameLabel,
selectedPayment_dueDate_textBox,
selectedPayment_payeeName_nameLabel,
selectedPayment_payeeName_field,
selectedPayment_payeeAddress1_nameLabel,
selectedPayment_payeeAddress1_field,
selectedPayment_payeeAddress2_nameLabel,
selectedPayment_payeeAddress2_field ] };
selectedPayment_paymentId_nameLabel TextLabel {
text="Key:" ,
layoutData = new GridLayoutData { row = 1, column = 1} };
selectedPayment_paymentId_field DojoTextField {
layoutData = new GridLayoutData { row = 1, column = 2},
readOnly = true };
selectedPayment_paymentId_controller Controller {
@MVC {model = selectedPayment.paymentId,
view = selectedPayment_paymentId_field},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_paymentId_formField FormField {
controller = selectedPayment_paymentId_controller,
nameLabel = selectedPayment_paymentId_nameLabel};
selectedPayment_category_nameLabel TextLabel {
text="Category:",
layoutData = new GridLayoutData { row = 2, column = 1} };
selectedPayment_category_comboBox DojoComboBox {
values = [],
layoutData = new GridLayoutData { row = 2, column = 2} };
selectedPayment_category_controller Controller {
@MVC {model = selectedPayment.category,
view = selectedPayment_category_comboBox},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_category_formField FormField {
controller = selectedPayment_category_controller,
nameLabel = selectedPayment_category_nameLabel};
selectedPayment_description_nameLabel TextLabel {
text="Description:" ,
layoutData = new GridLayoutData { row = 3, column = 1} };
selectedPayment_description_field DojoTextField {
layoutData = new GridLayoutData { row = 3, column = 2} };
selectedPayment_description_controller Controller {
@MVC {model = selectedPayment.description,
view = selectedPayment_description_field},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_description_formField FormField {
controller = selectedPayment_description_controller,
nameLabel = selectedPayment_description_nameLabel};
selectedPayment_amount_nameLabel TextLabel {
text="Amount:",
layoutData = new GridLayoutData { row = 4, column = 1} };
selectedPayment_amount_textBox DojoCurrencyTextBox {
currency = "USD", value = selectedPayment.amount, width = 166,
errorMessage="Amount is not valid.",
layoutData = new GridLayoutData { row = 4, column = 2} };
selectedPayment_amount_controller Controller {
@MVC {model = selectedPayment.amount,
view = selectedPayment_amount_textBox},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_amount_formField FormField {
controller = selectedPayment_amount_controller,
nameLabel = selectedPayment_amount_nameLabel};
selectedPayment_fixedPayment_nameLabel TextLabel {
text="Fixed pmt:" ,
layoutData = new GridLayoutData { row = 5, column = 1} };
selectedPayment_fixedPayment_checkBox DojoCheckBox {
layoutData = new GridLayoutData { row = 5, column = 2} };
selectedPayment_fixedPayment_controller Controller {
@MVC {model = selectedPayment.fixedPayment,
view = selectedPayment_fixedPayment_checkBox},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_fixedPayment_formField FormField {
controller = selectedPayment_fixedPayment_controller,
nameLabel = selectedPayment_fixedPayment_nameLabel};
selectedPayment_dueDate_nameLabel TextLabel {
text="Due date:",
layoutData = new GridLayoutData { row = 6, column = 1} };
selectedPayment_dueDate_textBox DojoDateTextBox {
formatLength = DojoLib.DATEBOX_FORMAT_LONG,
value = selectedPayment.dueDate,
layoutData = new GridLayoutData { row = 6, column = 2} };
selectedPayment_dueDate_controller Controller {
@MVC {model = selectedPayment.dueDate,
view = selectedPayment_dueDate_textBox},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_dueDate_formField FormField {
controller = selectedPayment_dueDate_controller,
nameLabel = selectedPayment_dueDate_nameLabel};
selectedPayment_payeeName_nameLabel TextLabel {
text="Payee:",
layoutData = new GridLayoutData { row = 7, column = 1} };
selectedPayment_payeeName_field DojoTextField {
layoutData = new GridLayoutData { row = 7, column = 2} };
selectedPayment_payeeName_controller Controller {
@MVC {model = selectedPayment.payeeName,
view = selectedPayment_payeeName_field},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_payeeName_formField FormField {
controller = selectedPayment_payeeName_controller,
nameLabel = selectedPayment_payeeName_nameLabel};
selectedPayment_payeeAddress1_nameLabel TextLabel {
text="Address 1:" ,
layoutData = new GridLayoutData { row = 8, column = 1} };
selectedPayment_payeeAddress1_field DojoTextField {
layoutData = new GridLayoutData { row = 8, column = 2} };
selectedPayment_payeeAddress1_controller Controller {
@MVC {model = selectedPayment.payeeAddress1,
view = selectedPayment_payeeAddress1_field},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_payeeAddress1_formField FormField {
controller = selectedPayment_payeeAddress1_controller,
nameLabel = selectedPayment_payeeAddress1_nameLabel};
selectedPayment_payeeAddress2_nameLabel TextLabel {
text="Address 2:" ,
layoutData = new GridLayoutData { row = 9, column = 1} };
selectedPayment_payeeAddress2_field DojoTextField {
layoutData = new GridLayoutData { row = 9, column = 2} };
selectedPayment_payeeAddress2_controller Controller {
@MVC {model = selectedPayment.payeeAddress2,
view = selectedPayment_payeeAddress2_field},
validStateSetter = handleValidStateChange_selectedPayment};
selectedPayment_payeeAddress2_formField FormField {
controller = selectedPayment_payeeAddress2_controller,
nameLabel = selectedPayment_payeeAddress2_nameLabel};
selectedPayment_form FormManager {
entries = [ selectedPayment_paymentId_formField,
selectedPayment_category_formField,
selectedPayment_description_formField,
selectedPayment_amount_formField,
selectedPayment_fixedPayment_formField,
selectedPayment_dueDate_formField,
selectedPayment_payeeName_formField,
selectedPayment_payeeAddress1_formField,
selectedPayment_payeeAddress2_formField ] };
detailButtonLayout GridLayout{
layoutData = new GridLayoutData{ row = 1, column = 2 },
cellPadding = 4, rows = 1, columns = 2,
children = [ saveButton, clearButton ] };
clearButton DojoButton{
layoutData = new GridLayoutData{ row = 1, column = 1 },
text = "Clear", onClick ::= clearAllFields };
saveButton DojoButton{
layoutData = new GridLayoutData{ row = 1, column = 2 },
text = "Save", onClick ::= selectedPayment_form_Submit };
function start()
// allPayments_ui.data =[
// new paymentRec{category = 1, description = "test01",
// amount = 100.00, payeeName = "Someone"},
// new paymentRec{category = 2, description = "test02", amount = 200.00},
// new paymentRec{category = 3, description = "test03", amount = 300.00}];
readFromTable();
end
function cellClicked(myGrid DataGrid in)
selectedPayment = allPayments_ui.getSelection()[1] as paymentRec;
selectedPayment_form.publish();
end
function readFromTable()
call dbService.getAllPayments() returning to updateAll
onException serviceExceptionHandler;
end
function updateAll(retResult paymentRec[] in)
allPayments = retResult;
allPayments_ui.data = allPayments as any[];
end
function addRow(event Event in)
call dbService.addPayment(new paymentRec) returning to recordAdded
onException serviceExceptionHandler;
end
function recordAdded()
readFromTable();
end
function deleteRow(event Event in)
for(i INT from 1 to allPayments.getSize())
if(allPayments[i].paymentID == selectedPayment.paymentID)
allPayments.removeElement(i);
exit for;
end
end
call dbService.deletePayment(selectedPayment) returning to recordRevised
onException serviceExceptionHandler;
end
function recordRevised()
allPayments_ui.data = allPayments as any[];
end
function sampleData(event Event in)
call dbService.createDefaultTable() returning to updateAll
onException serviceExceptionHandler;
end
function selectedPayment_form_Submit(event Event in)
if(selectedPayment_form.isValid())
selectedPayment_form.commit();
end
end
function selectedPayment_form_Publish(event Event in)
selectedPayment_form.publish();
selectedPayment_form_Validate();
end
function selectedPayment_form_Validate()
selectedPayment_form.isValid();
end
function handleValidStateChange_selectedPayment(view Widget in, valid boolean in)
for (n int from selectedPayment_form.entries.getSize() to 1 decrement by 1)
entry FormField = selectedPayment_form.entries[n];
if(entry.controller.view == view)
if(valid)
// TODO: handle valid value
else
msg String? = entry.controller.getErrorMessage();
// TODO: handle invalid value
end
end
end
end
function clearAllFields(event Event in)
end
function formatCategory(class string, value string, rowData any in)
value = PaymentLib.getCategoryDesc(value as INT);
end
function serviceExceptionHandler(ex anyException)
sysLib.writeStderr("Failure: " + ex.message);
if (ex isa ServiceInvocationException)
sysLib.writeStderr("Detail 1: " +
(ex as ServiceInvocationException).detail1);
sysLib.writeStderr("Detail 2: " +
(ex as ServiceInvocationException).detail2);
sysLib.writeStderr("Detail 3: " +
(ex as ServiceInvocationException).detail3);
end
end
end
Related tasks
Lesson 8: Add variables and functions to the Rich UI handler