Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OP-162 result set pagination prototype #200

Open
wants to merge 10 commits into
base: develop
Choose a base branch
from
2 changes: 1 addition & 1 deletion .github/workflows/maven.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v2
- name: Checkout core
run: git clone --depth=50 --branch=develop https://github.com/informatici/openhospital-core.git openhospital-core
run: git clone --depth=50 --branch=OP-162_ResultSet_Pagination_prototype https://github.com/informatici/openhospital-core.git openhospital-core
- name: Install core
run: cd openhospital-core && mvn install -DskipTests=true && cd ..
- name: Set up JDK 1.8
Expand Down
3 changes: 3 additions & 0 deletions bundle/language_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ angal.common.new.btn
angal.common.new.btn.key = N
angal.common.newpatient.btn = New Patient
angal.common.newpatient.btn.key = N
angal.common.nextpage = Next Page
angal.common.notapplicable.txt = N/A
angal.common.notdefined.txt = N/D
angal.common.note.title = Note
Expand All @@ -303,6 +304,7 @@ angal.common.pleaseinsertacode.msg
angal.common.pleaseinsertavaliddescription.msg = Please insert a valid description.
angal.common.pleaseselectapatient.msg = Please select a patient.
angal.common.pleaseselectarow.msg = Please select a row.
angal.common.previouspage = Previous Page
angal.common.print.btn = Print
angal.common.print.btn.key = P
angal.common.qty.txt = Qty
Expand Down Expand Up @@ -1079,6 +1081,7 @@ angal.opd.opdnumberalreadyexist.msg
angal.opd.opdnumbermustbeanumber.msg = OPD No. must be a number.
angal.opd.opdoutpatientdepartment.title = OPD Out Patient Department
angal.opd.operation = Operation
angal.opd.pagenumber = Page Number
angal.opd.patientcode.fmt.msg = Patient (code: {0})
angal.opd.patientid.col = PAT. ID
angal.opd.patientstatus.col = Status
Expand Down
144 changes: 106 additions & 38 deletions src/main/java/org/isf/opd/gui/OpdBrowser.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,10 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;

import javax.persistence.TypedQuery;
import javax.swing.AbstractButton;
import javax.swing.Box;
import javax.swing.BoxLayout;
Expand Down Expand Up @@ -113,6 +115,8 @@ public class OpdBrowser extends ModalJFrame implements OpdEdit.SurgeryListener,
private JButton jNewButton = null;
private JButton jEditButton = null;
private JButton jCloseButton = null;
private JButton jPreviousPageButton = null;
private JButton jNextPageButton = null;
private JButton jDeleteButton = null;
private JPanel jSelectionPanel = null;
private JPanel dateFromPanel = null;
Expand Down Expand Up @@ -150,7 +154,7 @@ public class OpdBrowser extends ModalJFrame implements OpdEdit.SurgeryListener,
MessageBundle.getMessage("angal.opd.diseasetype.col").toUpperCase(),
MessageBundle.getMessage("angal.opd.patientstatus.col").toUpperCase()
};
private ArrayList<Opd> pSur;
private List<Opd> pSur;
private JTable jTable = null;
private OpdBrowsingModel model;
private int[] pColumnWidth = {50, 50, 70, 70, 150, 30, 30, 195, 195, 50 };
Expand All @@ -163,6 +167,8 @@ public class OpdBrowser extends ModalJFrame implements OpdEdit.SurgeryListener,
private JButton filterButton = null;
private String rowCounterText = MessageBundle.getMessage("angal.common.count.label") + ' ';
private JLabel rowCounter = null;
private String pageNumberText = MessageBundle.getMessage("angal.opd.pagenumber") + ": ";
private JLabel pageNumberLabel = null;
private JRadioButton radioNew;
private JRadioButton radioAll;
private final JFrame myFrame;
Expand All @@ -171,6 +177,17 @@ public class OpdBrowser extends ModalJFrame implements OpdEdit.SurgeryListener,
private DiseaseBrowserManager diseaseManager = Context.getApplicationContext().getBean(DiseaseBrowserManager.class);
private ArrayList<Disease> diseases = null;
protected AbstractButton searchButton;
private JTextField searchDiseasetextField;

private String disease;
private String diseasetype;
private char sex;
private char newPatient;
private GregorianCalendar dateFrom;
private GregorianCalendar dateTo;
private int currentPageNumber;
private int pageSize = 100;
private TypedQuery<Opd> resultSet;

public JTable getJTable() {
if (jTable == null) {
Expand Down Expand Up @@ -245,6 +262,8 @@ private JPanel getJButtonPanel() {
if (MainMenu.checkUserGrants("btnopdedit")) jButtonPanel.add(getJEditButton(), null);
if (MainMenu.checkUserGrants("btnopddel")) jButtonPanel.add(getJDeleteButton(), null);
jButtonPanel.add(getJCloseButton(), null);
jButtonPanel.add(getJPreviousPageButton(), null);
jButtonPanel.add(getJNextPageButton(), null);
}
return jButtonPanel;
}
Expand All @@ -265,6 +284,7 @@ private void initialize() {
this.setTitle(MessageBundle.getMessage("angal.opd.opdoutpatientdepartment.title"));
this.setContentPane(getJContainPanel());
rowCounter.setText(rowCounterText + pSur.size());
pageNumberLabel.setText(pageNumberText + (currentPageNumber + 1));
validate();
this.setLocationRelativeTo(null);
}
Expand Down Expand Up @@ -356,7 +376,39 @@ private JButton getJCloseButton() {
}
return jCloseButton;
}


private JButton getJPreviousPageButton() {
if(jPreviousPageButton == null) {
mwithi marked this conversation as resolved.
Show resolved Hide resolved
jPreviousPageButton = new JButton();
jPreviousPageButton.setText(MessageBundle.getMessage("angal.common.previouspage"));
jPreviousPageButton.setMnemonic(KeyEvent.VK_PAGE_UP);
jPreviousPageButton.addActionListener(event -> {
loadAndUpdateTable(--currentPageNumber);
if (!jNextPageButton.isEnabled()) {
jNextPageButton.setEnabled(true);
}
});
jPreviousPageButton.setEnabled(false);
}
return jPreviousPageButton;
}

private JButton getJNextPageButton() {
if(jNextPageButton == null) {
jNextPageButton = new JButton();
jNextPageButton.setText(MessageBundle.getMessage("angal.common.nextpage"));
jNextPageButton.setMnemonic(KeyEvent.VK_PAGE_DOWN);
jNextPageButton.addActionListener(event -> {
loadAndUpdateTable(++currentPageNumber);
if (!jPreviousPageButton.isEnabled()) {
jPreviousPageButton.setEnabled(true);
}
});
jNextPageButton.setEnabled(false);
}
return jNextPageButton;
}

/**
* This method initializes jDeleteButton
*
Expand Down Expand Up @@ -439,6 +491,7 @@ private JPanel getJSelectionPanel() {
jSelectionPanel.add(getNewPatientPanel(), null);
jSelectionPanel.add(filterButtonPanel, null);
jSelectionPanel.add(getRowCounter(), null);
jSelectionPanel.add(getRowPageNumber(), null);
}
return jSelectionPanel;
}
Expand All @@ -452,6 +505,14 @@ private JLabel getRowCounter() {
return rowCounter;
}

private JLabel getRowPageNumber() {
if(pageNumberLabel == null) {
pageNumberLabel = new JLabel();
pageNumberLabel.setAlignmentX(Box.CENTER_ALIGNMENT);
}
return pageNumberLabel;
}

private JPanel getDateFromPanel() {
if (dateFromPanel == null) {
dateFromPanel = new JPanel();
Expand Down Expand Up @@ -961,7 +1022,7 @@ class OpdBrowsingModel extends DefaultTableModel {
private static final long serialVersionUID = -9129145534999353730L;

public OpdBrowsingModel(String diseaseTypeCode, String diseaseCode, GregorianCalendar dateFrom, GregorianCalendar dateTo, int ageFrom, int ageTo,
char sex, char newPatient) {
char sex, char newPatient, int pageNumber) {
try {
pSur = manager.getOpd(diseaseTypeCode, diseaseCode, dateFrom, dateTo, ageFrom, ageTo, sex, newPatient);
} catch (OHServiceException ohServiceException) {
Expand Down Expand Up @@ -1051,6 +1112,7 @@ public void surgeryUpdated(AWTEvent e, Opd opd) {
jTable.setRowSelectionInterval(selectedrow, selectedrow);
}
rowCounter.setText(rowCounterText + pSur.size());
pageNumberLabel.setText(pageNumberText + (currentPageNumber + 1));
}

@Override
Expand All @@ -1061,6 +1123,7 @@ public void surgeryInserted(AWTEvent e, Opd opd) {
jTable.setRowSelectionInterval(0, 0);
}
rowCounter.setText(rowCounterText + pSur.size());
pageNumberLabel.setText(pageNumberText + (currentPageNumber + 1));
}

private JButton getFilterButton() {
Expand All @@ -1073,34 +1136,21 @@ private JButton getFilterButton() {
MessageDialog.error(OpdBrowser.this, "angal.opd.pleaseselectadisease.msg");
return;
}
String disease = ((Disease)selectedItem).getCode();
String diseasetype = ((DiseaseType)jDiseaseTypeBox.getSelectedItem()).getCode();

char sex;
if (radioa.isSelected()) {
sex='A';
} else {
if (radiom.isSelected()) {
sex='M';
} else {
sex='F';
}
}

char newPatient;
if (radioAll.isSelected()) {
newPatient='A';
} else {
if (radioNew.isSelected()) {
newPatient='N';
} else {
newPatient='R';
}
}
disease=((Disease)selectedItem).getCode();
diseasetype=((DiseaseType)jDiseaseTypeBox.getSelectedItem()).getCode();


GregorianCalendar dateFrom = getDateFrom();
GregorianCalendar dateTo = getDateTo();
if (radioa.isSelected()) sex='A';
else if (radiom.isSelected()) sex='M';
else sex='F';

if(radioAll.isSelected()) newPatient='A';
else if(radioNew.isSelected()) newPatient='N';
else newPatient='R';

dateFrom = getDateFrom();
dateTo = getDateTo();

if (dateFrom.after(dateTo)){
MessageDialog.error(OpdBrowser.this, "angal.opd.datefrommustbebefordateto.msg");
return;
Expand All @@ -1112,23 +1162,41 @@ private JButton getFilterButton() {
ageFrom=ageTo;
return;
}

//TODO: to retrieve resultset size instead of assuming 1 year as limit for the warning
if (TimeTools.getDaysBetweenDates(dateFrom, dateTo, true) >= 360) {
int ok = JOptionPane.showConfirmDialog(OpdBrowser.this,
MessageBundle.getMessage("angal.common.thiscouldretrievealargeamountofdataproceed.msg"),
MessageBundle.getMessage("angal.messagedialog.question.title"),
int ok = JOptionPane.showConfirmDialog(OpdBrowser.this,
MessageBundle.getMessage("angal.common.thiscouldretrievealargeamountofdataproceed"),
MessageBundle.getMessage("angal.hospital"),
JOptionPane.OK_CANCEL_OPTION);
if (ok != JOptionPane.OK_OPTION) return;
}
currentPageNumber = 0;
loadAndUpdateTable(currentPageNumber);

model = new OpdBrowsingModel(diseasetype,disease,getDateFrom(), getDateTo(),ageFrom,ageTo,sex,newPatient);
model.fireTableDataChanged();
jTable.updateUI();
rowCounter.setText(rowCounterText + pSur.size());
});
}
return filterButton;
}


private void loadAndUpdateTable(int pageNumber) {
model = new OpdBrowsingModel(diseasetype,disease,getDateFrom(), getDateTo(),ageFrom,ageTo,sex,newPatient, pageNumber);
model.fireTableDataChanged();
jTable.updateUI();
rowCounter.setText(rowCounterText + pSur.size());
pageNumberLabel.setText(pageNumberText + (currentPageNumber + 1));
if(pageNumber == 0) {
jPreviousPageButton.setEnabled(false);
}
enableNextPageButton();
}

private void enableNextPageButton() {
if(pSur.size() < pageSize) {
jNextPageButton.setEnabled(false);
} else {
jNextPageButton.setEnabled(true);
}
}

}