This document discusses using Eclipse RCP and JavaFX technologies for building trading applications. It introduces Tom Schindl and Matthew Elliot who lead the e(fx)clipse project. Trading applications have requirements for plugin architectures, flexibility in screen layout, customization, and integration. JavaFX and HTML5 were considered for the user interface. A prototype was successful in demonstrating that Eclipse RCP with JavaFX could meet requirements. BestSolution provided expertise and guidance in exploring design possibilities beyond a conventional IDE look.
The document discusses smart code editors for Eclipse 4 (e4) applications. It describes the current situation where e4 does not natively support editors. It then explores options for implementing editors in e4, such as using existing Eclipse 3 code editors or taking a new "e4 way" of implementing editors as loosely coupled services. It also covers specific editor components like input handling, text parsing and highlighting, and leveraging the existing Eclipse text framework.
This document summarizes a presentation about developing custom plugins and testing Cordova apps. It discusses:
- Creating custom Cordova plugins using Plugman to scaffold code and define JavaScript interfaces. Native implementations are then added.
- Integrating cloud push notifications using the IBM Bluemix plugin, including registering devices, subscribing to tags, and receiving notifications.
- Unit testing Cordova apps with Jasmine, a JavaScript testing framework that supports synchronous and asynchronous code. Async tests require calling a done callback.
- Demos of creating a custom plugin and unit testing a Cordova app with Jasmine are included.
Red5 is an open source flash media server that provides functionality beyond just streaming media. This document discusses using Red5 to create a shared poll application for video conferencing. It provides code snippets for both the client and server sides to allow a host to broadcast a poll to other conference participants in real-time and collect their responses.
Talk given at JavaOne 2009 discussing how to build web applications using OSGi. The source for the demo found at http://github.com/mrdon/jforum-plugins/tree/master
Session Abstract: Enterprise Web applications tend to grow like weeds in monolithic complexity. OSGi, although more often associated with Java™ technology-based clients and application servers, can bring a new level of modularity, uptime, and stability that is needed with today's always-on hosted Web applications. OSGi gets really interesting when the pretty architecture diagrams meet the real world, because it consists of various deployment platforms, development environments, and application architectures. This presentation, for Java 2 Platform, Enterprise Edition (J2EE™ platform)-savvy architects and senior developers, provides a practical guide to the Web on OSGi, from integration approach to bundle development, to real-world code you can use today.
The session discusses
• What benefits OSGi brings to the J2EE platform
• Three integration strategies
• How to use Spring DM and Maven to ease development
• Lessons learned from Atlassian's recent OSGi deployment
• A production-ready example to use immediately
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
The document discusses how to develop JavaScript mobile apps using Apache Cordova, an open-source framework that allows developers to create mobile apps using HTML, CSS and JavaScript and access native device functions. It provides an overview of Cordova, how to configure and use Cordova commands, the Cordova APIs, and tips for integrating jQuery Mobile with Cordova apps. Code samples and links are included to help developers get started building Cordova apps.
javagruppen.dk - e4, the next generation Eclipse platformTonny Madsen
After 13 years, the Eclipse framework gets it second make-over. The new work is termed e4 and will be included in Eclipse 4.0.
In the first make-over the run-time was replaced in Eclipse 3.0 with OSGi to get a better and more stable foundation for plug-ins. This time the user interface and contributions are modernized for use in Eclipse 4.0.
In this session, we will see some of the insides of the new paradigms in e4.
[Devoxx Morocco 2015] Apache Cordova In ActionHazem Saleh
Apache Cordova is a platform for building native mobile apps using common Web technologies (HTML, CSS and JavaScript). Apache Cordova offers a set of APIs that allow the mobile app developers to utilize mobile native functions such as (Audio, Camera, Contacts …etc) using JavaScript. jQuery mobile is one of the best mobile web application frameworks, which allows the web developers to develop neat mobile web applications. This session discusses why there is a need for Hybrid mobile development, the current challenges of mobile development, and how using Apache Cordova can help in overcoming many of these technical challenges. It also highlights the best practices of using Apache Cordova with jQuery mobile. Finally, it demonstrates a real Cordova mobile app for showing the audience the best practices of designing, developing, and deploying hybrid Android and iOS mobile apps.
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014Hazem Saleh
This document provides an overview of developing native mobile apps using Apache Cordova. Cordova allows developing apps with HTML, CSS and JavaScript that can be deployed across platforms. It introduces Cordova, discusses its advantages over native development, and covers Cordova commands, APIs and integration with jQuery Mobile. An example Memo app demo is also presented.
The document discusses smart code editors for Eclipse 4 (e4) applications. It describes the current situation where e4 does not natively support editors. It then explores options for implementing editors in e4, such as using existing Eclipse 3 code editors or taking a new "e4 way" of implementing editors as loosely coupled services. It also covers specific editor components like input handling, text parsing and highlighting, and leveraging the existing Eclipse text framework.
This document summarizes a presentation about developing custom plugins and testing Cordova apps. It discusses:
- Creating custom Cordova plugins using Plugman to scaffold code and define JavaScript interfaces. Native implementations are then added.
- Integrating cloud push notifications using the IBM Bluemix plugin, including registering devices, subscribing to tags, and receiving notifications.
- Unit testing Cordova apps with Jasmine, a JavaScript testing framework that supports synchronous and asynchronous code. Async tests require calling a done callback.
- Demos of creating a custom plugin and unit testing a Cordova app with Jasmine are included.
Red5 is an open source flash media server that provides functionality beyond just streaming media. This document discusses using Red5 to create a shared poll application for video conferencing. It provides code snippets for both the client and server sides to allow a host to broadcast a poll to other conference participants in real-time and collect their responses.
Talk given at JavaOne 2009 discussing how to build web applications using OSGi. The source for the demo found at http://github.com/mrdon/jforum-plugins/tree/master
Session Abstract: Enterprise Web applications tend to grow like weeds in monolithic complexity. OSGi, although more often associated with Java™ technology-based clients and application servers, can bring a new level of modularity, uptime, and stability that is needed with today's always-on hosted Web applications. OSGi gets really interesting when the pretty architecture diagrams meet the real world, because it consists of various deployment platforms, development environments, and application architectures. This presentation, for Java 2 Platform, Enterprise Edition (J2EE™ platform)-savvy architects and senior developers, provides a practical guide to the Web on OSGi, from integration approach to bundle development, to real-world code you can use today.
The session discusses
• What benefits OSGi brings to the J2EE platform
• Three integration strategies
• How to use Spring DM and Maven to ease development
• Lessons learned from Atlassian's recent OSGi deployment
• A production-ready example to use immediately
[JavaLand 2015] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
The document discusses how to develop JavaScript mobile apps using Apache Cordova, an open-source framework that allows developers to create mobile apps using HTML, CSS and JavaScript and access native device functions. It provides an overview of Cordova, how to configure and use Cordova commands, the Cordova APIs, and tips for integrating jQuery Mobile with Cordova apps. Code samples and links are included to help developers get started building Cordova apps.
javagruppen.dk - e4, the next generation Eclipse platformTonny Madsen
After 13 years, the Eclipse framework gets it second make-over. The new work is termed e4 and will be included in Eclipse 4.0.
In the first make-over the run-time was replaced in Eclipse 3.0 with OSGi to get a better and more stable foundation for plug-ins. This time the user interface and contributions are modernized for use in Eclipse 4.0.
In this session, we will see some of the insides of the new paradigms in e4.
[Devoxx Morocco 2015] Apache Cordova In ActionHazem Saleh
Apache Cordova is a platform for building native mobile apps using common Web technologies (HTML, CSS and JavaScript). Apache Cordova offers a set of APIs that allow the mobile app developers to utilize mobile native functions such as (Audio, Camera, Contacts …etc) using JavaScript. jQuery mobile is one of the best mobile web application frameworks, which allows the web developers to develop neat mobile web applications. This session discusses why there is a need for Hybrid mobile development, the current challenges of mobile development, and how using Apache Cordova can help in overcoming many of these technical challenges. It also highlights the best practices of using Apache Cordova with jQuery mobile. Finally, it demonstrates a real Cordova mobile app for showing the audience the best practices of designing, developing, and deploying hybrid Android and iOS mobile apps.
Developing Native Mobile Apps Using JavaScript, ApacheCon NA 2014Hazem Saleh
This document provides an overview of developing native mobile apps using Apache Cordova. Cordova allows developing apps with HTML, CSS and JavaScript that can be deployed across platforms. It introduces Cordova, discusses its advantages over native development, and covers Cordova commands, APIs and integration with jQuery Mobile. An example Memo app demo is also presented.
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
Apache Cordova is a platform for building native mobile applications using common Web technologies (HTML, CSS and JavaScript). Apache Cordova offers a set of APIs that allow the mobile application developers to access mobile native functions such as (Audio, Camera, File, Battery, Contacts …etc) using JavaScript. Although there are many JavaScript mobile application frameworks, jQuery mobile is one of the best mobile web application frameworks which allows the web developers to develop web applications that are mobile friendly. This session illustrates how to use Apache Cordova with the combination of jQuery mobile in order to develop a native Android application and deploy on a real Android device. The demo application (“Memo” application) utilizes mobile native functions (Audio and Camera) using pure JavaScript.
Introducing Spring Cloud Gateway and API Hub for VMware TanzuVMware Tanzu
SpringOne 2020
Introducing Spring Cloud Gateway and API Hub for VMware Tanzu
Alexey Nesterov, Software Engineer at VMware
Gareth Clay, Senior Member Technical Staff at VMware
This document discusses different techniques for mixing Ajax, Swing, and Flash technologies on the client-side. It provides overviews and examples of integrating Ajax with Flash using ExternalInterface and the Flex Ajax Bridge, mixing Swing and Ajax using a Java browser component, and combining Swing and Flash with jFlash or JDIC. Specific demos are described that showcase hybrid stores mixing these technologies.
VMWare Studio is a free virtual appliance that allows users to author, configure, deploy and customize virtual machines, vApps, and virtual appliances. It provides templates for common configurations and allows customization of hardware, operating systems, applications, and output formats. The output can be single VMs or multi-VM vApps packaged in OVF format for deployment to vSphere or vCloud Director. The tool aims to simplify the process of creating and distributing virtual appliances.
D22 portlet development with open source frameworksSunil Patil
The document discusses various frameworks for portlet development including Struts, Spring, and JSF. It provides details on the Struts Portlet Framework and Struts 2.0 framework, including their key components, architecture, and how they can be used to build portlet applications.
Apache Aries: A blueprint for developing with OSGi and JEEmahrwald
This document discusses OSGi and Apache Aries, which is an open source project that aims to make OSGi and Java EE technologies work better together. It provides an overview of OSGi concepts like modularity, services, and lifecycle management. It also explains how Apache Aries uses Blueprint to define and manage components and references between bundles. Finally, it highlights Apache Aries' integration of technologies like JNDI and provides examples of how Blueprint can be used to define services and dependencies between bundles in an OSGi application.
The document discusses simplifying update and extension installation for RCP applications. It describes improvements made in Eclipse 3.6 to make the update process simpler using the p2 provisioning system. These include a declarative API, branding and metadata enhancements, moving Mylyn Discovery to p2, and enhancing the self-update experience for RCP applications. Examples are provided of implementing self-update and extension installation using these new p2 capabilities.
Presented at JAX London 2015.
The last few years have seen a huge growth in the usage of JavaScript, to the extent that it is often reported to be the #1 programming language in use today. Additionally, the arrival of server-side JavaScript through frameworks such as Node.js and Ringo.js, and JavaScript on the JVM through Nashorn and Avatar.js, means that enterprise web applications written in JavaScript are not just a possibility—but a reality for companies such as LinkedIn, eBay, Yahoo, ADP and Dow Jones. This session will compare and contrast the two platforms and describe the advantages of each for deploying, managing and monitoring highly scalable applications.
This document provides important information for users of CertifyMe exam preparation products. It outlines details on obtaining the latest version of a product, providing feedback, and copyright restrictions. Users can download the newest versions of purchased products from their member account area. Feedback should be sent to feedback@certifyme.com and include exam number, version, page number, question number, and login ID. Each PDF file contains a unique serial number associated with the user for security purposes, and CertifyMe reserves the right to take legal action for unauthorized distribution of PDF files according to international copyright laws.
This document provides a tutorial for setting up a development environment to create a simple web service in Java using the Apache CXF framework. It describes how to install Spring Tool Suite (STS), Apache CXF, and Tomcat. It then guides the user through creating a web service interface and implementation class with JAX-WS annotations, configuring the web.xml and spring context files, building and deploying the WAR file to Tomcat, and using the WSDL to generate and test a client stub application.
Rewriting a Plugin Architecture 3 Times to Harness the API EconomyTim Pettersen
Tim Pettersen and Ian Buchanan discuss the benefits and pitfalls of building an plugin SPI, and unveil Atlassian's new remote add-ons framework: Atlassian Connect.
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
OSGi Community Event 2016 Presentation by David Bosschaert (Adobe) & Carsten Ziegeler (Adobe)
The OSGi expert groups are working on the next big release. Learn in this session about the various new specification efforts going on and how they will make your developer life easier. The new specifications range from configuration handling, object conversion, JAX-RS, distributed eventing, to cloud and IoT.
The document discusses the JavaFX ecosystem, including layout managers like MigLayout and Medusa, widgets like JideFX and ControlsFX, styling libraries like JFoenix and BootstrapFX, testing tools like TestFX, frameworks like Afterburner.fx and MvvmFX, integration platforms like e(fx)clipse, libraries like AnchorFX and ReactFX, and GroovyFX for writing JavaFX applications in Groovy. It provides an overview of the various options available for building JavaFX user interfaces, styling applications, testing, and developing full applications.
The document discusses using JavaFX for enterprise application development. It introduces JavaFX basics and best practices for enterprise development including using background threads to load data from servers. It also discusses client architectures like MVVM and frameworks that support JavaFX and integration with Java EE.
JavaFX can be used to create user interfaces for embedded systems like the Raspberry Pi and BeagleBone Black. While Java's "write once, run anywhere" mantra does not directly apply to embedded due to different requirements and constraints, much code can be reused from mobile and desktop applications by focusing on content over elaborate graphics, limiting the number of nodes in the scene graph, and avoiding memory-intensive operations. With optimization, JavaFX applications can run well on embedded devices with as few as 3-60 nodes in the scene graph.
Building Java Desktop Apps with JavaFX 8 and Java EE 7Bruno Borges
This document summarizes a presentation about building Java applications that combine JavaFX desktop applications with Java EE 7 web services and technologies. The presentation agenda includes an overview of JavaFX desktop applications, exposing server-side data with Java EE 7, Java EE 7 APIs that can be used for client-side applications, and putting all the pieces together in a hybrid application. The document provides examples of using Java EE 7 APIs like JAX-RS, JSON-P, WebSocket, JSF, and more in both server-side and client-side applications.
This document discusses test-driven development with JavaFX. It covers testing JavaFX applications at the unit, integration, and system levels. It also discusses continuous integration/continuous delivery and different tools that can be used for testing JavaFX applications, including TestFX, MarvinFX, JemmyFX, and Automaton. TestFX is highlighted as the recommended tool, with details provided on how to interact with JavaFX applications using its fluent API. The document also discusses using the view object pattern to write more readable tests and testing JavaFX applications that use DataFX or Afterburner.fx frameworks. It provides an example of using CDI to inject mocks when testing.
1. The document discusses 10 things the author likes about JavaFX, which is a Java UI toolkit.
2. It provides examples of JavaFX capabilities like data binding, FXML, CSS, effects, animations, multi-touch support, charts, and integration with web views.
3. The author encourages using JavaFX instead of older toolkits like Swing, argues it is efficient and modern, and offers to provide more information to those interested in migrating from Swing to JavaFX.
Theater Management Software - Features & technologyHemant Maheshwari
White Collar Technologies is an Indian company that develops theater management software called Expert Theater. Expert Theater allows both small and large theaters to sell tickets, process payments, and manage single or multiple theaters remotely. It has features like centralized management of users, sales, pricing and discounts for multiple theaters. Using cloud computing provides benefits like lower costs, easy access from any device, and no need for on-site hardware maintenance. The document introduces Expert Theater and its features, and provides contact information for the sales team.
[JMaghreb 2014] Developing JavaScript Mobile Apps Using Apache CordovaHazem Saleh
Apache Cordova is a platform for building native mobile applications using common Web technologies (HTML, CSS and JavaScript). Apache Cordova offers a set of APIs that allow the mobile application developers to access mobile native functions such as (Audio, Camera, File, Battery, Contacts …etc) using JavaScript. Although there are many JavaScript mobile application frameworks, jQuery mobile is one of the best mobile web application frameworks which allows the web developers to develop web applications that are mobile friendly. This session illustrates how to use Apache Cordova with the combination of jQuery mobile in order to develop a native Android application and deploy on a real Android device. The demo application (“Memo” application) utilizes mobile native functions (Audio and Camera) using pure JavaScript.
Introducing Spring Cloud Gateway and API Hub for VMware TanzuVMware Tanzu
SpringOne 2020
Introducing Spring Cloud Gateway and API Hub for VMware Tanzu
Alexey Nesterov, Software Engineer at VMware
Gareth Clay, Senior Member Technical Staff at VMware
This document discusses different techniques for mixing Ajax, Swing, and Flash technologies on the client-side. It provides overviews and examples of integrating Ajax with Flash using ExternalInterface and the Flex Ajax Bridge, mixing Swing and Ajax using a Java browser component, and combining Swing and Flash with jFlash or JDIC. Specific demos are described that showcase hybrid stores mixing these technologies.
VMWare Studio is a free virtual appliance that allows users to author, configure, deploy and customize virtual machines, vApps, and virtual appliances. It provides templates for common configurations and allows customization of hardware, operating systems, applications, and output formats. The output can be single VMs or multi-VM vApps packaged in OVF format for deployment to vSphere or vCloud Director. The tool aims to simplify the process of creating and distributing virtual appliances.
D22 portlet development with open source frameworksSunil Patil
The document discusses various frameworks for portlet development including Struts, Spring, and JSF. It provides details on the Struts Portlet Framework and Struts 2.0 framework, including their key components, architecture, and how they can be used to build portlet applications.
Apache Aries: A blueprint for developing with OSGi and JEEmahrwald
This document discusses OSGi and Apache Aries, which is an open source project that aims to make OSGi and Java EE technologies work better together. It provides an overview of OSGi concepts like modularity, services, and lifecycle management. It also explains how Apache Aries uses Blueprint to define and manage components and references between bundles. Finally, it highlights Apache Aries' integration of technologies like JNDI and provides examples of how Blueprint can be used to define services and dependencies between bundles in an OSGi application.
The document discusses simplifying update and extension installation for RCP applications. It describes improvements made in Eclipse 3.6 to make the update process simpler using the p2 provisioning system. These include a declarative API, branding and metadata enhancements, moving Mylyn Discovery to p2, and enhancing the self-update experience for RCP applications. Examples are provided of implementing self-update and extension installation using these new p2 capabilities.
Presented at JAX London 2015.
The last few years have seen a huge growth in the usage of JavaScript, to the extent that it is often reported to be the #1 programming language in use today. Additionally, the arrival of server-side JavaScript through frameworks such as Node.js and Ringo.js, and JavaScript on the JVM through Nashorn and Avatar.js, means that enterprise web applications written in JavaScript are not just a possibility—but a reality for companies such as LinkedIn, eBay, Yahoo, ADP and Dow Jones. This session will compare and contrast the two platforms and describe the advantages of each for deploying, managing and monitoring highly scalable applications.
This document provides important information for users of CertifyMe exam preparation products. It outlines details on obtaining the latest version of a product, providing feedback, and copyright restrictions. Users can download the newest versions of purchased products from their member account area. Feedback should be sent to feedback@certifyme.com and include exam number, version, page number, question number, and login ID. Each PDF file contains a unique serial number associated with the user for security purposes, and CertifyMe reserves the right to take legal action for unauthorized distribution of PDF files according to international copyright laws.
This document provides a tutorial for setting up a development environment to create a simple web service in Java using the Apache CXF framework. It describes how to install Spring Tool Suite (STS), Apache CXF, and Tomcat. It then guides the user through creating a web service interface and implementation class with JAX-WS annotations, configuring the web.xml and spring context files, building and deploying the WAR file to Tomcat, and using the WSDL to generate and test a client stub application.
Rewriting a Plugin Architecture 3 Times to Harness the API EconomyTim Pettersen
Tim Pettersen and Ian Buchanan discuss the benefits and pitfalls of building an plugin SPI, and unveil Atlassian's new remote add-ons framework: Atlassian Connect.
New and cool in OSGi R7 - David Bosschaert & Carsten Ziegelermfrancis
OSGi Community Event 2016 Presentation by David Bosschaert (Adobe) & Carsten Ziegeler (Adobe)
The OSGi expert groups are working on the next big release. Learn in this session about the various new specification efforts going on and how they will make your developer life easier. The new specifications range from configuration handling, object conversion, JAX-RS, distributed eventing, to cloud and IoT.
The document discusses the JavaFX ecosystem, including layout managers like MigLayout and Medusa, widgets like JideFX and ControlsFX, styling libraries like JFoenix and BootstrapFX, testing tools like TestFX, frameworks like Afterburner.fx and MvvmFX, integration platforms like e(fx)clipse, libraries like AnchorFX and ReactFX, and GroovyFX for writing JavaFX applications in Groovy. It provides an overview of the various options available for building JavaFX user interfaces, styling applications, testing, and developing full applications.
The document discusses using JavaFX for enterprise application development. It introduces JavaFX basics and best practices for enterprise development including using background threads to load data from servers. It also discusses client architectures like MVVM and frameworks that support JavaFX and integration with Java EE.
JavaFX can be used to create user interfaces for embedded systems like the Raspberry Pi and BeagleBone Black. While Java's "write once, run anywhere" mantra does not directly apply to embedded due to different requirements and constraints, much code can be reused from mobile and desktop applications by focusing on content over elaborate graphics, limiting the number of nodes in the scene graph, and avoiding memory-intensive operations. With optimization, JavaFX applications can run well on embedded devices with as few as 3-60 nodes in the scene graph.
Building Java Desktop Apps with JavaFX 8 and Java EE 7Bruno Borges
This document summarizes a presentation about building Java applications that combine JavaFX desktop applications with Java EE 7 web services and technologies. The presentation agenda includes an overview of JavaFX desktop applications, exposing server-side data with Java EE 7, Java EE 7 APIs that can be used for client-side applications, and putting all the pieces together in a hybrid application. The document provides examples of using Java EE 7 APIs like JAX-RS, JSON-P, WebSocket, JSF, and more in both server-side and client-side applications.
This document discusses test-driven development with JavaFX. It covers testing JavaFX applications at the unit, integration, and system levels. It also discusses continuous integration/continuous delivery and different tools that can be used for testing JavaFX applications, including TestFX, MarvinFX, JemmyFX, and Automaton. TestFX is highlighted as the recommended tool, with details provided on how to interact with JavaFX applications using its fluent API. The document also discusses using the view object pattern to write more readable tests and testing JavaFX applications that use DataFX or Afterburner.fx frameworks. It provides an example of using CDI to inject mocks when testing.
1. The document discusses 10 things the author likes about JavaFX, which is a Java UI toolkit.
2. It provides examples of JavaFX capabilities like data binding, FXML, CSS, effects, animations, multi-touch support, charts, and integration with web views.
3. The author encourages using JavaFX instead of older toolkits like Swing, argues it is efficient and modern, and offers to provide more information to those interested in migrating from Swing to JavaFX.
Theater Management Software - Features & technologyHemant Maheshwari
White Collar Technologies is an Indian company that develops theater management software called Expert Theater. Expert Theater allows both small and large theaters to sell tickets, process payments, and manage single or multiple theaters remotely. It has features like centralized management of users, sales, pricing and discounts for multiple theaters. Using cloud computing provides benefits like lower costs, easy access from any device, and no need for on-site hardware maintenance. The document introduces Expert Theater and its features, and provides contact information for the sales team.
The document provides an agenda for a MuleSoft meetup group in Manchester discussing building MuleSoft capabilities and automation with Anypoint and Composer. The agenda includes introductions, two technical sessions on building Mule capabilities from support resources and delivering process orchestration with Composer and Anypoint Platform, and networking. The speakers are introduced and will discuss leveraging MuleSoft documentation, GitHub repositories, and other resources to build integration assets and scaling functionality, as well as demonstrate process orchestration using Composer and Anypoint.
2016 Streaming Media West: Transitioning from Flash to HTML5Erica Beavers
As Flash continues to decline, HTML5 video technologies increasingly bring the promise of heightened performance and better QOE. This workshop provides an in-depth look at HTML5 players, their features and strengths, as well as the open-source media engine frameworks available on the market today. We begin by examining the main components in a video player, then discuss how to choose a player adapted to one’s use case, examining how several open-source solutions compare. Finally, we use an interactive example to build features and demonstrate several optimizations, offering tips and best practices and pointing out potential production issues as we go along.
techcello is a product company providing .Net Engineering Stacks with multi-tenant architecture. You get the freedom, flexibility and control of custom development without the complexities, risks, cost and time overheads of building and maintaining your own framework. Multi-tenant applications built using techcello\'s framework can be deployed anywhere : On-premise Windows / SQL boxes, Data centres, Virtual machines, Amazon RDS / MySQL and Windows Azure / SQL Azure.
The document summarizes a multi-tenant SaaS framework called celloSaaS that allows developers to build multi-tenant applications on the .NET stack. It has been in development since 2010 and is currently on version 2.3. It saves developers 30-40% of the time and cost of building multi-tenant applications from scratch. It offers features like tenant-level customization, security isolation, and developer productivity tools.
This document describes Cello, a cloud-ready, multi-tenant application development platform for .NET. Cello addresses common pain points in building software-as-a-service applications by providing pre-built modules for tenant management, security, customization, workflows, and more. This allows developers to focus on their core business solutions while leveraging Cello's tested frameworks. Customers can customize applications by configuring features, forms, and business rules at the tenant level. Cello aims to reduce costs, risks, and time-to-market for developing configurable multi-tenant applications.
Questions Log: Installing Cognos BI 10.2.2Senturus
Questions collected during Senturus’ webinar entitled, “Cognos 10.2.2 Performance Tuning.” View the webinar video recording and download this deck: http://www.senturus.com/resources/installing-cognos-bi-10-2-2/.
In this webinar we review the following: 1) Cognos architecture and the individual components that can be installed in a single or multi-tiered environment, 2) The Cognos Configuration interface and what settings to modify, 3) Internet Information Services (IIS), including virtual directories, handler mappings, application pools and setting up your webpage and Cognos default security and 4) How to set up a third-party authentication provider.
Senturus, a business analytics consulting firm, has a resource library with hundreds of free recorded webinars, trainings, demos and unbiased product reviews. Take a look and share them with your colleagues and friends: http://www.senturus.com/resources/.
Cloud Foundry Services on PKS with No Extra Code, "We Bosh So You Don’t Have ...VMware Tanzu
SpringOne Platform 2018
Cloud Foundry Services on PKS with No Extra Code, "We Bosh So You Don’t Have To!" (Kibosh)
Jeenal Shah, Pivotal; Joe Eltgroth, Pivotal
Connecting All Abstractions with IstioVMware Tanzu
SpringOne Platform 2017
Ramiro Salas, Pivotal
The concept of a service mesh represents a paradigm shift on application connectivity for distributed systems, with wide implications for analytics, policy and extensibility. In this talk, we will explain what a service mesh is, the power it brings to microservices, and its impact on Cloud Foundry and K8s, both separately and together. We will also discuss the implications for the traditional network infrastructure, and the shifting of responsibilities from L3/4 to L7, and our current thinking of using Istio to integrate all abstractions.
How to Build Your OTT Platform in 2023_ A Step-By-Step Guide.pdfvideocryptsoft
Are you planning to enter the lucrative OTT market? This is the correct time to develop an OTT platform. In this digital age, the number of internet and smartphone users is dramatically increasing. At the same time, the demand for the perfect OTT platforms is also on the spike.
Rendering Innovation and Exemplary End-user Experiences with Product and Plat...Anil
Rendering innovation and delivering exemplary end-user experiences are crucial aspects of product and platform engineering. Achieving success in these areas requires a combination of cutting-edge technologies, user-centric design principles, and a commitment to continuous improvement. Here are key considerations and strategies for rendering innovation and ensuring exceptional end-user experiences
Extend Agile and DevOps Practices Across Hybrid ITDevOps.com
As companies race to uncover data insights that will deliver a sustainable competitive advantage, leaders in IT must find and implement measures that better facilitate the process of turning those data insights into consumable digital experiences. For organizations running mainframes, IT leaders must find ways to seamlessly integrate this system of record into their end-to-end application development, test, and delivery strategy.
What We're Learning Adopting Spring Boot and PCF for Dell.com's eCommerceVMware Tanzu
The document discusses Dell's adoption of Spring Boot and Pivotal Cloud Foundry (PCF) for its e-commerce platform. It describes how Dell transformed its technology foundation to be cloud-native using microservices, Spring, and PCF. It also details Dell's evaluation of different technologies like Spring Cloud Dataflow and Apache Camel for integration and highlights tips for adopting Spring and leveraging PCF.
The document is a curriculum vitae for Damodar N. It includes details about his experience, core strengths, responsibilities, educational qualifications, skill set, and summaries of projects he has worked on. Some key points:
- Over 12 years of experience in information technology with expertise in enterprise application integration using Tibco, MQ Series, Spring Boot and API gateways.
- Currently working as a technical lead handling design and development teams and working on projects for clients like Citibank Singapore.
- Responsibilities include designing RESTful APIs, API implementation, load testing, troubleshooting, and version control.
- Educational qualifications include a Bachelor of Technology degree and skills include Tibco, MQ Series, REST
Building Volkswagen Group's Digital Ecosystem (AMT304) - AWS re:Invent 2018Amazon Web Services
Volkswagen has built a One Digital Platform (ODP) based on AWS to power its digital transformation and develop new mobility solutions. The ODP provides a flexible cloud-native architecture and will extend connectivity to vehicles. Volkswagen migrated over 100 applications to the ODP within 14 months to support new vehicle launches. Lessons learned included adopting an evolutionary approach, aligning platform development with application needs, investing in new skills, and gaining acceptance across functions. Next steps involve refactoring applications, modularizing code, and scaling the platform to support 15 million connected vehicles.
This document provides an overview of the architecture of IBM's Branch Transformation Toolkit. The toolkit aims to reduce costs, preserve existing investments, offer flexibility, support incremental development, and maximize reusability. Its architecture is based on open standards, supports multiple channels, and follows principles of being open, scalable, and easy to implement. The runtime architecture includes client, presentation, and logic layers, and supports both Java and HTML clients. The toolkit enables developing applications that access existing enterprise systems across all delivery channels.
2016 Federal User Group Conference - TeamForge Capabilities and DirectionsCollabNet
TeamForge is CollabNet's platform for enterprise cloud development. It provides capabilities for agile development at scale, enterprise infrastructure requirements, and enabling traceability across tools. The document discusses new features for TeamForge including Git merge and pull request support, expanded event associations, reporting improvements, and project workspaces.
Consistent toolbox talks are critical for maintaining workplace safety, as they provide regular opportunities to address specific hazards and reinforce safe practices.
These brief, focused sessions ensure that safety is a continual conversation rather than a one-time event, which helps keep safety protocols fresh in employees' minds. Studies have shown that shorter, more frequent training sessions are more effective for retention and behavior change compared to longer, infrequent sessions.
Engaging workers regularly, toolbox talks promote a culture of safety, empower employees to voice concerns, and ultimately reduce the likelihood of accidents and injuries on site.
The traditional method of conducting safety talks with paper documents and lengthy meetings is not only time-consuming but also less effective. Manual tracking of attendance and compliance is prone to errors and inconsistencies, leading to gaps in safety communication and potential non-compliance with OSHA regulations. Switching to a digital solution like Safelyio offers significant advantages.
Safelyio automates the delivery and documentation of safety talks, ensuring consistency and accessibility. The microlearning approach breaks down complex safety protocols into manageable, bite-sized pieces, making it easier for employees to absorb and retain information.
This method minimizes disruptions to work schedules, eliminates the hassle of paperwork, and ensures that all safety communications are tracked and recorded accurately. Ultimately, using a digital platform like Safelyio enhances engagement, compliance, and overall safety performance on site. https://safelyio.com/
E-commerce Development Services- Hornet DynamicsHornet Dynamics
For any business hoping to succeed in the digital age, having a strong online presence is crucial. We offer Ecommerce Development Services that are customized according to your business requirements and client preferences, enabling you to create a dynamic, safe, and user-friendly online store.
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesQuickdice ERP
Explore the seamless transition to e-invoicing with this comprehensive guide tailored for Saudi Arabian businesses. Navigate the process effortlessly with step-by-step instructions designed to streamline implementation and enhance efficiency.
Most important New features of Oracle 23c for DBAs and Developers. You can get more idea from my youtube channel video from https://youtu.be/XvL5WtaC20A
Unveiling the Advantages of Agile Software Development.pdfbrainerhub1
Learn about Agile Software Development's advantages. Simplify your workflow to spur quicker innovation. Jump right in! We have also discussed the advantages.
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...kalichargn70th171
In today's business landscape, digital integration is ubiquitous, demanding swift innovation as a necessity rather than a luxury. In a fiercely competitive market with heightened customer expectations, the timely launch of flawless digital products is crucial for both acquisition and retention—any delay risks ceding market share to competitors.
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemPeter Muessig
Learn about the latest innovations in and around OpenUI5/SAPUI5: UI5 Tooling, UI5 linter, UI5 Web Components, Web Components Integration, UI5 2.x, UI5 GenAI.
Recording:
https://www.youtube.com/live/MSdGLG2zLy8?si=INxBHTqkwHhxV5Ta&t=0
Measures in SQL (SIGMOD 2024, Santiago, Chile)Julian Hyde
SQL has attained widespread adoption, but Business Intelligence tools still use their own higher level languages based upon a multidimensional paradigm. Composable calculations are what is missing from SQL, and we propose a new kind of column, called a measure, that attaches a calculation to a table. Like regular tables, tables with measures are composable and closed when used in queries.
SQL-with-measures has the power, conciseness and reusability of multidimensional languages but retains SQL semantics. Measure invocations can be expanded in place to simple, clear SQL.
To define the evaluation semantics for measures, we introduce context-sensitive expressions (a way to evaluate multidimensional expressions that is consistent with existing SQL semantics), a concept called evaluation context, and several operations for setting and modifying the evaluation context.
A talk at SIGMOD, June 9–15, 2024, Santiago, Chile
Authors: Julian Hyde (Google) and John Fremlin (Google)
https://doi.org/10.1145/3626246.3653374
Project Management: The Role of Project Dashboards.pdfKarya Keeper
Project management is a crucial aspect of any organization, ensuring that projects are completed efficiently and effectively. One of the key tools used in project management is the project dashboard, which provides a comprehensive view of project progress and performance. In this article, we will explore the role of project dashboards in project management, highlighting their key features and benefits.
INTRODUCTION TO AI CLASSICAL THEORY TARGETED EXAMPLESanfaltahir1010
Image: Include an image that represents the concept of precision, such as a AI helix or a futuristic healthcare
setting.
Objective: Provide a foundational understanding of precision medicine and its departure from traditional
approaches
Role of theory: Discuss how genomics, the study of an organism's complete set of AI ,
plays a crucial role in precision medicine.
Customizing treatment plans: Highlight how genetic information is used to customize
treatment plans based on an individual's genetic makeup.
Examples: Provide real-world examples of successful application of AI such as genetic
therapies or targeted treatments.
Importance of molecular diagnostics: Explain the role of molecular diagnostics in identifying
molecular and genetic markers associated with diseases.
Biomarker testing: Showcase how biomarker testing aids in creating personalized treatment plans.
Content:
• Ethical issues: Examine ethical concerns related to precision medicine, such as privacy, consent, and
potential misuse of genetic information.
• Regulations and guidelines: Present examples of ethical guidelines and regulations in place to safeguard
patient rights.
• Visuals: Include images or icons representing ethical considerations.
Content:
• Ethical issues: Examine ethical concerns related to precision medicine, such as privacy, consent, and
potential misuse of genetic information.
• Regulations and guidelines: Present examples of ethical guidelines and regulations in place to safeguard
patient rights.
• Visuals: Include images or icons representing ethical considerations.
Content:
• Ethical issues: Examine ethical concerns related to precision medicine, such as privacy, consent, and
potential misuse of genetic information.
• Regulations and guidelines: Present examples of ethical guidelines and regulations in place to safeguard
patient rights.
• Visuals: Include images or icons representing ethical considerations.
Real-world case study: Present a detailed case study showcasing the success of precision
medicine in a specific medical scenario.
Patient's journey: Discuss the patient's journey, treatment plan, and outcomes.
Impact: Emphasize the transformative effect of precision medicine on the individual's
health.
Objective: Ground the presentation in a real-world example, highlighting the practical
application and success of precision medicine.
Data challenges: Address the challenges associated with managing large sets of patient data in precision
medicine.
Technological solutions: Discuss technological innovations and solutions for handling and analyzing vast
datasets.
Visuals: Include graphics representing data management challenges and technological solutions.
Objective: Acknowledge the data-related challenges in precision medicine and highlight innovative solutions.
Data challenges: Address the challenges associated with managing large sets of patient data in precision
medicine.
Technological solutions: Discuss technological innovations and solutions
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...The Third Creative Media
"Navigating Invideo: A Comprehensive Guide" is an essential resource for anyone looking to master Invideo, an AI-powered video creation tool. This guide provides step-by-step instructions, helpful tips, and comparisons with other AI video creators. Whether you're a beginner or an experienced video editor, you'll find valuable insights to enhance your video projects and bring your creative ideas to life.
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...kalichargn70th171
In today's fiercely competitive mobile app market, the role of the QA team is pivotal for continuous improvement and sustained success. Effective testing strategies are essential to navigate the challenges confidently and precisely. Ensuring the perfection of mobile apps before they reach end-users requires thoughtful decisions in the testing plan.
Flutter is a popular open source, cross-platform framework developed by Google. In this webinar we'll explore Flutter and its architecture, delve into the Flutter Embedder and Flutter’s Dart language, discover how to leverage Flutter for embedded device development, learn about Automotive Grade Linux (AGL) and its consortium and understand the rationale behind AGL's choice of Flutter for next-gen IVI systems. Don’t miss this opportunity to discover whether Flutter is right for your project.
1. e(fx)clipse APIs
Tom Schindl <tom.schindl@bestsolution.at>
Twitter: @tomsontom
Blog: http://tomsondev.bestsolution.at
Website: http://www.bestsolution.at
Matthew Elliot <matthew.elliot@360t.com>
Website: http://www.360t.com
2. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
About Tom
‣ CTO BestSolution.at Systemhaus GmbH
‣ Eclipse Committer
‣ e4
‣ Platform
‣ EMF
‣ Project lead
‣ e(fx)clipse
‣ Twitter: @tomsontom
‣ Blog: tomsondev.bestsolution.at
‣ Corporate: http://bestsolution.at
3. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
About Matt
‣ Software Team Lead @ 360T (Deutsche Börse Group)
‣ Focus on OTC Trading Applications
‣ Product Owner for IAF @ 360T
‣ Eclipse RCP 4
‣ JavaFX
‣ e(fx)clipse
‣ E-Mail: matthew.elliot@360t.com
‣ Company: http://www.360t.com
‣ LinkedIn: https://de.linkedin.com/pub/matthew-elliot/
24/43a/61
4. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
RCP / JavaFX / e(fx)clipse for Trading
applications
5. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
6. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
7. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
8. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
9. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
10. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
– Multiple language support
11. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
– Multiple language support
– Support for integration with 3rd parties at a visual level
12. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
– Multiple language support
– Support for integration with 3rd parties at a visual level
– Next 5, 10, 15 years, support, evolution, flexibility
13. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
– Multiple language support
– Support for integration with 3rd parties at a visual level
– Next 5, 10, 15 years, support, evolution, flexibility
• Two main options
14. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
– Multiple language support
– Support for integration with 3rd parties at a visual level
– Next 5, 10, 15 years, support, evolution, flexibility
• Two main options
– JavaFX
15. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Common / Difficult Requirement Set
• Requirements
– Plugin architecture to support growing number of trading, reporting, and
pricing tools
– Flexibility in managing screen space, multiple monitor set ups, and
ability for user to customise their layout and tool set
– More flexibility in design and customisation for our customers
– Multiple language support
– Support for integration with 3rd parties at a visual level
– Next 5, 10, 15 years, support, evolution, flexibility
• Two main options
– JavaFX
– HTML 5
16. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UX Concept for Visual Integration
Framework
17. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UX Concept for Visual Integration
Framework
‣ Core components
18. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UX Concept for Visual Integration
Framework
‣ Core components
‣ Tabbed views with flexible layouts; built up like Tetris with
different plugins acting as ‘building blocks’
19. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UX Concept for Visual Integration
Framework
‣ Core components
‣ Tabbed views with flexible layouts; built up like Tetris with
different plugins acting as ‘building blocks’
‣ Advanced controls for managing trading activity across multiple
monitors
20. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UX Concept for Visual Integration
Framework
‣ Core components
‣ Tabbed views with flexible layouts; built up like Tetris with
different plugins acting as ‘building blocks’
‣ Advanced controls for managing trading activity across multiple
monitors
‣ Modern / flat design line / 360T of the future
21. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UX Concept for Visual Integration
Framework
‣ Core components
‣ Tabbed views with flexible layouts; built up like Tetris with
different plugins acting as ‘building blocks’
‣ Advanced controls for managing trading activity across multiple
monitors
‣ Modern / flat design line / 360T of the future
22. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‚The Leap‘ - A Technology Stack to
Support an Enterprise
23. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‚The Leap‘ - A Technology Stack to
Support an Enterprise
‣ 2012-14 – Stalled, JavaFX?, HTML5?, Java8?, AppStore?
24. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‚The Leap‘ - A Technology Stack to
Support an Enterprise
‣ 2012-14 – Stalled, JavaFX?, HTML5?, Java8?, AppStore?
‣ 2014 – Preliminary Investigations into EclipseRCP with
JavaFX
25. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‚The Leap‘ - A Technology Stack to
Support an Enterprise
‣ 2012-14 – Stalled, JavaFX?, HTML5?, Java8?, AppStore?
‣ 2014 – Preliminary Investigations into EclipseRCP with
JavaFX
‣ 2015 (Q1) – Prototype Phase with JavaFX / Eclipse RCP (can
it support our requirements?) / Best Solution engaged for
experience
26. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‚The Leap‘ - A Technology Stack to
Support an Enterprise
‣ 2012-14 – Stalled, JavaFX?, HTML5?, Java8?, AppStore?
‣ 2014 – Preliminary Investigations into EclipseRCP with
JavaFX
‣ 2015 (Q1) – Prototype Phase with JavaFX / Eclipse RCP (can
it support our requirements?) / Best Solution engaged for
experience
‣ 2015 (Q3) – Successful development of first concrete
application
27. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‚The Leap‘ - A Technology Stack to
Support an Enterprise
‣ 2012-14 – Stalled, JavaFX?, HTML5?, Java8?, AppStore?
‣ 2014 – Preliminary Investigations into EclipseRCP with
JavaFX
‣ 2015 (Q1) – Prototype Phase with JavaFX / Eclipse RCP (can
it support our requirements?) / Best Solution engaged for
experience
‣ 2015 (Q3) – Successful development of first concrete
application
‣ 2016 – Well I can’t give away our strategic roadmap…
28. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
BestSolution as ‚Sparring Partner‘
29. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
BestSolution as ‚Sparring Partner‘
‣ Trading applications can’t look like my IDE… what else is
possible?
30. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
BestSolution as ‚Sparring Partner‘
‣ Trading applications can’t look like my IDE… what else is
possible?
‣ How hard is it to customize Eclipse RCP…?
31. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
BestSolution as ‚Sparring Partner‘
‣ Trading applications can’t look like my IDE… what else is
possible?
‣ How hard is it to customize Eclipse RCP…?
‣ What about ‘insert grand UX design’…?
32. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
BestSolution as ‚Sparring Partner‘
‣ Trading applications can’t look like my IDE… what else is
possible?
‣ How hard is it to customize Eclipse RCP…?
‣ What about ‘insert grand UX design’…?
‣ What about performance…?
33. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
BestSolution as ‚Sparring Partner‘
‣ Trading applications can’t look like my IDE… what else is
possible?
‣ How hard is it to customize Eclipse RCP…?
‣ What about ‘insert grand UX design’…?
‣ What about performance…?
‣ What about OSGi? / what about Dependency Injection?
37. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
(e4)App-Architecture
‣ Services
‣ Everything is designed as a service in e4
‣ Everything in your app SHOULD be designed as service
‣ Dependencies
‣ NEVER create a (OSGi/e4) framework API dependency in
your business code you can NOT mock easily or
reimplement in other ENVs - watch out for transitive
dependencies!
38. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Some Helpers
39. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Useful Base-APIs
‣ Lookup Services (if you are outside the DI-Container)
41. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Util.getService(ServiceSample.class, FilesystemService.class).ifPresent( service -> {
service.observePath(Paths.get("/tmp"), (k,p) -> {
// Handle Path change
});
});
‣ Lookup Services (if you are outside the DI-Container)
Useful Base-APIs
42. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Work with APIs with exceptions
Useful Base-APIs
43. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Work with APIs with exceptions
Useful Base-APIs
class EJDTSourceFileInput {
private ICompilationUnit compilationUnit;
// ...
protected void doDispose() {
if( compilationUnit != null ) {
try {
compilationUnit.restore();
} catch (JavaModelException e) {
// Log the exception
}
try {
compilationUnit.discardWorkingCopy();
} catch (JavaModelException e) {
// Log the exception
}
}
// ...
}
}
44. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Work with APIs with exceptions
Useful Base-APIs
45. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Work with APIs with exceptions
Useful Base-APIs
public interface ExRunnable {
public void wrappedRun() throws Throwable;
}
public final class ExExecutor {
// …
// many other wrappers for Supplier, Function
public static void executeRunnable(ExRunnable r) {
// super secrete code
}
}
46. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Work with APIs with exceptions
class EJDTSourceFileInput {
private ICompilationUnit compilationUnit;
// ...
protected void doDispose() {
ExExecutor.executeRunnable(compilationUnit::restore);
ExExecutor.executeRunnable(compilationUnit::discardWorkingCopy);
// ...
}
}
Useful Base-APIs
public interface ExRunnable {
public void wrappedRun() throws Throwable;
}
public final class ExExecutor {
// …
// many other wrappers for Supplier, Function
public static void executeRunnable(ExRunnable r) {
// super secrete code
}
}
51. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Command Execution
‣ e4 defines ECommandService and EHandlerService in
org.eclipse.e4.core.service
‣ exposes us to org.eclipse.core.commands
‣ isn’t as simple to use as it could be
52. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Command Execution
‣ e4 defines ECommandService and EHandlerService in
org.eclipse.e4.core.service
‣ exposes us to org.eclipse.core.commands
‣ isn’t as simple to use as it could be
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.e4.core.commands.ECommandService;
import org.eclipse.e4.core.commands.EHandlerService;
@Inject
public CommandSample(ECommandService c, EHandlerService h) {
ParameterizedCommand cmd = c.createCommand("my.command.id", Collections.emptyMap() );
String rv = h.executeHandler(cmd);
if( rv != null ) {
rv = "Default";
}
}
53. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Command Execution
‣ e4 defines ECommandService and EHandlerService in
org.eclipse.e4.core.service
‣ exposes us to org.eclipse.core.commands
‣ isn’t as simple to use as it could be
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.e4.core.commands.ECommandService;
import org.eclipse.e4.core.commands.EHandlerService;
@Inject
public CommandSample(ECommandService c, EHandlerService h) {
ParameterizedCommand cmd = c.createCommand("my.command.id", Collections.emptyMap() );
String rv = h.executeHandler(cmd);
if( rv != null ) {
rv = "Default";
}
}
Disapproved by Tom
55. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ fx.core defines a CommandService
‣ who is simple to use
‣ does not expose you to any complex APIs
Command Execution
56. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ fx.core defines a CommandService
‣ who is simple to use
‣ does not expose you to any complex APIs
Command Execution
import org.eclipse.fx.core.command.CommandService;
@Inject
public CommandSample(CommandService c) {
Optional<String> rv = c.execute("my.command.id", Collections.emptyMap());
String v = rv.orElse("Default");
}
58. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Logging the efxclipse way
‣ e4 Log API is not in acceptable state
‣ wanted our framework to not depend on a concrete logging
API (not even SLF4J but in most minimal env we run on
Java-Util-Logging)
‣ we wanted a modern log API who eg accepts lambdas, printf-
formats, …
‣ framework users need to have an easy way to reconfigure
and log EVERYTHING with their preferred framework
63. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEventBroker
64. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEventBroker
‣ VERSIONED package level imports are not possible
65. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEventBroker
‣ VERSIONED package level imports are not possible
‣ Service definition has only 4 methods
‣ 2 for publishing: expose String and Object
‣ 2 for subscribing: expose String and EventHandler
66. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEventBroker
‣ VERSIONED package level imports are not possible
‣ Service definition has only 4 methods
‣ 2 for publishing: expose String and Object
‣ 2 for subscribing: expose String and EventHandler
‣ org.osgi.service.event.EventHandler exposes o.o.s.e.Event
67. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEventBroker
‣ VERSIONED package level imports are not possible
‣ Service definition has only 4 methods
‣ 2 for publishing: expose String and Object
‣ 2 for subscribing: expose String and EventHandler
‣ org.osgi.service.event.EventHandler exposes o.o.s.e.Event
68. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEventBroker
‣ VERSIONED package level imports are not possible
‣ Service definition has only 4 methods
‣ 2 for publishing: expose String and Object
‣ 2 for subscribing: expose String and EventHandler
‣ org.osgi.service.event.EventHandler exposes o.o.s.e.Event
Disapproved by Tom
70. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
EventBus
‣ VERSIONED package imports possible
71. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
EventBus
‣ VERSIONED package imports possible
‣ Simple interface who does not expose ANY OSGi-APIs
‣ 2 publish methods
‣ 1 subscribe methods
72. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
EventBus
‣ VERSIONED package imports possible
‣ Simple interface who does not expose ANY OSGi-APIs
‣ 2 publish methods
‣ 1 subscribe methods
‣ Enhanced type safety
73. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
EventBus
‣ VERSIONED package imports possible
‣ Simple interface who does not expose ANY OSGi-APIs
‣ 2 publish methods
‣ 1 subscribe methods
‣ Enhanced type safety
‣ Non OSGi-Version based upon Guava EventBus is available
74. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
public class MyComponent {
private static final String TOPIC = "my/topic";
@Inject
public MyComponent(IEventBroker eventBroker) {
eventBroker.subscribe(TOPIC, this::handleEvent);
eventBroker.send(TOPIC, "Hello World");
eventBroker.unsubscribe(this::handleEvent);
}
private void handleEvent(Event event) {
handle((Long) event.getProperty(IEventBroker.DATA));
}
private void handle(Long data) {
System.err.println("The data is" + data);
}
}
EventBus: From e4 to efx
75. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
public class MyComponent {
private static final Topic<Long> TOPIC = new Topic<>("my/topic");
@Inject
public MyComponent(EventBus eventBroker) {
eventBroker.subscribe(TOPIC, this::handleEvent);
eventBroker.send(TOPIC, "Hello World");
eventBroker.unsubscribe(this::handleEvent);
}
private void handleEvent(Event event) {
handle(event.getData());
}
private void handle(Long data) {
System.err.println("The data is" + data);
}
}
EventBus: From e4 to efx
76. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
public class MyComponent {
private static final Topic<Long> TOPIC = new Topic<>("my/topic");
@Inject
public MyComponent(EventBus eventBroker) {
Subscription s = eventBroker.subscribe(TOPIC, this::handleEvent);
eventBroker.publish(TOPIC, "Hello World",true);
s.dispose();
}
private void handleEvent(Event<Long> event) {
handle(event.getData());
}
private void handle(Long data) {
System.err.println("The data is" + data);
}
}
EventBus: From e4 to efx
77. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
public class MyComponent {
private static final Topic<Long> TOPIC = new Topic<>("my/topic");
@Inject
public MyComponent(EventBus eventBroker) {
Subscription s = eventBroker.subscribe(TOPIC, this::handleEvent);
eventBroker.publish(TOPIC, "Hello World",true);
s.dispose();
}
private void handleEvent(Event<Long> event) {
handle(event.getData());
}
private void handle(Long data) {
System.err.println("The data is" + data);
}
}
Compiler Error
EventBus: From e4 to efx
78. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
public class MyComponent {
private static final Topic<Long> TOPIC = new Topic<>("my/topic");
@Inject
public MyComponent(EventBus eventBroker) {
Subscription s = eventBroker.subscribe(TOPIC, this::handleEvent);
eventBroker.publish(TOPIC, 1l,true);
s.dispose();
}
private void handleEvent(Event<Long> event) {
handle(event.getData());
}
private void handle(Long data) {
System.err.println("The data is" + data);
}
}
EventBus: From e4 to efx
79. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
import static org.eclipse.fx.core.event.EventBus.*;
public class MyComponent {
private static final Topic<Long> TOPIC = new Topic<>("my/topic");
@Inject
public MyComponent(EventBus eventBroker) {
Subscription s = eventBroker.subscribe(TOPIC, data(this::handle));
eventBroker.publish(TOPIC, 1l,true);
s.dispose();
}
private void handleEvent(Event<Long> event) {
handle(event.getData());
}
private void handle(Long data) {
System.err.println("The data is" + data);
}
}
EventBus: From e4 to efx
81. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
82. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Retrieval is easy just use @Inject
83. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Retrieval is easy just use @Inject
‣ Publishing is hard
‣ The publisher needs to know where the value has to go.
Is the perspective-, window- or the application-context
the target?
‣ Your code gets a dependency on Eclipse 4 APIs
84. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Retrieval is easy just use @Inject
‣ Publishing is hard
‣ The publisher needs to know where the value has to go.
Is the perspective-, window- or the application-context
the target?
‣ Your code gets a dependency on Eclipse 4 APIs
Disapproved by Tom
85. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
86. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Stop thinking about the IEclipseContext as a Map of key-
value-pairs
87. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Stop thinking about the IEclipseContext as a Map of key-
value-pairs
‣ Start treating each key-value-slot in IEclipseContext as
an Observable-Value
88. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Stop thinking about the IEclipseContext as a Map of key-
value-pairs
‣ Start treating each key-value-slot in IEclipseContext as
an Observable-Value
public interface ContextBoundValue<T> extends Adaptable {
public T getValue();
public void publish(T value);
}
89. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Stop thinking about the IEclipseContext as a Map of key-
value-pairs
‣ Start treating each key-value-slot in IEclipseContext as
an Observable-Value
public interface ContextBoundValue<T> extends Adaptable {
public T getValue();
public void publish(T value);
}
public static class SimpleInject {
@Inject
@ContextValue("simpleValue")
public ContextBoundValue<String> value;
}
90. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
The IEclipseContext
‣ Stop thinking about the IEclipseContext as a Map of key-
value-pairs
‣ Start treating each key-value-slot in IEclipseContext as
an Observable-Value
public interface ContextBoundValue<T> extends Adaptable {
public T getValue();
public void publish(T value);
}
public static class SimpleInject {
@Inject
@ContextValue("simpleValue")
public ContextBoundValue<String> value;
}
public static class SimpleInject {
@Inject
@ContextValue("simpleValue")
public IObservableValue<String> value;
}
91. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference & UI-
State
92. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preferences and UI-State
93. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Preference-Store:
Used for none UI
states
Preferences and UI-State
94. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Preference-Store:
Used for none UI
states
‣ MApplicationElement
#persistedState:
Map<String,String>:
To be used for UI
states
Preferences and UI-State
95. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Preference-Store:
Used for none UI
states
‣ MApplicationElement
#persistedState:
Map<String,String>:
To be used for UI
states
Preferences and UI-State
96. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Preference-Store:
Used for none UI
states
‣ MApplicationElement
#persistedState:
Map<String,String>:
To be used for UI
states
Preferences and UI-State
97. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Preference-Store:
Used for none UI
states
‣ MApplicationElement
#persistedState:
Map<String,String>:
To be used for UI
states
Preferences and UI-State
98. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (e4)
99. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ @Preference
State persistence (e4)
100. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ @Preference
‣ Supports only simple values (int, String, …)
State persistence (e4)
101. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ @Preference
‣ Supports only simple values (int, String, …)
‣ Our application code gets a dependency on
org.eclipse.core.runtime.preferences.IEclipsePreference
State persistence (e4)
102. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ @Preference
‣ Supports only simple values (int, String, …)
‣ Our application code gets a dependency on
org.eclipse.core.runtime.preferences.IEclipsePreference
State persistence (e4)
103. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ @Preference
‣ Supports only simple values (int, String, …)
‣ Our application code gets a dependency on
org.eclipse.core.runtime.preferences.IEclipsePreference
State persistence (e4)
Disapproved by Tom
104. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (e4)
105. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ MApplicationElement#persistedState : Map<String,String>
State persistence (e4)
106. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ MApplicationElement#persistedState : Map<String,String>
‣ Supports only storage of String
State persistence (e4)
107. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ MApplicationElement#persistedState : Map<String,String>
‣ Supports only storage of String
‣ Your code gets a dependency on e4 application model and
transitiv on EMF
State persistence (e4)
108. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ MApplicationElement#persistedState : Map<String,String>
‣ Supports only storage of String
‣ Your code gets a dependency on e4 application model and
transitiv on EMF
State persistence (e4)
109. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ MApplicationElement#persistedState : Map<String,String>
‣ Supports only storage of String
‣ Your code gets a dependency on e4 application model and
transitiv on EMF
State persistence (e4)
Disapproved by Tom
110. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (efx)
111. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (efx)
‣ @Preference from e(fx)clipse
112. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (efx)
‣ @Preference from e(fx)clipse
‣ Supports (pluggable) storage of complex values (by
default JAXB is used/available)
113. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (efx)
‣ @Preference from e(fx)clipse
‣ Supports (pluggable) storage of complex values (by
default JAXB is used/available)
‣ Supports (pluggable) storage of most „value“ types in
java (eg BigDecimal, Date, Instant, …)
114. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (efx)
‣ @Preference from e(fx)clipse
‣ Supports (pluggable) storage of complex values (by
default JAXB is used/available)
‣ Supports (pluggable) storage of most „value“ types in
java (eg BigDecimal, Date, Instant, …)
‣ Injects a simple placeholder (…preference.Value) for
the preference slot in question
115. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
State persistence (efx)
116. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ org.eclipse.fx.Memento-Interface
State persistence (efx)
117. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ org.eclipse.fx.Memento-Interface
‣ Small interface with no external dependencies
State persistence (efx)
118. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ org.eclipse.fx.Memento-Interface
‣ Small interface with no external dependencies
‣ Allows (pluggable) storage of complex values
State persistence (efx)
120. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference: From e4 to efx
public class MyStateSample {
private final IEclipsePreferences pref;
@Inject
public MyStateSample(@Preference("rootDirs") IEclipsePreferences pref) {
this.pref = pref;
}
private void rememberRootDirs(List<String> rootDirs)
throws BackingStoreException {
String string = rootDirs.stream().collect(Collectors.joining("##-##"));
this.pref.put("rootDirs", string);
this.pref.flush();
}
@Inject
void setRootDirs(@Preference("rootDirs") String rootDirs) {
String[] dirs = rootDirs.split("##-##");
}
}
121. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference: From e4 to efx
public class MyStateSample {
private final IEclipsePreferences pref;
@Inject
public MyStateSample(@Preference("rootDirs") IEclipsePreferences pref) {
this.pref = pref;
}
private void rememberRootDirs(List<String> rootDirs)
throws BackingStoreException {
String string = rootDirs.stream().collect(Collectors.joining("##-##"));
this.pref.put("rootDirs", string);
this.pref.flush();
}
@Inject
void setRootDirs(@Preference("rootDirs") String rootDirs) {
String[] dirs = rootDirs.split("##-##");
}
}
NPE Ahead!!!
122. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference: From e4 to efx
public class MyStateSample {
private final Value<String> pref;
@Inject
public MyStateSample(@Preference(key="rootDirs") Value<String> pref) {
this.pref = pref;
}
private void rememberRootDirs(List<String> rootDirs)
throws BackingStoreException {
String string = rootDirs.stream().collect(Collectors.joining("##-##"));
this.pref.put("rootDirs", string);
this.pref.flush();
}
@Inject
void setRootDirs(@Preference("rootDirs") String rootDirs) {
String[] dirs = rootDirs.split("##-##");
}
}
123. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference: From e4 to efx
public class MyStateSample {
private final Value<String> pref;
@Inject
public MyStateSample(@Preference(key="rootDirs") Value<String> pref) {
this.pref = pref;
}
private void rememberRootDirs(List<String> rootDirs) {
String string = rootDirs.stream().collect(Collectors.joining("##-##"));
this.pref.publish(string);
}
@Inject
void setRootDirs(@Preference("rootDirs") String rootDirs) {
String[] dirs = rootDirs.split("##-##");
}
}
124. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference: From e4 to efx
public class MyStateSample {
private final Value<String> pref;
@Inject
public MyStateSample(@Preference(key="rootDirs") Value<String> pref) {
this.pref = pref;
}
private void rememberRootDirs(List<String> rootDirs) {
String string = rootDirs.stream().collect(Collectors.joining("##-##"));
this.pref.publish(string);
}
@Inject
void setRootDirs(@Preference(key="rootDirs",defaultValue="") String rootDirs) {
String[] dirs = rootDirs.split("##-##");
}
}
125. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Preference: From e4 to efx
public class MyStateSample {
private final Value<List<String>> pref;
@Inject
public MyStateSample(@Preference(key="rootDirs") Value<String> pref) {
this.pref = pref;
}
private void rememberRootDirs(List<String> rootDirs) {
this.pref.publish(rootDirs);
}
@Inject
void setRootDirs(@Preference(key="rootDirs",factory=EmptyListFactory.class)
List<String> rootDirs) {
}
}
126. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UI State
127. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UI-State: From e4 to efx
public class MyStateSample {
private final MPart part;
@Inject
public MyStateSample(MPart part) {
this.part = part;
String string = this.part.getPersistedState().get("selectionList");
String[] selection = string.split("##-##");
}
private void rememberSelection(List<String> selectionList) {
String string = selectionList.stream().collect(Collectors.joining("##-##"));
this.part.getPersistedState().put("selectionList", string);
}
}
128. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UI-State: From e4 to efx
public class MyStateSample {
private final MPart part;
@Inject
public MyStateSample(MPart part) {
this.part = part;
String string = this.part.getPersistedState().get("selectionList");
String[] selection = string.split("##-##");
}
private void rememberSelection(List<String> selectionList) {
String string = selectionList.stream().collect(Collectors.joining("##-##"));
this.part.getPersistedState().put("selectionList", string);
}
}
NPE Ahead!!!
129. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UI-State: From e4 to efx
public class MyStateSample {
private final Memento memento;
@Inject
public MyStateSample(Memento memento) {
this.memento = memento;
String string = this.memento.get("selectionList","");
String[] selection = string.split("##-##");
}
private void rememberSelection(List<String> selectionList) {
String string = selectionList.stream().collect(Collectors.joining("##-##"));
this.part.getPersistedState().put("selectionList", string);
}
}
130. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UI-State: From e4 to efx
public class MyStateSample {
private final Memento part;
@Inject
public MyStateSample(Memento part) {
this.part = part;
String string = this.part.get("selectionList","");
String[] selection = string.split("##-##");
}
private void rememberSelection(List<String> selectionList) {
String string = selectionList.stream().collect(Collectors.joining("##-##"));
this.part.put("selectionList", string);
}
}
131. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
UI-State: From e4 to efx
public class MyStateSample {
private final Memento part;
@Inject
public MyStateSample(Memento part) {
this.part = part;
List<String> selection = this.part.get("selectionList",List.class,
new ArrayList<>());
}
private void rememberSelection(List<String> selectionList) {
this.part.put("selectionList", selectionList,
ObjectSerializer.JAXB_SERIALIZER);
}
}
132. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Dialogs in FX
133. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Lightweight Dialogs
‣ New Service to open lightweight dialogs
134. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Lightweight Dialogs
‣ New Service to open lightweight dialogs
import org.eclipse.fx.ui.controls.stage.Frame;
public interface LightWeightDialogService {
public enum ModalityScope {
WINDOW,
PERSPECTIVE,
PART
}
public <T extends Node & Frame> T openDialog(Class<T> dialogClass, ModalityScope scope);
public <T extends Node & Frame> void openDialog(T dialog, ModalityScope scope);
}
135. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Lightweight Dialogs
‣ New Service to open lightweight dialogs
import org.eclipse.fx.ui.controls.stage.Frame;
public interface LightWeightDialogService {
public enum ModalityScope {
WINDOW,
PERSPECTIVE,
PART
}
public <T extends Node & Frame> T openDialog(Class<T> dialogClass, ModalityScope scope);
public <T extends Node & Frame> void openDialog(T dialog, ModalityScope scope);
}
‣ Usage
136. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
Lightweight Dialogs
‣ New Service to open lightweight dialogs
import org.eclipse.fx.ui.controls.stage.Frame;
public interface LightWeightDialogService {
public enum ModalityScope {
WINDOW,
PERSPECTIVE,
PART
}
public <T extends Node & Frame> T openDialog(Class<T> dialogClass, ModalityScope scope);
public <T extends Node & Frame> void openDialog(T dialog, ModalityScope scope);
}
public class NewProjectDialogHandler {
@Execute
public void createProject(LightWeightDialogService dialogService) {
dialogService.openDialog(NewProjectDialog.class, ModalityScope.WINDOW);
}
}
‣ Usage
137. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
138. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
139. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
DI & OSGi
140. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
DI and OSGi-Services
141. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
DI and OSGi-Services
‣ Eclipse DI supports OSGi-Service injection BUT
142. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
DI and OSGi-Services
‣ Eclipse DI supports OSGi-Service injection BUT
‣ it misses the dynamics of OSGi
143. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
DI and OSGi-Services
‣ Eclipse DI supports OSGi-Service injection BUT
‣ it misses the dynamics of OSGi
‣ You can only inject the highest ranked service
150. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@LocalInstance
if( container != null ) {
part = modelService.createModelElement(MPart.class);
part.setCloseable(true);
part.setLabel(URI.create(uri).lastSegment());
String editorBundleURI = editorUrlProvider
.stream()
.filter( e -> e.test(uri)).findFirst()
.map( e -> e.getBundleClassURI(uri))
.orElse("bundleclass://org.eclipse.fx.code.editor.fx/org.eclipse.fx.code.editor.fx.TextEditor");
part.setContributionURI(editorBundleURI);
part.setContributorURI("platform:/plugin/org.eclipse.fx.code.editor.fx.e4");
String iconUri = fileIconProvider
.stream()
.filter( f -> f.test(uri))
.findFirst()
.map( f -> f.getFileIconUri(uri))
.orElse("platform:/plugin/org.eclipse.fx.code.editor.fx.e4/icons/file_16.png");
part.setIconURI(iconUri);
part.getPersistedState().put(Constants.DOCUMENT_URL, uri);
part.getTags().add(EPartService.REMOVE_ON_HIDE_TAG);
container.getChildren().add(part);
}
151. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ A first fix: enhance EModelService with
@LocalInstance
public <T extends MApplicationElement> T createModelElement(
Class<?> caller,
Class<T> elementType);
152. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ A first fix: enhance EModelService with
@LocalInstance
public <T extends MApplicationElement> T createModelElement(
Class<?> caller,
Class<T> elementType);
‣ Another fix: Provide a factory service
public interface ModelElementFactoryService {
ModelElementFactory createFactory(Class<?> caller);
}
public interface ModelElementFactory {
<T extends MApplicationElement> T createElement(Class<T> elementType);
}
153. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ A first fix: enhance EModelService with
@LocalInstance
public <T extends MApplicationElement> T createModelElement(
Class<?> caller,
Class<T> elementType);
‣ Another fix: Provide a factory service
public interface ModelElementFactoryService {
ModelElementFactory createFactory(Class<?> caller);
}
public interface ModelElementFactory {
<T extends MApplicationElement> T createElement(Class<T> elementType);
}
private ModelElementFactory f;
@Inject
public LocalInstanceSample(ModelElementFactoryService s) {
this.f = s.createFactory(getClass());
}
public void init() {
// ...
part = f.createModelElement(MPart.class);
// ...
}
154. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@LocalInstance
‣ Is there a more generic solution to create DI-Instance
values with knowledge about the target (eg classloader,
bundle, …)?
‣ Since 2.1 there a basic TypeProvider API in fx.core
155. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
@LocalInstance
‣ Is there a more generic solution to create DI-Instance
values with knowledge about the target (eg classloader,
bundle, …)?
‣ Since 2.1 there a basic TypeProvider API in fx.core
/**
* A service who provides a type based upon selector value
*
* @param <S>
* the selector value type
* @param <T>
* the type
* @since 2.1
*/
public interface TypeProviderService<S, T> extends Predicate<S> {
@Override
boolean test(S t);
public Class<? extends T> getType(S s);
}
156. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Upon the basic interface there are a specialized ones eg
@LocalInstance
157. (c) BestSolution.at - Licensed under Creative Commons Attribution-NonCommerical-ShareAlike 3.0
‣ Upon the basic interface there are a specialized ones eg
@LocalInstance
/**
* Service who provides a real type for an interface/abstract type
*
* @param <T>
* the type
*/
public interface TypeTypeProviderService<T>
extends TypeProviderService<java.lang.reflect.Type, T> {
/**
* If used with dependency injection and @LocalInstance
*/
public static final String DI_KEY = "localInstanceOwnerType"; //$NON-NLS-1$
}