Archive for the ‘Groovy’ Category

  1. Hello, COM(Groovy) World!

    Posted on 1月 17th, 2013 by cx20

    COM(Groovy)

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

    ソースコード

    import com.jacob.com.Variant
    import com.jacob.activeX.ActiveXComponent
     
    class Hello {
        static void main (args) {
            def shell = new ActiveXComponent("Shell.Application")
            def hwnd = new Variant(0)
            def title = new Variant("Hello, COM(JACOB) World!")
            def option = new Variant(0)
            def rootFolder = new Variant(36)
            def params = [ hwnd, title, option, rootFolder ] as Variant[]
            def folder = shell.invoke( "BrowseForFolder", params )
        }
    }

    実行方法

    C:¥> groovy Hello.groovy

    実行結果

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

    Posted on 1月 7th, 2013 by cx20

    Win32 API(Groovy)

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

    ソースコード

    import org.eclipse.swt.internal.win32.OS
    import org.eclipse.swt.internal.win32.TCHAR
     
    class Hello {
        static void main (args) {
            def lpText = new TCHAR(0, "Hello, Win32 API World!", true)
            def lpCaption = new TCHAR(0, "Hello, World", true)
            OS.MessageBox(0, lpText, lpCaption, OS.MB_OK )
        }
    }

    コンパイル&実行方法

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

    実行結果

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

    Posted on 11月 12th, 2012 by cx20

    Java 3D

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

    ソースコード

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

    実行方法

    C:¥> groovyw Hello.groovy

    実行結果

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

    Posted on 11月 11th, 2012 by cx20

    Java 2D

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

    ソースコード

    import java.awt.Graphics
    import java.awt.Graphics2D
    import javax.swing.*
     
    class Hello extends JFrame {
     
        static void main(args) {
            Hello frame = new Hello("Hello, World")
            frame.setVisible(true)
        }
     
        Hello( String title ) {
            super( title )
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)
            setSize(640, 480)
     
            HelloPanel panel = new HelloPanel()
            add( panel )
        }
    }
     
    class HelloPanel extends JPanel {
        public void paintComponent(Graphics g) {
            Graphics2D g2 = (Graphics2D)g
            g2.drawString("Hello, Java2D World!", 0, 16)
        }
    }

    コンパイル&実行方法

    C:¥> groovyw Hello.groovy

    実行結果

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

    Posted on 11月 10th, 2012 by cx20

    JavaFX(Groovy)

    JavaFX は Java による RIA 向けの GUI ライブラリならびにプラットフォームである。
    類似の RIA プラットフォームとしては Adobe Flex や Microsoft Silverlight などがある。
    以下は Groovy による JavaFX の使用例となっている。

    ソースコード

    import javafx.application.Application
    import javafx.stage.Stage
    import javafx.scene.Scene
    import javafx.scene.layout.HBox
    import javafx.scene.control.Label
     
    class Hello extends Application {
        static void main(args) {
            Application.launch(Hello, args)
        }
     
        void start(Stage stage) {
            def hbox = new HBox()
            def scene = new Scene(hbox, 640, 480)
            hbox.getChildren().add( new Label("Hello, JavaFX World!") )
     
            stage.setScene(scene);
            stage.setTitle("Hello, World")
            stage.show()
        }
    }

    コンパイル&実行方法

    C:¥> SET JAVAFX_HOME=C:\Program Files (x86)\Oracle\JavaFX 2.0 SDK
    C:¥> groovyw -cp "%JAVAFX_HOME%\rt\lib\jfxrt.jar;." Hello.groovy

    実行結果

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

    Posted on 11月 9th, 2012 by cx20

    SWT(Groovy)

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

    ソースコード

    import org.eclipse.swt.SWT
    import org.eclipse.swt.widgets.*
    import org.eclipse.swt.layout.*
     
    class Hello {
        static void main (args) {
            def display = new Display()
            def shell = new Shell(display)
            shell.setText("Hello, World")
     
            def layout = new FillLayout(SWT.VERTICAL)
            shell.setLayout(layout)
     
            def 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:¥> groovyw -cp org.eclipse.swt.win32.win32.x86_3.6.1.v3655c.jar Hello.groovy

    実行結果

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

    Posted on 11月 8th, 2012 by cx20

    Swing(Groovy)

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

    ソースコード

    import java.awt.*
    import java.awt.event.*
    import javax.swing.*
     
    class Hello extends JFrame {
        static void main( args ) {
            def frame = new Hello( "Hello, World" )
            frame.setVisible( true )
        }
     
        Hello( String title ) {
            super( title )
            setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE )
            setLocationRelativeTo( null )
            setSize( 640, 480 )
     
            def label = new JLabel( "Hello, Swing World!" )
            label.setVerticalAlignment(JLabel.TOP)
            add( label )
        }
    }

    実行方法

    C:¥> groovyw Hello.groovy

    実行結果

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

    Posted on 11月 7th, 2012 by cx20

    AWT(Groovy)

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

    ソースコード

    import java.awt.*
    import java.awt.event.*
     
    class Hello extends Frame {
         static void main(args) {
            def frame = new Hello( "Hello, World" )
            frame.setVisible(true)
        }
     
        Hello( title ) {
            super( title );
            addWindowListener(new HelloWindowAdapter())
            setSize(640, 480)
     
            setLayout(new FlowLayout(FlowLayout.LEFT))
     
            def label = new Label("Hello, AWT World!")
            add(label)
        }
    }
     
    class HelloWindowAdapter extends WindowAdapter {
        void windowClosing(WindowEvent e) {
            System.exit(0)
        }
    }

    実行方法

    C:¥> groovyw Hello.groovy

    実行結果

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

    Posted on 10月 3rd, 2012 by cx20

    JDBC Type4

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

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

    import groovy.sql.Sql
    class Hello {
        static void main(args) {
            Sql sql = Sql.newInstance("jdbc:sqlserver://;serverName=localhost", 
               "sa", "P@ssW0rd", "com.microsoft.sqlserver.jdbc.SQLServerDriver")
            sql.eachRow("SELECT 'Hello, JDBC Type4 World!' AS Message"){
                println it.Message
            }
        }
    }

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

    C:¥> groovy -cp "sqljdbc4.jar;." Hello.groovy

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

    import groovy.sql.Sql
    class Hello {
        static void main(args) {
            Sql sql = Sql.newInstance("jdbc:oracle:thin:@localhost:1521:orcl", 
               "scott", "tiger", "oracle.jdbc.driver.OracleDriver")
            sql.eachRow("SELECT 'Hello, JDBC Type4 World!' AS Message FROM DUAL"){
                println it.Message
            }
        }
    }

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

    C:¥> groovy -cp "ojdbc6.jar;." Hello.groovy

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

    import groovy.sql.Sql
    class Hello {
        static void main(args) {
            Sql sql = Sql.newInstance("jdbc:mysql://localhost:3306", 
               "root", "P@ssW0rd", "com.mysql.jdbc.Driver")
            sql.eachRow("SELECT 'Hello, JDBC Type4 World!' AS Message"){
                println it.Message
            }
        }
    }

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

    C:¥> groovy -cp "mysql-connector-java-5.1.22-bin.jar;." Hello.groovy

    実行結果

    Hello, JDBC Type4 World!
  10. Hello, JDBC Type2(Groovy) World!

    Posted on 10月 2nd, 2012 by cx20

    JDBC Type2

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

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

    import groovy.sql.Sql
    class Hello {
        static void main(args) {
            Sql sql = Sql.newInstance("jdbc:oracle:oci:@orcl", 
               "scott", "tiger", "oracle.jdbc.driver.OracleDriver")
            sql.eachRow("SELECT 'Hello, JDBC Type2 World!' AS Message FROM DUAL"){
                println it.Message
            }
        }
    }

    実行方法

    C:¥> groovy Hello.groovy
    C:¥> groovy -cp "ojdbc6.jar;." Hello.groovy

    実行結果

    Hello, JDBC Type2 World!