package edu.ualberta.med.biobank.forms; import java.util.Arrays; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osgi.util.NLS; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; import edu.ualberta.med.biobank.common.peer.LogPeer; import edu.ualberta.med.biobank.export.CsvDataExporter; import edu.ualberta.med.biobank.export.Data; import edu.ualberta.med.biobank.export.DataExporter; import edu.ualberta.med.biobank.gui.common.BgcPlugin; import edu.ualberta.med.biobank.gui.common.widgets.BgcBaseText; import edu.ualberta.med.biobank.logs.LogQuery; import edu.ualberta.med.biobank.views.LoggingView; import edu.ualberta.med.biobank.widgets.infotables.LoggingInfoTable; public class LoggingForm extends BiobankViewForm { public static String ID = "edu.ualberta.med.biobank.forms.LoggingForm"; private BgcBaseText userLabel; private BgcBaseText typeLabel; private BgcBaseText actionLabel; private BgcBaseText patientNumLabel; private BgcBaseText inventoryIDLabel; private BgcBaseText locationLabel; private BgcBaseText detailsLabel; private BgcBaseText startDateLabel; private BgcBaseText endDateLabel; private BgcBaseText centerLabel; private LoggingInfoTable loggingTable; @Override public void init() throws Exception { setPartName("Logging: results"); } @Override protected void createFormContent() throws Exception { PlatformUI.getWorkbench().getViewRegistry().find(LoggingView.ID); form.setText("Logging: Browse through your search results"); GridLayout layout = new GridLayout(1, false); page.setLayout(layout); page.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); form.setImage(BgcPlugin.getDefault().getImageRegistry() .get(BgcPlugin.IMG_LOGGING)); Composite client = toolkit.createComposite(page); client.setLayout(new GridLayout(2, false)); client.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); toolkit.paintBordersFor(client); Composite leftClient = toolkit.createComposite(client); leftClient.setLayout(new GridLayout(2, false)); leftClient.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING)); toolkit.paintBordersFor(leftClient); Composite rightClient = toolkit.createComposite(client); rightClient.setLayout(new GridLayout(2, false)); rightClient.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING)); toolkit.paintBordersFor(rightClient); /* a grid might make this easier */ centerLabel = createReadOnlyLabelledField(leftClient, SWT.NONE, "Center"); userLabel = createReadOnlyLabelledField(leftClient, SWT.NONE, "User"); typeLabel = createReadOnlyLabelledField(leftClient, SWT.NONE, "Type"); actionLabel = createReadOnlyLabelledField(leftClient, SWT.NONE, "Action"); startDateLabel = createReadOnlyLabelledField(leftClient, SWT.NONE, "Start Date"); patientNumLabel = createReadOnlyLabelledField(rightClient, SWT.NONE, "Patient #"); locationLabel = createReadOnlyLabelledField(rightClient, SWT.NONE, "Location"); inventoryIDLabel = createReadOnlyLabelledField(rightClient, SWT.NONE, "Inventory ID"); detailsLabel = createReadOnlyLabelledField(rightClient, SWT.NONE, "Details"); endDateLabel = createReadOnlyLabelledField(rightClient, SWT.NONE, "End Date"); getSearchRequestFields(); generateSearchQueryTable(); } private void generateSearchQueryTable() { LogQuery.getInstance().queryDatabase(); Composite client = createSectionWithClient("Search Results"); client.setLayout(new GridLayout(1, false)); Button button = new Button(client, SWT.PUSH); button.setText("Export CSV"); button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { export(new CsvDataExporter()); } }); loggingTable = new LoggingInfoTable(client, LogQuery.getInstance() .getDatabaseResults()); loggingTable.adaptToToolkit(toolkit, true); loggingTable.setVisible(true); loggingTable.adaptToToolkit(toolkit, true); toolkit.paintBordersFor(loggingTable); } @SuppressWarnings("unchecked") private void export(final DataExporter exporter) { final Data data = new Data(); try { data.setColumnNames(Arrays.asList( "Center", "User", "Date", "Action", "Type", "Patient #", "Inventory ID", "Location", "Details")); data.setTitle("Log Query: "); data.setRows((List<Object>) (List<?>) LogQuery.getInstance() .getDatabaseResults()); // check if the exporter can export this data exporter.canExport(data); } catch (Exception e) { MessageDialog.openError(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), "Cannot Export", e.getMessage()); return; } // confirm exporting if (!MessageDialog.openQuestion( PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Confirm Report Results Export", NLS.bind("Are you sure you want to {0}?", exporter.getName()))) { return; } // export try { exporter.export(data, loggingTable.getLabelProvider()); } catch (Exception e) { MessageDialog.openError(PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getShell(), "Error Exporting", e.getMessage()); return; } } private void getSearchRequestFields() throws Exception { centerLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.CENTER.getName())); userLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.USERNAME.getName())); actionLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.ACTION.getName())); typeLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.TYPE.getName())); startDateLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogQuery.START_DATE_KEY)); endDateLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogQuery.END_DATE_KEY)); patientNumLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.PATIENT_NUMBER.getName())); inventoryIDLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.INVENTORY_ID.getName())); locationLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.LOCATION_LABEL.getName())); detailsLabel.setText(LogQuery.getInstance().getSearchQueryItem( LogPeer.DETAILS.getName())); } @Override public void setValues() throws Exception { // TODO Auto-generated method stub } }