Skip to content

Commit

Permalink
beginning of GUI redesign; JMX client stub for eventual stream input …
Browse files Browse the repository at this point in the history
…from JMX beans
  • Loading branch information
1h1e1s1 committed Dec 14, 2014
1 parent f49f75d commit 4be4a16
Show file tree
Hide file tree
Showing 6 changed files with 244 additions and 20 deletions.
1 change: 1 addition & 0 deletions moa/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>

Expand Down
28 changes: 26 additions & 2 deletions moa/src/main/java/moa/gui/ClassOptionSelectionPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,15 @@
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

import moa.core.AutoClassDiscovery;
import moa.core.AutoExpandVector;
Expand Down Expand Up @@ -92,8 +95,21 @@ public ClassOptionSelectionPanel(Class<?> requiredType,
@Override
public void actionPerformed(ActionEvent arg0) {
try {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {

try {
Object chosen = ((Class<?>) ClassOptionSelectionPanel.this.classChoiceBox.getSelectedItem()).newInstance();
classChoiceChanged(chosen);
} catch (Exception ex) {
Logger.getLogger(ClassOptionSelectionPanel.class.getName()).log(Level.SEVERE, null, ex);
}

}

});
} catch (Exception ex) {
GUIUtils.showExceptionDialog(
ClassOptionSelectionPanel.this, "Problem", ex);
Expand Down Expand Up @@ -124,10 +140,14 @@ public Class<?>[] findSuitableClasses(Class<?> requiredType) {
return finalClasses.toArray(new Class<?>[finalClasses.size()]);
}

public static ClassOptionSelectionPanel newSelectClassDialog(Class<?> requiredType, String initialCLIString, String nullString) {
return new ClassOptionSelectionPanel(
requiredType, initialCLIString, nullString);
}

public static String showSelectClassDialog(Component parent, String title,
Class<?> requiredType, String initialCLIString, String nullString) {
ClassOptionSelectionPanel panel = new ClassOptionSelectionPanel(
requiredType, initialCLIString, nullString);
ClassOptionSelectionPanel panel = newSelectClassDialog(requiredType, initialCLIString, nullString);
if (JOptionPane.showOptionDialog(parent, panel, title,
JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null,
null, null) == JOptionPane.OK_OPTION) {
Expand Down Expand Up @@ -166,5 +186,9 @@ public void classChoiceChanged(Object chosen) {
Window window = (Window) component;
window.pack();
}
else {
updateUI();
doLayout();
}
}
}
7 changes: 6 additions & 1 deletion moa/src/main/java/moa/gui/ClassificationTabPanel.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,15 @@
package moa.gui;

import java.awt.BorderLayout;
import javax.swing.JPanel;

/**
* This panel allows the user to select and configure a task, and run it.
*
* @author Richard Kirkby ([email protected])
* @version $Revision: 7 $
*/
public class ClassificationTabPanel extends AbstractTabPanel {
public class ClassificationTabPanel extends AbstractTabPanel implements GUI.OptionPanelAware {

private static final long serialVersionUID = 1L;

Expand All @@ -43,6 +44,10 @@ public ClassificationTabPanel() {
add(this.taskManagerPanel, BorderLayout.NORTH);
add(this.previewPanel, BorderLayout.CENTER);
}
@Override
public void setOptionsPanel(JPanel p) {
taskManagerPanel.setOptionsPanel(p);
}

//returns the string to display as title of the tab
@Override
Expand Down
21 changes: 16 additions & 5 deletions moa/src/main/java/moa/gui/GUI.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@
package moa.gui;

import java.awt.BorderLayout;
import java.util.logging.Level;
import java.util.logging.Logger;
import static java.awt.BorderLayout.CENTER;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
import javax.swing.UnsupportedLookAndFeelException;
import moa.DoTask;
import moa.core.WekaUtils;

Expand All @@ -44,6 +42,7 @@ public class GUI extends JPanel {
private static final long serialVersionUID = 1L;

private javax.swing.JTabbedPane panel;
private JPanel optionPanel;

public GUI() {
initGUI();
Expand All @@ -52,9 +51,15 @@ public GUI() {
private void initGUI() {
setLayout(new BorderLayout());

JSplitPane js = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
add(js, CENTER);


optionPanel = new JPanel();
js.add(optionPanel);
// Create and set up tabs
panel = new javax.swing.JTabbedPane();
add(panel, BorderLayout.CENTER);
js.add(panel);

// initialize additional panels
String[] tabs = GUIDefaults.getTabs();
Expand All @@ -65,6 +70,8 @@ private void initGUI() {
String classname = optionsStr[0];
// setup panel
AbstractTabPanel tabPanel = (AbstractTabPanel) Class.forName(classname).newInstance();
if (tabPanel instanceof OptionPanelAware)
((OptionPanelAware)tabPanel).setOptionsPanel(optionPanel);
panel.addTab(tabPanel.getTabTitle(), null, (JPanel) tabPanel, tabPanel.getDescription());
} catch (Exception e) {
e.printStackTrace();
Expand All @@ -73,6 +80,10 @@ private void initGUI() {

}

public interface OptionPanelAware {
public void setOptionsPanel(JPanel p);
}

public static void main(String[] args) {
try {
if (DoTask.isJavaVersionOK() == false || WekaUtils.isWekaVersionOK() == false) {
Expand Down
161 changes: 161 additions & 0 deletions moa/src/main/java/moa/gui/JMXClient.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package moa.gui;

/**
* FROM: https://web-gmazza.rhcloud.com/blog/entry/creating-jconsole-alternative
* @author me
*/



import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryPoolMXBean;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import javax.management.AttributeChangeNotification;
import javax.management.Notification;
import javax.management.NotificationListener;
import javax.management.ObjectInstance;

public class JMXClient {

/**
* Inner class that will handle the notifications.
*/
public static class ClientListener implements NotificationListener {
public void handleNotification(Notification notification,
Object handback) {
echo("\nReceived notification:");
echo("\tClassName: " + notification.getClass().getName());
echo("\tSource: " + notification.getSource());
echo("\tType: " + notification.getType());
echo("\tMessage: " + notification.getMessage());
if (notification instanceof AttributeChangeNotification) {
AttributeChangeNotification acn =
(AttributeChangeNotification) notification;
echo("\tAttributeName: " + acn.getAttributeName());
echo("\tAttributeType: " + acn.getAttributeType());
echo("\tNewValue: " + acn.getNewValue());
echo("\tOldValue: " + acn.getOldValue());
}
}
}

/* For simplicity, we declare "throws Exception".
Real programs will usually want finer-grained exception handling. */
public static void main(String[] args) throws Exception {


// Create an RMI connector client and
// connect it to the RMI connector server
//
echo("\nCreate an RMI connector client and " +
"connect it to the RMI connector server");
JMXServiceURL url =
new JMXServiceURL("service:jmx:rmi:///jndi/rmi://:1617/jmxrmi");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);

// Create listener
//
ClientListener listener = new ClientListener();

// Get an MBeanServerConnection
//
echo("\nGet an MBeanServerConnection");
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
waitForEnterPressed();

// Get domains from MBeanServer
//
echo("\nDomains:");
String domains[] = mbsc.getDomains();
Arrays.sort(domains);
for (String domain : domains) {
echo("\tDomain = " + domain);
}
waitForEnterPressed();

// Get MBeanServer's default domain
//
echo("\nMBeanServer default domain = " + mbsc.getDefaultDomain());

// Get MBean count
//
echo("\nMBean count = " + mbsc.getMBeanCount());

// Query MBean names
//
echo("\nQuery MBeanServer MBeans:");
Set<ObjectName> names =
new TreeSet<ObjectName>(mbsc.queryNames(null, null));
for (ObjectName name : names) {
echo("\tObjectName = " + name);
}
waitForEnterPressed();

// ----------------------
// Manage the Hello MBean
// ----------------------

echo("\n>>> Perform operations on Hello MBean <<<");

// Construct the ObjectName for the Hello MBean
//
ObjectName mbeanName = new ObjectName("com.example:type=Hello");

// Create a dedicated proxy for the MBean instead of
// going directly through the MBean server connection
//
//HelloMBean mbeanProxy =
// JMX.newMBeanProxy(mbsc, mbeanName, HelloMBean.class, true);

// Add notification listener on Hello MBean
//
echo("\nAdd notification listener...");
mbsc.addNotificationListener(mbeanName, listener, null, null);


waitForEnterPressed();

// Close MBeanServer connection
//
echo("\nClose the connection to the server");
jmxc.close();
echo("\nBye! Bye!");
}

private static void echo(String msg) {
System.out.println(msg);
}

private static void sleep(int millis) {
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

private static void waitForEnterPressed() {
try {
echo("\nPress <Enter> to continue...");
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}

}
Loading

0 comments on commit 4be4a16

Please sign in to comment.