Only my share

Java , Groovy and others

Archive for the ‘Groovy’ Category

The beauty of Meta Object Programming in Groovy

with 2 comments

Hello there, see you again. In this article I will show you how MOP programming will be easy when you implement it in Groovy. This simple way is achieved by strong expressiveness of Groovy language. 

As you know, MOP or Meta Object Programming is one of good programming techniques that can change the behavior  of one object at runtime. It is very different if you are as a Java Programmer where all of object is created by static type class and the behavior of the object of this class cannot be changed at run time.

In the following code I’ll show you how MOP enable us to change the behavior (add more method) to the Class / Object at runtime.

String.metaClass.hitungPanjang = {
         ->
              delegate.size()
}

String test = “Aldry Deka Pratama”
println “The number of character in string : ” + test.hitungPanjang()

In this code I define a new method called “hitungPanjang” that will count the size of the String. This method will be attached to existing String class. After you attached the method and make a new instance of this class, then you can call the method you already defined to the class  through its object

Written by adpjhype

March 2, 2009 at 12:38 pm

The beauty of SwingBuilder

without comments

When I was in the University (STT TELKOM / IT TELKOM), I had a favorite text book as my Java reference. The book title is Core JAVA-Volume 1 and 2 written by Cay S Horstmann and Gary Cornell. In chapter 8 about Event Handling, the authors explained to the reader about basic event handling with one code example. The example will generate a Frame that consists of three buttons with the label “Yellow”, “Blue”, and “Red”. If one of its button is pressed the event will be triggered by each button to change the background color of the Frame. The following code is taken from their book:

1. import java.awt.*;
2. import java.awt.event.*;
3. import javax.swing.*;
4.
5. public class ButtonTest
6. {
7.  public static void main(String[] args)
8. {
9. ButtonFrame frame = new ButtonFrame();
10. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
11. frame.show();
12. }
13. }
14.
15. /**
16. A frame with a button panel
17. */
18. class ButtonFrame extends JFrame
19. {
20. public ButtonFrame()
21. {
22. setTitle(“ButtonTest”);
23. setSize(WIDTH, HEIGHT);
24.
25. // add panel to frame
26.
27. ButtonPanel panel = new ButtonPanel();
28. Container contentPane = getContentPane();
29. contentPane.add(panel);
30. }
31.
32. public static final int WIDTH = 300;
33. public static final int HEIGHT = 200;
34. }
35.
36. /**
37. A panel with three buttons.
38. */
39. class ButtonPanel extends JPanel
40. {
41. public ButtonPanel()
42. {
43. // create buttons
44.
45. JButton yellowButton = new JButton(“Yellow”);
46. JButton blueButton = new JButton(“Blue”);
47. JButton redButton = new JButton(“Red”);
48.
49. // add buttons to panel
50.
51. add(yellowButton);
52. add(blueButton);
53. add(redButton);
54.
55. // create button actions
56.
57. ColorAction yellowAction = new ColorAction(Color.yellow);
58. ColorAction blueAction = new ColorAction(Color.blue);
59. ColorAction redAction = new ColorAction(Color.red);
60.
61. // associate actions with buttons
62.
63. yellowButton.addActionListener(yellowAction);
64. blueButton.addActionListener(blueAction);
65. redButton.addActionListener(redAction);
66. }
67.
68. /**
69. An action listener that sets the panel’s background color.
70. */
71. private class ColorAction implements ActionListener
72. {
73. public ColorAction(Color c)
74. {
75. backgroundColor = c;
76. }
77.
78. public void actionPerformed(ActionEvent event)
79. {
80. setBackground(backgroundColor);
81. repaint();
82. }
83.
84. private Color backgroundColor;
85. }
86. }

Now, I want to show you how Groovy will accomplish the same program with its SwingBuilder Power:

import groovy.swing.SwingBuilder;

swing = new SwingBuilder()
frame = swing.frame(size:[400,500], title:’Swing Demo’, defaultCloseOperation:javax.swing.JFrame.EXIT_ON_CLOSE){
panel(id:’mainPanel’){
button(‘Red’, actionPerformed : {
mainPanel.background = java.awt.Color.RED
mainPanel.repaint()
})
button(‘Yellow’,actionPerformed : {
mainPanel.background = java.awt.Color.YELLOW
mainPanel.repaint()
})
button(‘Blue’, actionPerformed : {
mainPanel.background = java.awt.Color.BLUE
mainPanel.repaint()
})
}
}
frame.show()

From this two code, we can make a conclution that groovy code especially in its Swing Framework support is more flexible and more intuitive for us to figure out the containtment structure of its GUI components. In Java languange Swing Framework code programming is very hard to be read and not easly show us the containtment structure of its GUI components.

Written by adpjhype

January 7, 2009 at 3:47 pm

Posted in Groovy

Tagged with

Closure make File Access so Easy in Groovy

with one comment

As we know in Groovy, Closure is a class that only contain a pieces of code. If you came from C/C++ Closure will be identical to function pointer, but Closure has more capability and better safety mechanism. In this article, I will show you how Closure support in groovy can make file access whether it is read or write operation so easy.

If you are a Java programmer, you will agree that this is very complex to do read or write to a File. There has to be a try-catch mechanism to catch all possible IO Exception that possibly occur in the code. In groovy, You can forget all of kind of messy mechanisms and you can only concentrate to what will you do with the file.

/*
* File Demo
*/
// writing some text to c:/mylovepoet.txt
file = new File(‘c:/mylovepoet.txt’)
file.write(“oh my darling”)

// append some text to the same file
file.append(‘oh my darling oh my darling\n’)
file.append(‘please. stay away\n’)

//Create new file and write to it using withWriter method and with closure argument
file2 = new File(‘c:/mylovepoet2.txt’)
file2.withWriter{
writer ->
writer << ‘oh my sweety\n’
writer <<  ‘please come to me’
}

// append some more text to the file using withWriter
file2.withWriterAppend{
writer ->
writer << ‘oh oh.. don\’t go’
}

// now we can read the content of the first file
file.eachLine {
line ->
println line

}

// now we will display all line started with ‘please’

print “\nLIne started with ‘please’:\n”
file.eachLine {
line ->
if(line =~ /^please/){
println line
}
}

We can make some raw conclution about File Access in groovy. It is more convenient and faster to create a code that access a file without any annoying error-handling mechanisms. All of error handling automatically handled by Groovy.

Written by adpjhype

January 5, 2009 at 4:41 pm

Posted in Groovy

Tagged with

Running Groovy script from crontab in Linux

with 2 comments

I got a task to gather some log files into one single log file. What I was thinking about when I tried to implement this task using Groovy is my previous failure experiences to run it from crontab service in Linux.

But now, I have a good steps to solve this problem.

1. Assume that our Groovy script located at : /opt/btel/script/aldry/fnflog/fnfLogForDW.groovy
2. create a bash script to be run withing crontab service:

JAVA_HOME=your-java-home-directory
GROOVY_HOME=your-groovy-home-directory
export JAVA_HOME
export GROOVY_HOME

PATH=$JAVA_HOME/bin:$GROOVY_HOME/bin:$PATH:.
export PATH

cd /opt/btel/script/aldry/fnflog
groovy -classpath /opt/btel/script/aldry/fnflog //opt/btel/script/aldry/fnflog/fnfLogForDW.groovy

 3. Assume that we saved that bash script to the file : /opt/btel/script/aldry/fnflog/fnfLogForDW
4. type the following command from the console to install your script in the crontab service
                  shell> crontab -e
5.Put the following line, assume that this script will be run every 1:00 AM :
                   0 1 * * * /opt/btel/script/aldry/fnflog/fnfLogForDW
6. Restart crond service with the following command:
                   service crond restart
7. Enjoy :)

Written by adpjhype

January 2, 2009 at 9:15 am

Posted in Groovy

Tagged with

My Groovy Vs Perl

with 5 comments

Currently I’m working at the Telecommunication Company (Bakrie Telecom). I’m a staff of IT Billing Prepaid Development Department. The main function of this department is to build a variety of interfaces between IT Application whether it is build by other IT teams or by the third party vendors, to Bakrie Telecom ‘s Network Element such as SMSC (Short Message Service Center), IN (Intelligent Network), HLR (Home Locator Register) and any others standard TELCO Network Element.

My Manager is a PERL Hacker. He can do his magic with just a few of key stroke to accomplish variety of job or script, for example to parse the large CDR files, make a network connection to the Network Elements (for provisioning process) or connect to the Database. So in my first career in this company, I have to read preexisting of codes and I’m sure I got a lot of thing from it. But I don’t know why something missing in my mine. PERL is not really comfortable to program with (for me). Maybe, this is because my strong background as a Java programmer. So after about six months working for this company, I decided to write some of my new development jobs using Java Technology.

But after some development job has been done using my favorite Java Technology, I became to realize that there are some difficulties when I had a kind of development jobs that has a lot of parsing tasks. As we know, it’s very hard or maybe complex to accomplish such a job in Java programming language because of the lack of expressiveness of this language.

But now, the situations are totally different, I got a Groovy Programming language as second standard programming language in Java platform. So with this language I can accomplish a lot of job that is hard to do with Java Programming language with more enjoyment and fun.

In this article I want to show some examples of how Groovy programming Language can be more expressive than PERL.

1. Read a text file

In this section assumed that we’re going to dump a text file located at local directory c:/mylovepoet.txt

This is my code in groovy:

/**
Reading a text file located at c:/mylovepoet.txt using Groovy
*/
new File(“c:/mylovepoet.txt”).eachLine{ line ->
println line
}

This is my code in PERL

/**

Reading a text file located at c:/mylovepoet.txt using PERL

*/
open(INPUT, “c:/mylovepoet.txt”);

while(<INPUT>) {
$line = $_;
$line =~ s/\r|\n//gi;
print “$line\n”;
}

close(INPUT);

2. List Manipulation

In this example we have the list of programming language names, from this list we want to extract the programming language name that contains special characters such as ‘+’ or ‘#’. We can accomplish this job by the following Groovy and PERL script:

/**
List usage in Groovy
*/

pl_list = [‘B’, ‘C’, ‘C++’, ‘JAVA’, ‘C#’]
pl_with_special_char_list = pl_list.grep(/^\w(\+|#)+\w*$/)

and this is my script in PERL

/**
List usage in PERL
*/

@pl_list = (‘B’, ‘C’, ‘C++’, ‘JAVA’, ‘C#’);
@pl_with_special_char_list = ();
$i = 0;

for($pl (@pl_list)) {
if($pl =~ /^\w(\+|#)+\w*$/) {

$pl_with_special_char_list[$i] = $
$i++;
}

}

This article have no intention to prove that Groovy is better than PERL, but this article just want to show us that Groovy can be more expressive than PERL.

Written by adpjhype

December 21, 2008 at 4:01 pm

Posted in Groovy

The Story of Groovy

without comments

James Strachan is the founder of the Groovy Project. His inspiration of this project was started when he and his wife were waiting for the late plane schedule at the airport. He decided to visit Internet Cafée at the Airport, while his wife was going for shopping. When he was browsing from one web page to the others web page he decided to visit Python official Web Site. When he learned this language, he realized that there is a large amount of beautiful language features in Python that do not exist in his beloved programming language and platform technology, Java.

James Strachan and Bob McWhirter founded the Groovy project in 2003, recognizing that application development in Java is characterized by using multiple frameworks and gluing them together to form a product. They designed Groovy to streamline exactly this kind of work. At the same time, Richard Monson-Haefel met James, who introduced him to Groovy. Richard immediately recognized Groovy’s potential and suggested the submission of a Java Specification Request (JSR-241).

But what is the reaction of Sun Microsystem about the born of this language? Do they feel it as the other Java language competitor? No Guys, They don’t see Groovy as Java’s rival but rather as a companion that attracts brilliant developers who might otherwise move to Ruby or Python and thus away from the Java platform. Since the JSR has been accepted, Groovy is the second standard language for the Java VM (besides the Java language itself).

Written by adpjhype

December 18, 2008 at 4:32 am

Posted in Groovy

Tagged with