Archive for the ‘Rhino’ Category

  1. Hello, COM(Rhino) World!

    Posted on 1月 24th, 2013 by cx20

    COM(Rhino)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    Rhino 自身には、COM を呼び出す機能を持っていないが、別途ライブラリを経由することで呼び出すことが可能である。
    以下は Rhino より JACOB(JAVA-COM Bridge) ライブラリを使用した COM クライアントの例となっている。

    ソースコード

    importPackage(com.jacob.com);
    importPackage(com.jacob.activeX);
     
    var shell = new ActiveXComponent("Shell.Application");
    var hwnd = new Variant(0);
    var title = new Variant("Hello, COM(JACOB) World!");
    var option = new Variant(0);
    var rootFolder = new Variant(36);
    var params = java.lang.reflect.Array.newInstance(Variant, 4);
    params[0] = hwnd;
    params[1] = title;
    params[2] = option;
    params[3] = rootFolder;
    var folder = shell.invoke( "BrowseForFolder", params );

    実行方法

    C:¥> jrunscript -cp jacob.jar;. Hello.js

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(JACOB) Wolrd!               |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+
  2. Hello, Win32 API(Rhino) World!

    Posted on 1月 14th, 2013 by cx20

    Win32 API(Rhino)

    Win32 API は、Windows の機能にアクセスする為の API(Application Programming Interface)である。
    以下は Rhino にて SWT の非公開 API を使用した Win32 API 呼出しの例となっている。

    ソースコード

    importPackage(org.eclipse.swt.internal.win32);
     
    var lpText = new TCHAR(0, "Hello, Win32 API World!", true);
    var lpCaption = new TCHAR(0, "Hello, World", true);
    OS.MessageBox(0, lpText, lpCaption, OS.MB_OK );

    実行方法

    C:¥> jrunscript -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. Hello.js

    実行結果

    ---------------------------
    Hello, World!
    ---------------------------
    Hello, Win32 API World!
    ---------------------------
    OK   
    ---------------------------
  3. Hello, Java 3D(Rhino) World!

    Posted on 12月 24th, 2012 by cx20

    Java 3D(Rhino)

    Java 3DJava による 3D グラフィックライブラリである。
    以下は Rhino による Java 3D の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(javax.swing);
    importPackage(javax.media.j3d);
    importPackage(javax.vecmath);
    importPackage(com.sun.j3d.utils.universe);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    var canvas3D = createCanvas3D(frame);
    var scene = createSceneGraph();
    connect(canvas3D, scene);
     
    frame.setVisible(true);
     
    function createCanvas3D( frame ) {
        frame.getContentPane().setLayout(new BorderLayout());
        var config = SimpleUniverse.getPreferredConfiguration();
        var canvas3D = new Canvas3D(config);
        frame.getContentPane().add(canvas3D);
        return canvas3D;
    }
     
    function createSceneGraph() {
        var objRoot = new BranchGroup();
        var mover = moveTextBack();
        var spinner = createSpinner();
        var rotator = new RotationInterpolator(new Alpha(-1, 4000), spinner, new Transform3D(), 0.0, Math.PI * 2);
        rotator.setSchedulingBounds( new BoundingSphere() );
        spinner.addChild(rotator);
        objRoot.addChild(mover);
        mover.addChild(spinner);
        spinner.addChild( createTextShape());
        setLighting(mover);
        return objRoot;
    }
     
    function createSpinner() {
        var spinner = new TransformGroup();
        spinner.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        return spinner;
    }
     
    function moveTextBack() {
        var transform3D = new Transform3D();
        transform3D.setTranslation(new Vector3f(0.0, 0.0, -10.0));
        return new TransformGroup(transform3D);
    }
     
    function createTextShape() {
        var textAppear = new Appearance();
        textAppear.setMaterial(new Material());
        var font3D = new Font3D(new Font("MS Pゴシック", Font.PLAIN, 1), new FontExtrusion());
        var textGeom = new Text3D(font3D, new String("Hello, Java 3D World!"));
        textGeom.setAlignment(Text3D.ALIGN_CENTER);
        var textShape = new Shape3D();
        textShape.setGeometry(textGeom);
        textShape.setAppearance(textAppear);
        return textShape;
    }
     
    function setLighting( objMove ) {
        var light = new DirectionalLight();
        light.setInfluencingBounds(new BoundingSphere());
        light.setDirection(new Vector3f(0.0,0.0,-1.0));
        light.setColor(new Color3f(1.0, 1.0, 1.0));
        objMove.addChild(light);
    }
     
    function connect( canvas3D, scene ) {
        var universe = new SimpleUniverse(canvas3D);
        universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
    }
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript Hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 3D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  4. Hello, Java 2D(Rhino) World!

    Posted on 12月 23rd, 2012 by cx20

    Java 2D(Rhino)

    Java 2D は Java による 2D グラフィックライブラリである。
    以下は Rhino による Java 2D の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(javax.swing);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    canvas = new Canvas();
     
    frame.add(canvas);
    frame.setVisible(true);
     
    canvas.createBufferStrategy(2);
    strategy = canvas.getBufferStrategy();
    g2 = strategy.getDrawGraphics();
    while(true)
    {
        g2.drawString("Hello, Java 2D World!", 0, 16 );
        strategy.show();
        java.lang.Thread.sleep(200);
    }
     
    while(1) {java.lang.Thread.sleep(1000);}

    コンパイル&実行方法

    C:¥> jrunscript hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Java 2D World!                     |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  5. Hello, SWT(Rhino) World!

    Posted on 12月 21st, 2012 by cx20

    SWT(Rhino)

    SWT(Standard Widget Toolkit) は Java で GUI を扱うためのライブラリである。
    IBM により AWT や Swing を置き換える目的で作成された。
    以下は Rhino による SWT の使用例となっている。

    ソースコード

    importPackage(org.eclipse.swt);
    importPackage(org.eclipse.swt.widgets);
    importPackage(org.eclipse.swt.layout);
     
    var display = new Display();
    var shell = new Shell(display);
    shell.setText("Hello, World");
     
    var layout = new FillLayout(SWT.VERTICAL);
    shell.setLayout(layout);
     
    var label = new Label(shell,SWT.BORDER);
    label.setText("Hello, SWT World!");
     
    shell.setSize( 640, 480 );
    shell.open();
     
    while (!shell.isDisposed()) {
        if (!display.readAndDispatch()) {
            display.sleep();
        }
    }
     
    display.dispose();

    実行方法

    C:¥> jrunscript -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar;. hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, SWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  6. Hello, Swing(Rhino) World!

    Posted on 12月 20th, 2012 by cx20

    Swing(Rhino)

    Swing は AWT(Abstract Window Toolkit) を拡張したものであり Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT よりも Swing が使われることが多くなっている。
    以下は Rhino による Swing の使用例となっている。

    ソースコード

    importPackage(javax.swing);
     
    var frame = new JFrame();
    frame.setTitle("Hello, World");
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setSize(640,480);
     
    var label = new JLabel("Hello, AWT World!");
    label.setVerticalAlignment(JLabel.TOP);
    frame.add(label);
    frame.setVisible(true);
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript Hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, Swing World!                       |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  7. Hello, AWT(Rhino) World!

    Posted on 12月 19th, 2012 by cx20

    AWT(Rhino)

    AWT(Abstract Window Toolkit) は Java で GUI を扱うためのライブラリである。
    J2SE 1.2 以降は AWT を拡張した Swing が使われることが多くなっている。
    以下は Rhino による AWT の使用例となっている。

    ソースコード

    importPackage(java.awt);
    importPackage(java.awt.event);
     
    var frame = new Frame();
    frame.setTitle("Hello, World");
    frame.addWindowListener(function(e, methodName) {
        if (e.getID() == WindowEvent.WINDOW_CLOSING) {
            java.lang.System.exit(0);
        }
    });
    frame.setSize(640,480);
    frame.setLayout(new FlowLayout(FlowLayout.LEFT));
     
    var label = new Label("Hello, AWT World!");
    frame.add(label);
    frame.setVisible(true);
     
    while(1) {java.lang.Thread.sleep(1000);}

    実行方法

    C:¥> jrunscript hello.js

    実行結果

    +------------------------------------------+
    |Hello, World!                    [_][~][X]|
    +------------------------------------------+
    |Hello, AWT World!                         |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    |                                          |
    +------------------------------------------+
  8. Hello, JDBC Type4(Rhino) World!

    Posted on 10月 24th, 2012 by cx20

    JDBC Type4

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type4 は DBMS のクライアントライブラリを使用しない Pure Java の DBMS ドライバである。
    以下は Rhino による JDBC ライブラリの使用例となっている。

    ソースコード(Rhino + JDBC Type4 + SQL Server)

    importPackage(java.sql);
    java.lang.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    var conn = DriverManager.getConnection("jdbc:sqlserver://;serverName=localhost", "sa", "P@ssW0rd");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    実行方法(Rhino + JDBC Type4 + SQL Server)

    C:¥> jrunscript -J-Xbootclasspath/a:sqljdbc4.jar hello.js

    ソースコード(Rhino + JDBC Type4 + Oracle)

    importPackage(java.sql);
    java.lang.Class.forName("oracle.jdbc.driver.OracleDriver");
    var conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    実行方法(Rhino + JDBC Type4 + Oracle)

    C:¥> jrunscript -J-Xbootclasspath/a:ojdbc6.jar hello.js

    ソースコード(Rhino + JDBC Type4 + MySQL)

    importPackage(java.sql);
    java.lang.Class.forName("com.mysql.jdbc.Driver");
    var conn = DriverManager.getConnection("jdbc:mysql://localhost:3306", "root", "P@ssW0rd");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type4 World!' AS Message");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    実行方法(Rhino + JDBC Type4 + MySQL)

    C:¥> jrunscript -J-Xbootclasspath/a:mysql-connector-java-5.1.22-bin.jar hello.js

    実行結果

    Hello, JDBC Type4 World!
  9. Hello, JDBC Type2(Rhino) World!

    Posted on 10月 23rd, 2012 by cx20

    JDBC Type2

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type2 は JDBC と DBMS クライアントの API をマップさせたブリッジドライバである。
    例えば、Oracle であればクライアントライブラリとして OCI が使用される。
    以下は Rhino による JDBC ライブラリの使用例となっている。

    ソースコード(Rhino + JDBC Type2 + Oracle)

    importPackage(java.sql);
    java.lang.Class.forName("oracle.jdbc.driver.OracleDriver");
    var conn = DriverManager.getConnection("jdbc:oracle:oci:@orcl", "scott", "tiger");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type2 World!' AS Message FROM DUAL");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    実行方法

    C:¥> jrunscript -J-Xbootclasspath/a:ojdbc6.jar hello.js

    実行結果

    Hello, JDBC Type2 World!
  10. Hello, JDBC Type1(Rhino) World!

    Posted on 10月 22nd, 2012 by cx20

    JDBC Type1

    JDBC(Java Database Connectivity)は、Java 用のデータベース接続 API である。実装方法によりType1~4の4つのタイプが存在する。
    Type1 は JDBC と ODBC の API をマップさせたブリッジドライバである。
    以下は Rhino による JDBC ライブラリの使用例となっている。

    ソースコード(Rhino + JDBC Type1 + ODBC + Jet データベース)

    importPackage(java.sql);
    java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    var conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=.\hello.mdb", "", "");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    ソースコード(Rhino + JDBC Type1 + ODBC + ACE データベース)

    importPackage(java.sql);
    java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    var conn = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=.\hello.accdb", "", "");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    ソースコード(Rhino + JDBC Type1 + ODBC + SQL Server)

    importPackage(java.sql);
    java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    var conn = DriverManager.getConnection("jdbc:odbc:Driver={SQL Server};SERVER=(local)", "sa", "P@ssW0rd");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    ソースコード(Rhino + JDBC Type1 + ODBC + Oracle)

    importPackage(java.sql);
    java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    var conn = DriverManager.getConnection("jdbc:odbc:Driver={Oracle in OraDb11g_home1};DBQ=ORCL", "scott", "tiger");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message FROM DUAL");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    ソースコード(Rhino + JDBC Type1 + ODBC + MySQL)

    importPackage(java.sql);
    java.lang.Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    var conn = DriverManager.getConnection("jdbc:odbc:Driver={MySQL ODBC 5.1 Driver};Server=localhost", "root", "P@ssW0rd");
    var stmt = conn.createStatement();
    var rs = stmt.executeQuery("SELECT 'Hello, JDBC Type1 World!' AS Message");
    while ( rs.next() ) {
         print( rs.getString(1) );
    }
    rs.close();
    stmt.close();
    conn.close();

    実行方法

    C:¥> jrunscript Hello.js

    実行結果

    Hello, JDBC Type1 World!