package com.hangum.tadpole.monitoring.core.dialogs.monitoring; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import com.hangum.tadpole.commons.util.JSONUtil; import com.hangum.tadpole.engine.query.dao.system.UserDBDAO; import com.hangum.tadpole.engine.query.dao.system.monitoring.MonitoringResultDAO; import com.hangum.tadpole.engine.query.sql.TadpoleSystem_monitoring; import com.hangum.tadpole.monitoring.core.utils.MonitoringDefine.MONITORING_STATUS; import com.swtdesigner.SWTResourceManager; import org.eclipse.swt.widgets.Group; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; /** * monitoring status dialog * * @author hangum * */ public class MonitoringStatusDialog extends Dialog { private static final Logger logger = Logger.getLogger(MonitoringStatusDialog.class); private UserDBDAO userDB; private TableViewer tvDetail ; private Text textDBName; private Text textDate; private Text textQueryResult; /** * Create the dialog. * @param parentShell */ public MonitoringStatusDialog(Shell parentShell, UserDBDAO userDB) { super(parentShell); setShellStyle(SWT.MAX | SWT.RESIZE | SWT.TITLE); this.userDB = userDB; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(userDB.getDisplay_name() + " last monitoring data dialog"); //$NON-NLS-1$ } /** * Create contents of the dialog. * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); GridLayout gridLayout = (GridLayout) container.getLayout(); gridLayout.verticalSpacing = 5; gridLayout.horizontalSpacing = 5; gridLayout.marginHeight = 5; gridLayout.marginWidth = 5; Composite compositeTitle = new Composite(container, SWT.NONE); compositeTitle.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); compositeTitle.setLayout(new GridLayout(2, false)); Label lblDbName = new Label(compositeTitle, SWT.NONE); lblDbName.setText("DB Name"); textDBName = new Text(compositeTitle, SWT.BORDER); textDBName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Label lblDate = new Label(compositeTitle, SWT.NONE); lblDate.setText("Date"); textDate = new Text(compositeTitle, SWT.BORDER); textDate.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); Composite compositeHead = new Composite(container, SWT.NONE); compositeHead.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); compositeHead.setLayout(new GridLayout(1, false)); tvDetail = new TableViewer(compositeHead, SWT.BORDER | SWT.FULL_SELECTION); tvDetail.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection iss = (IStructuredSelection)event.getSelection(); if(!iss.isEmpty()) { MonitoringResultDAO dao = (MonitoringResultDAO)iss.getFirstElement(); textQueryResult.setText(JSONUtil.getPretty(dao.getQuery_result())); } } }); Table table = tvDetail.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); Group grpQueryResult = new Group(container, SWT.NONE); grpQueryResult.setLayout(new GridLayout(1, false)); grpQueryResult.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); grpQueryResult.setText("Query Result"); textQueryResult = new Text(grpQueryResult, SWT.BORDER | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL | SWT.CANCEL | SWT.MULTI); textQueryResult.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); createColumns(); tvDetail.setContentProvider(new ArrayContentProvider()); tvDetail.setLabelProvider(new MonitoringStatusLabelProvider()); initUI(); return container; } /** * initialize ui */ private void initUI() { try { List<MonitoringResultDAO> listMonitoringResult = TadpoleSystem_monitoring.getMonitoringStatus(userDB.getSeq()); textDBName.setText(userDB.getDisplay_name()); if(!listMonitoringResult.isEmpty()) { MonitoringResultDAO dao = listMonitoringResult.get(0); textDate.setText(dao.getCreate_time().toString()); } tvDetail.setInput(listMonitoringResult); tvDetail.refresh(); } catch(Exception e) { logger.error("Get last monitoring status", e); } } /** * crate table column */ private void createColumns() { String[] names = {"Type", "KPI", "Result", "Title", "Description", "Index Value", "System Description", "Advice", "User Description"}; int[] intWidth = {100, 95, 80, 100, 80, 200, 100, 100, 100}; for(int i=0; i<names.length; i++) { TableViewerColumn tableViewerColumn = new TableViewerColumn(tvDetail, SWT.NONE); TableColumn tblclmnDbName = tableViewerColumn.getColumn(); tblclmnDbName.setText(names[i]); tblclmnDbName.setWidth(intWidth[i]); } } /** * Create contents of the button bar. * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, "Close", true); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(550, 650); } } /** * monitoring status label provider * @author hangum * */ class MonitoringStatusLabelProvider extends LabelProvider implements ITableLabelProvider, IColorProvider { @Override public Color getForeground(Object element) { MonitoringResultDAO dao = (MonitoringResultDAO)element; if(MONITORING_STATUS.WARRING.toString().equals(dao.getResult())) { return SWTResourceManager.getColor(MONITORING_STATUS.WARRING.getColor()); } else if(MONITORING_STATUS.CRITICAL.toString().equals(dao.getResult())) { return SWTResourceManager.getColor(MONITORING_STATUS.CRITICAL.getColor()); } return null; } @Override public Color getBackground(Object element) { return null; } @Override public Image getColumnImage(Object element, int columnIndex) { return null; } @Override public String getColumnText(Object element, int columnIndex) { MonitoringResultDAO dao = (MonitoringResultDAO)element; switch(columnIndex) { case 0: return dao.getMonitoring_type(); case 1: return dao.getKpi_type(); case 2: return dao.getResult(); case 3: return dao.getTitle(); case 4: return dao.getDescription(); case 5: return dao.getIndex_value(); case 6: return dao.getSystem_description(); case 7: return dao.getAdvice(); case 8: return dao.getUser_description(); } return null; } }