[x3d-public] JSweet translation of X3DJSAIL to JavaScript: need specific design goals first

John Carlson yottzumm at gmail.com
Fri Apr 10 20:34:05 PDT 2020


A real quick copy paste of autoclass.py and some tweaks produce the
following JavaScript file (runs).  I welcome your tests. Currently, one
must add "Sync" after method call names, but I think there's a way to
override that.  You may find that running asynchronously may lead to
issues, not sure.

If this seems like a good approach, I will start work on a JavaScript
serializer.

This code ran last time I tried it.

I think we may have to put this into a module, and reference all classes
from a root. "x3d"?

var java = require('java');
java.options.push("-Djava.awt.headless=true");
java.options.push("-Xmx1000m");
//java.options.push('-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005');

java.classpath.push("X3DJSAIL.3.3.full.jar");

var CommentsBlock = java.import('org.web3d.x3d.jsail.Core.CommentsBlock');
var Anchor = java.import('org.web3d.x3d.jsail.Networking.AnchorObject');
var Appearance = java.import('org.web3d.x3d.jsail.Shape.AppearanceObject');
var Arc2D = java.import('org.web3d.x3d.jsail.Geometry2D.Arc2DObject');
var ArcClose2D =
java.import('org.web3d.x3d.jsail.Geometry2D.ArcClose2DObject');
var AudioClip = java.import('org.web3d.x3d.jsail.Sound.AudioClipObject');
var Background =
java.import('org.web3d.x3d.jsail.EnvironmentalEffects.BackgroundObject');
var BallJoint =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.BallJointObject');
var Billboard =
java.import('org.web3d.x3d.jsail.Navigation.BillboardObject');
var BlendedVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.BlendedVolumeStyleObject');
var BooleanFilter =
java.import('org.web3d.x3d.jsail.EventUtilities.BooleanFilterObject');
var BooleanSequencer =
java.import('org.web3d.x3d.jsail.EventUtilities.BooleanSequencerObject');
var BooleanToggle =
java.import('org.web3d.x3d.jsail.EventUtilities.BooleanToggleObject');
var BooleanTrigger =
java.import('org.web3d.x3d.jsail.EventUtilities.BooleanTriggerObject');
var BoundaryEnhancementVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.BoundaryEnhancementVolumeStyleObject');
var BoundedPhysicsModel =
java.import('org.web3d.x3d.jsail.ParticleSystems.BoundedPhysicsModelObject');
var Box = java.import('org.web3d.x3d.jsail.Geometry3D.BoxObject');
var CADAssembly =
java.import('org.web3d.x3d.jsail.CADGeometry.CADAssemblyObject');
var CADFace = java.import('org.web3d.x3d.jsail.CADGeometry.CADFaceObject');
var CADLayer =
java.import('org.web3d.x3d.jsail.CADGeometry.CADLayerObject');
var CADPart = java.import('org.web3d.x3d.jsail.CADGeometry.CADPartObject');
var CartoonVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.CartoonVolumeStyleObject');
var Circle2D = java.import('org.web3d.x3d.jsail.Geometry2D.Circle2DObject');
var ClipPlane =
java.import('org.web3d.x3d.jsail.Rendering.ClipPlaneObject');
var CollidableOffset =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.CollidableOffsetObject');
var CollidableShape =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.CollidableShapeObject');
var Collision =
java.import('org.web3d.x3d.jsail.Navigation.CollisionObject');
var CollisionCollection =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.CollisionCollectionObject');
var CollisionSensor =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.CollisionSensorObject');
var CollisionSpace =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.CollisionSpaceObject');
var Color = java.import('org.web3d.x3d.jsail.Rendering.ColorObject');
var ColorChaser =
java.import('org.web3d.x3d.jsail.Followers.ColorChaserObject');
var ColorDamper =
java.import('org.web3d.x3d.jsail.Followers.ColorDamperObject');
var ColorInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.ColorInterpolatorObject');
var ColorRGBA =
java.import('org.web3d.x3d.jsail.Rendering.ColorRGBAObject');
var ComposedCubeMapTexture =
java.import('org.web3d.x3d.jsail.CubeMapTexturing.ComposedCubeMapTextureObject');
var ComposedShader =
java.import('org.web3d.x3d.jsail.Shaders.ComposedShaderObject');
var ComposedTexture3D =
java.import('org.web3d.x3d.jsail.Texturing3D.ComposedTexture3DObject');
var ComposedVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.ComposedVolumeStyleObject');
var Cone = java.import('org.web3d.x3d.jsail.Geometry3D.ConeObject');
var ConeEmitter =
java.import('org.web3d.x3d.jsail.ParticleSystems.ConeEmitterObject');
var Contact =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.ContactObject');
var Contour2D = java.import('org.web3d.x3d.jsail.NURBS.Contour2DObject');
var ContourPolyline2D =
java.import('org.web3d.x3d.jsail.NURBS.ContourPolyline2DObject');
var Coordinate =
java.import('org.web3d.x3d.jsail.Rendering.CoordinateObject');
var CoordinateChaser =
java.import('org.web3d.x3d.jsail.Followers.CoordinateChaserObject');
var CoordinateDamper =
java.import('org.web3d.x3d.jsail.Followers.CoordinateDamperObject');
var CoordinateDouble =
java.import('org.web3d.x3d.jsail.NURBS.CoordinateDoubleObject');
var CoordinateInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.CoordinateInterpolatorObject');
var CoordinateInterpolator2D =
java.import('org.web3d.x3d.jsail.Interpolation.CoordinateInterpolator2DObject');
var Cylinder = java.import('org.web3d.x3d.jsail.Geometry3D.CylinderObject');
var CylinderSensor =
java.import('org.web3d.x3d.jsail.PointingDeviceSensor.CylinderSensorObject');
var DirectionalLight =
java.import('org.web3d.x3d.jsail.Lighting.DirectionalLightObject');
var DISEntityManager =
java.import('org.web3d.x3d.jsail.DIS.DISEntityManagerObject');
var DISEntityTypeMapping =
java.import('org.web3d.x3d.jsail.DIS.DISEntityTypeMappingObject');
var Disk2D = java.import('org.web3d.x3d.jsail.Geometry2D.Disk2DObject');
var DoubleAxisHingeJoint =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.DoubleAxisHingeJointObject');
var EaseInEaseOut =
java.import('org.web3d.x3d.jsail.Interpolation.EaseInEaseOutObject');
var EdgeEnhancementVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.EdgeEnhancementVolumeStyleObject');
var ElevationGrid =
java.import('org.web3d.x3d.jsail.Geometry3D.ElevationGridObject');
var EspduTransform =
java.import('org.web3d.x3d.jsail.DIS.EspduTransformObject');
var ExplosionEmitter =
java.import('org.web3d.x3d.jsail.ParticleSystems.ExplosionEmitterObject');
var Extrusion =
java.import('org.web3d.x3d.jsail.Geometry3D.ExtrusionObject');
var FillProperties =
java.import('org.web3d.x3d.jsail.Shape.FillPropertiesObject');
var FloatVertexAttribute =
java.import('org.web3d.x3d.jsail.Shaders.FloatVertexAttributeObject');
var Fog = java.import('org.web3d.x3d.jsail.EnvironmentalEffects.FogObject');
var FogCoordinate =
java.import('org.web3d.x3d.jsail.EnvironmentalEffects.FogCoordinateObject');
var FontStyle = java.import('org.web3d.x3d.jsail.Text.FontStyleObject');
var ForcePhysicsModel =
java.import('org.web3d.x3d.jsail.ParticleSystems.ForcePhysicsModelObject');
var GeneratedCubeMapTexture =
java.import('org.web3d.x3d.jsail.CubeMapTexturing.GeneratedCubeMapTextureObject');
var GeoCoordinate =
java.import('org.web3d.x3d.jsail.Geospatial.GeoCoordinateObject');
var GeoElevationGrid =
java.import('org.web3d.x3d.jsail.Geospatial.GeoElevationGridObject');
var GeoLocation =
java.import('org.web3d.x3d.jsail.Geospatial.GeoLocationObject');
var GeoLOD = java.import('org.web3d.x3d.jsail.Geospatial.GeoLODObject');
var GeoMetadata =
java.import('org.web3d.x3d.jsail.Geospatial.GeoMetadataObject');
var GeoOrigin =
java.import('org.web3d.x3d.jsail.Geospatial.GeoOriginObject');
var GeoPositionInterpolator =
java.import('org.web3d.x3d.jsail.Geospatial.GeoPositionInterpolatorObject');
var GeoProximitySensor =
java.import('org.web3d.x3d.jsail.Geospatial.GeoProximitySensorObject');
var GeoTouchSensor =
java.import('org.web3d.x3d.jsail.Geospatial.GeoTouchSensorObject');
var GeoTransform =
java.import('org.web3d.x3d.jsail.Geospatial.GeoTransformObject');
var GeoViewpoint =
java.import('org.web3d.x3d.jsail.Geospatial.GeoViewpointObject');
var Group = java.import('org.web3d.x3d.jsail.Grouping.GroupObject');
var HAnimDisplacer =
java.import('org.web3d.x3d.jsail.HAnim.HAnimDisplacerObject');
var HAnimHumanoid =
java.import('org.web3d.x3d.jsail.HAnim.HAnimHumanoidObject');
var HAnimJoint = java.import('org.web3d.x3d.jsail.HAnim.HAnimJointObject');
var HAnimSegment =
java.import('org.web3d.x3d.jsail.HAnim.HAnimSegmentObject');
var HAnimSite = java.import('org.web3d.x3d.jsail.HAnim.HAnimSiteObject');
var ImageCubeMapTexture =
java.import('org.web3d.x3d.jsail.CubeMapTexturing.ImageCubeMapTextureObject');
var ImageTexture =
java.import('org.web3d.x3d.jsail.Texturing.ImageTextureObject');
var ImageTexture3D =
java.import('org.web3d.x3d.jsail.Texturing3D.ImageTexture3DObject');
var IndexedFaceSet =
java.import('org.web3d.x3d.jsail.Geometry3D.IndexedFaceSetObject');
var IndexedLineSet =
java.import('org.web3d.x3d.jsail.Rendering.IndexedLineSetObject');
var IndexedQuadSet =
java.import('org.web3d.x3d.jsail.CADGeometry.IndexedQuadSetObject');
var IndexedTriangleFanSet =
java.import('org.web3d.x3d.jsail.Rendering.IndexedTriangleFanSetObject');
var IndexedTriangleSet =
java.import('org.web3d.x3d.jsail.Rendering.IndexedTriangleSetObject');
var IndexedTriangleStripSet =
java.import('org.web3d.x3d.jsail.Rendering.IndexedTriangleStripSetObject');
var Inline = java.import('org.web3d.x3d.jsail.Networking.InlineObject');
var IntegerSequencer =
java.import('org.web3d.x3d.jsail.EventUtilities.IntegerSequencerObject');
var IntegerTrigger =
java.import('org.web3d.x3d.jsail.EventUtilities.IntegerTriggerObject');
var IsoSurfaceVolumeData =
java.import('org.web3d.x3d.jsail.VolumeRendering.IsoSurfaceVolumeDataObject');
var KeySensor =
java.import('org.web3d.x3d.jsail.KeyDeviceSensor.KeySensorObject');
var Layer = java.import('org.web3d.x3d.jsail.Layering.LayerObject');
var LayerSet = java.import('org.web3d.x3d.jsail.Layering.LayerSetObject');
var Layout = java.import('org.web3d.x3d.jsail.Layout.LayoutObject');
var LayoutGroup =
java.import('org.web3d.x3d.jsail.Layout.LayoutGroupObject');
var LayoutLayer =
java.import('org.web3d.x3d.jsail.Layout.LayoutLayerObject');
var LinePickSensor =
java.import('org.web3d.x3d.jsail.Picking.LinePickSensorObject');
var LineProperties =
java.import('org.web3d.x3d.jsail.Shape.LinePropertiesObject');
var LineSet = java.import('org.web3d.x3d.jsail.Rendering.LineSetObject');
var LoadSensor =
java.import('org.web3d.x3d.jsail.Networking.LoadSensorObject');
var LocalFog =
java.import('org.web3d.x3d.jsail.EnvironmentalEffects.LocalFogObject');
var LOD = java.import('org.web3d.x3d.jsail.Navigation.LODObject');
var Material = java.import('org.web3d.x3d.jsail.Shape.MaterialObject');
var Matrix3VertexAttribute =
java.import('org.web3d.x3d.jsail.Shaders.Matrix3VertexAttributeObject');
var Matrix4VertexAttribute =
java.import('org.web3d.x3d.jsail.Shaders.Matrix4VertexAttributeObject');
var MetadataBoolean =
java.import('org.web3d.x3d.jsail.Core.MetadataBooleanObject');
var MetadataDouble =
java.import('org.web3d.x3d.jsail.Core.MetadataDoubleObject');
var MetadataFloat =
java.import('org.web3d.x3d.jsail.Core.MetadataFloatObject');
var MetadataInteger =
java.import('org.web3d.x3d.jsail.Core.MetadataIntegerObject');
var MetadataSet = java.import('org.web3d.x3d.jsail.Core.MetadataSetObject');
var MetadataString =
java.import('org.web3d.x3d.jsail.Core.MetadataStringObject');
var MotorJoint =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.MotorJointObject');
var MovieTexture =
java.import('org.web3d.x3d.jsail.Texturing.MovieTextureObject');
var MultiTexture =
java.import('org.web3d.x3d.jsail.Texturing.MultiTextureObject');
var MultiTextureCoordinate =
java.import('org.web3d.x3d.jsail.Texturing.MultiTextureCoordinateObject');
var MultiTextureTransform =
java.import('org.web3d.x3d.jsail.Texturing.MultiTextureTransformObject');
var NavigationInfo =
java.import('org.web3d.x3d.jsail.Navigation.NavigationInfoObject');
var Normal = java.import('org.web3d.x3d.jsail.Rendering.NormalObject');
var NormalInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.NormalInterpolatorObject');
var NurbsCurve = java.import('org.web3d.x3d.jsail.NURBS.NurbsCurveObject');
var NurbsCurve2D =
java.import('org.web3d.x3d.jsail.NURBS.NurbsCurve2DObject');
var NurbsOrientationInterpolator =
java.import('org.web3d.x3d.jsail.NURBS.NurbsOrientationInterpolatorObject');
var NurbsPatchSurface =
java.import('org.web3d.x3d.jsail.NURBS.NurbsPatchSurfaceObject');
var NurbsPositionInterpolator =
java.import('org.web3d.x3d.jsail.NURBS.NurbsPositionInterpolatorObject');
var NurbsSet = java.import('org.web3d.x3d.jsail.NURBS.NurbsSetObject');
var NurbsSurfaceInterpolator =
java.import('org.web3d.x3d.jsail.NURBS.NurbsSurfaceInterpolatorObject');
var NurbsSweptSurface =
java.import('org.web3d.x3d.jsail.NURBS.NurbsSweptSurfaceObject');
var NurbsSwungSurface =
java.import('org.web3d.x3d.jsail.NURBS.NurbsSwungSurfaceObject');
var NurbsTextureCoordinate =
java.import('org.web3d.x3d.jsail.NURBS.NurbsTextureCoordinateObject');
var NurbsTrimmedSurface =
java.import('org.web3d.x3d.jsail.NURBS.NurbsTrimmedSurfaceObject');
var OpacityMapVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.OpacityMapVolumeStyleObject');
var OrientationChaser =
java.import('org.web3d.x3d.jsail.Followers.OrientationChaserObject');
var OrientationDamper =
java.import('org.web3d.x3d.jsail.Followers.OrientationDamperObject');
var OrientationInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.OrientationInterpolatorObject');
var OrthoViewpoint =
java.import('org.web3d.x3d.jsail.Navigation.OrthoViewpointObject');
var PackagedShader =
java.import('org.web3d.x3d.jsail.Shaders.PackagedShaderObject');
var ParticleSystem =
java.import('org.web3d.x3d.jsail.ParticleSystems.ParticleSystemObject');
var PickableGroup =
java.import('org.web3d.x3d.jsail.Picking.PickableGroupObject');
var PixelTexture =
java.import('org.web3d.x3d.jsail.Texturing.PixelTextureObject');
var PixelTexture3D =
java.import('org.web3d.x3d.jsail.Texturing3D.PixelTexture3DObject');
var PlaneSensor =
java.import('org.web3d.x3d.jsail.PointingDeviceSensor.PlaneSensorObject');
var PointEmitter =
java.import('org.web3d.x3d.jsail.ParticleSystems.PointEmitterObject');
var PointLight =
java.import('org.web3d.x3d.jsail.Lighting.PointLightObject');
var PointPickSensor =
java.import('org.web3d.x3d.jsail.Picking.PointPickSensorObject');
var PointSet = java.import('org.web3d.x3d.jsail.Rendering.PointSetObject');
var Polyline2D =
java.import('org.web3d.x3d.jsail.Geometry2D.Polyline2DObject');
var PolylineEmitter =
java.import('org.web3d.x3d.jsail.ParticleSystems.PolylineEmitterObject');
var Polypoint2D =
java.import('org.web3d.x3d.jsail.Geometry2D.Polypoint2DObject');
var PositionChaser =
java.import('org.web3d.x3d.jsail.Followers.PositionChaserObject');
var PositionChaser2D =
java.import('org.web3d.x3d.jsail.Followers.PositionChaser2DObject');
var PositionDamper =
java.import('org.web3d.x3d.jsail.Followers.PositionDamperObject');
var PositionDamper2D =
java.import('org.web3d.x3d.jsail.Followers.PositionDamper2DObject');
var PositionInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.PositionInterpolatorObject');
var PositionInterpolator2D =
java.import('org.web3d.x3d.jsail.Interpolation.PositionInterpolator2DObject');
var PrimitivePickSensor =
java.import('org.web3d.x3d.jsail.Picking.PrimitivePickSensorObject');
var ProgramShader =
java.import('org.web3d.x3d.jsail.Shaders.ProgramShaderObject');
var ProjectionVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.ProjectionVolumeStyleObject');
var ProtoInstance =
java.import('org.web3d.x3d.jsail.Core.ProtoInstanceObject');
var ProximitySensor =
java.import('org.web3d.x3d.jsail.EnvironmentalSensor.ProximitySensorObject');
var QuadSet = java.import('org.web3d.x3d.jsail.CADGeometry.QuadSetObject');
var ReceiverPdu = java.import('org.web3d.x3d.jsail.DIS.ReceiverPduObject');
var Rectangle2D =
java.import('org.web3d.x3d.jsail.Geometry2D.Rectangle2DObject');
var RigidBody =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.RigidBodyObject');
var RigidBodyCollection =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.RigidBodyCollectionObject');
var ScalarChaser =
java.import('org.web3d.x3d.jsail.Followers.ScalarChaserObject');
var ScalarDamper =
java.import('org.web3d.x3d.jsail.Followers.ScalarDamperObject');
var ScalarInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.ScalarInterpolatorObject');
var ScreenFontStyle =
java.import('org.web3d.x3d.jsail.Layout.ScreenFontStyleObject');
var ScreenGroup =
java.import('org.web3d.x3d.jsail.Layout.ScreenGroupObject');
var Script = java.import('org.web3d.x3d.jsail.Scripting.ScriptObject');
var SegmentedVolumeData =
java.import('org.web3d.x3d.jsail.VolumeRendering.SegmentedVolumeDataObject');
var ShadedVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.ShadedVolumeStyleObject');
var ShaderPart =
java.import('org.web3d.x3d.jsail.Shaders.ShaderPartObject');
var ShaderProgram =
java.import('org.web3d.x3d.jsail.Shaders.ShaderProgramObject');
var Shape = java.import('org.web3d.x3d.jsail.Shape.ShapeObject');
var SignalPdu = java.import('org.web3d.x3d.jsail.DIS.SignalPduObject');
var SilhouetteEnhancementVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.SilhouetteEnhancementVolumeStyleObject');
var SingleAxisHingeJoint =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.SingleAxisHingeJointObject');
var SliderJoint =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.SliderJointObject');
var Sound = java.import('org.web3d.x3d.jsail.Sound.SoundObject');
var Sphere = java.import('org.web3d.x3d.jsail.Geometry3D.SphereObject');
var SphereSensor =
java.import('org.web3d.x3d.jsail.PointingDeviceSensor.SphereSensorObject');
var SplinePositionInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.SplinePositionInterpolatorObject');
var SplinePositionInterpolator2D =
java.import('org.web3d.x3d.jsail.Interpolation.SplinePositionInterpolator2DObject');
var SplineScalarInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.SplineScalarInterpolatorObject');
var SpotLight = java.import('org.web3d.x3d.jsail.Lighting.SpotLightObject');
var SquadOrientationInterpolator =
java.import('org.web3d.x3d.jsail.Interpolation.SquadOrientationInterpolatorObject');
var StaticGroup =
java.import('org.web3d.x3d.jsail.Grouping.StaticGroupObject');
var StringSensor =
java.import('org.web3d.x3d.jsail.KeyDeviceSensor.StringSensorObject');
var SurfaceEmitter =
java.import('org.web3d.x3d.jsail.ParticleSystems.SurfaceEmitterObject');
var Switch = java.import('org.web3d.x3d.jsail.Grouping.SwitchObject');
var TexCoordChaser2D =
java.import('org.web3d.x3d.jsail.Followers.TexCoordChaser2DObject');
var TexCoordDamper2D =
java.import('org.web3d.x3d.jsail.Followers.TexCoordDamper2DObject');
var Text = java.import('org.web3d.x3d.jsail.Text.TextObject');
var TextureBackground =
java.import('org.web3d.x3d.jsail.EnvironmentalEffects.TextureBackgroundObject');
var TextureCoordinate =
java.import('org.web3d.x3d.jsail.Texturing.TextureCoordinateObject');
var TextureCoordinate3D =
java.import('org.web3d.x3d.jsail.Texturing3D.TextureCoordinate3DObject');
var TextureCoordinate4D =
java.import('org.web3d.x3d.jsail.Texturing3D.TextureCoordinate4DObject');
var TextureCoordinateGenerator =
java.import('org.web3d.x3d.jsail.Texturing.TextureCoordinateGeneratorObject');
var TextureProperties =
java.import('org.web3d.x3d.jsail.Texturing.TexturePropertiesObject');
var TextureTransform =
java.import('org.web3d.x3d.jsail.Texturing.TextureTransformObject');
var TextureTransform3D =
java.import('org.web3d.x3d.jsail.Texturing3D.TextureTransform3DObject');
var TextureTransformMatrix3D =
java.import('org.web3d.x3d.jsail.Texturing3D.TextureTransformMatrix3DObject');
var TimeSensor = java.import('org.web3d.x3d.jsail.Time.TimeSensorObject');
var TimeTrigger =
java.import('org.web3d.x3d.jsail.EventUtilities.TimeTriggerObject');
var ToneMappedVolumeStyle =
java.import('org.web3d.x3d.jsail.VolumeRendering.ToneMappedVolumeStyleObject');
var TouchSensor =
java.import('org.web3d.x3d.jsail.PointingDeviceSensor.TouchSensorObject');
var Transform = java.import('org.web3d.x3d.jsail.Grouping.TransformObject');
var TransformSensor =
java.import('org.web3d.x3d.jsail.EnvironmentalSensor.TransformSensorObject');
var TransmitterPdu =
java.import('org.web3d.x3d.jsail.DIS.TransmitterPduObject');
var TriangleFanSet =
java.import('org.web3d.x3d.jsail.Rendering.TriangleFanSetObject');
var TriangleSet =
java.import('org.web3d.x3d.jsail.Rendering.TriangleSetObject');
var TriangleSet2D =
java.import('org.web3d.x3d.jsail.Geometry2D.TriangleSet2DObject');
var TriangleStripSet =
java.import('org.web3d.x3d.jsail.Rendering.TriangleStripSetObject');
var TwoSidedMaterial =
java.import('org.web3d.x3d.jsail.Shape.TwoSidedMaterialObject');
var UniversalJoint =
java.import('org.web3d.x3d.jsail.RigidBodyPhysics.UniversalJointObject');
var Viewpoint =
java.import('org.web3d.x3d.jsail.Navigation.ViewpointObject');
var ViewpointGroup =
java.import('org.web3d.x3d.jsail.Navigation.ViewpointGroupObject');
var Viewport = java.import('org.web3d.x3d.jsail.Layering.ViewportObject');
var VisibilitySensor =
java.import('org.web3d.x3d.jsail.EnvironmentalSensor.VisibilitySensorObject');
var VolumeData =
java.import('org.web3d.x3d.jsail.VolumeRendering.VolumeDataObject');
var VolumeEmitter =
java.import('org.web3d.x3d.jsail.ParticleSystems.VolumeEmitterObject');
var VolumePickSensor =
java.import('org.web3d.x3d.jsail.Picking.VolumePickSensorObject');
var WindPhysicsModel =
java.import('org.web3d.x3d.jsail.ParticleSystems.WindPhysicsModelObject');
var WorldInfo = java.import('org.web3d.x3d.jsail.Core.WorldInfoObject');
var component = java.import('org.web3d.x3d.jsail.Core.componentObject');
var connect = java.import('org.web3d.x3d.jsail.Core.connectObject');
var EXPORT = java.import('org.web3d.x3d.jsail.Networking.EXPORTObject');
var ExternProtoDeclare =
java.import('org.web3d.x3d.jsail.Core.ExternProtoDeclareObject');
var field = java.import('org.web3d.x3d.jsail.Core.fieldObject');
var fieldValue = java.import('org.web3d.x3d.jsail.Core.fieldValueObject');
var head = java.import('org.web3d.x3d.jsail.Core.headObject');
var IMPORT = java.import('org.web3d.x3d.jsail.Networking.IMPORTObject');
var IS = java.import('org.web3d.x3d.jsail.Core.ISObject');
var meta = java.import('org.web3d.x3d.jsail.Core.metaObject');
var ProtoBody = java.import('org.web3d.x3d.jsail.Core.ProtoBodyObject');
var ProtoDeclare =
java.import('org.web3d.x3d.jsail.Core.ProtoDeclareObject');
var ProtoInterface =
java.import('org.web3d.x3d.jsail.Core.ProtoInterfaceObject');
var ROUTE = java.import('org.web3d.x3d.jsail.Core.ROUTEObject');
var Scene = java.import('org.web3d.x3d.jsail.Core.SceneObject');
var unit = java.import('org.web3d.x3d.jsail.Core.unitObject');
var X3D = java.import('org.web3d.x3d.jsail.Core.X3DObject');
var SFBool = java.import('org.web3d.x3d.jsail.fields.SFBoolObject');
var MFBool = java.import('org.web3d.x3d.jsail.fields.MFBoolObject');
var SFColor = java.import('org.web3d.x3d.jsail.fields.SFColorObject');
var MFColor = java.import('org.web3d.x3d.jsail.fields.MFColorObject');
var SFColorRGBA =
java.import('org.web3d.x3d.jsail.fields.SFColorRGBAObject');
var MFColorRGBA =
java.import('org.web3d.x3d.jsail.fields.MFColorRGBAObject');
var SFDouble = java.import('org.web3d.x3d.jsail.fields.SFDoubleObject');
var MFDouble = java.import('org.web3d.x3d.jsail.fields.MFDoubleObject');
var SFFloat = java.import('org.web3d.x3d.jsail.fields.SFFloatObject');
var MFFloat = java.import('org.web3d.x3d.jsail.fields.MFFloatObject');
var SFImage = java.import('org.web3d.x3d.jsail.fields.SFImageObject');
var MFImage = java.import('org.web3d.x3d.jsail.fields.MFImageObject');
var SFInt32 = java.import('org.web3d.x3d.jsail.fields.SFInt32Object');
var MFInt32 = java.import('org.web3d.x3d.jsail.fields.MFInt32Object');
var SFMatrix3d = java.import('org.web3d.x3d.jsail.fields.SFMatrix3dObject');
var MFMatrix3d = java.import('org.web3d.x3d.jsail.fields.MFMatrix3dObject');
var SFMatrix3f = java.import('org.web3d.x3d.jsail.fields.SFMatrix3fObject');
var MFMatrix3f = java.import('org.web3d.x3d.jsail.fields.MFMatrix3fObject');
var SFMatrix4d = java.import('org.web3d.x3d.jsail.fields.SFMatrix4dObject');
var MFMatrix4d = java.import('org.web3d.x3d.jsail.fields.MFMatrix4dObject');
var SFMatrix4f = java.import('org.web3d.x3d.jsail.fields.SFMatrix4fObject');
var MFMatrix4f = java.import('org.web3d.x3d.jsail.fields.MFMatrix4fObject');
var SFString = java.import('org.web3d.x3d.jsail.fields.SFStringObject');
var SFRotation = java.import('org.web3d.x3d.jsail.fields.SFRotationObject');
var MFRotation = java.import('org.web3d.x3d.jsail.fields.MFRotationObject');
var MFString = java.import('org.web3d.x3d.jsail.fields.MFStringObject');
var SFTime = java.import('org.web3d.x3d.jsail.fields.SFTimeObject');
var MFTime = java.import('org.web3d.x3d.jsail.fields.MFTimeObject');
var SFVec2d = java.import('org.web3d.x3d.jsail.fields.SFVec2dObject');
var MFVec2d = java.import('org.web3d.x3d.jsail.fields.MFVec2dObject');
var SFVec2f = java.import('org.web3d.x3d.jsail.fields.SFVec2fObject');
var MFVec2f = java.import('org.web3d.x3d.jsail.fields.MFVec2fObject');
var SFVec3d = java.import('org.web3d.x3d.jsail.fields.SFVec3dObject');
var MFVec3d = java.import('org.web3d.x3d.jsail.fields.MFVec3dObject');
var SFVec3f = java.import('org.web3d.x3d.jsail.fields.SFVec3fObject');
var MFVec3f = java.import('org.web3d.x3d.jsail.fields.MFVec3fObject');
var SFVec4d = java.import('org.web3d.x3d.jsail.fields.SFVec4dObject');
var MFVec4d = java.import('org.web3d.x3d.jsail.fields.MFVec4dObject');
var SFVec4f = java.import('org.web3d.x3d.jsail.fields.SFVec4fObject');
var MFVec4f = java.import('org.web3d.x3d.jsail.fields.MFVec4fObject');

On Fri, Apr 10, 2020 at 10:03 PM John Carlson <yottzumm at gmail.com> wrote:

> I discovered a way forward: https://github.com/joeferner/node-java#import Makes
> a Java class work like a JavaScript class, in my reading.  I will proceed
> to write a nodejs file which creates all the classes, if we are in
> agreement that this is a nodejs-only solution and we want it. node-java is
> the npm java I was talking about.  This will primarily make an X3DJSAIL
> derivative, and will not be native JavaScript. I am not really into
> generating a bunch of untested code at this point, and it seems like
> X3DJSAIL is becoming a crown jewel again.  I do think that something like
> PhantomJS is better for testing webapps rather than creating a nodejs app
> to do it. I still test my webapps by hand unfortunately!
>
> However, I think we may have discussed this solution some time back, and
> it may be worth reviewing the email.
>
> It does tie us to an external source code out of our control, but is that
> any different netbeans?
>
> Will we run into the same problems as PyJNIus?
>
> It seems like we could create some test cases pretty quickly, that is, use
> the same ones that cause PyJNIus to fail.
>
> I'm not sure when I'll get to this.
>
> Note that this will likely NOT be like the SAI reference implementation
> for ECMAScript.
> This will be a Java derivative that builds on previous work.
>
> I welcome people who want to help with the JSweet solution, but that won't
> be SAI either.
>
> Perhaps we should have server-side SAI and client-side SAI?
>
> John
>
> On Fri, Apr 10, 2020 at 7:46 PM John Carlson <yottzumm at gmail.com> wrote:
>
>> So here's a description of my Java<->node.js bridge for RunSaxon.java.
>>
>> I have a file, runAndSend.js that imports another javascript file,
>> allsaxon.js
>>
>> runAndSend.js has the following code:
>> -----------------------------------------------------
>> var runsaxon = require('./allsaxon');
>> var config = require('./config');
>> var fs = require("fs");
>>
>> function runAndSend(args, callback) {
>>         runsaxon(args);
>> ----------------------------------------------------
>> allsaxon.js looks like this:
>> ----------------------------------------------------
>> var java = require("java");
>> java.options.push("-Djava.awt.headless=true");
>> java.options.push("-Xmx1000m");
>>
>> //java.options.push('-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005');
>> java.classpath.push("saxon9he.jar");
>> java.classpath.push("../saxon9he.jar");
>> java.classpath.push("../../saxon9he.jar");
>> java.classpath.push("../../../saxon9he.jar");
>>
>> java.classpath.push("target/classes");
>> java.classpath.push("../target/classes");
>> java.classpath.push("../../target/classes");
>> java.classpath.push("../../../target/classes");
>>
>> java.classpath.push("target/X3DJSONLD-1.0-SNAPSHOT.jar");
>> java.classpath.push("../target/X3DJSONLD-1.0-SNAPSHOT.jar");
>> java.classpath.push("../../target/X3DJSONLD-1.0-SNAPSHOT.jar");
>> java.classpath.push("../../../target/X3DJSONLD-1.0-SNAPSHOT.jar");
>>
>> function translate(infiles) {
>>         java.callStaticMethodSync("net.coderextreme.RunSaxon", "main",
>> infiles);
>> }
>>
>> if (typeof module === 'object')  {
>>         module.exports = translate;
>> }
>>
>> ---------------------------------------------------------------------------------------------------------
>> I have forgotten if there are class level interfaces to the underlying
>> Java code, as we had in PyJNIus.   That would require research. We may run
>> into the same issues as PyJNIus.
>>
>> In any cases, it would require mirroring the entire X3DJSAIL package, so
>> it would be best if we probably wrote a stylesheet that put out this
>> binding JavaScript code, whatever that may be.
>>
>> Here is the repository for npm (or node) java:
>>
>> https://github.com/joeferner/node-java
>> <https://github.com/joeferner/node-java#javaNewInstance>
>>
>> It seems to me that we need some python or xslt code to read the X3DUOM
>> and produce the glue code. Possibly only at the class level, but more
>> likely at the method and instance level, not sure.  That requires more
>> research.  I suggest someone take the Transform specification and convert
>> it to the necessary glue code.  For me, I don't "need" this glue code as I
>> am happy with Nashorn presently.  So it would probably be best to apply
>> some $$ to make me need this glue code.  That is, I am pretty much happy
>> with a Java/Nashorn server-side and JavaScript client-side solution.  I
>> don't really need a JavaScript server-side solution.
>>
>> So who exactly needs a JavaScript server solution, and why aren't they
>> speaking up?
>>
>> Thanks,
>>
>> John
>>
>>
>> On Fri, Apr 10, 2020 at 7:24 PM John Carlson <yottzumm at gmail.com> wrote:
>>
>>>
>>>
>>> On Tue, Mar 24, 2020 at 8:20 AM Don Brutzman wrote:
>>>
>>> Authoring use-case environments are
>>>> 1. Script inside X3D scene graph,
>>>> 2. Script in outer HTML5 web page,
>>>> 3. Standalone programmatic use in node.js
>>>>
>>>> Now get specific.
>>>>
>>>
>>> Not yet.   We need to discuss the environments.   X_ITE does inside X3D,
>>> and with the addition of X_ITE_DOM, in outer HTML5. X3DOM does outer HTML5.
>>> X3DJSAIL is a standalone library.
>>>
>>> So what we really need is a standalone EAI for node.js without rendering
>>> except to an encoding.  Can we turn either X3DJSAIL, X_ITE or X3DOM into
>>> such an environment?  I provided a solution for Nashorn on top of X3DJSAIL,
>>> but not a solution for node.js. Have we had any take up on the Nashorn
>>> solution, enough to warrant a node.js solution?
>>>
>>> So I would recommend that before researching all the various Transforms,
>>> that we just try to develop a single Transform.js class for node.js, with
>>> an encoding rendering.  It will be throwaway code, just a proof of concept.
>>>
>>> Suggestions for next steps are welcome, and I will review Don's email
>>> again and see what he said.
>>>
>>> For node.js, I believe there are packages that emulate the browser
>>> enviroment, i think that jsdom (?) and xmldom are two popular ones, so we
>>> can look at turning node.js into a headless browser.   There are also ways
>>> to run browsers in headless mode, PhantomJs comes to mind, but I haven't
>>> researched this extensively.
>>>
>>> There are environments for running Java and node.js together, as I
>>> demonstrated with RunSaxon.java in X3DJSONLD.  My approach for that was
>>> simplistic, and won't really work for a multiclass approach.  There is also
>>> the java npm package that may lead towards a solution.
>>>
>>> So a possible path forward is generating the glue code between node.js
>>> and Java, similar to what we did for PyJNIus.
>>>
>>> I suggest that we do a very simple single class solution, not unlike the
>>> RunSaxon.java solution. This required various node.js files.   I think the
>>> new solution will be more complex to deal with the npm java peculiarities.
>>>
>>> So this is throwaway code for now, just a single class.
>>>
>>> Note that I have been stripping RunSaxon code out of my code, since
>>> I have a XML to JSON solution.
>>>
>>> What do you think?
>>>
>>> John
>>>
>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://web3d.org/pipermail/x3d-public_web3d.org/attachments/20200410/2cf7fd49/attachment-0001.html>


More information about the x3d-public mailing list