SlideShare a Scribd company logo
1 of 97
Download to read offline
JavaFX @ eclipse.org
Tom Schindl <tom.schindl@bestsolution.at>
Twitter: @tomsontom
Blog: http://tomsondev.bestsolution.at
Website: http://www.bestsolution.at
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
About Me
ā€£ CTO BestSolution.at Systemhaus GmbH
ā€£ Eclipse Committer
ā€£ e4
ā€£ Platform
ā€£ EMF
ā€£ Project lead
ā€£ e(fx)clipse
ā€£ Twitter: @tomsontom
ā€£ Blog: tomsondev.bestsolution.at
ā€£ Cooperate: http://bestsolution.at
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Tooling
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Tooling News 1.0 - 1.2
ā€£ CSS-Editor - Add gradient editor
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Tooling News 1.0 - 1.2
ā€£ CSS-Editor - Add gradient editor
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ CSS-Editor - Support for custom controls
Tooling News 1.0 - 1.2
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ Java-Editor - Wizard to generate JavaFX Getter/setters
Tooling News 1.0 - 1.2
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ Java-Editor - Wizard to generate JavaFX Getter/setters
Tooling News 1.0 - 1.2
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ FXML-Editor - Generating controller stub
Tooling News 1.0 - 1.2
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Reuseable
Tooling
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
ā€£ l10n-DSL: if you Java8, e4 and want dynamic language
flipping
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
ā€£ l10n-DSL: if you Java8, e4 and want dynamic language
flipping
ā€£ RRobot-DSL: allows you to describe eclipse-project setups
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
ā€£ l10n-DSL: if you Java8, e4 and want dynamic language
flipping
ā€£ RRobot-DSL: allows you to describe eclipse-project setups
ā€£ LivePreview: Reuse the live preview to present your
textual content in a visual way
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
ā€£ l10n-DSL: if you Java8, e4 and want dynamic language
flipping
ā€£ RRobot-DSL: allows you to describe eclipse-project setups
ā€£ LivePreview: Reuse the live preview to present your
textual content in a visual way
ā€£ CSSExt-DSL: allows you to define your custom CSS-
Properties
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
l10n
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DSL to define translations
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DSL to define translations
ā€£ Uses Xtext
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DSL to define translations
ā€£ Uses Xtext
ā€£ Generates code and text files
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DSL to define translations
ā€£ Uses Xtext
ā€£ Generates code and text files
ā€£ Requires Java8
ā€£ Makes use of Java8 functional interfaces and method
references
l10n-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
l10n-DSL
ā€£ DSL to store language definitions
package sample.l10n.app.themes {
bundle BasicMessages default en {
HelloWorld {
en : '''Hello World''',
de : '''Hallo Welt'''
}
}
bundle SamplePartMessages default en {
Button_title [ BasicMessages.HelloWorld ]
Current_Date(DATE now) {
en : '''Ā«now "MM/dd/yyyy"Ā»''',
de : '''Ā«now "dd.MM.yyyy"Ā»'''
}
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
l10n-DSL
ā€£ Generated artifacts
ā€£ ${bundle}.java: e4 message class
ā€£ ${bundle}.properties: Default transalations
ā€£ ${bundle}_${lang}.properties: Translations for the lang
ā€£ ${bundle}Registry.java: Registry to use for binding
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ Use in code (Sample JavaFX)
l10n-DSL
package sample.l10n.app.themes;
public class SamplePart {
@Inject
SamplePartMessagesRegistry messagesReg;
@PostConstruct
void init(BorderPane pane) {
Button b = new Button();
messagesReg.register(b::setText, messagesReg::Button_title);
pane.setCenter(b);
Label l = new Label();
messagesReg.register(b::setText,
messagesReg.Current_Date_supplier(new Date()));
pane.setTop(l);
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ Use in code (Sample SWT)
l10n-DSL
package sample.l10n.app.themes;
public class SamplePart {
@Inject
SamplePartMessagesRegistry messagesReg;
@PostConstruct
void init(Composite pane) {
Button b = new Button(pane,SWT.PUSH);
messagesReg.register(b::setText, messagesReg::Button_title);
Label l = new Label(pane,SWT.NONE);
messagesReg.register(b::setText,
messagesReg.Current_Date_supplier(new Date()));
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo
(Elementary)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
ā€£ DSL to describe Eclipse project setups
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
ā€£ DSL to describe Eclipse project setups
ā€£ Uses Xtext
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
ā€£ DSL to describe Eclipse project setups
ā€£ Uses Xtext
ā€£ Allows to setup
ā€£ JDT Projects
ā€£ PDE-Projects Bundles & Features
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RRobot-DSL
RobotTask {
// Variables to be used later on
variables = {
## Name of the bundle
STRING "BundleName" default "econsample"
}
projects = {
BundleProject "${BundleName}" {
manifest = ManifestFile "${BundleName}" "1.0.0" "JavaSE-1.8" {
bundlename = "${BundleName}"
vendor = "BestSolution.at"
}
build = BuildProperties {
}
resources = {
Folder "src"
}
rootfragments = {
fragment "default-src" "src"
}
}
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (Run
Task)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
ā€£ LivePreview was developed for FXML/FXGraph immediate
feedback
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
ā€£ LivePreview was developed for FXML/FXGraph immediate
feedback
ā€£ Expects FXML passed
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
ā€£ LivePreview was developed for FXML/FXGraph immediate
feedback
ā€£ Expects FXML passed
ā€£ LivePreview requests FXML from editors who adapt to
IFXMLProviderAdapter
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (Elemenatry &
Lego-DSL & FXML-
Viewer)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
LivePreview
public class FXMLProviderAdapter implements IFXMLProviderAdapter {
private XtextEditor editor;
public FXMLProviderAdapter(XtextEditor editor) {
this.editor = editor;
}
@Override
public IEditorPart getEditorPart() {
return editor;
}
@Override
public String getPreviewFXML() {
return editor.getDocument().readOnly(new IUnitOfWork<String, XtextResource>() {
@Override
public String exec(XtextResource resource) throws Exception {
Injector injector = LegoActivator.getInstance().getInjector("at.bestsolution.lego.Lego");
PreviewGenerator generator = injector.getInstance(PreviewGenerator.class);
return generator.generatePreview((Model) resource.getContents().get(0)).toString();
}
});
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
CSSExt-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
CSSExt-DSL
ā€£ CSS-Editor has NO hard coded properties
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
CSSExt-DSL
ā€£ CSS-Editor has NO hard coded properties
ā€£ Properties available are defined in an extra file ending
with .cssext
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
CSSExt-DSL
ā€£ CSS-Editor has NO hard coded properties
ā€£ Properties available are defined in an extra file ending
with .cssext
ā€£ CSS-Editor looks up .cssext-Files from projects classpath
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
package svg {
prop_alignment-baseline = [
auto | baseline |
before-edge | text-before-edge |
middle | central | after-edge |
text-after-edge | ideographic | alphabetic |
hanging | mathematical | inherit ];
/**
*
*/
tspan {
/**
* Documentation
*/
alignment-baseline <prop_alignment-baseline> default: auto;
}
}
CSSExt-DSL
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (SVG-CSS-
Properties)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Runtime
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DI-Extensions: @Log, @ContextValue, @Service
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DI-Extensions: @Log, @ContextValue, @Service
ā€£ Filesystem-Service
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ DI-Extensions: @Log, @ContextValue, @Service
ā€£ Filesystem-Service
ā€£ Controls
ā€£ Filesystem controls
ā€£ StyledText & JFace-Text-Port
Components for reuse
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
ā€£ Simple slf4j like API
ā€£ Used internally by e(fx)clipse runtime
ā€£ Implementation provided as an OSGi-Service/
ServiceLoader
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
ā€£ Simple slf4j like API
ā€£ Used internally by e(fx)clipse runtime
ā€£ Implementation provided as an OSGi-Service/
ServiceLoader
ā€£ Multiple ways to consume
ā€£ Through OSGi-Service-Registry
ā€£ Through a factory
ā€£ Through DI with @Log
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
@Component
public class OSGiComponent {
private Logger logger;
@Reference
public synchronized void setLoggerFactory(LoggerFactory factory) {
this.logger = factory.createLogger(OSGiComponent.class.getName());
}
}
OSGi-Component
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
public class DIComponent {
@Inject
@Log
private Logger logger;
}
Eclipse-DI
@Component
public class OSGiComponent {
private Logger logger;
@Reference
public synchronized void setLoggerFactory(LoggerFactory factory) {
this.logger = factory.createLogger(OSGiComponent.class.getName());
}
}
OSGi-Component
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Log & Logger-API
public class DIComponent {
@Inject
@Log
private Logger logger;
}
Eclipse-DI
public class PlainJava {
private static Logger logger =
LoggerCreator.createLogger(PlainJava.class);
}
Plain Java
@Component
public class OSGiComponent {
private Logger logger;
@Reference
public synchronized void setLoggerFactory(LoggerFactory factory) {
this.logger = factory.createLogger(OSGiComponent.class.getName());
}
}
OSGi-Component
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ Current shipped backends
ā€£ java.util.logging (default)
ā€£ log4j
ā€£ slf4j
@Log & Logger-API
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@ContextValue
ā€£ Allows you to abstract away IEclipseContext#modify
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@ContextValue
ā€£ Allows you to abstract away IEclipseContext#modify
public class ValuePublisherComponent {
@Inject
private IEclipseContext context;
public void publishContext() {
ListView<String> values = new ListView<>();
values.getSelectionModel().selectedItemProperty().addListener(
(o,newVal,oldVal) -> value.modify("contextValue",newVal));
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@ContextValue
ā€£ Allows you to abstract away IEclipseContext#modify
public class ValuePublisherComponent {
@Inject
private IEclipseContext context;
public void publishContext() {
ListView<String> values = new ListView<>();
values.getSelectionModel().selectedItemProperty().addListener(
(o,newVal,oldVal) -> value.modify("contextValue",newVal));
}
}
public class ValuePublisherComponent {
@Inject
@ContextValue("contextValue")
private ContextBoundValue<String> value;
public void publishContext() {
ListView<String> values = new ListView<>();
values.getSelectionModel().selectedItemProperty().addListener(
(o,newVal,oldVal) -> value.publish(newVal));
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@ContextValue
ā€£ Allows you to abstract away IEclipseContext#modify
public class ValuePublisherComponent {
@Inject
private IEclipseContext context;
public void publishContext() {
ListView<String> values = new ListView<>();
values.getSelectionModel().selectedItemProperty().addListener(
(o,newVal,oldVal) -> value.modify("contextValue",newVal));
}
}
public class ValuePublisherComponent {
@Inject
@ContextValue("contextValue")
private ContextBoundValue<String> value;
public void publishContext() {
ListView<String> values = new ListView<>();
values.getSelectionModel().selectedItemProperty().addListener(
(o,newVal,oldVal) -> value.publish(newVal));
}
}
public class ValuePublisherComponent {
@Inject
@ContextValue("contextValue")
private Property<String> value;
public void publishContext() {
ListView<String> values = new ListView<>();
fxProperty.bind(values.getSelectionModel().selectedItemProperty());
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Service
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@Service
ā€£ Eclipse DI by default does NOT conform to OSGi-Service
semantics
ā€£ Services can come and go
ā€£ Requestor of services is important if a ServiceFactory
is used
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
public class DIServiceConsumer {
@Inject
public void setServices(@Service List<LoggerFactory> serviceList) {
}
@Inject
public void setServices(@Service LoggerFactory serviceList) {
}
}
@Service
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Fileystem Service
ā€£ Service on top of NIO2 low level API
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Fileystem Service
ā€£ Service on top of NIO2 low level API
public class FilesystemSample extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
FilesystemService fs = Util.lookupService(FilesystemSample.class, FilesystemService.class);
Subscription observePath = fs.observePath(Paths.get(URI.create("file:/Users/tomschindl")), (k,p) -> {
System.err.print("filesystem item '"+p+"' has been ");
switch (k) {
case CREATE:
System.err.println("created.");
break;
case DELETE:
System.err.println("deleted.");
break;
default:
System.err.println("modified.");
break;
}
});
// .....
observePath.dispose();
}
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controls
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controlsFolderViewer
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controlsFolderViewer
Folder Content Viewer
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Filesystem controlsFolderViewer
Folder Content Viewer
FileContentViewer
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
ā€£ Non Editable Text: StyledLabel & StyledString
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
ā€£ Non Editable Text: StyledLabel & StyledString
StyledString s = new StyledString();
s.appendSegment("Hello", "h1");
s.appendSegment("World!", "h1","colorful");
StyledLabel label = new StyledLabel(s);
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
ā€£ Non Editable Text: StyledLabel & StyledString
StyledString s = new StyledString();
s.appendSegment("Hello", "h1");
s.appendSegment("World!", "h1","colorful");
StyledLabel label = new StyledLabel(s);
.h1 {
-fx-font-size: 20pt;
}
.colorful {
-fx-font-weight: bold;
-fx-fill: linear-gradient( from 0.0% 0.0% to 100.0% 100.0%, rgb(128,179,128)
0.0, rgb(255,179,102) 100.0);
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ StyledText in List/Table/TreeView
StyledText APIs
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ StyledText in List/Table/TreeView
StyledText APIs
public interface OutlineItem {
public CharSequence getLabel();
public Node getGraphic();
public OutlineItem getParent();
public ObservableList<OutlineItem> getChildren();
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
ā€£ StyledText in List/Table/TreeView
StyledText APIs
public interface OutlineItem {
public CharSequence getLabel();
public Node getGraphic();
public OutlineItem getParent();
public ObservableList<OutlineItem> getChildren();
}
private TreeView<OutlineItem> createView() {
TreeView<OutlineItem> outlineView = new TreeView<>();
outlineView.setShowRoot(false);
outlineView.setCellFactory(this::createCell);
return outlineView;
}
TreeCell<OutlineItem> createCell(TreeView<OutlineItem> param) {
return new SimpleTreeCell<OutlineItem>(
i -> i.getLabel(), i -> i.getGraphic(), i ->
Collections.emptyList());
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
ā€£ Editable StyledText
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
ā€£ Editable StyledText
StyledTextArea t = new StyledTextArea();
t.getContent().setText("package test;nnā€¦");
t.setStyleRanges(
new StyleRange("keyword",0,6,null,null),
/* */);
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
StyledText APIs
ā€£ Editable StyledText
StyledTextArea t = new StyledTextArea();
t.getContent().setText("package test;nnā€¦");
t.setStyleRanges(
new StyleRange("keyword",0,6,null,null),
/* */);
.keyword {
-styled-text-color: rgb(127, 0, 85);
-fx-font-weight: bold;
}
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
ā€£ Mission 0: Must look slick!
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
ā€£ Mission 0: Must look slick!
ā€£ Mission 1: Create a simple source editor like Notepad++
who:
ā€£ Is process light-weight
ā€£ Makes it easy to add new language highlightings
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
ā€£ Mission 0: Must look slick!
ā€£ Mission 1: Create a simple source editor like Notepad++
who:
ā€£ Is process light-weight
ā€£ Makes it easy to add new language highlightings
ā€£ Mission 2: Allow the simple source editor to expand to a
(simple) IDE:
ā€£ where Source-Editor, VCS (git), Ticketsystem (eg.
github), CI (eg. travis) are core components fully
integrated with each other
ā€£ Easy to integrate: Does not depend on core.resources
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo (Basic-
Editor + Python
install)
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator - HSL+CSS
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Python {
partition __dftl_partition_content_type
partition __python_multiline_comment
partition __python_singleline_comment
partition __python_string
rule_damager rule_damager __dftl_partition_content_type {
default token python_default
token python_string
token python_operator
token python_bracket
token python_keyword_return
token python_keyword
keywords python_keyword_return [ "return" ]
keywords python_keyword [
"and", "as", ā€žassert", /* ā€¦ */]
}
rule_damager __python_singleline_comment {
default token python_single_line_comment
}
/* ā€¦ */
rule_partitioner {
single_line __python_string '"' => '"'
single_line __python_singleline_comment "#"
multi_line __python_multiline_comment "'''" => "'''"
single_line __python_string "'" => "'"
}
} for "text/python"
Compensator - HSL+CSS
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Python {
partition __dftl_partition_content_type
partition __python_multiline_comment
partition __python_singleline_comment
partition __python_string
rule_damager rule_damager __dftl_partition_content_type {
default token python_default
token python_string
token python_operator
token python_bracket
token python_keyword_return
token python_keyword
keywords python_keyword_return [ "return" ]
keywords python_keyword [
"and", "as", ā€žassert", /* ā€¦ */]
}
rule_damager __python_singleline_comment {
default token python_single_line_comment
}
/* ā€¦ */
rule_partitioner {
single_line __python_string '"' => '"'
single_line __python_singleline_comment "#"
multi_line __python_multiline_comment "'''" => "'''"
single_line __python_string "'" => "'"
}
} for "text/python"
Compensator - HSL+CSS
/* */
.Python.styled-text-area .python_doc_default {
-styled-text-color: rgb(63, 95, 191);
}
.Python.styled-text-area .python_single_line_comment {
-styled-text-color: rgb(63, 127, 95);
}
/* */
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Demo
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator
(c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Compensator - Roadmap
ā€£ Tighter integration with git workflow
ā€£ Improve Java autocomplete & Error Annotations
ā€£ Support for JavaScript auto-complete & error reporting
ā€£ Support for Xtext-Languages (their upcoming IntelliJ
support should help us)
ā€£ Connect it to Flux to get a Flux Compensator

More Related Content

What's hot

Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to GriffonJames Williams
Ā 
Google io extended '17 ģøģ²œ
Google io extended '17 ģøģ²œGoogle io extended '17 ģøģ²œ
Google io extended '17 ģøģ²œPluu love
Ā 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packagertechmemo
Ā 
Phalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil ConferencePhalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil ConferenceJackson F. de A. Mafra
Ā 
Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Kirill Chebunin
Ā 
parenscript-tutorial
parenscript-tutorialparenscript-tutorial
parenscript-tutorialtutorialsruby
Ā 
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPPScalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPPUdaya Kiran
Ā 
HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)Kevin Gill
Ā 
Html5 Open Video Tutorial
Html5 Open Video TutorialHtml5 Open Video Tutorial
Html5 Open Video TutorialSilvia Pfeiffer
Ā 
Compile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireCompile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireyann_s
Ā 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
Ā 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packagertechmemo
Ā 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with RailsPatchSpace Ltd
Ā 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with ComposerAdam Englander
Ā 

What's hot (17)

Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
Ā 
Google io extended '17 ģøģ²œ
Google io extended '17 ģøģ²œGoogle io extended '17 ģøģ²œ
Google io extended '17 ģøģ²œ
Ā 
How to Add Original Library to Android NDK
How to Add Original Library to Android NDKHow to Add Original Library to Android NDK
How to Add Original Library to Android NDK
Ā 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packager
Ā 
Phalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil ConferencePhalcon 2 - PHP Brazil Conference
Phalcon 2 - PHP Brazil Conference
Ā 
Troubleshooting Puppet
Troubleshooting PuppetTroubleshooting Puppet
Troubleshooting Puppet
Ā 
Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?Composer - Package Management for PHP. Silver Bullet?
Composer - Package Management for PHP. Silver Bullet?
Ā 
parenscript-tutorial
parenscript-tutorialparenscript-tutorial
parenscript-tutorial
Ā 
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPPScalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Scalable Real Time Chat (Text, Audio, Video) - Implemented using XMPP
Ā 
How to Make Android Native Application
How to Make Android Native ApplicationHow to Make Android Native Application
How to Make Android Native Application
Ā 
HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)HTML5 - The Python Angle (PyCon Ireland 2010)
HTML5 - The Python Angle (PyCon Ireland 2010)
Ā 
Html5 Open Video Tutorial
Html5 Open Video TutorialHtml5 Open Video Tutorial
Html5 Open Video Tutorial
Ā 
Compile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireCompile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwire
Ā 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
Ā 
CPAN Packager
CPAN PackagerCPAN Packager
CPAN Packager
Ā 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
Ā 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with Composer
Ā 

Viewers also liked

EclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraEclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraMichaĆ«l FiguiĆØre
Ā 
The Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing FrameworkThe Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing FrameworkAlexander NyƟen
Ā 
Managing XML documents with Epsilon
Managing XML documents with EpsilonManaging XML documents with Epsilon
Managing XML documents with EpsilonDimitris Kolovos
Ā 

Viewers also liked (7)

EclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache CassandraEclipseCon - Building an IDE for Apache Cassandra
EclipseCon - Building an IDE for Apache Cassandra
Ā 
The Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing FrameworkThe Next Generation Eclipse Graphical Editing Framework
The Next Generation Eclipse Graphical Editing Framework
Ā 
GEF4 - Sightseeing Mars
GEF4 - Sightseeing MarsGEF4 - Sightseeing Mars
GEF4 - Sightseeing Mars
Ā 
GEF(4) Dot Oh Dot Oh
GEF(4) Dot Oh Dot OhGEF(4) Dot Oh Dot Oh
GEF(4) Dot Oh Dot Oh
Ā 
Managing XML documents with Epsilon
Managing XML documents with EpsilonManaging XML documents with Epsilon
Managing XML documents with Epsilon
Ā 
Epsilon
EpsilonEpsilon
Epsilon
Ā 
Eugenia
EugeniaEugenia
Eugenia
Ā 

Similar to E(fx)clipse eclipse con

Java fx smart code econ
Java fx smart code econJava fx smart code econ
Java fx smart code econTom Schindl
Ā 
Java fx tools
Java fx toolsJava fx tools
Java fx toolsTom Schindl
Ā 
Java fx & xtext
Java fx & xtextJava fx & xtext
Java fx & xtextTom Schindl
Ā 
Java fx ap is
Java fx ap isJava fx ap is
Java fx ap isTom Schindl
Ā 
Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Rhinofly
Ā 
Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...Bharat Malge
Ā 
Democamp - Munich - Java9
Democamp - Munich - Java9Democamp - Munich - Java9
Democamp - Munich - Java9Tom Schindl
Ā 
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and ScalaWriting highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and Scalajfarcand
Ā 
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...Vincenzo Barone
Ā 
Flash Security, OWASP Chennai
Flash Security, OWASP ChennaiFlash Security, OWASP Chennai
Flash Security, OWASP Chennailavakumark
Ā 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Servicesmattjive
Ā 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptJohn Stevenson
Ā 
Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Tony Frame
Ā 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
Ā 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3Andrea Dottor
Ā 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Edward Burns
Ā 
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia
Ā 
Building a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQLBuilding a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQLYan Cui
Ā 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)yann_s
Ā 
Build social network in 4 weeks
Build social network in 4 weeksBuild social network in 4 weeks
Build social network in 4 weeksYan Cui
Ā 

Similar to E(fx)clipse eclipse con (20)

Java fx smart code econ
Java fx smart code econJava fx smart code econ
Java fx smart code econ
Ā 
Java fx tools
Java fx toolsJava fx tools
Java fx tools
Ā 
Java fx & xtext
Java fx & xtextJava fx & xtext
Java fx & xtext
Ā 
Java fx ap is
Java fx ap isJava fx ap is
Java fx ap is
Ā 
Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Railo Presentation Railo 3.1
Railo Presentation Railo 3.1
Ā 
Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...Overview & Downloading the Baseline using Global Configuration Managemen tand...
Overview & Downloading the Baseline using Global Configuration Managemen tand...
Ā 
Democamp - Munich - Java9
Democamp - Munich - Java9Democamp - Munich - Java9
Democamp - Munich - Java9
Ā 
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and ScalaWriting highly scalable WebSocket using the Atmosphere Framework and Scala
Writing highly scalable WebSocket using the Atmosphere Framework and Scala
Ā 
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
Ā 
Flash Security, OWASP Chennai
Flash Security, OWASP ChennaiFlash Security, OWASP Chennai
Flash Security, OWASP Chennai
Ā 
Open Source XMPP for Cloud Services
Open Source XMPP for Cloud ServicesOpen Source XMPP for Cloud Services
Open Source XMPP for Cloud Services
Ā 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Ā 
Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01
Ā 
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten ZiegelerNew and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegeler
Ā 
What's New in ASP.NET Core 3
What's New in ASP.NET Core 3What's New in ASP.NET Core 3
What's New in ASP.NET Core 3
Ā 
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.Ed presents JSF 2.2 and WebSocket to Gameduell.
Ed presents JSF 2.2 and WebSocket to Gameduell.
Ā 
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Igalia Focus and Goals 2020 (2019 WebKit Contributors Meeting)
Ā 
Building a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQLBuilding a social network in under 4 weeks with Serverless and GraphQL
Building a social network in under 4 weeks with Serverless and GraphQL
Ā 
Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)Structure your Play application with the cake pattern (and test it)
Structure your Play application with the cake pattern (and test it)
Ā 
Build social network in 4 weeks
Build social network in 4 weeksBuild social network in 4 weeks
Build social network in 4 weeks
Ā 

Recently uploaded

Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
Ā 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
Ā 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
Ā 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
Ā 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
Ā 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
Ā 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
Ā 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
Ā 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
Ā 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
Ā 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
Ā 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
Ā 
CALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online ā˜‚ļø
CALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online  ā˜‚ļøCALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online  ā˜‚ļø
CALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online ā˜‚ļøanilsa9823
Ā 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto GonzƔlez Trastoy
Ā 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
Ā 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
Ā 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
Ā 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
Ā 

Recently uploaded (20)

Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Ā 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Ā 
Call Girls In Mukherjee Nagar šŸ“± 9999965857 šŸ¤© Delhi šŸ«¦ HOT AND SEXY VVIP šŸŽ SE...
Call Girls In Mukherjee Nagar šŸ“±  9999965857  šŸ¤© Delhi šŸ«¦ HOT AND SEXY VVIP šŸŽ SE...Call Girls In Mukherjee Nagar šŸ“±  9999965857  šŸ¤© Delhi šŸ«¦ HOT AND SEXY VVIP šŸŽ SE...
Call Girls In Mukherjee Nagar šŸ“± 9999965857 šŸ¤© Delhi šŸ«¦ HOT AND SEXY VVIP šŸŽ SE...
Ā 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
Ā 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
Ā 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Ā 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
Ā 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
Ā 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
Ā 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Ā 
Vip Call Girls Noida āž”ļø Delhi āž”ļø 9999965857 No Advance 24HRS Live
Vip Call Girls Noida āž”ļø Delhi āž”ļø 9999965857 No Advance 24HRS LiveVip Call Girls Noida āž”ļø Delhi āž”ļø 9999965857 No Advance 24HRS Live
Vip Call Girls Noida āž”ļø Delhi āž”ļø 9999965857 No Advance 24HRS Live
Ā 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
Ā 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
Ā 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
Ā 
CALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online ā˜‚ļø
CALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online  ā˜‚ļøCALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online  ā˜‚ļø
CALL ON āž„8923113531 šŸ”Call Girls Kakori Lucknow best sexual service Online ā˜‚ļø
Ā 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Ā 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
Ā 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
Ā 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
Ā 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Ā 

E(fx)clipse eclipse con

  • 1. JavaFX @ eclipse.org Tom Schindl <tom.schindl@bestsolution.at> Twitter: @tomsontom Blog: http://tomsondev.bestsolution.at Website: http://www.bestsolution.at
  • 2. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 About Me ā€£ CTO BestSolution.at Systemhaus GmbH ā€£ Eclipse Committer ā€£ e4 ā€£ Platform ā€£ EMF ā€£ Project lead ā€£ e(fx)clipse ā€£ Twitter: @tomsontom ā€£ Blog: tomsondev.bestsolution.at ā€£ Cooperate: http://bestsolution.at
  • 3. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 4. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling
  • 5. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling News 1.0 - 1.2 ā€£ CSS-Editor - Add gradient editor
  • 6. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Tooling News 1.0 - 1.2 ā€£ CSS-Editor - Add gradient editor
  • 7. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ CSS-Editor - Support for custom controls Tooling News 1.0 - 1.2
  • 8. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ Java-Editor - Wizard to generate JavaFX Getter/setters Tooling News 1.0 - 1.2
  • 9. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ Java-Editor - Wizard to generate JavaFX Getter/setters Tooling News 1.0 - 1.2
  • 10. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ FXML-Editor - Generating controller stub Tooling News 1.0 - 1.2
  • 11. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Reuseable Tooling
  • 12. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse
  • 13. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ā€£ l10n-DSL: if you Java8, e4 and want dynamic language flipping
  • 14. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ā€£ l10n-DSL: if you Java8, e4 and want dynamic language flipping ā€£ RRobot-DSL: allows you to describe eclipse-project setups
  • 15. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ā€£ l10n-DSL: if you Java8, e4 and want dynamic language flipping ā€£ RRobot-DSL: allows you to describe eclipse-project setups ā€£ LivePreview: Reuse the live preview to present your textual content in a visual way
  • 16. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse ā€£ l10n-DSL: if you Java8, e4 and want dynamic language flipping ā€£ RRobot-DSL: allows you to describe eclipse-project setups ā€£ LivePreview: Reuse the live preview to present your textual content in a visual way ā€£ CSSExt-DSL: allows you to define your custom CSS- Properties
  • 17. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n
  • 18. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL
  • 19. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DSL to define translations l10n-DSL
  • 20. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DSL to define translations ā€£ Uses Xtext l10n-DSL
  • 21. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DSL to define translations ā€£ Uses Xtext ā€£ Generates code and text files l10n-DSL
  • 22. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DSL to define translations ā€£ Uses Xtext ā€£ Generates code and text files ā€£ Requires Java8 ā€£ Makes use of Java8 functional interfaces and method references l10n-DSL
  • 23. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL ā€£ DSL to store language definitions package sample.l10n.app.themes { bundle BasicMessages default en { HelloWorld { en : '''Hello World''', de : '''Hallo Welt''' } } bundle SamplePartMessages default en { Button_title [ BasicMessages.HelloWorld ] Current_Date(DATE now) { en : '''Ā«now "MM/dd/yyyy"Ā»''', de : '''Ā«now "dd.MM.yyyy"Ā»''' } } }
  • 24. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 l10n-DSL ā€£ Generated artifacts ā€£ ${bundle}.java: e4 message class ā€£ ${bundle}.properties: Default transalations ā€£ ${bundle}_${lang}.properties: Translations for the lang ā€£ ${bundle}Registry.java: Registry to use for binding
  • 25. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ Use in code (Sample JavaFX) l10n-DSL package sample.l10n.app.themes; public class SamplePart { @Inject SamplePartMessagesRegistry messagesReg; @PostConstruct void init(BorderPane pane) { Button b = new Button(); messagesReg.register(b::setText, messagesReg::Button_title); pane.setCenter(b); Label l = new Label(); messagesReg.register(b::setText, messagesReg.Current_Date_supplier(new Date())); pane.setTop(l); } }
  • 26. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ Use in code (Sample SWT) l10n-DSL package sample.l10n.app.themes; public class SamplePart { @Inject SamplePartMessagesRegistry messagesReg; @PostConstruct void init(Composite pane) { Button b = new Button(pane,SWT.PUSH); messagesReg.register(b::setText, messagesReg::Button_title); Label l = new Label(pane,SWT.NONE); messagesReg.register(b::setText, messagesReg.Current_Date_supplier(new Date())); } }
  • 27. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Elementary)
  • 28. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL
  • 29. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ā€£ DSL to describe Eclipse project setups
  • 30. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ā€£ DSL to describe Eclipse project setups ā€£ Uses Xtext
  • 31. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL ā€£ DSL to describe Eclipse project setups ā€£ Uses Xtext ā€£ Allows to setup ā€£ JDT Projects ā€£ PDE-Projects Bundles & Features
  • 32. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 RRobot-DSL RobotTask { // Variables to be used later on variables = { ## Name of the bundle STRING "BundleName" default "econsample" } projects = { BundleProject "${BundleName}" { manifest = ManifestFile "${BundleName}" "1.0.0" "JavaSE-1.8" { bundlename = "${BundleName}" vendor = "BestSolution.at" } build = BuildProperties { } resources = { Folder "src" } rootfragments = { fragment "default-src" "src" } } } }
  • 33. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Run Task)
  • 34. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview
  • 35. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ā€£ LivePreview was developed for FXML/FXGraph immediate feedback
  • 36. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ā€£ LivePreview was developed for FXML/FXGraph immediate feedback ā€£ Expects FXML passed
  • 37. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview ā€£ LivePreview was developed for FXML/FXGraph immediate feedback ā€£ Expects FXML passed ā€£ LivePreview requests FXML from editors who adapt to IFXMLProviderAdapter
  • 38. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Elemenatry & Lego-DSL & FXML- Viewer)
  • 39. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 LivePreview public class FXMLProviderAdapter implements IFXMLProviderAdapter { private XtextEditor editor; public FXMLProviderAdapter(XtextEditor editor) { this.editor = editor; } @Override public IEditorPart getEditorPart() { return editor; } @Override public String getPreviewFXML() { return editor.getDocument().readOnly(new IUnitOfWork<String, XtextResource>() { @Override public String exec(XtextResource resource) throws Exception { Injector injector = LegoActivator.getInstance().getInjector("at.bestsolution.lego.Lego"); PreviewGenerator generator = injector.getInstance(PreviewGenerator.class); return generator.generatePreview((Model) resource.getContents().get(0)).toString(); } }); }
  • 40. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL
  • 41. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ā€£ CSS-Editor has NO hard coded properties
  • 42. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ā€£ CSS-Editor has NO hard coded properties ā€£ Properties available are defined in an extra file ending with .cssext
  • 43. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 CSSExt-DSL ā€£ CSS-Editor has NO hard coded properties ā€£ Properties available are defined in an extra file ending with .cssext ā€£ CSS-Editor looks up .cssext-Files from projects classpath
  • 44. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 package svg { prop_alignment-baseline = [ auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | inherit ]; /** * */ tspan { /** * Documentation */ alignment-baseline <prop_alignment-baseline> default: auto; } } CSSExt-DSL
  • 45. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (SVG-CSS- Properties)
  • 46. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 47. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Runtime
  • 48. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Components for reuse
  • 49. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DI-Extensions: @Log, @ContextValue, @Service Components for reuse
  • 50. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DI-Extensions: @Log, @ContextValue, @Service ā€£ Filesystem-Service Components for reuse
  • 51. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ DI-Extensions: @Log, @ContextValue, @Service ā€£ Filesystem-Service ā€£ Controls ā€£ Filesystem controls ā€£ StyledText & JFace-Text-Port Components for reuse
  • 52. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API
  • 53. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API ā€£ Simple slf4j like API ā€£ Used internally by e(fx)clipse runtime ā€£ Implementation provided as an OSGi-Service/ ServiceLoader
  • 54. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API ā€£ Simple slf4j like API ā€£ Used internally by e(fx)clipse runtime ā€£ Implementation provided as an OSGi-Service/ ServiceLoader ā€£ Multiple ways to consume ā€£ Through OSGi-Service-Registry ā€£ Through a factory ā€£ Through DI with @Log
  • 55. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API
  • 56. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API @Component public class OSGiComponent { private Logger logger; @Reference public synchronized void setLoggerFactory(LoggerFactory factory) { this.logger = factory.createLogger(OSGiComponent.class.getName()); } } OSGi-Component
  • 57. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API public class DIComponent { @Inject @Log private Logger logger; } Eclipse-DI @Component public class OSGiComponent { private Logger logger; @Reference public synchronized void setLoggerFactory(LoggerFactory factory) { this.logger = factory.createLogger(OSGiComponent.class.getName()); } } OSGi-Component
  • 58. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Log & Logger-API public class DIComponent { @Inject @Log private Logger logger; } Eclipse-DI public class PlainJava { private static Logger logger = LoggerCreator.createLogger(PlainJava.class); } Plain Java @Component public class OSGiComponent { private Logger logger; @Reference public synchronized void setLoggerFactory(LoggerFactory factory) { this.logger = factory.createLogger(OSGiComponent.class.getName()); } } OSGi-Component
  • 59. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ Current shipped backends ā€£ java.util.logging (default) ā€£ log4j ā€£ slf4j @Log & Logger-API
  • 60. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ā€£ Allows you to abstract away IEclipseContext#modify
  • 61. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ā€£ Allows you to abstract away IEclipseContext#modify public class ValuePublisherComponent { @Inject private IEclipseContext context; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.modify("contextValue",newVal)); } }
  • 62. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ā€£ Allows you to abstract away IEclipseContext#modify public class ValuePublisherComponent { @Inject private IEclipseContext context; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.modify("contextValue",newVal)); } } public class ValuePublisherComponent { @Inject @ContextValue("contextValue") private ContextBoundValue<String> value; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.publish(newVal)); } }
  • 63. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @ContextValue ā€£ Allows you to abstract away IEclipseContext#modify public class ValuePublisherComponent { @Inject private IEclipseContext context; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.modify("contextValue",newVal)); } } public class ValuePublisherComponent { @Inject @ContextValue("contextValue") private ContextBoundValue<String> value; public void publishContext() { ListView<String> values = new ListView<>(); values.getSelectionModel().selectedItemProperty().addListener( (o,newVal,oldVal) -> value.publish(newVal)); } } public class ValuePublisherComponent { @Inject @ContextValue("contextValue") private Property<String> value; public void publishContext() { ListView<String> values = new ListView<>(); fxProperty.bind(values.getSelectionModel().selectedItemProperty()); } }
  • 64. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Service
  • 65. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 @Service ā€£ Eclipse DI by default does NOT conform to OSGi-Service semantics ā€£ Services can come and go ā€£ Requestor of services is important if a ServiceFactory is used
  • 66. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 public class DIServiceConsumer { @Inject public void setServices(@Service List<LoggerFactory> serviceList) { } @Inject public void setServices(@Service LoggerFactory serviceList) { } } @Service
  • 67. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Fileystem Service ā€£ Service on top of NIO2 low level API
  • 68. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Fileystem Service ā€£ Service on top of NIO2 low level API public class FilesystemSample extends Application { @Override public void start(Stage primaryStage) throws Exception { FilesystemService fs = Util.lookupService(FilesystemSample.class, FilesystemService.class); Subscription observePath = fs.observePath(Paths.get(URI.create("file:/Users/tomschindl")), (k,p) -> { System.err.print("filesystem item '"+p+"' has been "); switch (k) { case CREATE: System.err.println("created."); break; case DELETE: System.err.println("deleted."); break; default: System.err.println("modified."); break; } }); // ..... observePath.dispose(); } }
  • 69. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controls
  • 70. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer
  • 71. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer Folder Content Viewer
  • 72. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Filesystem controlsFolderViewer Folder Content Viewer FileContentViewer
  • 73. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ā€£ Non Editable Text: StyledLabel & StyledString
  • 74. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ā€£ Non Editable Text: StyledLabel & StyledString StyledString s = new StyledString(); s.appendSegment("Hello", "h1"); s.appendSegment("World!", "h1","colorful"); StyledLabel label = new StyledLabel(s);
  • 75. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ā€£ Non Editable Text: StyledLabel & StyledString StyledString s = new StyledString(); s.appendSegment("Hello", "h1"); s.appendSegment("World!", "h1","colorful"); StyledLabel label = new StyledLabel(s); .h1 { -fx-font-size: 20pt; } .colorful { -fx-font-weight: bold; -fx-fill: linear-gradient( from 0.0% 0.0% to 100.0% 100.0%, rgb(128,179,128) 0.0, rgb(255,179,102) 100.0); }
  • 76. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ StyledText in List/Table/TreeView StyledText APIs
  • 77. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ StyledText in List/Table/TreeView StyledText APIs public interface OutlineItem { public CharSequence getLabel(); public Node getGraphic(); public OutlineItem getParent(); public ObservableList<OutlineItem> getChildren(); }
  • 78. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 ā€£ StyledText in List/Table/TreeView StyledText APIs public interface OutlineItem { public CharSequence getLabel(); public Node getGraphic(); public OutlineItem getParent(); public ObservableList<OutlineItem> getChildren(); } private TreeView<OutlineItem> createView() { TreeView<OutlineItem> outlineView = new TreeView<>(); outlineView.setShowRoot(false); outlineView.setCellFactory(this::createCell); return outlineView; } TreeCell<OutlineItem> createCell(TreeView<OutlineItem> param) { return new SimpleTreeCell<OutlineItem>( i -> i.getLabel(), i -> i.getGraphic(), i -> Collections.emptyList()); }
  • 79. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ā€£ Editable StyledText
  • 80. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ā€£ Editable StyledText StyledTextArea t = new StyledTextArea(); t.getContent().setText("package test;nnā€¦"); t.setStyleRanges( new StyleRange("keyword",0,6,null,null), /* */);
  • 81. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 StyledText APIs ā€£ Editable StyledText StyledTextArea t = new StyledTextArea(); t.getContent().setText("package test;nnā€¦"); t.setStyleRanges( new StyleRange("keyword",0,6,null,null), /* */); .keyword { -styled-text-color: rgb(127, 0, 85); -fx-font-weight: bold; }
  • 82. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 83. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 84. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ā€£ Mission 0: Must look slick!
  • 85. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ā€£ Mission 0: Must look slick! ā€£ Mission 1: Create a simple source editor like Notepad++ who: ā€£ Is process light-weight ā€£ Makes it easy to add new language highlightings
  • 86. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator ā€£ Mission 0: Must look slick! ā€£ Mission 1: Create a simple source editor like Notepad++ who: ā€£ Is process light-weight ā€£ Makes it easy to add new language highlightings ā€£ Mission 2: Allow the simple source editor to expand to a (simple) IDE: ā€£ where Source-Editor, VCS (git), Ticketsystem (eg. github), CI (eg. travis) are core components fully integrated with each other ā€£ Easy to integrate: Does not depend on core.resources
  • 87. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 88. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 89. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo (Basic- Editor + Python install)
  • 90. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator - HSL+CSS
  • 91. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Python { partition __dftl_partition_content_type partition __python_multiline_comment partition __python_singleline_comment partition __python_string rule_damager rule_damager __dftl_partition_content_type { default token python_default token python_string token python_operator token python_bracket token python_keyword_return token python_keyword keywords python_keyword_return [ "return" ] keywords python_keyword [ "and", "as", ā€žassert", /* ā€¦ */] } rule_damager __python_singleline_comment { default token python_single_line_comment } /* ā€¦ */ rule_partitioner { single_line __python_string '"' => '"' single_line __python_singleline_comment "#" multi_line __python_multiline_comment "'''" => "'''" single_line __python_string "'" => "'" } } for "text/python" Compensator - HSL+CSS
  • 92. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Python { partition __dftl_partition_content_type partition __python_multiline_comment partition __python_singleline_comment partition __python_string rule_damager rule_damager __dftl_partition_content_type { default token python_default token python_string token python_operator token python_bracket token python_keyword_return token python_keyword keywords python_keyword_return [ "return" ] keywords python_keyword [ "and", "as", ā€žassert", /* ā€¦ */] } rule_damager __python_singleline_comment { default token python_single_line_comment } /* ā€¦ */ rule_partitioner { single_line __python_string '"' => '"' single_line __python_singleline_comment "#" multi_line __python_multiline_comment "'''" => "'''" single_line __python_string "'" => "'" } } for "text/python" Compensator - HSL+CSS /* */ .Python.styled-text-area .python_doc_default { -styled-text-color: rgb(63, 95, 191); } .Python.styled-text-area .python_single_line_comment { -styled-text-color: rgb(63, 127, 95); } /* */
  • 93. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Demo
  • 94. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 95. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
  • 96. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator
  • 97. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0 Compensator - Roadmap ā€£ Tighter integration with git workflow ā€£ Improve Java autocomplete & Error Annotations ā€£ Support for JavaScript auto-complete & error reporting ā€£ Support for Xtext-Languages (their upcoming IntelliJ support should help us) ā€£ Connect it to Flux to get a Flux Compensator