refactor: use property bindings in TestPlanGui
diff --git a/src/core/src/main/java/org/apache/jmeter/control/gui/TestPlanGui.java b/src/core/src/main/java/org/apache/jmeter/control/gui/TestPlanGui.java
index 49bded9..d962b5a 100644
--- a/src/core/src/main/java/org/apache/jmeter/control/gui/TestPlanGui.java
+++ b/src/core/src/main/java/org/apache/jmeter/control/gui/TestPlanGui.java
@@ -18,6 +18,7 @@
 package org.apache.jmeter.control.gui;
 
 import java.awt.BorderLayout;
+import java.util.Arrays;
 import java.util.Collection;
 
 import javax.swing.JComponent;
@@ -50,7 +51,7 @@
     private static final long serialVersionUID = 240L;
 
     /**
-     * A checkbox allowing the user to specify whether or not JMeter should do
+     * A checkbox allowing the user to specify whether JMeter should do
      * functional testing.
      */
     private final JBooleanPropertyEditor functionalMode =
@@ -80,6 +81,13 @@
         browseJar = new FileListPanel(JMeterUtils.getResString("test_plan_classpath_browse"), ".jar"); // $NON-NLS-1$ $NON-NLS-2$
         argsPanel = new ArgumentsPanel(JMeterUtils.getResString("user_defined_variables")); // $NON-NLS-1$
         init();
+        bindingGroup.addAll(
+                Arrays.asList(
+                        functionalMode,
+                        serializedMode,
+                        tearDownOnShutdown
+                )
+        );
     }
 
     /**
@@ -117,26 +125,33 @@
         return pop;
     }
 
-    /* Implements JMeterGUIComponent.createTestElement() */
     @Override
-    public TestElement createTestElement() {
-        TestPlan tp = new TestPlan();
-        modifyTestElement(tp);
-        return tp;
+    public TestElement makeTestElement() {
+        return new TestPlan();
+    }
+
+    @Override
+    public void assignDefaultValues(TestElement element) {
+        super.assignDefaultValues(element);
+        TestPlan tp = (TestPlan) element;
+        tp.setUserDefinedVariables((Arguments) argsPanel.createTestElement());
     }
 
     /* Implements JMeterGUIComponent.modifyTestElement(TestElement) */
     @Override
     public void modifyTestElement(TestElement plan) {
-        super.configureTestElement(plan);
+        super.modifyTestElement(plan);
         if (plan instanceof TestPlan) {
             TestPlan tp = (TestPlan) plan;
-            functionalMode.updateElement(tp);
-            tearDownOnShutdown.updateElement(tp);
-            serializedMode.updateElement(tp);
             // TODO: set expression to TestPlan somehow
             tp.setUserDefinedVariables((Arguments) argsPanel.createTestElement());
-            tp.setTestPlanClasspathArray(browseJar.getFiles());
+            String[] files = browseJar.getFiles();
+            if (files.length == 0) {
+                // Remove property if it is empty
+                tp.setTestPlanClasspath(null);
+            } else {
+                tp.setTestPlanClasspathArray(files);
+            }
         }
     }
 
@@ -172,9 +187,6 @@
         super.configure(el);
         if (el instanceof TestPlan) {
             TestPlan tp = (TestPlan) el;
-            functionalMode.updateUi(tp);
-            serializedMode.updateUi(tp);
-            tearDownOnShutdown.updateUi(tp);
             final JMeterProperty udv = tp.getUserDefinedVariablesAsProperty();
             if (udv != null) {
                 argsPanel.configure((Arguments) udv.getObjectValue());
@@ -208,9 +220,6 @@
     @Override
     public void clearGui() {
         super.clearGui();
-        functionalMode.reset();
-        serializedMode.reset();
-        tearDownOnShutdown.reset();
         argsPanel.clear();
         browseJar.clearFiles();
     }