package Savage.ShipsMilitary.CarrierSaratogaUnitedStates;

import org.web3d.x3d.jsail.Core.*;
import org.web3d.x3d.jsail.fields.*;
import org.web3d.x3d.jsail.Geometry3D.*;
import org.web3d.x3d.jsail.Grouping.*;
import org.web3d.x3d.jsail.Interpolation.*;
import org.web3d.x3d.jsail.Navigation.*;
import org.web3d.x3d.jsail.Rendering.*;
import org.web3d.x3d.jsail.Shape.*;
import org.web3d.x3d.jsail.Sound.*;
import org.web3d.x3d.jsail.Time.*;

// Javadoc metadata annotations follow, see below for X3DJSAIL Java source code.
/**
 * <p> Simulating the flying of a harrier on USS Saratoga. </p>
 <p> Related links: Catalog page <a href="../../../../ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlyingIndex.html" target="_blank">HarrierFlying</a>,  source <a href="../../../../ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying.java">HarrierFlying.java</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dResources.html" target="_blank">X3D Resources</a>, <a href="https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html" target="_blank">X3D Scene Authoring Hints</a>, and <a href="https://www.web3d.org/x3d/content/X3dTooltips.html" target="_blank">X3D Tooltips</a>. </p>
	<table style="color:black; border:0px solid; border-spacing:10px 0px;">
        <caption>Scene Meta Information</caption>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center; padding:10px 0px;"><i>meta tags</i></td>
			<td style="text-align:left;   padding:10px 0px;">&nbsp; Document Metadata </td>
		</tr>

		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> title </i> </td>
			<td> <a href="../../../../ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying.x3d">HarrierFlying.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> description </i> </td>
			<td> Simulating the flying of a harrier on USS Saratoga </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> creator </i> </td>
			<td> Daniel Siew and Chun Hock Sng </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> created </i> </td>
			<td> 16 February 2001 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> modified </i> </td>
			<td> 5 July 2025 </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> identifier </i> </td>
			<td> <a href="https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying.x3d" target="_blank">https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying.x3d</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> generator </i> </td>
			<td> X3D-Edit 3.2, <a href="https://www.web3d.org/x3d/tools/X3D-Edit" target="_blank">https://www.web3d.org/x3d/tools/X3D-Edit</a> </td>
		</tr>
		<tr>
			<td style="text-align:right; vertical-align: text-top;"> <i> license </i> </td>
			<td> <a href="../../../../ShipsMilitary/CarrierSaratogaUnitedStates/../../license.html">../../license.html</a> </td>
		</tr>
		<tr style="background-color:silver; border-color:silver;">
			<td style="text-align:center;" colspan="2">  &nbsp; </td>
		</tr>
	</table>

	<p>
		This program uses the
		<a href="https://www.web3d.org/specifications/java/X3DJSAIL.html" target="_blank">X3D Java Scene Access Interface Library (X3DJSAIL)</a>.
		It has been produced using the 
		<a href="https://www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">X3dToJava.xslt</a>
		stylesheet
	       (<a href="https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/stylesheets/X3dToJava.xslt" target="_blank">version control</a>)
                which is used to create Java source code from an original <code>.x3d</code> model.
	</p>

	* @author Daniel Siew and Chun Hock Sng
 */

public class HarrierFlying
{
	/** Default constructor to create this object. */
	public HarrierFlying ()
	{
	  initialize();
	}

	/** Create and initialize the X3D model for this object. */
	public final void initialize()
	{
            try { // catch-all
  x3dModel = new X3D().setProfile(X3D.PROFILE_IMMERSIVE).setVersion(X3D.VERSION_3_0)
  .setHead(new head()
    .addMeta(new meta().setName(meta.NAME_TITLE      ).setContent("HarrierFlying.x3d"))
    .addMeta(new meta().setName(meta.NAME_DESCRIPTION).setContent("Simulating the flying of a harrier on USS Saratoga"))
    .addMeta(new meta().setName(meta.NAME_CREATOR    ).setContent("Daniel Siew and Chun Hock Sng"))
    .addMeta(new meta().setName(meta.NAME_CREATED    ).setContent("16 February 2001"))
    .addMeta(new meta().setName(meta.NAME_MODIFIED   ).setContent("5 July 2025"))
    .addMeta(new meta().setName(meta.NAME_IDENTIFIER ).setContent("https://www.web3d.org/x3d/content/examples/Savage/ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying.x3d"))
    .addMeta(new meta().setName(meta.NAME_GENERATOR  ).setContent("X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit"))
    .addMeta(new meta().setName(meta.NAME_LICENSE    ).setContent("../../license.html")))
  .setScene(new Scene()
    .addChild(new WorldInfo().setTitle("HarrierFlying.x3d"))
    .addChild(new Group("AV8")
      .addChild(new Transform("Fighter").setScale(0.7,0.7,0.7).setTranslation(147.0,2.1,-40.0)
        .addChild(new Transform("Fighter1Roll")
          .addChild(new Transform("Fighter1Pitch")
            .addChild(new Transform()
              .addChild(new Transform().setRotation(0.0,1.0,0.0,-1.57)
                .addChild(new Shape("Fuselage")
                  .setGeometry(new IndexedFaceSet().setCreaseAngle(1.78).setSolid(false).setCoordIndex(getIndexedFaceSet_10_11_coordIndex())
                    .setCoord(new Coordinate("BI_COORD").setPoint(getBI_COORD_11_11_point())))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material())))
                .addChild(new Shape("LeftWing")
                  .setGeometry(new IndexedFaceSet().setConvex(false).setCreaseAngle(0.78).setCoordIndex(new int[] {0,1,2,3,4,5,6,7,-1,8,9,10,11,12,13,14,15,-1,0,8,15,7,-1,0,1,9,8,-1,1,2,10,9,-1,2,3,11,10,-1,3,4,12,11,-1,4,5,13,12,-1,5,6,14,13,-1,6,7,15,14})
                    .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {-0.6,0.6,-1.6,-0.6,0.5,-1.5,-0.6,0.45,-1.4,-0.6,0.4,-1.2,-0.6,0.4,0.4,-0.6,0.34,0.9,-0.6,0.42,1.4,-0.6,0.5,2.05,-4.62,0.08,1.58,-4.62,0.05,1.62,-4.62,0.02,1.68,-4.62,-0.02,1.75,-4.62,-0.02,1.98,-4.62,0.02,2.18,-4.62,0.03,2.33,-4.62,0.05,2.42}))))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material())))
                .addChild(new Transform().setCenter(0.0,1.0,0.0).setTranslation(-2.0,0.25,1.5)
                  .addChild(new Transform().setRotation(1.0,0.0,0.0,-1.57)
                    .addChild(new Shape()
                      .setGeometry(new Cylinder().setRadius(.16))
                      .setAppearance(new Appearance()
                        .setMaterial(new Material())))))
                .addChild(new Shape("RightWing")
                  .setGeometry(new IndexedFaceSet().setConvex(false).setCreaseAngle(0.78).setSolid(false).setCoordIndex(new int[] {0,1,2,3,4,5,6,7,-1,8,9,10,11,12,13,14,15,-1,0,8,15,7,-1,0,1,9,8,-1,1,2,10,9,-1,2,3,11,10,-1,3,4,12,11,-1,4,5,13,12,-1,5,6,14,13,-1,6,7,15,14})
                    .setCoord(new Coordinate().setPoint(new MFVec3f(new double[] {0.6,0.6,-1.6,0.6,0.5,-1.5,0.6,0.45,-1.4,0.6,0.4,-1.2,0.6,0.4,0.4,0.6,0.34,0.9,0.6,0.42,1.4,0.6,0.5,2.05,4.62,0.08,1.58,4.62,0.05,1.62,4.62,0.02,1.68,4.62,-0.02,1.75,4.62,-0.02,1.98,4.62,0.02,2.18,4.62,0.03,2.33,4.62,0.05,2.42}))))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material())))
                .addChild(new Transform().setCenter(0.0,1.0,0.0).setTranslation(2.0,0.25,1.5)
                  .addChild(new Transform().setRotation(1.0,0.0,0.0,-1.57)
                    .addChild(new Shape()
                      .setGeometry(new Cylinder().setRadius(.16))
                      .setAppearance(new Appearance()
                        .setMaterial(new Material())))))
                .addChild(new Shape("Caps")
                  .setGeometry(new IndexedFaceSet().setConvex(false).setCreaseAngle(0.5).setSolid(false).setCoordIndex(new int[] {232,216,277,233,-1,230,234,221,220,-1,60,59,67,66,-1,68,76,144,69,-1,17,108,107,256,187,-1,17,187,186,179,2,9,16,-1,161,191,190,193,162,160,-1})
                    .setCoord(new Coordinate().setUSE("BI_COORD")))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.125,0.125,0.125))))
                .addChild(new Shape("Cockpit")
                  .setGeometry(new IndexedFaceSet().setCreaseAngle(0.5).setSolid(false).setCoordIndex(new int[] {9,300,10,-1,10,300,301,-1,16,17,112,302,-1,108,107,303,-1,301,304,305,306,-1,306,305,186,179,-1,304,307,257,305,-1,305,257,187,186,-1,301,306,10,-1,2,308,309,-1,302,112,307,304,-1,9,16,302,300,-1,300,302,304,301,-1,303,107,256,-1})
                    .setCoord(new Coordinate().setUSE("BI_COORD")))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.0,0.0,1.0).setTransparency(0.7))))
                .addChild(new Shape("AirIntake")
                  .setGeometry(new IndexedFaceSet().setCreaseAngle(0.5).setCoordIndex(new int[] {14,40,49,-1,14,49,52,47,15,-1,215,205,185,-1,184,211,212,215,185,-1})
                    .setCoord(new Coordinate().setUSE("BI_COORD")))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material().setDiffuseColor(0.063,0.063,0.063))))
                .addChild(new Shape("Tail")
                  .setGeometry(new IndexedFaceSet().setCreaseAngle(0.5).setCoordIndex(new int[] {136,139,137,-1,137,139,136,-1,273,139,137,-1,137,139,273,-1,131,278,135,-1,135,278,131,-1,278,139,135,-1,135,139,278,-1,278,279,139,-1,139,279,278,-1,31,285,286,-1,286,285,31,-1,29,31,286,-1,286,31,29,-1,264,29,286,-1,286,29,264,-1,288,289,290,291,30,124,-1,124,30,291,290,289,288,-1,292,288,124,125,-1,125,124,288,292,-1,153,293,292,125,-1,125,292,293,153,-1,278,279,139,-1,139,279,278,-1,278,139,135,-1,135,139,278,-1,131,278,135,-1,135,278,131,-1,288,289,290,291,30,124,-1,124,30,291,290,289,288,-1,292,288,124,125,-1,125,124,288,292,-1,153,293,292,125,-1,125,292,293,153,-1,168,298,299,-1,299,298,168,-1,123,168,299,-1,299,168,123,-1,122,123,299,-1,299,123,122,-1})
                    .setCoord(new Coordinate().setUSE("BI_COORD")))
                  .setAppearance(new Appearance()
                    .setMaterial(new Material())))
                .addChild(new Transform("Pilot").setTranslation(0.0,0.5,-4.0)
                  .addChild(new Shape()
                    .setGeometry(new Sphere().setRadius(0.22))
                    .setAppearance(new Appearance()
                      .setMaterial(new Material().setDiffuseColor(0.5,1.0,0.2))))
                  .addChild(new Transform().setScale(1.3,1.6,1.0).setTranslation(0.0,-0.1,-0.1)
                    .addChild(new Shape()
                      .setGeometry(new Sphere().setRadius(0.15))
                      .setAppearance(new Appearance()
                        .setMaterial(new Material().setDiffuseColor(1.0,.8,.2)))))
                  .addChild(new Viewpoint().setDescription("Cockpit View").setPosition(0.0,2.0,5.0)))
                .addChild(new Group("Wheels")
                  .addChild(new Transform("FrontWheel").setCenter(0.0,1.0,0.0).setTranslation(0.0,-.96,-3.55)
                    .addChild(new Transform().setRotation(1.0,0.0,0.0,3.14).setTranslation(0.0,-.3,0.0)
                      .addChild(new Shape()
                        .setGeometry(new Cone().setBottomRadius(.1).setHeight(.8))
                        .setAppearance(new Appearance()
                          .setMaterial(new Material().setDiffuseColor(0.9,.9,.9)))))
                    .addChild(new Transform().setTranslation(0.0,-.7,0.0)
                      .addChild(new Shape()
                        .setGeometry(new Cylinder().setHeight(.6).setRadius(.18))
                        .setAppearance(new Appearance()
                          .setMaterial(new Material().setDiffuseColor(0.9,.9,.9)))))
                    .addChild(new Transform().setRotation(1.0,0.0,0.0,1.57).setTranslation(0.0,-1.01,0.0)
                      .addChild(new Transform("BigWheel")
                        .addChild(new Transform().setRotation(0.0,0.0,1.0,1.57).setScale(0.15,0.15,0.15)
                          .addChild(new Shape()
                            .setGeometry(new Extrusion().setBeginCap(false).setConvex(false).setCreaseAngle(1.57).setCrossSection(new MFVec2f(new double[] {1.00,0.00,0.92,-0.38,0.71,-0.71,0.38,-0.92,0.00,-1.00,-0.38,-0.92,-0.71,-0.71,-0.92,-0.38,-1.00,-0.00,-0.92,0.38,-0.71,0.71,-0.38,0.92,0.00,1.00,0.38,0.92,0.71,0.71,0.92,0.38,1.00,0.00})).setEndCap(false).setSpine(new MFVec3f(new double[] {2.00,0.0,0.00,1.85,0.0,0.77,1.41,0.0,1.41,0.77,0.0,1.85,0.00,0.0,2.00,-0.77,0.0,1.85,-1.41,0.0,1.41,-1.85,0.0,0.77,-2.00,0.0,0.00,-1.85,0.0,-0.77,-1.41,0.0,-1.41,-0.77,0.0,-1.85,0.00,0.0,-2.00,0.77,0.0,-1.85,1.41,0.0,-1.41,1.85,0.0,-0.77,2.00,0.0,0.00})))
                            .setAppearance(new Appearance()
                              .setMaterial(new Material().setDiffuseColor(0.1,0.1,0.1)))))
                        .addChild(new Transform().setRotation(0.0,0.0,1.0,1.57)
                          .addChild(new Shape()
                            .setGeometry(new Cylinder().setHeight(.2).setRadius(.15))
                            .setAppearance(new Appearance()
                              .setMaterial(new Material().setDiffuseColor(.8,.8,.8))))))))
                  .addChild(new Transform("BackWheel").setCenter(0.0,1.0,0.0).setTranslation(0.0,-.96,.65)
                    .addChild(new Shape()
                      .setGeometry(new Cylinder().setRadius(.07))
                      .setAppearance(new Appearance()
                        .setMaterial(new Material().setDiffuseColor(0.9,.9,.9))))
                    .addChild(new Transform().setTranslation(0.0,-1.01,0.0)
                      .addChild(new Transform().setRotation(0.0,0.0,1.0,1.57)
                        .addChild(new Shape()
                          .setGeometry(new Cylinder().setHeight(.5).setRadius(.07))
                          .setAppearance(new Appearance()
                            .setMaterial(new Material().setDiffuseColor(.8,.8,.8))))))
                    .addChild(new Transform().setRotation(1.0,0.0,0.0,1.57).setTranslation(.25,-1.01,0.0)
                      .addChild(new Transform().setUSE("BigWheel")))
                    .addChild(new Transform().setRotation(1.0,0.0,0.0,1.57).setTranslation(-.25,-1.01,0.0)
                      .addChild(new Transform().setUSE("BigWheel"))))
                  .addChild(new Transform("RightWingWheel").setCenter(0.0,1.0,0.0).setTranslation(-2.0,-.66,.69)
                    .addChild(new Shape()
                      .setGeometry(new Cylinder().setRadius(.07))
                      .setAppearance(new Appearance()
                        .setMaterial(new Material().setDiffuseColor(0.9,.9,.9))))
                    .addChild(new Transform().setRotation(1.0,0.0,0.0,1.57).setScale(.7,.7,.7).setTranslation(0.0,-1.45,0.0)
                      .addChild(new Transform().setUSE("BigWheel")))
                    .addChild(new Transform().setTranslation(0.0,-1.22,0.0)
                      .addChild(new Shape()
                        .setGeometry(new Cylinder().setHeight(.45).setRadius(.15))
                        .setAppearance(new Appearance()
                          .setMaterial(new Material().setDiffuseColor(0.9,.9,.9))))))
                  .addChild(new Transform("LeftWingWheel").setCenter(0.0,1.0,0.0).setTranslation(2.0,-.66,.69)
                    .addChild(new Shape()
                      .setGeometry(new Cylinder().setRadius(.07))
                      .setAppearance(new Appearance()
                        .setMaterial(new Material().setDiffuseColor(0.9,.9,.9))))
                    .addChild(new Transform().setRotation(1.0,0.0,0.0,1.57).setScale(.7,.7,.7).setTranslation(0.0,-1.45,0.0)
                      .addChild(new Transform().setUSE("BigWheel")))
                    .addChild(new Transform().setTranslation(0.0,-1.22,0.0)
                      .addChild(new Shape()
                        .setGeometry(new Cylinder().setHeight(.45).setRadius(.15))
                        .setAppearance(new Appearance()
                          .setMaterial(new Material().setDiffuseColor(0.9,.9,.9)))))))
                .addChild(new Viewpoint().setDescription("LeftWingView").setPosition(-2.0,2.0,10.0))
                .addChild(new Viewpoint().setDescription("RearView").setPosition(0.0,2.0,10.0))
                .addChild(new Viewpoint().setDescription("RightWingView").setPosition(2.0,2.0,10.0)))))))
      .addChild(new PositionInterpolator("fightermover").setKey(new double[] {0.0,0.1,0.15,0.2,0.3,0.4,0.5,0.64,0.7,0.76,0.86,0.91,0.93,0.96,1.0}).setKeyValue(new MFVec3f(new double[] {137.0,2.6,5.0,170.0,2.6,-25.0,237.0,8.0,-25.0,280.0,40.0,-25.0,330.0,60.0,0.0,280.0,70.0,25.0,150.0,70.0,25.0,-20.0,70.0,25.0,-70.0,55.0,0.0,-20.0,40.0,-30.0,100.0,25.0,-35.0,145.0,10.0,-38.0,147.0,2.6,-40.0,147.0,-2.5,-40.0,137.0,-2.5,5.0})))
      .addChild(new TimeSensor("clock").setCycleInterval(60).setLoop(true))
      .addChild(new OrientationInterpolator("GearPath").setKey(new double[] {0.0,.1,.15,.2,.3,.4,.5,.6,.7,.76,.86,.9,.93,.96,1.0}).setKeyValue(new MFRotation(new double[] {1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,-0.78,1.0,0.0,0.0,-1.57,1.0,0.0,0.0,-1.57,1.0,0.0,0.0,-1.57,1.0,0.0,0.0,-1.57,1.0,0.0,0.0,-0.78,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0})))
      .addChild(new OrientationInterpolator("WheelRotation").setKey(new double[] {0.0,.1,.15,.2,.3,.4,.5,.6,.7,.76,.86,.9,.93,1.0}).setKeyValue(new MFRotation(new double[] {1.0,0.0,0.0,-4.71,1.0,0.0,0.0,-6.28,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,-1.57,1.0,0.0,0.0,-3.14,1.0,0.0,0.0,-4.71,1.0,0.0,0.0,-6.28,1.0,0.0,0.0,0.0,1.0,0.0,0.0,-1.57,1.0,0.0,0.0,-3.14})))
      .addChild(new OrientationInterpolator("fighteryawer").setKey(new double[] {0.0,0.1,0.2,0.3,0.35,0.4,0.43,0.45,0.47,0.5,0.6,0.7}).setKeyValue(new MFRotation(new double[] {1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.1,1.0,0.0,0.0,0.1,1.0,0.0,0.0,0.1,1.0,0.0,0.0,0.785,1.0,0.0,0.0,3.14,1.0,0.0,0.0,4.71,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0})))
      .addChild(new OrientationInterpolator("fighterbanker").setKey(new double[] {0.0,0.05,0.1,0.14,0.2,0.3,0.4,0.5,0.64,0.7,0.76,0.86,0.9,0.93,0.96,1.0}).setKeyValue(new MFRotation(new double[] {0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.785,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-1.57,0.0,1.0,0.0,-3.14,0.0,1.0,0.0,-3.14,0.0,1.0,0.0,-3.14,0.0,1.0,0.0,-4.71,0.0,1.0,0.0,0.0,0.0,1.0,0.0,-0.2,0.0,1.0,0.0,0.2,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0})))
      .addChild(new OrientationInterpolator("fighterpitch").setKey(new double[] {0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.76,0.86,0.9,0.93,0.96,1.0}).setKeyValue(new MFRotation(new double[] {0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.3,0.0,0.0,1.0,0.3,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,-0.3,0.0,0.0,1.0,-0.3,0.0,0.0,1.0,-0.3,0.0,0.0,1.0,0.1,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0,0.0,0.0,1.0,0.0})))
      .addChild(new Sound().setMaxBack(100).setMaxFront(100).setMinBack(100).setMinFront(100)
        .setSource(new AudioClip().setLoop(true).setUrl(new String[] {"../../AircraftFixedWing/AV8bHarrierUnitedStates/av8b.wav","https://www.web3d.org/x3d/content/examples/Savage/AircraftFixedWing/AV8bHarrierUnitedStates/av8b.wav"}))))
    .addChild(new ROUTE().setFromNode("clock").setFromField("fraction_changed").setToNode("fightermover").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("fightermover").setFromField("value_changed").setToNode("Fighter").setToField("set_translation"))
    .addChild(new ROUTE().setFromNode("clock").setFromField("fraction_changed").setToNode("fighterbanker").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("clock").setFromField("fraction_changed").setToNode("fighteryawer").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("fighteryawer").setFromField("value_changed").setToNode("Fighter1Roll").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("fighterbanker").setFromField("value_changed").setToNode("Fighter1Pitch").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("clock").setFromField("fraction_changed").setToNode("WheelRotation").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("WheelRotation").setFromField("value_changed").setToNode("BigWheel").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("clock").setFromField("fraction_changed").setToNode("GearPath").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("GearPath").setFromField("value_changed").setToNode("FrontWheel").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("GearPath").setFromField("value_changed").setToNode("RightWingWheel").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("GearPath").setFromField("value_changed").setToNode("LeftWingWheel").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("GearPath").setFromField("value_changed").setToNode("BackWheel").setToField("set_rotation"))
    .addChild(new ROUTE().setFromNode("clock").setFromField("fraction_changed").setToNode("fighterpitch").setToField("set_fraction"))
    .addChild(new ROUTE().setFromNode("fighterpitch").setFromField("value_changed").setToNode("Fighter").setToField("set_rotation")));
            }
            catch (Exception ex)
            {       
                System.err.println ("*** Further hints on X3DJSAIL errors and exceptions at");
                System.err.println ("*** https://www.web3d.org/specifications/java/X3DJSAIL.html");
                throw (ex);
            }
	}
	// end of initialize() method

		/** Define subarrays using type int[] */
		private int[] getIndexedFaceSet_10_11_coordIndex_1()
		{
			int[] value = {0,1,2,3,-1,4,5,6,7,-1,6,8,9,10,-1,5,11,8,6,-1,11,12,13,8,-1,12,14,15,13,-1,9,8,13,16,-1,16,13,15,17,-1,29,30,31,-1,32,33,5,4,-1,34,35,33,32,-1,33,36,11,5,-1,35,37,36,33,-1,36,38,12,11,-1,37,39,38,36,-1,38,40,14,12,-1,39,41,42,40,38,-1,43,0,3,-1,44,4,7,-1,44,32,4,-1,43,45,46,-1,47,48,17,15,-1,49,50,51,52,-1,40,42,50,49,-1,50,42,54,-1,42,41,55,-1,42,55,54,-1,54,56,50,-1,51,50,56,-1,57,58,59,60,-1,56,61,51,-1,48,62,51,61,-1,63,57,64,-1,48,61,65,-1,64,57,60,66,-1,67,68,69,70,66,-1,71,72,73,74,-1,67,75,76,68,-1,77,78,79,80,-1,55,81,78,77,-1,78,82,83,79,-1,81,84,82,78,-1,82,85,86,83,-1,84,87,85,82,-1,85,88,89,86,-1,87,90,88,85,-1,56,54,80,-1,54,77,80,-1,54,55,77,-1,48,65,17,-1,91,92,93,94,-1,63,95,96,97,-1,92,98,99,93,-1,100,101,98,92,-1,98,102,103,99,-1,101,104,102,98,-1,102,105,106,103,-1,107,108,97,109,-1,72,71,110,111,-1,112,17,91,-1,17,65,91,-1,63,64,95,-1,64,66,95,-1,66,113,114,95,-1,113,66,115,116,114,-1,117,118,119,120,-1,121,122,123,124,125,-1,118,126,127,119,-1,128,129,118,117,-1,130,131,132,133,-1,129,134,126,118,-1,131,135,136,132,-1,136,137,138,-1,139,136,135,-1,124,123,30,-1,127,126,140,-1,126,141,140,-1,126,142,141,-1,140,143,127,-1,69,144,145,70,-1,146,70,145,147,148,-1,148,147,145,144,-1,88,90,149,-1,89,88,149,-1,130,133,76,-1,144,76,133,-1,128,117,150,-1,105,151,106,-1,152,153,154,-1,154,155,152,-1,156,117,120,-1,157,158,144,155,-1,156,150,117,-1,159,143,140,160,161,-1,140,141,162,160,-1,141,142,110,162,-1,161,160,163,164,-1,160,162,165,163,-1,162,110,166,165,-1,164,163,165,166,-1,168,30,123,-1,174,10,175,176,-1,176,175,177,178,-1,10,179,180,175,-1,175,180,181,177,-1,180,182,183,181,-1,182,184,185,183,-1,186,182,180,179,-1,187,184,182,186,-1,188,189,190,191,-1,74,73,192,161,-1,190,193,137,194,-1,192,111,195,196,-1,161,192,196,197,159,-1,198,199,200,-1,178,177,201,202,-1,202,201,35,34,-1,177,181,203,201,-1,201,203,37,35,-1,181,183,204,203,-1,203,204,39,37,-1,183,185,205,204,-1,204,205,206,41,39,-1,3,207,43,-1,207,208,43,-1,208,209,43,-1,209,45,43,-1,184,187,210,211,-1,212,213,214,215,-1,215,214,206,205,-1,20,216,19,217,-1,218,206,214,-1,55,41,206,-1,218,55,206,-1,214,219,218,-1,219,214,213,-1,220,221,222,223,-1,213,224,219,-1,224,213,225,210,-1,226,223,227,-1,228,224,210,-1,229,198,200,-1,230,220,223,226,-1,230,231,232,233,234,-1,229,200,235,-1,236,237,238,239,-1,240,241,242,243,-1,243,242,81,55,-1,241,239,244,242,-1,242,244,84,81,-1,239,238,245,244,-1,244,245,87,84,-1,238,237,246,245,-1,245,246,90,87,-1,240,218,219,-1,240,243,218,-1,243,55,218,-1,187,228,210,-1,94,93,247,248,-1,249,250,53,227,-1,93,99,251,247,-1,247,251,252,253,-1,99,103,254,251,-1,251,254,255,252,-1,103,106,235,254,-1,109,249,256,107,-1,235,151,229,-1,248,187,257,-1,248,228,187,-1,53,226,227,-1,53,230,226,-1,53,258,24,230,-1,258,259,25,230,24,-1,26,259,260,261,231,-1,229,262,263,198,-1,125,124,29,264,265,-1,262,266,267,263,-1,198,263,268,269,-1,269,268,270,149,-1,271,272,273,274,-1,274,273,135,131,-1,272,137,273,-1,135,273,139,-1,30,29,124,-1,196,267,266,-1,196,195,267,-1,194,137,272,-1,266,197,196,-1,231,275,216,232,-1,260,18,275,231,261,-1,216,275,18,260,-1,149,90,246,-1,130,276,277,-1,237,269,149,-1,269,237,199,-1,199,198,269,-1,106,151,235,-1,151,280,262,229,-1,153,125,265,-1,216,260,19,-1,260,217,19,-1,230,25,26,231,-1,25,259,26,-1,281,260,259,-1,281,282,217,260,-1,282,20,217,-1,221,283,284,222,-1,221,234,283,-1,211,225,213,212,-1,211,210,225,-1,262,280,287,-1,266,262,287,-1,62,48,47,-1,52,51,62,47,-1,294,67,59,-1};
			return value;
		}
		private int[] getIndexedFaceSet_10_11_coordIndex_2()
		{
			int[] value = {58,295,294,59,-1,157,155,154,-1,148,157,154,296,-1,116,148,296,-1,169,116,115,-1,70,169,115,66,-1,146,148,116,169,-1,70,146,169,-1,158,157,148,-1,158,148,144,-1,121,125,153,-1,152,297,121,153,-1,122,121,297,-1,122,297,123,-1};
			return value;
		}


		/** Define subarrays using type double[] */
		private double[] getBI_COORD_11_11_point_1()
		{
			double[] value = {-0.35,-0.32,-6.71,-0.44,-0.17,-5.91,0.0,0.25,-5.9,0.0,0.0,-6.7,-0.35,-0.5,-6.7,-0.45,-0.5,-5.9,-0.44,-0.17,-5.91,-0.35,-0.32,-6.71,-0.44,0.11,-5.01,-0.32,0.23,-5.0,0.0,0.25,-5.9,-0.45,-0.5,-5.0,-0.45,-0.5,-4.55,-0.44,0.25,-4.56,-0.45,-0.5,-3.93,-0.44,0.31,-4.05,-0.34,0.36,-4.55,-0.26,0.57,-3.55,0.6,0.54,0.65,0.62,0.53,1.09,0.7,0.5,2.05,4.62,0.05,2.42,4.62,0.08,1.58,3.79,0.18,0.71,0.69,0.59,-0.95,0.64,0.57,-0.27,0.64,0.57,0.0,2.78,0.32,0.0,1.45,0.49,-0.92,0.19,0.79,4.91,0.0,0.85,6.5,0.11,0.79,6.16,-0.33,-0.54,-6.7,-0.34,-0.68,-5.9,0.0,-0.7,-6.7,0.0,-0.85,-5.9,-0.3,-0.8,-5.0,0.0,-0.95,-5.0,-0.3,-0.8,-4.55,0.0,-0.95,-4.55,-0.3,-0.8,-3.9,0.0,-0.95,-3.55,-0.3,-0.8,-3.55,0.0,-0.43,-7.22,0.0,-0.43,-7.22,0.0,-0.7,-6.7,-0.33,-0.54,-6.7,-0.69,0.28,-4.03,-0.83,0.5,-3.58,-0.89,-0.64,-3.91,-0.93,-0.63,-3.54,-1.1,0.0,-3.55,-1.0,-0.25,-3.95,0.75,0.6,-1.6,-0.65,-0.7,-2.6,0.0,-0.95,-1.8,-1.13,-0.35,-2.63,-1.13,0.25,-2.62,-1.13,-0.35,-2.63,-1.15,-0.35,-1.6,-1.15,0.25,-1.6,-1.13,0.25,-2.62,-0.96,0.25,-3.57,-0.8,0.6,-2.6,-0.8,0.25,-1.6,-0.8,0.6,-2.6,-0.85,0.25,-0.95,-0.85,-0.35,-0.95,-0.9,-0.35,0.65,-0.9,0.25,0.65,-0.87,0.25,0.0,0.03,0.45,7.14,0.22,0.57,7.14,0.22,0.68,7.14,0.03,0.8,7.14,-0.65,-0.35,0.65,-0.65,-0.35,1.1,-0.46,-0.85,-1.8,-0.5,-0.85,-1.6,-0.8,-0.35,-1.6,-0.75,-0.35,-1.8,0.0,-0.95,-1.6,-0.55,-0.84,-0.95,-0.85,-0.35,-0.95,0.0,-0.95,-0.95,-0.33,-0.88,0.65,-0.65,-0.35,0.65,0.0,-0.95,0.65,-0.33,-0.88,1.1,-0.65,-0.35,1.1,0.0,-0.95,1.1,-0.69,0.68,-2.61,-0.41,0.84,-1.6,0.0,0.95,-1.6,0.0,0.85,-2.65,-0.75,0.6,-1.6,-0.41,0.84,-1.6,-0.69,0.68,-2.61,-0.36,0.86,-0.95,0.0,0.95,-0.95};
			return value;
		}
		private double[] getBI_COORD_11_11_point_2()
		{
			double[] value = {-0.75,0.6,-1.6,-0.67,0.64,-0.95,-0.34,0.85,0.0,0.0,0.92,0.0,-0.55,0.7,0.0,-0.31,0.78,2.05,0.0,0.85,2.05,0.0,0.85,-3.55,-0.26,0.74,-3.55,0.0,0.85,-2.65,0.0,0.4,6.87,0.25,0.55,6.87,-0.26,0.74,-3.55,-0.69,0.59,-0.95,-0.67,0.64,-0.95,-0.64,0.57,-0.27,-0.55,0.7,0.0,-0.65,0.35,3.45,-0.55,0.35,4.0,-0.4,0.74,4.01,-0.49,0.72,3.51,-0.2,0.8,4.0,-0.2,0.8,4.55,-0.19,0.79,4.91,0.0,0.85,4.9,0.0,0.85,4.0,-0.35,0.35,4.9,-0.19,0.79,4.91,-0.53,-0.23,3.52,-0.45,-0.18,4.02,0.0,-0.6,3.55,0.0,-0.5,4.0,-0.45,-0.18,4.02,-0.53,-0.23,3.52,-0.26,-0.16,4.92,0.0,-0.35,4.9,-0.26,-0.16,4.92,0.0,0.4,6.5,-0.35,0.35,4.9,0.0,0.0,6.4,-0.25,0.7,6.5,-0.25,0.55,6.5,0.0,0.4,6.5,-0.11,0.79,6.16,-0.65,0.25,1.1,-0.65,0.25,0.65,-0.66,0.54,0.48,-0.6,0.54,0.65,-0.59,0.64,0.65,0.0,-0.6,3.55,-0.65,0.25,1.1,0.0,0.85,3.55,-0.49,0.72,3.51,0.0,0.85,3.55,-0.31,0.78,2.05,-0.7,0.5,2.05,-0.7,0.5,2.05,-0.62,0.6,1.09,-0.62,0.53,1.09,0.0,0.85,6.5,-0.25,0.7,6.87,0.0,0.85,6.87,-0.25,0.55,6.87,-0.22,0.68,7.14,-0.03,0.8,7.14,-0.22,0.57,7.14,-0.03,0.45,7.14,-1.45,0.49,-0.92,-0.11,0.79,6.16,-0.64,0.57,0.0,-2.78,0.32,0.0,-4.62,0.05,2.42,-4.62,0.08,1.58,-3.79,0.18,0.71,0.0,0.0,-6.7,0.44,-0.17,-5.91,0.35,-0.32,-6.71,0.45,-0.5,-5.9,0.35,-0.5,-6.7,0.32,0.23,-5.0,0.44,0.11,-5.01,0.45,-0.5,-5.0,0.44,0.25,-4.56,0.45,-0.5,-4.55,0.44,0.31,-4.05,0.45,-0.5,-3.93,0.34,0.36,-4.55,0.26,0.57,-3.55,0.22,0.68,7.14,0.22,0.57,7.14,0.25,0.55,6.87,0.25,0.7,6.87,0.25,0.7,6.87,0.0,0.4,6.87,0.25,0.55,6.5,0.25,0.55,6.5,0.25,0.7,6.5,0.11,0.79,6.16,0.65,0.35,3.45,0.65,0.25,1.1};
			return value;
		}
		private double[] getBI_COORD_11_11_point_3()
		{
			double[] value = {0.7,0.5,2.05,0.34,-0.68,-5.9,0.33,-0.54,-6.7,0.3,-0.8,-5.0,0.3,-0.8,-4.55,0.3,-0.8,-3.9,0.3,-0.8,-3.55,0.35,-0.32,-6.71,0.35,-0.5,-6.7,0.33,-0.54,-6.7,0.83,0.5,-3.58,0.69,0.28,-4.03,1.0,-0.25,-3.95,1.1,0.0,-3.55,0.93,-0.63,-3.54,0.89,-0.64,-3.91,0.65,0.25,1.1,0.62,0.6,1.09,0.65,-0.7,-2.6,1.13,-0.35,-2.63,1.15,0.25,-1.6,1.15,-0.35,-1.6,1.13,-0.35,-2.63,1.13,0.25,-2.62,1.13,0.25,-2.62,0.96,0.25,-3.57,0.8,0.25,-1.6,0.8,0.6,-2.6,0.8,0.6,-2.6,0.49,0.72,3.51,0.85,0.25,-0.95,0.87,0.25,0.0,0.9,0.25,0.65,0.9,-0.35,0.65,0.85,-0.35,-0.95,0.31,0.78,2.05,0.9,-0.35,0.65,0.65,-0.35,1.1,0.65,-0.35,0.65,0.85,-0.35,-0.95,0.75,-0.35,-1.8,0.8,-0.35,-1.6,0.5,-0.85,-1.6,0.46,-0.85,-1.8,0.55,-0.84,-0.95,0.33,-0.88,0.65,0.33,-0.88,1.1,0.41,0.84,-1.6,0.69,0.68,-2.61,0.69,0.68,-2.61,0.41,0.84,-1.6,0.36,0.86,-0.95,0.67,0.64,-0.95,0.75,0.6,-1.6,0.34,0.85,0.0,0.55,0.7,0.0,0.26,0.74,-3.55,0.26,0.74,-3.55,0.67,0.64,-0.95,0.55,0.7,0.0,0.59,0.64,0.65,0.66,0.54,0.48,0.4,0.74,4.01,0.55,0.35,4.0,0.2,0.8,4.55,0.2,0.8,4.0,0.19,0.79,4.91,0.35,0.35,4.9,0.45,-0.18,4.02,0.53,-0.23,3.52,0.0,-0.5,4.0,0.55,0.35,4.0,0.35,0.35,4.9,0.26,-0.16,4.92,0.45,-0.18,4.02,0.65,0.25,0.65,0.33,-0.88,1.1,0.65,-0.35,1.1,0.0,-0.6,5.95,0.0,-0.45,6.2,0.2,0.8,4.0,0.34,0.85,0.0,0.31,0.78,2.05,0.8,-0.35,-1.6,0.75,-0.35,-1.8,2.12,0.15,6.49,2.12,0.15,6.15,0.2,0.8,4.55,0.0,1.7,4.9,0.0,2.4,5.65,0.0,2.75,6.15,0.0,2.85,6.7,0.0,0.95,4.0,0.0,0.95,3.55,-0.8,-0.35,-1.6,-0.75,-0.35,-1.8,-0.34,0.85,0.0,-0.4,0.74,4.01,-2.12,0.15,6.49,-2.12,0.15,6.15};
			return value;
		}
		private double[] getBI_COORD_11_11_point_4()
		{
			double[] value = {-0.33,0.67,-5.0,0.0,0.95,-5.0,-0.34,0.81,-4.55,0.0,0.95,-3.55,0.0,1.1,-4.55,0.34,0.81,-4.55,0.33,0.67,-5.0,0.0,0.95,-3.55,0.33,0.67,-5.0,0.32,0.23,-5.0};
			return value;
		}

		/** Large attribute array: IndexedFaceSet coordIndex field, scene-graph level=10, element #11, 1061 total numbers.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFInt32 getIndexedFaceSet_10_11_coordIndex()
		{
			MFInt32 IndexedFaceSet_10_11_coordIndex = new MFInt32()/*2.finalize*/
				.append(new MFInt32(getIndexedFaceSet_10_11_coordIndex_1()))
				.append(new MFInt32(getIndexedFaceSet_10_11_coordIndex_2()));
			return IndexedFaceSet_10_11_coordIndex;
		}
		/** Large attribute array: Coordinate DEF='BI_COORD' point field, scene-graph level=11, element #11, 930 total numbers made up of 310 3-tuple values.
		 * Reassemble split array as single method to improve readability and runnability.
		 * Provide large array values via separate methods, hoping to avoid 'code too large' Java compilation errors. 
		 * Individual Java methods (including aggregated initializations) are limited to 64KB.
		 * @see https://stackoverflow.com/questions/2407912/code-too-large-compilation-error-in-java
		 * @see https://stackoverflow.com/questions/11437905/java-too-many-constants-jvm-error
		 */
		private MFVec3f getBI_COORD_11_11_point()
		{
			MFVec3f BI_COORD_11_11_point = new MFVec3f()/*2.finalize*/
				.append(new MFVec3f(getBI_COORD_11_11_point_1()))
				.append(new MFVec3f(getBI_COORD_11_11_point_2()))
				.append(new MFVec3f(getBI_COORD_11_11_point_3()))
				.append(new MFVec3f(getBI_COORD_11_11_point_4()));
			return BI_COORD_11_11_point;
		}

	/** The initialized model object, created within initialize() method. */
	private X3D x3dModel;

	/** 
	 * Provide a 
	 * <a href="https://dzone.com/articles/java-copy-shallow-vs-deep-in-which-you-will-swim" target="_blank">shallow copy</a>
	 * of the X3D model.
	 * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html">X3D</a>
	 * @return HarrierFlying model
	 */
	public X3D getX3dModel()
	{	  
		return x3dModel;
	}
	   
    /** 
     * Default main() method provided for test purposes, uses CommandLine to set global ConfigurationProperties for this object.
     * @param args array of input parameters, provided as arguments
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#handleArguments-java.lang.String:A-">X3D.handleArguments(args)</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/Core/X3D.html#validationReport--">X3D.validationReport()</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html">CommandLine</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/CommandLine.html#USAGE">CommandLine.USAGE</a>
     * @see <a href="https://www.web3d.org/specifications/java/javadoc/org/web3d/x3d/jsail/ConfigurationProperties.html">ConfigurationProperties</a>
     */
    public static void main(String args[])
    {
        System.out.println("Build this X3D model, showing validation diagnostics...");
        X3D thisExampleX3dModel = new HarrierFlying().getX3dModel();
//      System.out.println("X3D model construction complete.");
	
        // next handle command line arguments
        boolean hasArguments = (args != null) && (args.length > 0);
        boolean validate = true; // default
        boolean argumentsLoadNewModel = false;
        String  fileName = new String();

        if (args != null)
        {
                for (String arg : args)
                {
                        if (arg.toLowerCase().startsWith("-v") || arg.toLowerCase().contains("validate"))
                        {
                                validate = true; // making sure
                        }
                        if (arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3D) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_CLASSICVRML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_X3DB) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_VRML97) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_EXI) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_GZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_ZIP) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_HTML) ||
                                arg.toLowerCase().endsWith(X3D.FILE_EXTENSION_XHTML))
                        {
                                argumentsLoadNewModel = true;
                                fileName = arg;
                        }
                }
        }
        if      (argumentsLoadNewModel)
                System.out.println("WARNING: \"Savage.ShipsMilitary.CarrierSaratogaUnitedStates.HarrierFlying\" model invocation is attempting to load file \"" + fileName + "\" instead of simply validating itself... file loading ignored.");
        else if (hasArguments) // if no arguments provided, this method produces usage warning
                thisExampleX3dModel.handleArguments(args);
	
        if (validate)
        {
            //  System.out.println("--- TODO fix duplicated outputs ---"); // omit when duplicated outputs problem is solved/refactored
		String validationResults = thisExampleX3dModel.validationReport();
            //  System.out.println("-----------------------------------"); // omit when duplicated outputs problem is solved/refactored
                System.out.print("Savage.ShipsMilitary.CarrierSaratogaUnitedStates.HarrierFlying self-validation test confirmation: ");
                if (!validationResults.equals("success"))
                    System.out.println();
                System.out.println(validationResults.trim());

                // experimental: test X3DJSAIL output files
                // ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying_JavaExport.* file validation is checked when building X3D Example Archives
                String filenameX3D  = "ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying_JavaExport.x3d"; 
                String filenameX3DV = "ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying_JavaExport.x3dv"; 
                String filenameJSON = "ShipsMilitary/CarrierSaratogaUnitedStates/HarrierFlying_JavaExport.json";
                thisExampleX3dModel.toFileX3D        (filenameX3D);
                thisExampleX3dModel.toFileClassicVRML(filenameX3DV);
// TODO         thisExampleX3dModel.toFileJSON       (filenameJSON);
        }
    }
}
