diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml index a9b5d19925..dde5938b0a 100644 --- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml +++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.java/pom.xml @@ -69,7 +69,7 @@ edu.wpi.first.wpilib.networktables.java NetworkTables - 0.1.0-SNAPSHOT + 3.0.0-SNAPSHOT jar NetworkTables.jar ${java-zip}/lib diff --git a/networktables/OutlineViewer/build.gradle b/networktables/OutlineViewer/build.gradle index 57df0727d8..6bcbe75891 100644 --- a/networktables/OutlineViewer/build.gradle +++ b/networktables/OutlineViewer/build.gradle @@ -34,6 +34,6 @@ sourceSets { } dependencies { - compile project(":networktables:ntcore") + compile project(":networktables:java") compile 'uk.gov.nationalarchives.thirdparty.netbeans:org-netbeans-swing-outline:7.2' } diff --git a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/AbstractTreeNode.java b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/AbstractTreeNode.java index 00d0697ff2..f491d47aed 100644 --- a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/AbstractTreeNode.java +++ b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/AbstractTreeNode.java @@ -5,7 +5,8 @@ package edu.wpi.first.tableviewer; import edu.wpi.first.wpilibj.tables.ITable; -import edu.wpi.first.wpilibj.networktables.NetworkTable; +import edu.wpi.first.wpilibj.networktables.NetworkTableProvider; +import edu.wpi.first.wpilibj.networktables2.NetworkTableNode; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import org.netbeans.swing.outline.Outline; @@ -29,13 +30,13 @@ public abstract class AbstractTreeNode extends DefaultMutableTreeNode { AbstractTreeNode.outline = outline; } - public AbstractTreeNode(String key, TableEntryData data) { + public AbstractTreeNode(NetworkTableNode node, String key, TableEntryData data) { super(data); this.data = data; if (treeModel != null) { treeModel.reload(this); } - table = NetworkTable.getTable(key); + table = new NetworkTableProvider(node).getTable(key); } /** diff --git a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/BranchNode.java b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/BranchNode.java index 601d0ea904..eafce855c1 100644 --- a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/BranchNode.java +++ b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/BranchNode.java @@ -8,6 +8,7 @@ import edu.wpi.first.tableviewer.dialog.AddArrayDialog; import edu.wpi.first.tableviewer.dialog.AddBooleanDialog; import edu.wpi.first.tableviewer.dialog.AddNumberDialog; import edu.wpi.first.tableviewer.dialog.AddStringDialog; +import edu.wpi.first.wpilibj.networktables2.NetworkTableNode; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JMenuItem; @@ -24,8 +25,8 @@ public class BranchNode extends AbstractTreeNode { private final String name; - public BranchNode(String key, String name) { - super(key, new TableEntryData(name, null)); + public BranchNode(NetworkTableNode node, String key, String name) { + super(node, key, new TableEntryData(name, null)); this.name = name; } diff --git a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/LeafNode.java b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/LeafNode.java index 561b677a75..9d7bf44239 100644 --- a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/LeafNode.java +++ b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/LeafNode.java @@ -4,7 +4,8 @@ */ package edu.wpi.first.tableviewer; -import edu.wpi.first.wpilibj.networktables.NetworkTable; +import edu.wpi.first.wpilibj.networktables.NetworkTableProvider; +import edu.wpi.first.wpilibj.networktables2.NetworkTableNode; import javax.swing.event.TableModelEvent; /** @@ -15,9 +16,9 @@ import javax.swing.event.TableModelEvent; */ public class LeafNode extends AbstractTreeNode { - public LeafNode(String key, TableEntryData data) { - super(key, data); - table = NetworkTable.getTable(key.substring(0, key.lastIndexOf('/'))); + public LeafNode(NetworkTableNode node, String key, TableEntryData data) { + super(node, key, data); + table = new NetworkTableProvider(node).getTable(key.substring(0, key.lastIndexOf('/'))); } /** diff --git a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/OutlineFrame.java b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/OutlineFrame.java index d635a0ad3e..ec5f2eba4e 100644 --- a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/OutlineFrame.java +++ b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/OutlineFrame.java @@ -6,7 +6,7 @@ package edu.wpi.first.tableviewer; import edu.wpi.first.tableviewer.TableEntryData.EntryType; import edu.wpi.first.tableviewer.dialog.AbstractAddDialog; -import edu.wpi.first.wpilibj.networktables.NetworkTable; +import edu.wpi.first.wpilibj.networktables2.NetworkTableNode; import edu.wpi.first.wpilibj.tables.ITable; import edu.wpi.first.wpilibj.tables.ITableListener; import java.awt.BorderLayout; @@ -29,16 +29,18 @@ public class OutlineFrame extends JFrame implements ITableListener { private final Outline outline; private final BranchNode rootBranch; + private final NetworkTableNode node; private final boolean showMetadata; private final Preferences prefs = Preferences.userNodeForPackage(getClass()); - public OutlineFrame(String title, boolean showMetadata) { + public OutlineFrame(String title, NetworkTableNode node, boolean showMetadata) { + this.node = node; this.showMetadata = showMetadata; setTitle(title); setDefaultCloseOperation(EXIT_ON_CLOSE); - rootBranch = new BranchNode("", "Root"); + rootBranch = new BranchNode(node, "", "Root"); DefaultTreeModel outlineTreeModel = new DefaultTreeModel(rootBranch); OutlineModel outlineModel = DefaultOutlineModel.createOutlineModel( @@ -97,7 +99,7 @@ public class OutlineFrame extends JFrame implements ITableListener { scrollPane.setViewportView(outline); add(scrollPane, BorderLayout.CENTER); - NetworkTable.getTable("").addTableListener(this, true); + node.addTableListener(this, true); } @@ -123,7 +125,7 @@ public class OutlineFrame extends JFrame implements ITableListener { key += "/" + name; if (subTableNames.getLast() == name) { // leaf if (currentNode == null) { - currentNode = new LeafNode(key, new TableEntryData(name, value)); + currentNode = new LeafNode(node, key, new TableEntryData(name, value)); if (currentNode.data.isMetadata() && !showMetadata) { // don't show metadata directly // instead, show the value in the branch's "Type" field @@ -138,7 +140,7 @@ public class OutlineFrame extends JFrame implements ITableListener { } } else if (currentNode == null) { - currentNode = new BranchNode(key, name); + currentNode = new BranchNode(node, key, name); parentNode.add(currentNode); } } diff --git a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddArrayDialog.java b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddArrayDialog.java index 842d96814f..6a139a9597 100644 --- a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddArrayDialog.java +++ b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/AddArrayDialog.java @@ -4,8 +4,12 @@ */ package edu.wpi.first.tableviewer.dialog; +import edu.wpi.first.wpilibj.networktables.NetworkTable; +import edu.wpi.first.wpilibj.networktables2.type.ArrayData; +import edu.wpi.first.wpilibj.networktables2.type.BooleanArray; +import edu.wpi.first.wpilibj.networktables2.type.NumberArray; +import edu.wpi.first.wpilibj.networktables2.type.StringArray; import edu.wpi.first.wpilibj.tables.ITable; -import java.util.ArrayList; import javax.swing.DefaultCellEditor; import javax.swing.JComboBox; import javax.swing.JOptionPane; @@ -215,78 +219,60 @@ public class AddArrayDialog extends AbstractAddDialog { } /** - * Creates a new array object containing the values in the - * table, which will then be put into the Network Table associated + * Creates a new {@code ArrayData} object containing the values in the + * table, which will then be put into the {@link NetworkTable} associated * with this dialog. * * @param arrayType The type of array: Boolean, Number, or String. - * @return An array object containing the data in the table, or + * @return An {@link ArrayData} object containing the data in the table, or * null if an error is present in the table (such as an invalid double * value). */ - private Object createArrayData(String arrayType) { - int n = 0; - for (int i = 0; i < valueTable.getRowCount(); i++) { - Object data = valueTable.getValueAt(i, 0); - if (data != null) { - n++; - } - } + private ArrayData createArrayData(String arrayType) { + ArrayData ad; switch (arrayType) { case "Boolean": - { - boolean[] arr = new boolean[n]; - n = 0; - for (int i = 0; i < valueTable.getRowCount(); i++) { - Object data = valueTable.getValueAt(i, 0); - if (data != null) { - arr[n] = data.toString().equalsIgnoreCase("true"); - n++; - } + ad = new BooleanArray(); + for (int i = 0; i < valueTable.getRowCount(); i++) { + Object data = valueTable.getValueAt(i, 0); + if (data != null) { + ((BooleanArray) ad).add(data.toString().equalsIgnoreCase("true")); } - return arr; } - + break; case "Number": - { - double[] arr = new double[n]; - n = 0; - for (int i = 0; i < valueTable.getRowCount(); i++) { - Object data = valueTable.getValueAt(i, 0); - try { - if (data != null) { - arr[n] = Double.parseDouble(data.toString()); - n++; - } - } catch (NumberFormatException e) { - JOptionPane.showMessageDialog( - this, - "Invalid double value \"" + data + "\" in row " + (i + 1), - "Invalid number", - JOptionPane.ERROR_MESSAGE); - return null; + ad = new NumberArray(); + for (int i = 0; i < valueTable.getRowCount(); i++) { + Object data = valueTable.getValueAt(i, 0); + try { + if (data != null) { + Double d = Double.parseDouble(data.toString()); + ((NumberArray) ad).add(d); } + } catch (NumberFormatException e) { + JOptionPane.showMessageDialog( + this, + "Invalid double value \"" + data + "\" in row " + (i + 1), + "Invalid number", + JOptionPane.ERROR_MESSAGE); + return null; } - return arr; } + break; case "String": - { - String[] arr = new String[n]; - n = 0; - for (int i = 0; i < valueTable.getRowCount(); i++) { - Object data = valueTable.getValueAt(i, 0); - if (data != null) { - arr[n] = data.toString(); - n++; - } + ad = new StringArray(); + for (int i = 0; i < valueTable.getRowCount(); i++) { + Object data = valueTable.getValueAt(i, 0); + if (data != null) { + ((StringArray) ad).add(data.toString()); } - return arr; } - + break; default: throw new IllegalArgumentException(arrayType + " is not a valid array type"); } + return ad; } // Variables declaration - do not modify private javax.swing.JButton addRowButton; diff --git a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/PreferencesDialog.java b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/PreferencesDialog.java index 591b020ef5..5f3e729cfe 100644 --- a/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/PreferencesDialog.java +++ b/networktables/OutlineViewer/src/main/java/edu/wpi/first/tableviewer/dialog/PreferencesDialog.java @@ -2,8 +2,12 @@ package edu.wpi.first.tableviewer.dialog; import edu.wpi.first.tableviewer.OutlineFrame; -import edu.wpi.first.wpilibj.networktables.NetworkTable; -import edu.wpi.first.wpilibj.networktables.NetworkTablesJNI; +import edu.wpi.first.wpilibj.networktables2.NetworkTableNode; +import edu.wpi.first.wpilibj.networktables2.client.NetworkTableClient; +import edu.wpi.first.wpilibj.networktables2.server.NetworkTableServer; +import edu.wpi.first.wpilibj.networktables2.stream.IOStreamFactory; +import edu.wpi.first.wpilibj.networktables2.stream.IOStreamProvider; +import edu.wpi.first.wpilibj.networktables2.stream.SocketStreams; import java.util.prefs.Preferences; import javax.swing.JOptionPane; @@ -110,28 +114,24 @@ public class PreferencesDialog extends javax.swing.JDialog { private void startButtonPressed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startButtonPressed try { - NetworkTablesJNI.setLogger(new NetworkTablesJNI.LoggerFunction() { - public void apply(int level, String file, int line, String msg) { - System.err.println(msg); - } - }, 0); + NetworkTableNode node; if (evt.getSource() == clientButton) { // start client String host = hostField.getText(); if (host.isEmpty()) { return; } - NetworkTable.setIPAddress(host); - NetworkTable.setClientMode(); - NetworkTable.initialize(); + IOStreamFactory streamFactory = SocketStreams.newStreamFactory(host, 1735); + NetworkTableClient client = new NetworkTableClient(streamFactory); + client.reconnect(); + node = client; prefs.put("host", host); } else { // start server - NetworkTable.setIPAddress(""); - NetworkTable.setServerMode(); - NetworkTable.initialize(); + IOStreamProvider streamProvider = SocketStreams.newStreamProvider(1735); + node = new NetworkTableServer(streamProvider); prefs.put("host", ""); } prefs.putBoolean("metadata", metadataBox.isSelected()); - new OutlineFrame("Network Table Viewer", metadataBox.isSelected()).setVisible(true); + new OutlineFrame("Network Table Viewer", node, metadataBox.isSelected()).setVisible(true); dispose(); } catch (Exception e) { JOptionPane.showMessageDialog(null, e.getClass() + ": " + e.getMessage(), "Error creating table node", JOptionPane.ERROR_MESSAGE); diff --git a/networktables/java/build.gradle b/networktables/java/build.gradle index 4b1170cd0a..617f7cf45c 100644 --- a/networktables/java/build.gradle +++ b/networktables/java/build.gradle @@ -1,33 +1,9 @@ apply plugin: 'java' -apply plugin: 'maven-publish' group = "edu.wpi.frc.wpilib" version = "2.0" archivesBaseName = 'NetworkTables' -publishing { - publications { - maven(MavenPublication) { - from components.java - artifact (networktablesSource) { - classifier = 'sources' - } - artifact (networktablesJavadoc) { - classifier = 'javadoc' - } - - groupId 'edu.wpi.first.wpilib.networktables.java' - artifactId 'NetworkTables' - version '0.1.0-SNAPSHOT' - } - } - repositories { - maven { - url "file://${System.properties['user.home']}/releases/maven" - } - } -} - sourceSets { main { java { diff --git a/networktables/ntcore b/networktables/ntcore index d9fa086ec0..75358e6c45 160000 --- a/networktables/ntcore +++ b/networktables/ntcore @@ -1 +1 @@ -Subproject commit d9fa086ec0fad8ff57bc527a8d71979af04017df +Subproject commit 75358e6c45805e709ff594e1bc6cbb96cbd7205c diff --git a/settings.gradle b/settings.gradle index 1edf81a743..e8305e7bfe 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,4 +1,5 @@ include 'networktables:ntcore', + 'networktables:java', 'networktables:OutlineViewer', 'hal', 'wpilibj',