diff options
Diffstat (limited to 'src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/IntrospectAction.java')
-rwxr-xr-x | src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/IntrospectAction.java | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/IntrospectAction.java b/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/IntrospectAction.java new file mode 100755 index 0000000..d2110e9 --- /dev/null +++ b/src/traffic-incidents-service/org.genivi.trafficinfo.dbus-java/src/main/java/org/freedesktop/dbus/viewer/IntrospectAction.java @@ -0,0 +1,148 @@ +/* + D-Bus Java Viewer + Copyright (c) 2006 Peter Cox + + This program is free software; you can redistribute it and/or modify it + under the terms of either the GNU Lesser General Public License Version 2 or the + Academic Free Licence Version 2.1. + + Full licence texts are included in the COPYING file with this program. +*/ +package org.freedesktop.dbus.viewer; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.io.StringReader; + +import javax.swing.AbstractAction; +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTabbedPane; +import javax.swing.JTable; +import javax.swing.JTextArea; +import javax.swing.ListSelectionModel; +import javax.swing.ScrollPaneConstants; +import javax.swing.SwingUtilities; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import org.freedesktop.DBus.Introspectable; +import org.freedesktop.dbus.bin.CreateInterface; + +@SuppressWarnings("serial") +final class IntrospectAction extends AbstractAction implements ListSelectionListener +{ + private final JTable table; + + IntrospectAction(JTable table) + { + super("Introspect"); + setEnabled(false); + this.table = table; + + + ListSelectionModel selectionModel = table.getSelectionModel(); + selectionModel.addListSelectionListener(this); + selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + } + + /** {@inheritDoc} */ + public void valueChanged(ListSelectionEvent e) + { + if (!e.getValueIsAdjusting()) + { + DBusTableModel model = (DBusTableModel) table.getModel(); + int selection = table.getSelectedRow(); + if (selection > -1 && selection < model.getRowCount()) + { + DBusEntry entry = model.getEntry(selection); + final Introspectable introspectable = entry.getIntrospectable(); + setEnabled(introspectable != null); + } + } + } + + /** {@inheritDoc} */ + public void actionPerformed(ActionEvent e) + { + + int row = table.getSelectedRow(); + DBusTableModel model = (DBusTableModel) table.getModel(); + if (row > -1 && row < model.getRowCount()) + { + DBusEntry entry = model.getEntry(row); + final String xmlFile = entry.getName() + ".xml"; + final Introspectable introspectable = entry.getIntrospectable(); + new Thread(new Runnable() + { + public void run() + { + + StringStreamFactory factory = new StringStreamFactory(); + CreateInterface createInterface = new CreateInterface(factory, false); + try + { + String xml = introspectable.Introspect(); + + String docType = "<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n\"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">"; + + createInterface.createInterface(new StringReader(xml.replace(docType, ""))); + final JTabbedPane tabbedPane = new JTabbedPane(); + + tabbedPane.addTab(xmlFile, createSourceTab(xmlFile, xml)); + + for (String file : factory.streamMap.keySet()) + { + final String source = factory.streamMap.get(file).toString(); + + tabbedPane.addTab(file, createSourceTab(file, source)); + } + tabbedPane.setPreferredSize(new Dimension(600, 400)); + + final JPanel introspectionPanel = new JPanel(new BorderLayout()); + introspectionPanel.add(tabbedPane, BorderLayout.CENTER); + + JPanel southPanel = new JPanel(); + southPanel.add(new JButton(new SaveFileAction(tabbedPane))); + southPanel.add(new JButton(new SaveAllAction(tabbedPane))); + introspectionPanel.add(southPanel, BorderLayout.SOUTH); + + SwingUtilities.invokeLater(new Runnable() + { + @SuppressWarnings("synthetic-access") + public void run() + { + JOptionPane.showMessageDialog(table, introspectionPanel, "Introspection", JOptionPane.PLAIN_MESSAGE); + } + }); + + } + catch (final Exception e) + { + e.printStackTrace(); + SwingUtilities.invokeLater(new Runnable() + { + @SuppressWarnings("synthetic-access") + public void run() + { + JOptionPane.showMessageDialog(table, e.getMessage(), "Introspection Failed", JOptionPane.ERROR_MESSAGE); + } + }); + } + } + + private JScrollPane createSourceTab(String file, final String source) + { + JTextArea area = new JTextArea(source); + area.setLineWrap(true); + area.setWrapStyleWord(true); + return new JScrollPane(area, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + } + }).start(); + + } + } +} |