package com.bagri.tools.vvm.manager;
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import com.bagri.tools.vvm.model.ColumnConfig;
import com.bagri.tools.vvm.model.DefaultGridRow;
import com.bagri.tools.vvm.model.GridDataLoader;
import com.bagri.tools.vvm.model.GridRow;
import com.bagri.tools.vvm.model.Schema;
import com.bagri.tools.vvm.service.BagriServiceProvider;
import com.bagri.tools.vvm.service.DefaultServiceProvider;
import com.bagri.tools.vvm.service.SchemaManagementService;
import com.bagri.tools.vvm.service.ServiceException;
import com.bagri.tools.vvm.ui.XTable;
import com.sun.tools.visualvm.application.Application;
import com.sun.tools.visualvm.core.datasupport.DataRemovedListener;
import com.sun.tools.visualvm.core.ui.DataSourceViewPlugin;
import com.sun.tools.visualvm.core.ui.components.DataViewComponent;
import com.sun.tools.visualvm.tools.jmx.JmxModel;
import com.sun.tools.visualvm.tools.jmx.JmxModelFactory;
public class BagriOverview extends DataSourceViewPlugin implements DataRemovedListener<Application> {
private static final Logger LOGGER = Logger.getLogger(BagriOverview.class.getName());
private XTable schemasGrid;
private BagriServiceProvider bsp;
BagriOverview(Application application) {
super(application);
JmxModel jmx = JmxModelFactory.getJmxModelFor(application);
bsp = DefaultServiceProvider.getInstance(jmx.getMBeanServerConnection());
application.notifyWhenRemoved(this);
}
public DataViewComponent.DetailsView createView(int location) {
switch (location) {
case DataViewComponent.TOP_RIGHT:
JPanel panel = createOverviewPanel();
schemasGrid.reload();
return new DataViewComponent.DetailsView("Bagri Cluster Overview", "All known Schemas and Nodes in one place", 0, panel, null);
//new ScrollableContainer(panel), null);
default:
return null;
}
}
private JPanel createOverviewPanel() {
JPanel panel = new JPanel(new BorderLayout());
// Column configs
ArrayList<ColumnConfig> configs = new ArrayList<ColumnConfig>();
ColumnConfig c = new ColumnConfig();
c.setHeader("Active");
c.setColumnClass(String.class);
c.setFixedWidth(50);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("Schema Name");
c.setColumnClass(String.class);
c.setWidth(50);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("Description");
c.setColumnClass(String.class);
c.setWidth(200);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("Persistent");
c.setColumnClass(String.class);
c.setWidth(50);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("Data format");
c.setColumnClass(String.class);
c.setWidth(40);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("State");
c.setColumnClass(String.class);
c.setWidth(40);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("Members");
c.setColumnClass(String.class);
c.setWidth(80);
c.setResizable(true);
configs.add(c);
c = new ColumnConfig();
c.setHeader("Uptime");
c.setColumnClass(String.class);
c.setWidth(50);
c.setResizable(true);
configs.add(c);
schemasGrid = new XTable(configs, new GridDataLoader() {
@Override
public List<GridRow> loadData() {
SchemaManagementService shService = bsp.getSchemaManagement();
List<Schema> schemas;
try {
schemas = shService.getSchemas();
} catch (ServiceException e) {
//ErrorUtil.showError(SchemaManagementPanel.this, e);
LOGGER.severe("loadData; got exception loading schemas: " + e.getMessage());
return null;
}
//LOGGER.info("loadData; loaded schemas: " + schemas);
java.util.List<GridRow> rows = new ArrayList<>();
if (schemas != null) {
for (Schema schema : schemas) {
rows.add(new DefaultGridRow(schema.getObjectName(), new Object[] {
schema.isActive() ? "Yes" : "No"
, schema.getSchemaName()
, schema.getDescription()
, schema.isPersistent() ? "Yes" : "No"
, schema.getDataFormat()
, schema.getState()
, schema.getProperties().getProperty("bdb.schema.members")
, "N/A"}));
if ("working".equals(schema.getState())) {
try {
List<String> hosts = shService.getWorkingHosts(schema.getSchemaName());
for (String host: hosts) {
rows.add(new DefaultGridRow(schema.getObjectName(), new Object[] {
""
, host
, ""
, ""
, ""
, ""
, "N/A"}));
}
} catch (ServiceException e) {
//ErrorUtil.showError(SchemaManagementPanel.this, e);
LOGGER.severe("loadData; ot exception loading hosts: " + e.getMessage());
// skip..
}
}
}
}
//LOGGER.info("loadData; loaded rows: " + rows.size() + " " + rows);
return rows;
}
});
//schemasGrid.addMouseListener(new MouseAdapter() {
// @Override
// public void mouseClicked(MouseEvent e) {
// if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() >= 2) {
// onEditSchema();
// }
// }
//});
//eventBus.addEventHandler(new EventHandler<ApplicationEvent>() {
// @Override
// public void handleEvent(ApplicationEvent e) {
// if (SchemaManagement.SCHEMA_STATE_CHANGED.equals(e.getCommand())) {
// schemasGrid.reload();
// invalidate();
// }
// }
//});
panel.add(new JScrollPane(schemasGrid), BorderLayout.CENTER);
//panel.add(schemasGrid, BorderLayout.CENTER);
return panel;
}
@Override
public void dataRemoved(Application arg0) {
bsp.close();
bsp = null;
}
}