e(fx)clipse - JavaFX Tooling



Similar documents
e(fx)clipse - JavaFX Tooling and Runtime

e(fx)clipse - JavaFX Tooling and Runtime

e(fx)clipse - JavaFX Tooling and Runtime

Eclipse 4 Application Platform

Corticon Studio: Extensions Guide

Developing Eclipse Plug-ins* Learning Objectives. Any Eclipse product is composed of plug-ins

E4 development: examples, methods and tools. Eclipse Con France 2014

Eclipse Rich Client Platform. Kai Tödter Karsten Becker et al. Organized by:

Selenium Automation set up with TestNG and Eclipse- A Beginners Guide

Java Software Development Kit (JDK 5.0 Update 14) Installation Step by Step Instructions

WHAT ARE PACKAGES? A package is a collection of related classes. This is similar to the notion that a class is a collection of related methods.

Introduction (Apps and the Android platform)

Kohsuke Kawaguchi Sun Microsystems, Inc. hk2.dev.java.net, glassfish.dev.java.net. Session ID

CommentTemplate: A Lightweight Code Generator for Java built with Eclipse Modeling Technology

Java Language Tools COPYRIGHTED MATERIAL. Part 1. In this part...

IRF2000 IWL3000 SRC1000 Application Note - Develop your own Apps with OSGi - getting started

ANDROID APPS DEVELOPMENT FOR MOBILE AND TABLET DEVICE (LEVEL I)

OpenCV on Android Platforms

Java with Eclipse: Setup & Getting Started

How to develop your own app

Crystal Reports for Eclipse

Understanding class paths in Java EE projects with Rational Application Developer Version 8.0

IBM Script Portlet for WebSphere Portal Release 1.1

Eclipse installation, configuration and operation

Introduction to JavaFX. Tecniche di Programmazione A.A. 2012/2013

EMC Documentum Composer

Java Crash Course Part I

Extending XSLT with Java and C#

Eclipse Web Tools Platform. Naci Dai (Eteration), WTP JST Lead

How To Use Query Console

Introducing. automated functional testing of mobile apps. Karl Krukow, CTO, LessPainful GotoAMS, May, 2012

Xtext Documentation. September 26, 2014

Using Application Insights to Monitor your Applications

TECHNICAL DOCUMENTATION SPECOPS DEPLOY / APP 4.7 DOCUMENTATION

Specialized Android APP Development Program with Java (SAADPJ) Duration 2 months

POOSL IDE User Manual

Now that we have the Android SDK, Eclipse and Phones all ready to go we can jump into actual Android development.

Hands on exercise for

AEM Developer Tools for Eclipse

Production time profiling On-Demand with Java Flight Recorder

Deploying a Logi Info Application on WAS

How To Write A File Station In Android.Com (For Free) On A Microsoft Macbook Or Ipad (For A Limited Time) On An Ubuntu 8.1 (For Ubuntu) On Your Computer Or Ipa (For

Web Development with the Eclipse Platform

Install Java Development Kit (JDK) 1.8

Android Environment SDK

J a v a Quiz (Unit 3, Test 0 Practice)

Android Environment SDK

Consuming and Producing Web Services with Web Tools. Christopher M. Judd. President/Consultant Judd Solutions, LLC

Extend WTP Server Tools for your application server. Tim deboer Gorkem Ercan

Equinox Framework: A Happier OSGi R6 Implementation

Android Development. 吳 俊 興 國 立 高 雄 大 學 資 訊 工 程 學 系

Android Development Setup [Revision Date: 02/16/11]

LAB 1. Familiarization of Rational Rose Environment And UML for small Java Application Development

HP Operations Orchestration Software

APACHE SLING & FRIENDS TECH MEETUP BERLIN, SEPTEMBER APACHE SLING & SCALA Jochen Fliedner

JavaFX Session Agenda

IRF2000 IWL3000 SRC1000 Application Note - Apps with OSGi - Condition Monitoring with WWH push

Profiling and Testing with Test and Performance Tools Platform (TPTP)

Creating Web Services Applications with IntelliJ IDEA

Integrate your tools to help integrate your stakeholders

Tutorial: setting up a web application

Operations and Monitoring with Spring

Eclipse with Mac OSX Getting Started Selecting Your Workspace. Creating a Project.

Creating an application with the Virgo Web Server

Lecture 5: Java Fundamentals III

The "Eclipse Classic" version is recommended. Otherwise, a Java or RCP version of Eclipse is recommended.

Mobile application development J2ME U N I T I I

Developer Tutorial Version 1. 0 February 2015

Drupal CMS for marketing sites

Android Development. Marc Mc Loughlin

An Oracle White Paper March Integrating the SharePoint 2007 Adapter with WebCenter Spaces ( & )

Developing SQL and PL/SQL with JDeveloper

Project 4 DB A Simple database program

Using Eclipse CDT/PTP for Static Analysis

ID TECH UniMag Android SDK User Manual

OpenOffice.org Extensions development in Java with NetBeans in practise. Jürgen Schmidt OpenOffice.org Sun Microsystems, Inc.

Programmers rejoice: QML makes business people understand. Qt Developer Days 2014 Hinrich Specht 2. September 2014 Folie 1

Automate Your BI Administration to Save Millions with Command Manager and System Manager

Data Tool Platform SQL Development Tools

IBM Operational Decision Manager Version 8 Release 5. Getting Started with Business Rules

Tutorial 5: Developing Java applications

Creating Online Surveys with Qualtrics Survey Tool

Enterprise Service Bus

Installing Java. Table of contents

Esigate Module Documentation

User Guide. What is AeroFS. Installing AeroFS. Learn How to Install AeroFS and get started syncing and sharing securely INTRODUCTION

Building and Using Web Services With JDeveloper 11g

Java SE 6 Update 10. la piattaforma Java per le RIA. Corrado De Bari. Sun Microsystems Italia Spa. Software & Java Ambassador

Gyrex 0.10 Release Review

SPELL Tabs Evaluation Version

IBM Tivoli Workload Scheduler Integration Workbench V8.6.: How to customize your automation environment by creating a custom Job Type plug-in

Getting Started using the SQuirreL SQL Client

Customize Mobile Apps with MicroStrategy SDK: Custom Security, Plugins, and Extensions

User and Reference Manual

Transcription:

e(fx)clipse - JavaFX Tooling Tom Schindl - BestSolution Systemhaus GmbH EclipseCon October 2012

About Tom CTO BestSolution Systemhaus GmbH Eclipse Committer e4 Platform UI EMF Main developer of e(fx)clipse Twitter: @tomsontom

About e(fx)clipse

About e(fx)clipse Opensource project lead by BestSolution.at

About e(fx)clipse Opensource project lead by BestSolution.at All sources provided under EPL

About e(fx)clipse Opensource project lead by BestSolution.at All sources provided under EPL Started in Summer 2011

About e(fx)clipse Opensource project lead by BestSolution.at All sources provided under EPL Started in Summer 2011 Releases every 6-8 weeks (~2500 Downloads/ release)

About e(fx)clipse Opensource project lead by BestSolution.at All sources provided under EPL Started in Summer 2011 Releases every 6-8 weeks (~2500 Downloads/ release) Community Support: www.efxclipse.org

About e(fx)clipse Opensource project lead by BestSolution.at All sources provided under EPL Started in Summer 2011 Releases every 6-8 weeks (~2500 Downloads/ release) Community Support: www.efxclipse.org Commercial Support: www.bestsolution.at

e(fx)clipse - Tooling Basic-Tooling

e(fx)clipse - Tooling Basic-Tooling Java Classpath-Container for JDT Bootstrap Wizards

e(fx)clipse - Tooling Basic-Tooling Java Classpath-Container for JDT Bootstrap Wizards CSS Custom written CSS-Editor

e(fx)clipse - Tooling Basic-Tooling Java Classpath-Container for JDT Bootstrap Wizards CSS Custom written CSS-Editor FXML Customized WST-XML-Editor

e(fx)clipse - Tooling Basic-Tooling Java Classpath-Container for JDT Bootstrap Wizards CSS Custom written CSS-Editor FXML Customized WST-XML-Editor Export Support for fx-ant tasks

e(fx)clipse - The classpath JRE 1.7 Bootclasspath rt.jar... javafxrt.jar

e(fx)clipse - The classpath JRE 1.7 Bootclasspath rt.jar... javafxrt.jar

e(fx)clipse - The classpath JRE 1.7 Bootclasspath rt.jar... javafxrt.jar

e(fx)clipse - The classpath JavaFX apps can t be simply launched Manifest-Version: 1.0 JavaFX-Version: 2.2 implementation-vendor: demo implementation-title: Ensemble implementation-version: 1.0 Main-Class: at/bestsolution/myapp Created-By: JavaFX Packager

e(fx)clipse - The classpath JavaFX apps can t be simply launched Manifest-Version: 1.0 JavaFX-Version: 2.2 implementation-vendor: demo implementation-title: Ensemble implementation-version: 1.0 Main-Class: JavaFX-Application-Class: at/bestsolution/myapp at.bestsolution.myapp Created-By: JavaFX Packager Main-Class: com/javafx/main/main

e(fx)clipse - CSS + FXML + JVM-Language

e(fx)clipse - CSS + FXML + JVM-Language FXML for the structure

e(fx)clipse - CSS + FXML + JVM-Language FXML for the structure CSS for the styling

e(fx)clipse - CSS + FXML + JVM-Language FXML for the structure CSS for the styling Programming language for the logic

e(fx)clipse - CSS.root { -fx-base: #7eaacc; } #myelement.text:focus { -fx-background-color: linear-gradient( to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)); }

e(fx)clipse - CSS.root { -fx-base: #7eaacc; } #myelement.text:focus { -fx-background-color: linear-gradient( to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)); } CSS 2 selector

e(fx)clipse - CSS.root { -fx-base: #7eaacc; } #myelement.text:focus { -fx-background-color: linear-gradient( to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)); }

e(fx)clipse - CSS.root { -fx-base: #7eaacc; } #myelement.text:focus { -fx-background-color: linear-gradient( to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)); } FX-Specific attributes

e(fx)clipse - CSS.root { -fx-base: #7eaacc; } #myelement.text:focus { -fx-background-color: linear-gradient( to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)); }

e(fx)clipse - CSS.root { -fx-base: #7eaacc; } #myelement.text:focus { -fx-background-color: linear-gradient( to bottom, derive(-fx-base,-30%), derive(-fx-base,-60%)); } referencing attribute values

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button text="hello World" onaction="#clicked" /> </center> </BorderPane> final MyController c = new MyController(); BorderPane p = new BorderPane(); Button b = new Button("Hello World"); b.setonaction(new EventHandler<ActionEvent>() { @Override public void handle(actionevent event) { c.clicked(event); } });

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button text="hello World" onaction="#clicked" /> </center> </BorderPane> Declarative Definition enables Tooling final MyController c = new MyController(); BorderPane p = new BorderPane(); Button b = new Button("Hello World"); b.setonaction(new EventHandler<ActionEvent>() { @Override public void handle(actionevent event) { c.clicked(event); } });

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button text="hello World" onaction="#clicked" /> </center> </BorderPane> final MyController c = new MyController(); BorderPane p = new BorderPane(); Button b = new Button("Hello World"); b.setonaction(new EventHandler<ActionEvent>() { @Override public void handle(actionevent event) { c.clicked(event); } }); Declarative Definition enables Tooling Clean separation between UI- Structure and Logic

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button fx:id="mybutton" text="hello World" onaction="#clicked" /> </center> </BorderPane>

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button fx:id="mybutton" text="hello World" onaction="#clicked" /> </center> </BorderPane> public class MyController { @FXML Button mybutton; @FXML public void clicked() { // logic } }

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button fx:id="mybutton" text="hello World" onaction="#clicked" /> </center> </BorderPane> public class MyController { @FXML Button mybutton; @FXML public void clicked() { // logic } }

e(fx)clipse - FXML <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="mycontroller"> <center> <Button fx:id="mybutton" text="hello World" onaction="#clicked" /> </center> </BorderPane> URL location = getclass().getresource("form.fxml"); FXMLLoader fxmlloader = new FXMLLoader(location); public class MyController { @FXML Button mybutton; @FXML public void clicked() { // logic } } BorderPane root = (BorderPane)fxmlLoader.load();

e(fx)clipse - Deployment

e(fx)clipse - Deployment Remember the classpath problem!

e(fx)clipse - Deployment Remember the classpath problem! JavaFX ships with packaging tool

e(fx)clipse - Deployment Remember the classpath problem! JavaFX ships with packaging tool Provides ant-tasks

e(fx)clipse - Deployment Remember the classpath problem! JavaFX ships with packaging tool Provides ant-tasks Produces msi, dmg, deb, rpm packages

e(fx)clipse - Deployment Remember the classpath problem! JavaFX ships with packaging tool Provides ant-tasks Produces msi, dmg, deb, rpm packages Allows to package JRE => AppStores!!!!

e(fx)clipse - Deployment

e(fx)clipse - Tooling Basic Tooling Demo Create application Create and edit FXML Connect to controller Edit CSS-Stylesheet Export application

e(fx)clipse - CSS Impl

e(fx)clipse - CSS Impl Based on Xtext

e(fx)clipse - CSS Impl Based on Xtext Editor can be customized using 2nd DSL (cssext)

e(fx)clipse - CSS Impl Based on Xtext Editor can be customized using 2nd DSL (cssext) Node { } -fx-blend-mode <blend-mode> default: null; -fx-cursor <cursor> default: null; -fx-focus-traversable <boolean> default: null; -fx-opacity double(.0->1.0) default: 1.0; -fx-rotate double default: 0; :disabled :focused :hover :pressed :show-mnemonic

e(fx)clipse - FXML Impl

e(fx)clipse - FXML Impl Reuse WST XML-Editor Infrastructure

e(fx)clipse - FXML Impl Reuse WST XML-Editor Infrastructure Contributing through extension points

e(fx)clipse - FXML Impl @SuppressWarnings("restriction") public class FXMLCompletionProposalComputer extends AbstractXMLCompletionProposalComputer implements ICompletionProposalComputer { protected void addtagnameproposals(contentassistrequest contentassistrequest, int childposition, CompletionProposalInvocationContext context) { Node parent = contentassistrequest.getparent(); //... IType type; //... IFXClass fxclass = FXPlugin.getClassmodel().findClass(type.getJavaProject(), type); } if (fxclass!= null) { for (IFXProperty property : fxclass.getallproperties().values()) { createpropertyelementnameproposal(contentassistrequest, context, property); }

About e(fx)clipse Advanced-Tooling

About e(fx)clipse Advanced-Tooling FXGraph JSON like Language that compiles to FXML

About e(fx)clipse Advanced-Tooling FXGraph JSON like Language that compiles to FXML OSGi-Tooling PDE-Classpath container Wizards

About e(fx)clipse Advanced-Tooling FXGraph JSON like Language that compiles to FXML OSGi-Tooling PDE-Classpath container Wizards SVG Converter for SVG to FXML

e(fx)clipse - FX+OSGi my.app.bundle import java.lang import javafx.scene

e(fx)clipse - FX+OSGi my.app.bundle import java.lang import javafx.scene JRE 1.7 Bootclasspath rt.jar... javafxrt.jar

e(fx)clipse - FX+OSGi system.bundle my.app.bundle import java.lang import javafx.scene export java.lang JRE 1.7 Bootclasspath rt.jar... javafxrt.jar

e(fx)clipse - FX+OSGi system.bundle my.app.bundle import java.lang import javafx.scene export java.lang JRE 1.7 fake.javafx export javafx.scene Adaptor Hooks Bootclasspath rt.jar... javafxrt.jar

e(fx)clipse - FXML Impl Patching PDE using AdapterHooks (StorageHook) on the fly

e(fx)clipse - FXML Impl Patching PDE using AdapterHooks (StorageHook) on the fly public class PFStorageHook implements StorageHook { public static final String BUNDLE_TYPE_PATCH = "fxpatch.fragment"; public static final String BUNDLE_TYPE_HEADER = "Equinox-BundleType"; public void initialize(dictionary manifest) { // make sure this is a fragment manifest if (manifest.get(constants.fragment_host) == null) return; // not a fragment; String type = (String) manifest.get(bundle_type_header); patchfragment = BUNDLE_TYPE_PATCH.equals(type); } }

e(fx)clipse - FXML Impl Patching PDE using AdapterHooks (StorageHook) on the fly public class PFStorageHook implements StorageHook { public static final String BUNDLE_TYPE_PATCH = "fxpatch.fragment"; public static final String BUNDLE_TYPE_HEADER = "Equinox-BundleType"; Manifest-Version: 1.0 Bundle-ManifestVersion: 2 public void initialize(dictionary manifest) { Bundle-Name: %Bundle-Name // make sure this is a fragment manifest Bundle-SymbolicName: at.bestsolution.efxclipse.tooling.pde.fragment;singleton:=true if (manifest.get(constants.fragment_host) == null) Bundle-Version: 0.1.1.qualifier return; // not a fragment; Fragment-Host: org.eclipse.pde.core;bundle-version="[3.7.0,3.9.0)" Bundle-RequiredExecutionEnvironment: JavaSE-1.6 String type = (String) manifest.get(bundle_type_header); } } Equinox-BundleType: fxpatch.fragment patchfragment = BUNDLE_TYPE_PATCH.equals(type); Require-Bundle: at.bestsolution.efxclipse.tooling.jdt.core;bundle-version="0.1.1", at.bestsolution.efxclipse.tooling.pde.adaptor;bundle-version="0.1.1" Bundle-Vendor: %Bundle-Vendor

e(fx)clipse - FXGraph package sample.fxgraph import javafx.scene.layout.borderpane import javafx.scene.control.button component MySample controlledby MyController { BorderPane { center : Button { text : "Hello World", onaction : controllermethod helloworld } } }

e(fx)clipse - FXGraph package sample.fxgraph import javafx.scene.layout.borderpane import javafx.scene.control.button component MySample controlledby MyController { BorderPane { center : Button { text : "Hello World", onaction : controllermethod helloworld } } } JSON like syntax

e(fx)clipse - FXGraph package sample.fxgraph import javafx.scene.layout.borderpane import javafx.scene.control.button component MySample controlledby MyController { BorderPane { center : Button { text : "Hello World", onaction : controllermethod helloworld } } } JSON like syntax Compiles to FXML

e(fx)clipse - FXGraph package sample.fxgraph import javafx.scene.layout.borderpane import javafx.scene.control.button component MySample controlledby MyController { BorderPane { center : Button { text : "Hello World", onaction : controllermethod helloworld } } } JSON like syntax Compiles to FXML more expressive as FXML

e(fx)clipse - Tooling Advanced Tooling Demo Create an FXGraph-File Connect to a controller Convert a SVG-File

e(fx)clipse - Tooling Advanced Tooling Demo

e(fx)clipse - Tooling Advanced Tooling Demo Create OSGi-e4 Application

e(fx)clipse - Tooling Advanced Tooling Demo Create OSGi-e4 Application Create a Jemmy-test suite

e(fx)clipse - Future

e(fx)clipse - Future CSS

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete FXML

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete FXML Tighter integration with JDT (refactoring)

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete FXML Tighter integration with JDT (refactoring) FXGraph

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete FXML Tighter integration with JDT (refactoring) FXGraph Full FXGraph => FXML => FXGraph cycle

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete FXML Tighter integration with JDT (refactoring) FXGraph Full FXGraph => FXML => FXGraph cycle OSGi

e(fx)clipse - Future CSS Extend usage of cssext - validation and complex auto complete FXML Tighter integration with JDT (refactoring) FXGraph Full FXGraph => FXML => FXGraph cycle OSGi tycho enabled project skeleton wizard

e(fx)clipse - Resources

e(fx)clipse - Resources Homepage: http://www.efxclipse.org

e(fx)clipse - Resources Homepage: http://www.efxclipse.org Source-Code:

e(fx)clipse - Resources Homepage: http://www.efxclipse.org Source-Code: https://github.com/tomsontom/e-fx-clipse

e(fx)clipse - Resources Homepage: http://www.efxclipse.org Source-Code: https://github.com/tomsontom/e-fx-clipse https://github.com/tomsontom/fx-ide

e(fx)clipse - Resources Homepage: http://www.efxclipse.org Source-Code: https://github.com/tomsontom/e-fx-clipse https://github.com/tomsontom/fx-ide https://github.com/tomsontom/fx43

e(fx)clipse - Resources Homepage: http://www.efxclipse.org Source-Code: https://github.com/tomsontom/e-fx-clipse https://github.com/tomsontom/fx-ide https://github.com/tomsontom/fx43 Twitter: @tomsontom

e(fx)clipse - Resources Homepage: http://www.efxclipse.org Source-Code: https://github.com/tomsontom/e-fx-clipse https://github.com/tomsontom/fx-ide https://github.com/tomsontom/fx43 Twitter: @tomsontom Commercial Support: http://www.bestsolution.at