| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <!-- -*- xhtml -*- --> |
| <title>Meet a NetBeans Module Writer: Andreas Andreou</title> |
| <link rel="stylesheet" type="text/css" href="https://netbeans.org/netbeans.css"> |
| <meta name="AUDIENCE" content="NBUSER"> |
| <meta name="TYPE" content="ARTICLE"> |
| <meta name="EXPIRES" content="N"> |
| <meta name="AUTHOR" content="Geertjan Wielenga"> |
| <meta name="developer" content="gwielenga@netbeans.org"> |
| <meta name="indexed" content="y"> |
| <meta name="description" |
| content=""> |
| <!-- Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. --> |
| <!-- Use is subject to license terms.--> |
| </head> |
| <body> |
| <h1>Meet a NetBeans Module Writer: Andreas Andreou</h1> |
| <p><small><a href="mailto:nbdocs_feedback@usersguide.netbeans.org?subject=Feedback:%20Meet%20A%20NetBeans%20Module%20Writer:%20Andreas">Feedback</a></small></p> |
| |
| <table width="210" border="1" cellspacing="0" cellpadding="5" align="right" class="ltblue"> |
| <tbody> |
| <tr> |
| <td align="center"><img align="center" src="nbm_interviews/andreas/andreas.jpg" alt="Andreas"> |
| |
| <br><b>Andreas Andreou</b></td> |
| </tr> |
| <tr> |
| <td>Andreas's Hot Links: |
| <ul> |
| <p><li><a href="http://andyhot.di.uoa.gr">My blog</a> |
| <li><a href="https://nbtapestrysupport.dev.java.net/">Tapestry Support Module for NetBeans</a> |
| <li><a href="http://tapestry.apache.org/">Tapestry</a> |
| <li><a href="http://tacos.sourceforge.net/">Tacos</a> |
| </ul> |
| |
| </tr> |
| |
| |
| </tbody> |
| </table> |
| |
| <p>Andreas resides in Athens, in Greece, and is a big <a href="http://tapestry.apache.org/">Tapestry</a> enthusiast. Here, |
| he shares his experiences creating a NetBeans module that provides tooling for Tapestry.</p> |
| |
| <h3>Hi, who are you and where are you from?</h3> |
| |
| <p>Hi, my name is Andreas Andreou, a Cypriot who was born and raised in Greece. |
| |
| <h3>What do you do in your every day life?</h3> |
| |
| <p>Well, in theory I'm supposed to be trying to concentrate on my PhD studies at the National and Kapodistrian University of Athens. |
| In practice though, I work as an independent Java consultant, specializing in web application development. I'm also a committer for Apache |
| Tapestry (<a href="http://tapestry.apache.org">http://tapestry.apache.org</a>), which is a fascinating framework for web development. |
| I am also |
| the current lead developer of Tacos (<a href="http://tacos.sf.net">http://tacos.sf.net</a>), which deals with Ajax enabled |
| components for Tapestry. |
| |
| |
| <h3>How long have you been using NetBeans and why?</h3> |
| |
| <p>Since Sep '06. Mostly started out of curiosity... I simply wanted to see how it now compares with Eclipse and IntelliJ Idea. |
| I had also originally used NetBeans in 2002, but it didn't quite feel right for me back then. |
| Anyway, I believe it was the screenshots on <a href="http://blogs.sun.com/geertjan">Geertjan's blog</a> that motivated me to try |
| it out again. The version I tried was NetBeans IDE 5.5 Beta 1. |
| It was a fun experience, which I hadn't expected it to be, and it continues to be fun. |
| |
| <h3>You've been working on a Tapestry support module. Why?</h3> |
| |
| <p>Oh, there are several reasons: |
| <ul> |
| <li>I'm completely in love with Tapestry... Thank god my soon-to-be wife is so understanding! |
| <li>We already had support for Tapestry in the other two main IDEs... so NetBeans was lagging behind for us in that respect. |
| <li>It's also not easy for someone to go over Geertjan's blog entries and not feel empowered to create |
| whatever plugin he decides. Those entries are like a constant reminder: 'Hey, you can do everything, |
| and hey, here's how!'... I'd be a fool not to take the bait. |
| <li>Finally, I've been programming Java web applications continuously for the last |
| three years, so I just wanted to see how it feels to work with Swing for a change. |
| </ul> |
| |
| |
| <h3>What are the main features that you created?</h3> |
| |
| <p>Well, without going into too much detail, here's |
| what you normally deal with when using Tapestry: |
| |
| <ul> |
| |
| <li>Every web page (Home.html) is usually associated with a Java source |
| file (Home.java) and, before Tapestry 4 which includes support for annotations, |
| with an XML configuration file (Home.page). Additionally, you can optionally have |
| per page localization files (Home.properties, Home_el.properties, ...) though |
| many users prefer global (per application) localization files. |
| <li>Same as above happens for every component. And those components are your |
| building blocks, you use them to construct the pages. So, you normally have 2-3 files for every page and component and most of the |
| time they reference each other. Simple support for hyperlinks (I call it "CTRL + clicking") and |
| autocomplete would vastly increase productivity. I also expect to see productivity gains |
| when drag and dropping components into pages or into other components... the available |
| components could be dragged either from a component palette or directly |
| from the Projects or Files windows. |
| |
| <li>Tapestry uses Hivemind (<a href="http://hivemind.apache.org">http://hivemind.apache.org</a>) |
| a services and configuration microkernel. |
| You use it to inject your services, Tapestry's objects and services, Spring beans, etc., |
| into pages and components. That injection can be specified either with an annotation or |
| in the configuration files and the list of available services is enormous |
| (<a href="http://tapestry.apache.org/tapestry4/tapestry/hivedocs/index.html">http://tapestry.apache.org/tapestry4/tapestry/hivedocs/index.html</a>), though you'd |
| only need a few for your every day needs. Anyway, again autocomplete support |
| and integrated help can save many development hours. |
| </ul> |
| |
| |
| |
| <p>So, all of these more or less constitute the target feature set that nbtapestrysupport |
| (<a href="https://nbtapestrysupport.dev.java.net/">https://nbtapestrysupport.dev.java.net/</a>) |
| aims to provide. Here's what's currently available: |
| |
| <ul> |
| <li>Automatic registration of Tapestry's DTD allowing basic autocomplete in XML files. |
| <li>Autocomplete in Tapestry configuration files for class names, referenced files and several |
| other commonly used attributes. |
| <li>Hyperlink support in Tapestry configuration files for class names (opens Java source file) |
| and referenced files (opens file). |
| <li>Integrated Google search for Tapestry libraries. |
| <li>Templates for all kinds of Tapestry files. |
| <li>Very basic support for a component palette with drag and drop code snippets. |
| </ul> |
| |
| <p>Here's a screenshot to give you an idea: |
| |
| <p><img border="1" align="center" src="nbm_interviews/andreas/preview.png" alt="preview"> |
| |
| <p>And here's another one: |
| |
| <p><img border="1" align="center" src="nbm_interviews/andreas/preview12.png" alt="preview"> |
| |
| |
| <h3>Which NetBeans APIs did you use?</h3> |
| |
| <p>The plugin uses many different NetBeans APIs but I'm currently investigating and trying to get familiar with even more parts of it. |
| So, for starters, one should begin with the <a href="https://netbeans.org/download/dev/javadoc/org-openide-filesystems/overview-summary.html">FileSystem API</a>. |
| It is nicely written, pretty easy to understand and you'll almost always |
| need something from it. Web APIs is another important library, especially for web-related modules. It encapsulates and configures your web |
| project and provides many utilities for common tasks like informing the location of the document base and of the WEB-INF folder, the |
| configured classpath settings, etc. |
| Both these APIs enable <a href="https://nbtapestrysupport.dev.java.net">nbtapestrysupport</a> to provide hyperlinks. |
| They allow searching for the CTRL + clicked resource in many different |
| places. Once the resource is found, you'll need to take a look at the <a href="https://netbeans.org/download/dev/javadoc/org-openide-loaders/overview-summary.html">Datasystems API</a> |
| and the <a href="https://netbeans.org/download/dev/javadoc/org-openide-nodes/overview-summary.html">Nodes API</a> to find how to make the IDE |
| open it. |
| |
| <p>All these can be studied at the NetBeans API List (<a href="https://netbeans.org/download/dev/javadoc/">http://www.netbeans.org/download/dev/javadoc/</a>) |
| and I believe them to be a good |
| starting point for getting to know how to interact with and utilize the powers of NetBeans. |
| |
| |
| <h3>What would you say to developers who use a framework but have no |
| tooling support for it in NetBeans?</h3> |
| |
| <p>You mean apart from switching to Tapestry..? (LOL) Well... |
| <ul> |
| <li>Just grab the sources of similar |
| projects (<a href="https://nbfaceletssupport.dev.java.net/">nbfaceletssupport</a> have also recently released theirs). |
| <li>Read a few must-read blogs and <a href="https://platform.netbeans.org/tutorials/index.html">tutorials</a>. |
| <li>Start coding! |
| |
| </ul> |
| <h3> What are you favorite/least favorite parts of the API's?</h3> |
| |
| <p>I can't really say that I have a favorite or a least favorite part of the API's, though there are |
| some naming conventions I don't like... Try typing "Utilities" in a Java |
| file and hit CTRL + Space... you'll get many many suggestions because most of the |
| APIs include such a class. Having said that, I wouldn't mind suggesting one project-related |
| utility method I'd like included... <tt>createLibrary()</tt>. It would assist in bundling |
| several different JARs in a new library. |
| |
| |
| <h3>What do you think about the IDE?</h3> |
| <p>As I previously mentioned, NetBeans has already made giant steps |
| forward. It has become an IDE that I gladly recommend to my clients and |
| partners. Additionally, I currently see it as the IDE that has the |
| biggest momentum and potential in the Java world. |
| |
| <h3>What are your favorite features?</h3> |
| |
| <ul> |
| <li>The speed, responsiveness and clarity of its user interface. For me, this is |
| real-life proof of how far Swing has progressed during the last years. |
| <li>The ease with which the base NetBeans download can create and run all |
| sorts of projects. |
| <li>Integration with several application servers (especially JBoss and |
| Glassfish) is excellent. I guess this shows how handy the Runtime window |
| (that NetBeans always has had) is. |
| <li>Matisse is simply incredible... I've no words to describe it! |
| </ul> |
| |
| <h3>What should be improved?</h3> |
| |
| <ul> |
| <li>The editor... to put it simply, I believe that one of the goals every |
| IDE should have is to embrace and promote keyboard-only usage! Anyway, |
| from what I read, the upcoming 6.0 series has already started taking care of |
| this. (<a href="http://wiki.netbeans.org/wiki/view/Java_EditorUsersGuide">Go here for details.</a>)</a> |
| <li>I miss the 'open resource' dialog. NetBeans currently provides a 'Go |
| to Class...' action (Alt+Shift-O) but for web applications, a similar 'Go to |
| Resource...' is badly needed. |
| <li>We need more refactorings and we need all of them to have keyboard |
| shortcuts by default! NetBeans sub-modules should also make use of |
| them. As an example, if I rename a textfield in Matisse, I want the IDE to |
| rename all its usages in my code. |
| <li>I'd love to see two plugins getting included in NetBeans by default: |
| subversion support and Mevenide2 |
| (<a href="http://mevenide.codehaus.org/m2-site/index.html">http://mevenide.codehaus.org/m2-site/index.html</a>, support for maven2). |
| Mevenide2 is very important for me because a) it allows me to import |
| all |
| my existing projects into NetBeans and work on them instantly, and b) I |
| can study its source code and learn even more about how the platform |
| works. I believe that through Mevenide2 and due to Maven2's wide adoption, |
| NetBeans has a great opportunity to appeal to an |
| even broader audience. Regarding Subversion support, it is currently |
| available on the NetBeans Update Center and it's quite stable... I'd like |
| to see new versions of the IDE including it by default. |
| <li>Speed of error highlighting. Say I change a variable name, |
| it takes 3 seconds to see it highlighted... And that's enough |
| time for me to issue a "Build Main Project" action, and then see |
| it fail due to that tiny typo. But perhaps I'm being ignorant |
| and there's a user setting for it somewhere... |
| </ul> |
| |
| <h3>Firstly, in response to your last point, take a look |
| at this FAQ: <a href="http://wiki.netbeans.org/wiki/view/FaqSlowEditorReparsing">FaqSlowEditorReparsing</a>. |
| Secondly, do you plan on creating more modules? Or rich-client Swing applications?</h3> |
| |
| <p><p>Well, I'm not currently in the business of building rich-client |
| Swing applications so I don't see this coming... On the other hand, if |
| I do have to create such an application, I'd seriously consider the <a href="https://platform.netbeans.org/tutorials/">NetBeans Platform</a>. |
| As for modules, well if I see something missing or something I need, I now |
| know how to start implementing it! |
| |
| |
| |
| |
| |
| <h3>Thanks Andreas and continue having fun with NetBeans! And please keep us updated with developments |
| in your Tapestry support module!</h3> |
| <p> |
| |
| |
| <!-- ======================================================================================== --> |
| |
| <h2><a name="nextsteps"></a>Further reading</h2> |
| |
| <p>For information about creating and developing plug-in modules and rich-client applications, see the following resources: |
| <ul> |
| |
| <p><li><a href="https://platform.netbeans.org/tutorials/quickstart-nbm.html">Introduction to NetBeans Module Development</a></li> |
| <p><li><a href="https://platform.netbeans.org/tutorials/nbm-paintapp.html">Introduction to Rich-Client Application Development</a></li> |
| <p><li><a href="https://platform.netbeans.org/tutorials/index.html">NetBeans Modules and Rich-Client Applications Learning Trail</a></li> |
| <p><li><a href="https://netbeans.org/download/dev/javadoc/">NetBeans API Javadoc (Current Development Version)</a></li> |
| <p><li><a href="http://www.planetnetbeans.org">Blogs by NetBeans Engineers and NetBeans Users</a></li></ul> |
| </p> |
| |
| <hr> |
| |
| |
| </body> |
| </html> |