<!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>
