SlideShare uma empresa Scribd logo
1 de 65
Baixar para ler offline
blueMarine
Or Why You Should Really Ship Swing
Applications
Fabrizio Giudici, Senior Java Architect, Tidalwave s.a.s.

TS-5483
Talk about issues with Java™ platform's Rich
Client Applications; enumerate and introduce
solutions from the perspective of a real project.
“Java is mature for Rich Desktop Applications.
Just look beyond Swing.”




                                    2008 JavaOneSM Conference | java.sun.com/javaone |   2
Agenda

 Introduction
 NetBeans™ Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusion




                              2008 JavaOneSM Conference | java.sun.com/javaone |   3
blueMarine introductory video




                            2008 JavaOneSM Conference | java.sun.com/javaone |   4
Speaker’s Qualifications

  Senior Java Architect with 12 years of Java platform
  experience
  Project leading, mentoring, teaching
  Member of JUG Milano, NetBeans Software Dream Team
  Speaker at JavaPolis, Jazoon, JavaOneSM Event, JiniSM
  Meeting
  Writer for NetBeans Software Magazine, Mokabyte
  Blogger at Java.Net




                                        2008 JavaOneSM Conference | java.sun.com/javaone |   5
Java Platform on the Desktop: Readiness Phases

 Phase -1: prior 2005
  • Slow, poorly integrated, ugly L&F
 Phase 0: 2005
  • JDK™ release 5 spreads, “Extreme GUI Makeover” starts
 Phase +1: 2006-2007
  • JDK™ release 6, Aerith, SwingLabs matures
  • TimingFramework, Nimbus, Filthy Rich Clients
 Phase +2: 2008
  • Add NetBeans Software RCP: Filthy Rich Platform Clients
  • Ready for complex applications - anyone?


                                                2008 JavaOneSM Conference | java.sun.com/javaone |   6
Java Platform on the Desktop: Readiness Phases

 Phase -1: prior 2005
                               blueMarine 0.8
  • Slow, poorly integrated, ugly L&F
 Phase 0: 2005
                               died here
  • JDK™ release 5 spreads, “Extreme GUI Makeover” starts
 Phase +1: 2006-2007
  • JDK™ release 6, Aerith, SwingLabs matures
  • TimingFramework, Nimbus, Filthy Rich Clients
 Phase +2: 2008
  • Add NetBeans Software RCP: Filthy Rich Platform Clients
  • Ready for complex applications - anyone?


                                                2008 JavaOneSM Conference | java.sun.com/javaone |   7
Java Platform on the Desktop: Readiness Phases

 Phase -1: prior 2005
                               blueMarine 0.8
  • Slow, poorly integrated, ugly L&F
 Phase 0: 2005
                               died here
  • JDK™ release 5 spreads, “Extreme GUI Makeover” starts
 Phase +1: 2006-2007
                               blueMarine 0.9
  • JDK™ release 6, Aerith, SwingLabs matures
  • TimingFramework, Nimbus, Filthy Rich Clients
 Phase +2: 2008                reborn here
  • Add NetBeans Software RCP: Filthy Rich Platform Clients
  • Ready for complex applications - anyone?


                                                2008 JavaOneSM Conference | java.sun.com/javaone |   8
Problems




           2008 JavaOneSM Conference | java.sun.com/javaone |   9
Solutions




            2008 JavaOneSM Conference | java.sun.com/javaone |   10
If you can just remember four points

  NetBeans Software RCP
  NetBeans Visual Library
  SwingLabs
  NASA World Wind for Java Platform




                                      2008 JavaOneSM Conference | java.sun.com/javaone |   11
OpenBlueSky

 Where generic stuff spins off blueMarine
 Can be used for other applications
 Consolidated stuff going to PlatformX




                                        2008 JavaOneSM Conference | java.sun.com/javaone |   12
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusion




                              2008 JavaOneSM Conference | java.sun.com/javaone |   13
Question

 What do you expect from a (desktop) framework?




                                     2008 JavaOneSM Conference | java.sun.com/javaone |   14
Desktop Frameworks

 Solid foundation to base your application on
 APIs working together, well tested
 Service discovery and provider
 Plugin support
 Messaging infrastructure (via events)
 Integrated help system
 And more




                                         2008 JavaOneSM Conference | java.sun.com/javaone |   15
Swing is not a framework

 Missing sophisticated components
  • e.g.: date picker, tree+table, etc...
 Neither service discovery nor providers
 No plugins
 No messaging (only simple listeners)
 Threading issues
 JSR-296 (Java Specification Request Swing Application
 Framework) not good for large applications




                                         2008 JavaOneSM Conference | java.sun.com/javaone |   16
What is NetBeans Software RCP?




   NetBeans   {   NetBeans IDE
                  NetBeans RCP


                             2008 JavaOneSM Conference | java.sun.com/javaone |   17
What is NetBeans Software RCP?




   NetBeans   {   NetBeans IDE
                  NetBeans RCP


                             2008 JavaOneSM Conference | java.sun.com/javaone |   18
What is NetBeans Software RCP?




   NetBeans   {   NetBeans IDE
              NetBeans RCP
   Your Desktop Application

                             2008 JavaOneSM Conference | java.sun.com/javaone |   19
NetBeans Software RCP

 You start with a skeleton application
 You populate it
  • panels, views
  • actions, menus, toolbars
  • etc..
 Often declaratively
 Based on Swing
  • You can integrate third parties' components
  • You can control the Look&Feel



                                                  2008 JavaOneSM Conference | java.sun.com/javaone |   20
Most important NetBeans RCP APIs

 Actions               Modules
 DataObjects           Nodes
 Dialogs               Options
 Explorer              Progress
 FileSystem            Visual Library
 Lookup                Windowing/docking




                               2008 JavaOneSM Conference | java.sun.com/javaone |   21
Explorers, Viewers, Actions




                              2008 JavaOneSM Conference | java.sun.com/javaone |   22
Lookup API

 Plays a fundamental role in many APIs
 Repository for a bag of objects
 Locator for services
 Fires events
 “Global” lookup can be used as a simple “event bus”



      Service service =
         Lookup.getDefault().lookup(Service.class);




                                        2008 JavaOneSM Conference | java.sun.com/javaone |   23
DataObject represents a file-based entity




                                2008 JavaOneSM Conference | java.sun.com/javaone |   24
You can extend DataObject




                            2008 JavaOneSM Conference | java.sun.com/javaone |   25
Creating a new DataObject
layer.xml:
<filesystem>
      <folder name="Services">
           <folder name="MIMEResolver">
               <file name="PhotoResolver.xml" url="PhotoResolver.xml">
               </file>
           </folder>
      </folder>
</filesystem>

PhotoResolver.xml:
<MIME-resolver>
     <file>
          <ext name="TIF"/>
          <ext name="TIFF"/>
          <resolver mime="image/tiff"/>
     </file>
     <!-- others ext/mime mappings -->
</MIME-resolver>


                                               2008 JavaOneSM Conference | java.sun.com/javaone |   26
Creating a new DataObject
public class PhotoDataObject extends MultiDataObject { ... }

public class PhotoDataLoader extends UniFileLoader {
    public PhotoDataLoader() {
        // contains “image/jpg”, “image/tiff”, etc...
        String[] mimeTypes = ImageIO.getReaderMIMETypes();
        for (final String mimeType : mimeTypes) {
            getExtensions().addMimeType(mimeType);
          }
      }

     protected MultiDataObject createMultiObject(FileObject file) {
         return new PhotoDataObject(file, this);
       }

     //...
 }




                                              2008 JavaOneSM Conference | java.sun.com/javaone |   27
Lookup holds “capabilities”




                              2008 JavaOneSM Conference | java.sun.com/javaone |   28
Node “represents” DataObject




                               2008 JavaOneSM Conference | java.sun.com/javaone |   29
Node has “capabilities” too




                              2008 JavaOneSM Conference | java.sun.com/javaone |   30
Managing basic objects
File file = new File("photo.jpg");
FileObject fileObject = FileUtil.toFileObject(file);
DataObject dataObject = DataObject.find(fileObject);
// Note: static type is DataObject,
//       not PhotoDataObject

Node node = dataObject.getNodeDelegate();

// Retrieve capabilities
// They have been set by PhotoDataObject constructor

Metadata metadata = dataObject.getLookup().
                    lookup(Metadata.class);
// or
Metadata metadata = node.getLookup().
                    lookup(Metadata.class);

                                    2008 JavaOneSM Conference | java.sun.com/javaone |   31
Representing sets of Nodes




                      




                             2008 JavaOneSM Conference | java.sun.com/javaone |   32
View renders Nodes




                     2008 JavaOneSM Conference | java.sun.com/javaone |   33
Actions can be automatically enabled




                              2008 JavaOneSM Conference | java.sun.com/javaone |   34
Declaring Actions
<filesystem>
    <folder name="Actions">
        <folder name="Window">
             <file name="mypkg-CalendarExplorerAction.instance"/>
        </folder>
    </folder>

    <!-- Adds the action to the Menu/Window main menu. -->
    <folder name="Menu">
        <folder name="Window">
            <file name="CalendarExplorerAction.shadow">
                <attr name="originalFile"
stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/>
                <attr name="position" intvalue="120"/>
            </file>
        </folder>
    </folder>




                                             2008 JavaOneSM Conference | java.sun.com/javaone |   35
Declaring Actions
    <!-- Adds the actions to the Component toolbar. -->
    <folder name="Toolbars">
        <folder name="Explorer">
            <file name="mypkg-CalendarExplorerAction.shadow">
                <attr name="originalFile"
stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/>
                <attr name="position" intvalue="120"/>
            </file>
        </folder>
    </folder>

    <!-- Creates keystroke shortcuts. -->
    <folder name="Shortcuts">
        <file name="A-D-L.shadow">
            <attr name="originalFile"
stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/>
        </file>
    </folder>

</filesystem>

                                             2008 JavaOneSM Conference | java.sun.com/javaone |   36
Example of context-sensitive Action
public class ShowPhotoAction extends CookieAction {
    protected void performAction(Node[] nodes) {
        PhotoDataObject dataObject = nodes[0].getLookup().
            lookup(PhotoDataObject.class);
        // use dataObject
    }
    protected int mode() {
        return CookieAction.MODE_EXACTLY_ONE;
    }
    public String getName() {
        return "Show Photo";
    }
    protected Class[] cookieClasses() {
        return new Class[] { PhotoDataObject.class };
    }
    protected String iconResource() {
        return ".../show_photo.png";
    }
    ...
}

                                             2008 JavaOneSM Conference | java.sun.com/javaone |   37
Some points

 You don't need to always use everything
  • E.g. just Nodes, no DataObjects
  • Can use them “incrementally”
 NetBeans Software RCP keeps objects in sync
  • E.g. updating a DataObject → bound Nodes
  • E.g. Nodes bound to the same DataObject
  • By means of PropertyChangeListener




                                       2008 JavaOneSM Conference | java.sun.com/javaone |   38
NetBeans Software RCP stuff can be
extended
 What about a “cover flow” view?
 Use JOGL (Java Bindings for OpenGL) for fast 3D API
 Just extend and create a new View
 TimingFramework for animating stuff




                                          2008 JavaOneSM Conference | java.sun.com/javaone |   39
CoverFlowView




                2008 JavaOneSM Conference | java.sun.com/javaone |   40
Update Centers

 NetBeans software components (.nbm)
  • can be added / removed on the fly
  • can declare dependencies
  • can be versioned
  • can add actions, menus, toolbars
 Pretty good for plugins




                                        2008 JavaOneSM Conference | java.sun.com/javaone |   41
Update Centers




                 2008 JavaOneSM Conference | java.sun.com/javaone |   42
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusion




                              2008 JavaOneSM Conference | java.sun.com/javaone |   43
Visual Library

  Support for graph-oriented modeling
   • Nodes
   • Arcs
   • Routing
   • Interaction
  Can be creatively used
   • Whiteboard paradigm
   • Use interactivity: touch, drag, change objects
  PS Can be used with plain Swing apps



                                                  2008 JavaOneSM Conference | java.sun.com/javaone |   44
LightTable




             2008 JavaOneSM Conference | java.sun.com/javaone |   45
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusion




                              2008 JavaOneSM Conference | java.sun.com/javaone |   46
JXMapViewer

 A generic 2D, tile-based map renderer
  • See Joshua Marinacci's blog
  • Retrieves tiles from the web
    (or locally)
  • Part of Swing-WS (SwingLabs)
  • Can stick objects to the map




 Hint: integrate it with the Visual Library

                                              2008 JavaOneSM Conference | java.sun.com/javaone |   47
GeoViewer




            2008 JavaOneSM Conference | java.sun.com/javaone |   48
NASA World Wind for Java Platform

 Java platform version of NASA World Wind
  • 3D software that renders the Earth
  • NASA terrain imagery
  • Other data sets can be plugged in
    • if legal stuff is ok...
 Based on JOGL




                                       2008 JavaOneSM Conference | java.sun.com/javaone |   49
GeoViewer 3D




               2008 JavaOneSM Conference | java.sun.com/javaone |   50
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusion




                              2008 JavaOneSM Conference | java.sun.com/javaone |   51
Java Platform Imaging APIs

 Many options (and dispersive?)
  • Java 2D™ API, JAI, ImageJ, JMagick, JHLabs, ...
 Some too difficult
 Wild behaviour and performance differences
 Parallel Computing is a must
  • Multi Core
  • Small, local mini-grids
  • Massive Grid Computing
 There's not a global community



                                              2008 JavaOneSM Conference | java.sun.com/javaone |   52
Mistral: fix 'em up

  Imaging meta-framework
  Multiple APIs can
  be used together
  Simplifies APIs
  Supports multicore,
  Jini services, Sun™ Grid




                             2008 JavaOneSM Conference | java.sun.com/javaone |   53
Some Mistral examples
File file = new File(...);
EditableImage image = EditableImage.create(new ReadOp(file, 0));
image.execute(new ResizeOp(600, 400));
EXIF exif = image.getMetadata(EXIF.class);

public class MyTask extends ImagingTask {
    private File file;
    public MyImagingTask (File file) { this.file = file; }
    public void run() {
        EditableImage image = read(file, 0);
        execute(image, new CropOp(10, 10, 600, 400), "crop");
        Histogram histogram = execute(image,
           new HistogramOp(), "histogram").getHistogram();
           // etc...
        }
    }

for (int i = 0; i < n; i++) {
    ImagingTaskProcessor.getInstance().post(new MyTask(file[i]));
    }

                                             2008 JavaOneSM Conference | java.sun.com/javaone |   54
Agenda

 Introduction
 NetBeans Software RCP
 Visual Library
 GeoSpatial Components
 Java Platform Imaging APIs
 Conclusion




                              2008 JavaOneSM Conference | java.sun.com/javaone |   55
Open Problems for blueMarine

 Java platform still misses something on the desktop
  • e.g. video streaming, USB support
  • Can be worked around with JNI/JNA
  • Java platform 7 is not too far
 Some NB RCP stuff not fully customizable
 Better integration NB RCP SwingLabs
 Compliance to Apple HIG
 Linux + JOGL issues
 No JAI native support for Mac OS X


                                         2008 JavaOneSM Conference | java.sun.com/javaone |   56
Be efficient with innovation

  “Cool stuff„ often means complexity
   • Go quickly from idea to prototype
   • Integrate easily others' stuff
   • NIH isn't a killer-idea, but an idea-killer
  Build cool demonstrators
   • ...and cool applications soon after

  (stay tuned for some new cool stuff)




                                                   2008 JavaOneSM Conference | java.sun.com/javaone |   57
Summary

 Most Swing showstoppers are history now




                                      2008 JavaOneSM Conference | java.sun.com/javaone |   58
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps




                                      2008 JavaOneSM Conference | java.sun.com/javaone |   59
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps
 There's a world beyond Swing
  • SwingLabs, NetBeans Software RCP, etc...




                                          2008 JavaOneSM Conference | java.sun.com/javaone |   60
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps
 There's a world beyond Swing
  • SwingLabs, NetBeans Software RCP, etc...
 Be creative. Mix 'em up.
 NetBeans: the only IDE I need...




                                          2008 JavaOneSM Conference | java.sun.com/javaone |   61
Summary

 Most Swing showstoppers are history now
 You CAN ship desktop apps
 There's a world beyond Swing
  • SwingLabs, NetBeans Software RCP, etc...
 Be creative. Mix 'em up.
 NetBeans: the only IDE I need...
 ... but for some tasks related to digital photo management
 Eclipse is just the best tool




                                         2008 JavaOneSM Conference | java.sun.com/javaone |   62
Eclipse Optic Cleaning System




                                2008 JavaOneSM Conference | java.sun.com/javaone |   63
For More Information

 Links to projects, blogs and documentation
  • weblogs.java.net/blog/fabriziogiudici
  • bluemarine.tidalwave.it
  • openbluesky.dev.java.net
  • mistral.tidalwave.it
  • forceten.tidalwave.it
  • www.netbeans.org/features/platform
  • graph.netbeans.org
  • platformx.netbeans.org
  • www.swinglabs.org
  • worldwind.arc.nasa.gov/java
  • quaqua.dev.java.net
                                        2008 JavaOneSM Conference | java.sun.com/javaone |   64
blueMarine
Or Why You Should Really Ship Swing
Applications
Fabrizio Giudici
TS-5483.                          Speaker’s logo here
                                      (optional)

Mais conteúdo relacionado

Mais procurados

Java Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewJava Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewEugene Bogaart
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemBruno Borges
 
Enterprise Persistence in OSGi - Mike Keith, Oracle
Enterprise Persistence in OSGi - Mike Keith, OracleEnterprise Persistence in OSGi - Mike Keith, Oracle
Enterprise Persistence in OSGi - Mike Keith, Oraclemfrancis
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXBruno Borges
 
How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...
How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...
How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...Capgemini
 
Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9Pavel Bucek
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersBruno Borges
 
OpenStack and MySQL
OpenStack and MySQLOpenStack and MySQL
OpenStack and MySQLMatt Lord
 

Mais procurados (9)

Java Enterprise Edition 6 Overview
Java Enterprise Edition 6 OverviewJava Enterprise Edition 6 Overview
Java Enterprise Edition 6 Overview
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
 
Enterprise Persistence in OSGi - Mike Keith, Oracle
Enterprise Persistence in OSGi - Mike Keith, OracleEnterprise Persistence in OSGi - Mike Keith, Oracle
Enterprise Persistence in OSGi - Mike Keith, Oracle
 
Migrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFXMigrating From Applets to Java Desktop Apps in JavaFX
Migrating From Applets to Java Desktop Apps in JavaFX
 
How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...
How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...
How Capgemini Built a Pan-European Tax Messaging System Using Oracle Fusion M...
 
Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9Pitfalls of migrating projects to JDK 9
Pitfalls of migrating projects to JDK 9
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c Developers
 
oraclewls-jrebel
oraclewls-jrebeloraclewls-jrebel
oraclewls-jrebel
 
OpenStack and MySQL
OpenStack and MySQLOpenStack and MySQL
OpenStack and MySQL
 

Destaque

blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with JavaFabrizio Giudici
 
NOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case studyNOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case studyFabrizio Giudici
 
Bretagne France
Bretagne FranceBretagne France
Bretagne Francepepa
 
About Michael Ellowitz
About Michael EllowitzAbout Michael Ellowitz
About Michael Ellowitzellowim
 
blueMarine a desktop app for the open source photographic workflow
blueMarine  a desktop app for the open source photographic workflowblueMarine  a desktop app for the open source photographic workflow
blueMarine a desktop app for the open source photographic workflowFabrizio Giudici
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile applicationFabrizio Giudici
 
Tools for an effective software factory
Tools for an effective software factoryTools for an effective software factory
Tools for an effective software factoryFabrizio Giudici
 

Destaque (8)

Mercurial
MercurialMercurial
Mercurial
 
blueMarine photographic workflow with Java
blueMarine photographic workflow with JavablueMarine photographic workflow with Java
blueMarine photographic workflow with Java
 
NOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case studyNOSQL also means RDF stores: an Android case study
NOSQL also means RDF stores: an Android case study
 
Bretagne France
Bretagne FranceBretagne France
Bretagne France
 
About Michael Ellowitz
About Michael EllowitzAbout Michael Ellowitz
About Michael Ellowitz
 
blueMarine a desktop app for the open source photographic workflow
blueMarine  a desktop app for the open source photographic workflowblueMarine  a desktop app for the open source photographic workflow
blueMarine a desktop app for the open source photographic workflow
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
 
Tools for an effective software factory
Tools for an effective software factoryTools for an effective software factory
Tools for an effective software factory
 

Semelhante a Why You Should Ship Swing Apps with NetBeans RCP

Boldly go where the Java programming language has never gone before
Boldly go where the Java programming language has never gone beforeBoldly go where the Java programming language has never gone before
Boldly go where the Java programming language has never gone beforeelliando dias
 
Seven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuseSeven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuseMatt Raible
 
MySQL creative programming
MySQL creative programmingMySQL creative programming
MySQL creative programmingGiuseppe Maxia
 
Developing Plug-Ins for NetBeans
Developing Plug-Ins for NetBeansDeveloping Plug-Ins for NetBeans
Developing Plug-Ins for NetBeanselliando dias
 
JRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell YouJRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell Youelliando dias
 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introductionvstorm83
 
Advanced #6 clean architecture
Advanced #6  clean architectureAdvanced #6  clean architecture
Advanced #6 clean architectureVitali Pekelis
 
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONSADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONSelliando dias
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...Nick Dellamaggiore
 
Net Beans61 Platform
Net Beans61 PlatformNet Beans61 Platform
Net Beans61 Platformsatyajit_t
 
Introduction to java servlet 3.0 api javaone 2008
Introduction to java servlet 3.0 api javaone 2008Introduction to java servlet 3.0 api javaone 2008
Introduction to java servlet 3.0 api javaone 2008JavaEE Trainers
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applicationshchen1
 
WebLogic Developer Experience and Java EE 6
WebLogic Developer Experience and Java EE 6WebLogic Developer Experience and Java EE 6
WebLogic Developer Experience and Java EE 6Jeffrey West
 
JCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptxJCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptxGrace Jansen
 
From Java to Ruby...and Back
From Java to Ruby...and BackFrom Java to Ruby...and Back
From Java to Ruby...and BackAnil Hemrajani
 
LinkedIn Communication Architecture
LinkedIn Communication ArchitectureLinkedIn Communication Architecture
LinkedIn Communication ArchitectureLinkedIn
 

Semelhante a Why You Should Ship Swing Apps with NetBeans RCP (20)

Boldly go where the Java programming language has never gone before
Boldly go where the Java programming language has never gone beforeBoldly go where the Java programming language has never gone before
Boldly go where the Java programming language has never gone before
 
Seven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuseSeven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuse
 
MySQL creative programming
MySQL creative programmingMySQL creative programming
MySQL creative programming
 
Developing Plug-Ins for NetBeans
Developing Plug-Ins for NetBeansDeveloping Plug-Ins for NetBeans
Developing Plug-Ins for NetBeans
 
JRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell YouJRuby on Rails Deployment: What They Didn't Tell You
JRuby on Rails Deployment: What They Didn't Tell You
 
eXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework IntroductioneXo Platform SEA - Play Framework Introduction
eXo Platform SEA - Play Framework Introduction
 
Advanced #6 clean architecture
Advanced #6  clean architectureAdvanced #6  clean architecture
Advanced #6 clean architecture
 
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONSADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
ADDRESSING TOMORROW'S SECURITY REQUIREMENTS IN ENTERPRISE APPLICATIONS
 
SunMicroSystems
SunMicroSystemsSunMicroSystems
SunMicroSystems
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
 
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
LinkedIn - A Professional Network built with Java Technologies and Agile Prac...
 
Sunstate
SunstateSunstate
Sunstate
 
Net Beans61 Platform
Net Beans61 PlatformNet Beans61 Platform
Net Beans61 Platform
 
Introduction to java servlet 3.0 api javaone 2008
Introduction to java servlet 3.0 api javaone 2008Introduction to java servlet 3.0 api javaone 2008
Introduction to java servlet 3.0 api javaone 2008
 
Developing Java Web Applications
Developing Java Web ApplicationsDeveloping Java Web Applications
Developing Java Web Applications
 
WebLogic Developer Experience and Java EE 6
WebLogic Developer Experience and Java EE 6WebLogic Developer Experience and Java EE 6
WebLogic Developer Experience and Java EE 6
 
JCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptxJCON_15FactorWorkshop.pptx
JCON_15FactorWorkshop.pptx
 
From Java to Ruby...and Back
From Java to Ruby...and BackFrom Java to Ruby...and Back
From Java to Ruby...and Back
 
Migrating Beyond Java 8
Migrating Beyond Java 8Migrating Beyond Java 8
Migrating Beyond Java 8
 
LinkedIn Communication Architecture
LinkedIn Communication ArchitectureLinkedIn Communication Architecture
LinkedIn Communication Architecture
 

Mais de Fabrizio Giudici

Building Android apps with Maven
Building Android apps with MavenBuilding Android apps with Maven
Building Android apps with MavenFabrizio Giudici
 
DCI - Data, Context and Interaction @ Jug Lugano May 2011
DCI - Data, Context and Interaction @ Jug Lugano May 2011 DCI - Data, Context and Interaction @ Jug Lugano May 2011
DCI - Data, Context and Interaction @ Jug Lugano May 2011 Fabrizio Giudici
 
DCI - Data, Context and Interaction @ Jug Genova April 2011
DCI - Data, Context and Interaction @ Jug Genova April 2011DCI - Data, Context and Interaction @ Jug Genova April 2011
DCI - Data, Context and Interaction @ Jug Genova April 2011Fabrizio Giudici
 
Parallel Computing Scenarios and the new challenges for the Software Architect
Parallel Computing Scenarios  and the new challenges for the Software ArchitectParallel Computing Scenarios  and the new challenges for the Software Architect
Parallel Computing Scenarios and the new challenges for the Software ArchitectFabrizio Giudici
 
blueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformblueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformFabrizio Giudici
 
NASA World Wind for Java API Overview
NASA World Wind for Java  API OverviewNASA World Wind for Java  API Overview
NASA World Wind for Java API OverviewFabrizio Giudici
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans Fabrizio Giudici
 
Web Development with Apache Struts 2
Web Development with  Apache Struts 2Web Development with  Apache Struts 2
Web Development with Apache Struts 2Fabrizio Giudici
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-luganoFabrizio Giudici
 

Mais de Fabrizio Giudici (11)

Building Android apps with Maven
Building Android apps with MavenBuilding Android apps with Maven
Building Android apps with Maven
 
DCI - Data, Context and Interaction @ Jug Lugano May 2011
DCI - Data, Context and Interaction @ Jug Lugano May 2011 DCI - Data, Context and Interaction @ Jug Lugano May 2011
DCI - Data, Context and Interaction @ Jug Lugano May 2011
 
DCI - Data, Context and Interaction @ Jug Genova April 2011
DCI - Data, Context and Interaction @ Jug Genova April 2011DCI - Data, Context and Interaction @ Jug Genova April 2011
DCI - Data, Context and Interaction @ Jug Genova April 2011
 
Netbeans+platform+maven
Netbeans+platform+mavenNetbeans+platform+maven
Netbeans+platform+maven
 
Parallel Computing Scenarios and the new challenges for the Software Architect
Parallel Computing Scenarios  and the new challenges for the Software ArchitectParallel Computing Scenarios  and the new challenges for the Software Architect
Parallel Computing Scenarios and the new challenges for the Software Architect
 
blueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans PlatformblueMarine Sailing with NetBeans Platform
blueMarine Sailing with NetBeans Platform
 
NASA World Wind for Java API Overview
NASA World Wind for Java  API OverviewNASA World Wind for Java  API Overview
NASA World Wind for Java API Overview
 
Rich Internet Applications con JavaFX e NetBeans
Rich Internet Applications  con JavaFX e NetBeans Rich Internet Applications  con JavaFX e NetBeans
Rich Internet Applications con JavaFX e NetBeans
 
The VRC Project
The VRC ProjectThe VRC Project
The VRC Project
 
Web Development with Apache Struts 2
Web Development with  Apache Struts 2Web Development with  Apache Struts 2
Web Development with Apache Struts 2
 
Android java fx-jme@jug-lugano
Android java fx-jme@jug-luganoAndroid java fx-jme@jug-lugano
Android java fx-jme@jug-lugano
 

Último

Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 

Último (20)

Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 

Why You Should Ship Swing Apps with NetBeans RCP

  • 1. blueMarine Or Why You Should Really Ship Swing Applications Fabrizio Giudici, Senior Java Architect, Tidalwave s.a.s. TS-5483
  • 2. Talk about issues with Java™ platform's Rich Client Applications; enumerate and introduce solutions from the perspective of a real project. “Java is mature for Rich Desktop Applications. Just look beyond Swing.” 2008 JavaOneSM Conference | java.sun.com/javaone | 2
  • 3. Agenda Introduction NetBeans™ Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 3
  • 4. blueMarine introductory video 2008 JavaOneSM Conference | java.sun.com/javaone | 4
  • 5. Speaker’s Qualifications Senior Java Architect with 12 years of Java platform experience Project leading, mentoring, teaching Member of JUG Milano, NetBeans Software Dream Team Speaker at JavaPolis, Jazoon, JavaOneSM Event, JiniSM Meeting Writer for NetBeans Software Magazine, Mokabyte Blogger at Java.Net 2008 JavaOneSM Conference | java.sun.com/javaone | 5
  • 6. Java Platform on the Desktop: Readiness Phases Phase -1: prior 2005 • Slow, poorly integrated, ugly L&F Phase 0: 2005 • JDK™ release 5 spreads, “Extreme GUI Makeover” starts Phase +1: 2006-2007 • JDK™ release 6, Aerith, SwingLabs matures • TimingFramework, Nimbus, Filthy Rich Clients Phase +2: 2008 • Add NetBeans Software RCP: Filthy Rich Platform Clients • Ready for complex applications - anyone? 2008 JavaOneSM Conference | java.sun.com/javaone | 6
  • 7. Java Platform on the Desktop: Readiness Phases Phase -1: prior 2005 blueMarine 0.8 • Slow, poorly integrated, ugly L&F Phase 0: 2005 died here • JDK™ release 5 spreads, “Extreme GUI Makeover” starts Phase +1: 2006-2007 • JDK™ release 6, Aerith, SwingLabs matures • TimingFramework, Nimbus, Filthy Rich Clients Phase +2: 2008 • Add NetBeans Software RCP: Filthy Rich Platform Clients • Ready for complex applications - anyone? 2008 JavaOneSM Conference | java.sun.com/javaone | 7
  • 8. Java Platform on the Desktop: Readiness Phases Phase -1: prior 2005 blueMarine 0.8 • Slow, poorly integrated, ugly L&F Phase 0: 2005 died here • JDK™ release 5 spreads, “Extreme GUI Makeover” starts Phase +1: 2006-2007 blueMarine 0.9 • JDK™ release 6, Aerith, SwingLabs matures • TimingFramework, Nimbus, Filthy Rich Clients Phase +2: 2008 reborn here • Add NetBeans Software RCP: Filthy Rich Platform Clients • Ready for complex applications - anyone? 2008 JavaOneSM Conference | java.sun.com/javaone | 8
  • 9. Problems 2008 JavaOneSM Conference | java.sun.com/javaone | 9
  • 10. Solutions 2008 JavaOneSM Conference | java.sun.com/javaone | 10
  • 11. If you can just remember four points NetBeans Software RCP NetBeans Visual Library SwingLabs NASA World Wind for Java Platform 2008 JavaOneSM Conference | java.sun.com/javaone | 11
  • 12. OpenBlueSky Where generic stuff spins off blueMarine Can be used for other applications Consolidated stuff going to PlatformX 2008 JavaOneSM Conference | java.sun.com/javaone | 12
  • 13. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 13
  • 14. Question What do you expect from a (desktop) framework? 2008 JavaOneSM Conference | java.sun.com/javaone | 14
  • 15. Desktop Frameworks Solid foundation to base your application on APIs working together, well tested Service discovery and provider Plugin support Messaging infrastructure (via events) Integrated help system And more 2008 JavaOneSM Conference | java.sun.com/javaone | 15
  • 16. Swing is not a framework Missing sophisticated components • e.g.: date picker, tree+table, etc... Neither service discovery nor providers No plugins No messaging (only simple listeners) Threading issues JSR-296 (Java Specification Request Swing Application Framework) not good for large applications 2008 JavaOneSM Conference | java.sun.com/javaone | 16
  • 17. What is NetBeans Software RCP? NetBeans { NetBeans IDE NetBeans RCP 2008 JavaOneSM Conference | java.sun.com/javaone | 17
  • 18. What is NetBeans Software RCP? NetBeans { NetBeans IDE NetBeans RCP 2008 JavaOneSM Conference | java.sun.com/javaone | 18
  • 19. What is NetBeans Software RCP? NetBeans { NetBeans IDE NetBeans RCP Your Desktop Application 2008 JavaOneSM Conference | java.sun.com/javaone | 19
  • 20. NetBeans Software RCP You start with a skeleton application You populate it • panels, views • actions, menus, toolbars • etc.. Often declaratively Based on Swing • You can integrate third parties' components • You can control the Look&Feel 2008 JavaOneSM Conference | java.sun.com/javaone | 20
  • 21. Most important NetBeans RCP APIs Actions Modules DataObjects Nodes Dialogs Options Explorer Progress FileSystem Visual Library Lookup Windowing/docking 2008 JavaOneSM Conference | java.sun.com/javaone | 21
  • 22. Explorers, Viewers, Actions 2008 JavaOneSM Conference | java.sun.com/javaone | 22
  • 23. Lookup API Plays a fundamental role in many APIs Repository for a bag of objects Locator for services Fires events “Global” lookup can be used as a simple “event bus” Service service = Lookup.getDefault().lookup(Service.class); 2008 JavaOneSM Conference | java.sun.com/javaone | 23
  • 24. DataObject represents a file-based entity 2008 JavaOneSM Conference | java.sun.com/javaone | 24
  • 25. You can extend DataObject 2008 JavaOneSM Conference | java.sun.com/javaone | 25
  • 26. Creating a new DataObject layer.xml: <filesystem> <folder name="Services"> <folder name="MIMEResolver"> <file name="PhotoResolver.xml" url="PhotoResolver.xml"> </file> </folder> </folder> </filesystem> PhotoResolver.xml: <MIME-resolver> <file> <ext name="TIF"/> <ext name="TIFF"/> <resolver mime="image/tiff"/> </file> <!-- others ext/mime mappings --> </MIME-resolver> 2008 JavaOneSM Conference | java.sun.com/javaone | 26
  • 27. Creating a new DataObject public class PhotoDataObject extends MultiDataObject { ... } public class PhotoDataLoader extends UniFileLoader { public PhotoDataLoader() { // contains “image/jpg”, “image/tiff”, etc... String[] mimeTypes = ImageIO.getReaderMIMETypes(); for (final String mimeType : mimeTypes) { getExtensions().addMimeType(mimeType); } } protected MultiDataObject createMultiObject(FileObject file) { return new PhotoDataObject(file, this); } //... } 2008 JavaOneSM Conference | java.sun.com/javaone | 27
  • 28. Lookup holds “capabilities” 2008 JavaOneSM Conference | java.sun.com/javaone | 28
  • 29. Node “represents” DataObject 2008 JavaOneSM Conference | java.sun.com/javaone | 29
  • 30. Node has “capabilities” too 2008 JavaOneSM Conference | java.sun.com/javaone | 30
  • 31. Managing basic objects File file = new File("photo.jpg"); FileObject fileObject = FileUtil.toFileObject(file); DataObject dataObject = DataObject.find(fileObject); // Note: static type is DataObject, // not PhotoDataObject Node node = dataObject.getNodeDelegate(); // Retrieve capabilities // They have been set by PhotoDataObject constructor Metadata metadata = dataObject.getLookup(). lookup(Metadata.class); // or Metadata metadata = node.getLookup(). lookup(Metadata.class); 2008 JavaOneSM Conference | java.sun.com/javaone | 31
  • 32. Representing sets of Nodes 2008 JavaOneSM Conference | java.sun.com/javaone | 32
  • 33. View renders Nodes 2008 JavaOneSM Conference | java.sun.com/javaone | 33
  • 34. Actions can be automatically enabled 2008 JavaOneSM Conference | java.sun.com/javaone | 34
  • 35. Declaring Actions <filesystem> <folder name="Actions"> <folder name="Window"> <file name="mypkg-CalendarExplorerAction.instance"/> </folder> </folder> <!-- Adds the action to the Menu/Window main menu. --> <folder name="Menu"> <folder name="Window"> <file name="CalendarExplorerAction.shadow"> <attr name="originalFile" stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/> <attr name="position" intvalue="120"/> </file> </folder> </folder> 2008 JavaOneSM Conference | java.sun.com/javaone | 35
  • 36. Declaring Actions <!-- Adds the actions to the Component toolbar. --> <folder name="Toolbars"> <folder name="Explorer"> <file name="mypkg-CalendarExplorerAction.shadow"> <attr name="originalFile" stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/> <attr name="position" intvalue="120"/> </file> </folder> </folder> <!-- Creates keystroke shortcuts. --> <folder name="Shortcuts"> <file name="A-D-L.shadow"> <attr name="originalFile" stringvalue="Actions/Window/mypkg-CalendarExplorerAction.instance"/> </file> </folder> </filesystem> 2008 JavaOneSM Conference | java.sun.com/javaone | 36
  • 37. Example of context-sensitive Action public class ShowPhotoAction extends CookieAction { protected void performAction(Node[] nodes) { PhotoDataObject dataObject = nodes[0].getLookup(). lookup(PhotoDataObject.class); // use dataObject } protected int mode() { return CookieAction.MODE_EXACTLY_ONE; } public String getName() { return "Show Photo"; } protected Class[] cookieClasses() { return new Class[] { PhotoDataObject.class }; } protected String iconResource() { return ".../show_photo.png"; } ... } 2008 JavaOneSM Conference | java.sun.com/javaone | 37
  • 38. Some points You don't need to always use everything • E.g. just Nodes, no DataObjects • Can use them “incrementally” NetBeans Software RCP keeps objects in sync • E.g. updating a DataObject → bound Nodes • E.g. Nodes bound to the same DataObject • By means of PropertyChangeListener 2008 JavaOneSM Conference | java.sun.com/javaone | 38
  • 39. NetBeans Software RCP stuff can be extended What about a “cover flow” view? Use JOGL (Java Bindings for OpenGL) for fast 3D API Just extend and create a new View TimingFramework for animating stuff 2008 JavaOneSM Conference | java.sun.com/javaone | 39
  • 40. CoverFlowView 2008 JavaOneSM Conference | java.sun.com/javaone | 40
  • 41. Update Centers NetBeans software components (.nbm) • can be added / removed on the fly • can declare dependencies • can be versioned • can add actions, menus, toolbars Pretty good for plugins 2008 JavaOneSM Conference | java.sun.com/javaone | 41
  • 42. Update Centers 2008 JavaOneSM Conference | java.sun.com/javaone | 42
  • 43. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 43
  • 44. Visual Library Support for graph-oriented modeling • Nodes • Arcs • Routing • Interaction Can be creatively used • Whiteboard paradigm • Use interactivity: touch, drag, change objects PS Can be used with plain Swing apps 2008 JavaOneSM Conference | java.sun.com/javaone | 44
  • 45. LightTable 2008 JavaOneSM Conference | java.sun.com/javaone | 45
  • 46. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 46
  • 47. JXMapViewer A generic 2D, tile-based map renderer • See Joshua Marinacci's blog • Retrieves tiles from the web (or locally) • Part of Swing-WS (SwingLabs) • Can stick objects to the map Hint: integrate it with the Visual Library 2008 JavaOneSM Conference | java.sun.com/javaone | 47
  • 48. GeoViewer 2008 JavaOneSM Conference | java.sun.com/javaone | 48
  • 49. NASA World Wind for Java Platform Java platform version of NASA World Wind • 3D software that renders the Earth • NASA terrain imagery • Other data sets can be plugged in • if legal stuff is ok... Based on JOGL 2008 JavaOneSM Conference | java.sun.com/javaone | 49
  • 50. GeoViewer 3D 2008 JavaOneSM Conference | java.sun.com/javaone | 50
  • 51. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 51
  • 52. Java Platform Imaging APIs Many options (and dispersive?) • Java 2D™ API, JAI, ImageJ, JMagick, JHLabs, ... Some too difficult Wild behaviour and performance differences Parallel Computing is a must • Multi Core • Small, local mini-grids • Massive Grid Computing There's not a global community 2008 JavaOneSM Conference | java.sun.com/javaone | 52
  • 53. Mistral: fix 'em up Imaging meta-framework Multiple APIs can be used together Simplifies APIs Supports multicore, Jini services, Sun™ Grid 2008 JavaOneSM Conference | java.sun.com/javaone | 53
  • 54. Some Mistral examples File file = new File(...); EditableImage image = EditableImage.create(new ReadOp(file, 0)); image.execute(new ResizeOp(600, 400)); EXIF exif = image.getMetadata(EXIF.class); public class MyTask extends ImagingTask { private File file; public MyImagingTask (File file) { this.file = file; } public void run() { EditableImage image = read(file, 0); execute(image, new CropOp(10, 10, 600, 400), "crop"); Histogram histogram = execute(image, new HistogramOp(), "histogram").getHistogram(); // etc... } } for (int i = 0; i < n; i++) { ImagingTaskProcessor.getInstance().post(new MyTask(file[i])); } 2008 JavaOneSM Conference | java.sun.com/javaone | 54
  • 55. Agenda Introduction NetBeans Software RCP Visual Library GeoSpatial Components Java Platform Imaging APIs Conclusion 2008 JavaOneSM Conference | java.sun.com/javaone | 55
  • 56. Open Problems for blueMarine Java platform still misses something on the desktop • e.g. video streaming, USB support • Can be worked around with JNI/JNA • Java platform 7 is not too far Some NB RCP stuff not fully customizable Better integration NB RCP SwingLabs Compliance to Apple HIG Linux + JOGL issues No JAI native support for Mac OS X 2008 JavaOneSM Conference | java.sun.com/javaone | 56
  • 57. Be efficient with innovation “Cool stuff„ often means complexity • Go quickly from idea to prototype • Integrate easily others' stuff • NIH isn't a killer-idea, but an idea-killer Build cool demonstrators • ...and cool applications soon after (stay tuned for some new cool stuff) 2008 JavaOneSM Conference | java.sun.com/javaone | 57
  • 58. Summary Most Swing showstoppers are history now 2008 JavaOneSM Conference | java.sun.com/javaone | 58
  • 59. Summary Most Swing showstoppers are history now You CAN ship desktop apps 2008 JavaOneSM Conference | java.sun.com/javaone | 59
  • 60. Summary Most Swing showstoppers are history now You CAN ship desktop apps There's a world beyond Swing • SwingLabs, NetBeans Software RCP, etc... 2008 JavaOneSM Conference | java.sun.com/javaone | 60
  • 61. Summary Most Swing showstoppers are history now You CAN ship desktop apps There's a world beyond Swing • SwingLabs, NetBeans Software RCP, etc... Be creative. Mix 'em up. NetBeans: the only IDE I need... 2008 JavaOneSM Conference | java.sun.com/javaone | 61
  • 62. Summary Most Swing showstoppers are history now You CAN ship desktop apps There's a world beyond Swing • SwingLabs, NetBeans Software RCP, etc... Be creative. Mix 'em up. NetBeans: the only IDE I need... ... but for some tasks related to digital photo management Eclipse is just the best tool 2008 JavaOneSM Conference | java.sun.com/javaone | 62
  • 63. Eclipse Optic Cleaning System 2008 JavaOneSM Conference | java.sun.com/javaone | 63
  • 64. For More Information Links to projects, blogs and documentation • weblogs.java.net/blog/fabriziogiudici • bluemarine.tidalwave.it • openbluesky.dev.java.net • mistral.tidalwave.it • forceten.tidalwave.it • www.netbeans.org/features/platform • graph.netbeans.org • platformx.netbeans.org • www.swinglabs.org • worldwind.arc.nasa.gov/java • quaqua.dev.java.net 2008 JavaOneSM Conference | java.sun.com/javaone | 64
  • 65. blueMarine Or Why You Should Really Ship Swing Applications Fabrizio Giudici TS-5483. Speaker’s logo here (optional)