The document provides an overview of the Eclipse Modeling Framework (EMF), including what EMF is, its components, code generation capabilities, and typical usage scenarios. EMF allows modeling domain concepts using Ecore models and generates Java code for the models. It provides runtime support for creating and manipulating model instances programmatically and through graphical editors.
No one could accuse the Eclipse Modeling Framework of being immature or unproven technology. In over seven years since EMF's debut, it has been applied in just about every type of application imaginable, from the desktop, to the web, to mobile and embedded. With this growth came great demand for ways to optimize performance or memory footprint, and to integrate EMF with other complementary technologies and frameworks.
One of the big reasons for EMF's success has been its low barriers to entry: with EMF, anyone can quickly and easily generate powerful, high-quality code from just about any form of model. However, many of the framework's most powerful performance and extensibility features hide below the surface, making it difficult for developers to exploit the framework fully.
This tutorial aims to expose EMF developers to these issues. Rather than plain or simple recipes, it will offer in-depth discussion, drawing on the presenters' experience as EMF committers. Hands-on exercises will provide the opportunity for attendees to become familiar with some lesser-known features that can help them squeeze more performance and utility out of their models.
This is a introduction to Maven 2. For more information visit http://jpereira.eu/2012/05/03/an-introduction-to-maven-2/
If you want to download the editable presentation contact me (find my contacts on my blog)
An introduction to the Java Platform Module System (JPMS). This talk is from April 2017, before the Java SE 9 release, so the final details may be subtly different, particularly once a standard becomes established for module names.
No one could accuse the Eclipse Modeling Framework of being immature or unproven technology. In over seven years since EMF's debut, it has been applied in just about every type of application imaginable, from the desktop, to the web, to mobile and embedded. With this growth came great demand for ways to optimize performance or memory footprint, and to integrate EMF with other complementary technologies and frameworks.
One of the big reasons for EMF's success has been its low barriers to entry: with EMF, anyone can quickly and easily generate powerful, high-quality code from just about any form of model. However, many of the framework's most powerful performance and extensibility features hide below the surface, making it difficult for developers to exploit the framework fully.
This tutorial aims to expose EMF developers to these issues. Rather than plain or simple recipes, it will offer in-depth discussion, drawing on the presenters' experience as EMF committers. Hands-on exercises will provide the opportunity for attendees to become familiar with some lesser-known features that can help them squeeze more performance and utility out of their models.
This is a introduction to Maven 2. For more information visit http://jpereira.eu/2012/05/03/an-introduction-to-maven-2/
If you want to download the editable presentation contact me (find my contacts on my blog)
An introduction to the Java Platform Module System (JPMS). This talk is from April 2017, before the Java SE 9 release, so the final details may be subtly different, particularly once a standard becomes established for module names.
OOW16 - Advanced Architectures for Oracle E-Business Suite [CON6705]vasuballa
Attend this session to build on the three-tier logical Oracle E-Business Suite architecture to meet your business requirements for high availability, scalability, and performance. The topics include load balancing and clustering. Understand how to securely deploy Oracle E-Business Suite for internet access with a demilitarized zone. Apply the various topics covered in the session to assist you with planning a disaster recovery project for your environment. Learn about new tools that automate scale-out and other advanced architectures when deploying Oracle E-Business Suite to Oracle Cloud.
Looming Marvelous - Virtual Threads in Java Javaland.pdfjexp
Nowadays we have 2 options for concurrency in Java:
* simple, synchronous, blocking code with limited scalability that tracks well linearly at runtime, or.
* complex, asynchronous libraries with high scalability that are harder to handle.
Project Loom aims to bring together the best aspects of these two approaches and make them available to developers.
In the talk, I'll briefly cover the history and challenges of concurrency in Java before we dive into Loom's approaches and do some behind-the-scenes implementation. To manage so many threads reasonably needs some structure - for this there are proposals for "Structured Concurrency" which we will also look at. Some examples and comparisons to test Loom will round up the talk.
Project Loom is included in Java 19 and 20 as a preview feature, it can already be tested how well it works with our applications and libraries.
Spoiler: Pretty good.
All of the Performance Tuning Features in Oracle SQL DeveloperJeff Smith
An overview of all of the performance tuning instrumentation, tools, and features in Oracle SQL Developer. Get help making those applications and their queries more performant.
Take a load off! Load testing your Oracle APEX or JDeveloper web applicationsSage Computing Services
Geeeez, after demanding you unit test, system test, black box test, white box test, test-test-test everything, your manager is now demanding you load test your brand spanking new Oracle web application. How on earth can you do this?
This technical presentation will explain the concepts behind preparing for load testing, the Http protocol's request/response model, and live demonstrations using Oracle's Http Analyzer and Apache's JMeter to stress test your Oracle web application.
The presentation is suitable for anybody, be it DBAs or developers, who are concerned about the performance of any web based application, possibly an Apex or JDeveloper or 3rd party web application. Knowledge of Apex or JDeveloper is not mandatory for this presentation and they will not be covered in any depth.
Automate the operation of your Oracle Cloud infrastructure v2.0Nelson Calero
Presentation delivered in Collaborate 19 conference in April 2019 in San Antonio
Abstract: The Oracle Cloud provides APIs and command line utilities to handle your infrastructure in the cloud without using the web console. In addition, there are orchestration tools such as Terraform to build, change and version your infrastructure, allowing automation and configuration management.
This session introduces to OCI services and APIs through examples from a DBA perspective, looking to minimize manual interventions when creating instances and containers, deploying a cluster using the project terraform-kubernetes-installer, and backing up your databases.
This is an updated version of a similar session a did last year, now focused on OCI new generation services and tools.
Data abstraction is the process of hiding certain details and showing only essential information to the user.
Interfaces and Abstract classes.
Contains abstract keyword also.
OOW16 - Advanced Architectures for Oracle E-Business Suite [CON6705]vasuballa
Attend this session to build on the three-tier logical Oracle E-Business Suite architecture to meet your business requirements for high availability, scalability, and performance. The topics include load balancing and clustering. Understand how to securely deploy Oracle E-Business Suite for internet access with a demilitarized zone. Apply the various topics covered in the session to assist you with planning a disaster recovery project for your environment. Learn about new tools that automate scale-out and other advanced architectures when deploying Oracle E-Business Suite to Oracle Cloud.
Looming Marvelous - Virtual Threads in Java Javaland.pdfjexp
Nowadays we have 2 options for concurrency in Java:
* simple, synchronous, blocking code with limited scalability that tracks well linearly at runtime, or.
* complex, asynchronous libraries with high scalability that are harder to handle.
Project Loom aims to bring together the best aspects of these two approaches and make them available to developers.
In the talk, I'll briefly cover the history and challenges of concurrency in Java before we dive into Loom's approaches and do some behind-the-scenes implementation. To manage so many threads reasonably needs some structure - for this there are proposals for "Structured Concurrency" which we will also look at. Some examples and comparisons to test Loom will round up the talk.
Project Loom is included in Java 19 and 20 as a preview feature, it can already be tested how well it works with our applications and libraries.
Spoiler: Pretty good.
All of the Performance Tuning Features in Oracle SQL DeveloperJeff Smith
An overview of all of the performance tuning instrumentation, tools, and features in Oracle SQL Developer. Get help making those applications and their queries more performant.
Take a load off! Load testing your Oracle APEX or JDeveloper web applicationsSage Computing Services
Geeeez, after demanding you unit test, system test, black box test, white box test, test-test-test everything, your manager is now demanding you load test your brand spanking new Oracle web application. How on earth can you do this?
This technical presentation will explain the concepts behind preparing for load testing, the Http protocol's request/response model, and live demonstrations using Oracle's Http Analyzer and Apache's JMeter to stress test your Oracle web application.
The presentation is suitable for anybody, be it DBAs or developers, who are concerned about the performance of any web based application, possibly an Apex or JDeveloper or 3rd party web application. Knowledge of Apex or JDeveloper is not mandatory for this presentation and they will not be covered in any depth.
Automate the operation of your Oracle Cloud infrastructure v2.0Nelson Calero
Presentation delivered in Collaborate 19 conference in April 2019 in San Antonio
Abstract: The Oracle Cloud provides APIs and command line utilities to handle your infrastructure in the cloud without using the web console. In addition, there are orchestration tools such as Terraform to build, change and version your infrastructure, allowing automation and configuration management.
This session introduces to OCI services and APIs through examples from a DBA perspective, looking to minimize manual interventions when creating instances and containers, deploying a cluster using the project terraform-kubernetes-installer, and backing up your databases.
This is an updated version of a similar session a did last year, now focused on OCI new generation services and tools.
Data abstraction is the process of hiding certain details and showing only essential information to the user.
Interfaces and Abstract classes.
Contains abstract keyword also.
EclipseCon 2008: Fundamentals of the Eclipse Modeling FrameworkDave Steinberg
EclipseCon 2008 long talk introducing EMF. A slightly different take from the preceding EclipseWorld talk, with a few more details on the EMF core and no discussion of CDO or Teneo.
This is a presentation of EMF from the ground up during Eclipse India Summit, Bangalore July 2009. This was a joint session from me and Annamalai, ANCiT.
When talking about modeling, I think there will be a bundle of terms that will come to our mind, UML, domain driven development, DSL, forward/reverse enginerring, MDD, MDA, BPMN. These technology or methodology have been there for years; And obviously, modeling has proven itself to provide value by improving communication, business-alignment, quality, and productivity. Its applicability includes a number of disciplines such as analysis, design, or development. But why aren’t we all doing Model Driven Development yet?
MODEL DRIVEN ARCHITECTURE, CONTROL SYSTEMS AND ECLIPSEAnže Vodovnik
This paper describes the use of model driven architecture and its application in control system development. It also presents a prototype solution based on the Eclipse framework implemented by the author.
Anže Vodovnik, Klemen Žagar, Cosylab, Ljubljana, Slovenija
The Model Development Tools (MDT) project focuses on big “M” modeling within the Modeling project; its purpose is twofold: 1) to provide an implementation of industry standard metamodels and 2) to provide exemplary tools for developing models based on those metamodels. Since its launch in September of 2006, MDT has undergone two major releases and is now working towards its third release as part of the 2009 Galileo Simultaneous Release. This short talk will provide an overview of the new features and components/projects in MDT and give an update on the status of its Galileo release.
Model-driven development and Code generationPavel Vlasov
This presentation outlines key points of some aspects of model-driven development and the benefits it can bring to software development in large distributed organizations.
It is a companion presentation for https://cv.pavel.vlasov.us/model-driven-development/.
This presentation describes Eclipse Modeling Framework – EMF. It has two basic purposes:
Introduce you to the EMF techniques needed in the rest of the course
Introduce you to the architecture and components of the EMF project
This presentation is developed for MDD 2010 course at ITU, Denmark.
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
State of ICS and IoT Cyber Threat Landscape Report 2024 previewPrayukth K V
The IoT and OT threat landscape report has been prepared by the Threat Research Team at Sectrio using data from Sectrio, cyber threat intelligence farming facilities spread across over 85 cities around the world. In addition, Sectrio also runs AI-based advanced threat and payload engagement facilities that serve as sinks to attract and engage sophisticated threat actors, and newer malware including new variants and latent threats that are at an earlier stage of development.
The latest edition of the OT/ICS and IoT security Threat Landscape Report 2024 also covers:
State of global ICS asset and network exposure
Sectoral targets and attacks as well as the cost of ransom
Global APT activity, AI usage, actor and tactic profiles, and implications
Rise in volumes of AI-powered cyberattacks
Major cyber events in 2024
Malware and malicious payload trends
Cyberattack types and targets
Vulnerability exploit attempts on CVEs
Attacks on counties – USA
Expansion of bot farms – how, where, and why
In-depth analysis of the cyber threat landscape across North America, South America, Europe, APAC, and the Middle East
Why are attacks on smart factories rising?
Cyber risk predictions
Axis of attacks – Europe
Systemic attacks in the Middle East
Download the full report from here:
https://sectrio.com/resources/ot-threat-landscape-reports/sectrio-releases-ot-ics-and-iot-security-threat-landscape-report-2024/
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
EclipseCon 2007: Effective Use of the Eclipse Modeling Framework
1. Christian W. Damus, Kenn Hussey, Ed Merks and Dave Steinberg IBM Rational Software Ottawa and Toronto, Canada EMF, EMFT, and MDT Projects Effective Use of the Eclipse Modeling Framework https://w3-03.ibm.com/legal/ipl/iplsite.nsf/pages/wtts-trademarks+home
44. The Code Generation Process Java Code Model Importer JET Simplified version UML Java Model ? XML Schema GenModel Ecore
45. The Code Generation Process Java Code Merged Java Code Model Importer JET JMerge Generated Java Code Full version UML Java Model ? XML Schema GenModel Ecore
46.
47.
48.
49.
50.
51.
52.
53. Proxy Resolution and Demand Load PurchaseOrder p2 = p1. getNext (); p1 p1.xml next p2 p2.xml proxyURI=“ p2.xml #p2” next proxyURI=“p2.xml#p2” next <PurchaseOrder> <shipTo>John Doe</shipTo> <next> p2.xml#p2 </next> </PurchaseOrder> p1.xml
54.
55.
56.
57. Bidirectional Reference Handshaking public interface PurchaseOrder { PurchaseOrder getNext (); void setNext (PurchaseOrder value); PurchaseOrder getPrevious (); void setPrevious (PurchaseOrder value); } Invariant imposed by the bidirectional reference: po.getNext().getPrevious() == po
58. Bidirectional Reference Handshaking p1. setNext (p3); p2 p1 p2 p3 previous next next previous next previous next previous change notification
108. Using a CrossReferencer { Library library = LibFactory.eINSTANCE.createLibrary(); Book book = LibFactory.eINSTANCE.createBook(); book.setTitle("EMF"); Person dave = LibFactory.eINSTANCE.createPerson(); library .getBooks().add( book ); library .getWriters().add( dave ); book .getWriters().add( dave ); Map<EObject, Collection<EStructuralFeature.Setting>> map = EcoreUtil.CrossReferencer .find(Collections.singleton( library )); Collection<EStructuralFeature.Setting> settings = map.get(dave); if (settings != null) { for (EStructuralFeature.Setting setting : settings) { if (setting. getEObject () == book && setting. getEStructuralFeature () == LibPackage.Literals. BOOK__WRITERS ) { System.out.println ("Found it. The book is amp;quot;" + book.getTitle() + "amp;quot;"); } } } } Found it. The book is "EMF"
109.
110. Using the ECrossReferenceAdapter { Library library = LibFactory.eINSTANCE.createLibrary(); ECrossReferenceAdapter adapter = new ECrossReferenceAdapter (); library.eAdapters().add( adapter ); Book book = LibFactory.eINSTANCE.createBook(); book.setTitle("EMF"); Person dave = LibFactory.eINSTANCE.createPerson(); library .getBooks().add( book ); library .getWriters().add( dave ); book .getWriters().add( dave ); Collection<EStructuralFeature.Setting> settings = adapter. getNonNavigableInverseReferences (dave); for (EStructuralFeature.Setting setting : settings) { if (setting. getEObject () == book && setting. getEStructuralFeature () == LibPackage.Literals. BOOK__WRITERS ) { System.out.println ("Found it. The book is amp;quot;" + book.getTitle() + "amp;quot;"); } } } Found it. The book is "EMF"
111.
112.
113.
114.
115.
116.
117.
118. Suppress Interfaces /** * A representation of the model object * 'Library'. * @model * @generated */ public interface Library extends EObject { /** * Returns the value of the ‘Name' attribute. * @model * @generated */ String getName(); ... } /** * A representation of the model object * 'Library'. * @model * @generated */ public class Library extends EObjectImpl implements EObject { /** * The default value of the 'Name' attribute. * @model * @generated */ protected static final NAME_EDEFAULT = null; ... }
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145. Importers and Exporters Java model Annotated Java Model Importer EMF Model Exporter Java model UML Java model XML Schema Java model Ecore Java model ? Java model ? Java model XML Schema Java model XML Schema for XMI
176. Static Constraint Provider <extension point=" org.eclipse.emf.validation.constraintProviders "> < category name ="Library Constraints" id ="com.example.library"> <constraintProvider> < package namespaceUri ="http:///www.eclipse.org/Library/1.0.0"/> <constraints categories ="com.example.library"> <constraint lang ="Java" class ="com.example.constraints.UniqueLibraryName" severity ="WARNING" mode ="Batch" name="Library Must have a Unique Name" id="com.example.library.LibraryNameIsUnique" statusCode="1"> <description>Libraries have unique names.</description> <message>{0} has the same name as another library.</message> < target class ="Library"/> </constraint> </constraints> </constraintProvider> </extension>
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187. Creating Constraints public class LibraryNameIsUnique extends AbstractConstraint { public IStatus validate (IValidationContext ctx) { Library target = (Library) ctx. getTarget (); // object to validate // does this library have a unique name? Set<Library> libs = findLibrariesWithName(target.getName()); if (libs.size() > 1) { // report this problem against all like-named libraries ctx. addResults (libs); // don’t need to validate these other libraries libs.remove(target); ctx. skipCurrentConstraintFor (libs); return ctx.createFailureStatus(new Object[] { target, libs}); } return ctx. createSuccessStatus (); } }
188.
189.
190. Reporting Problems public class ProblemsReporter implements IValidationListener { public void validationOccurred (ValidationEvent event) { if (event. matches (IStatus.WARNING | IStatus.ERROR)) { // fabricate a multi-status for the MarkerUtil to consume List results = event. getValidationResults (); IConstraintStatus multi = new MultiStatus( "com.example.MyPlugin", 1, (IStatus[])results.toArray(new IStatus[results.size()]), "Problems were found by validation", null); try { // create problem markers on the appropriate resources MarkerUtil.createMarkers (multi); } catch ( CoreException e ) { // creation of problem markers failed for some reason MyPlugin.getLog().log(e.getStatus()); } } } }
191.
192.
193.
194.
Editor's Notes
You will also need to: - manually change the JDK compliance level in the Java Compiler project properties or workspace preferences - Update the JRE container in the project’s classpath (use the Plug-in Manifest Editor: on the overview page, select “Update the classpath settings”)
Inverse References - Finding the opposite of a unidirectional association
Initially the arrows are proxies and when the references in Resource1 are resolved, they are replaced by the actual object from Resource2. The 2 nd proxy will be a proxy until it is accessed. When the 1 st proxy is resolved Resource2 is loaded into the ResourceSet but that doesn’t resolve all the proxies.
The cross referencers check the containment tree of an EObject. Make it clear that a proxy is not “referenced” – this is a “transient” state.
ECoreUtil.CrossReferencer is a convenient utility class for locating cross-references (that is, non-containment references) in the containment tree, or trees, rooted at a specified EMF object, resource, or resource set, or arbitrary collection of all three. The result of the search is stored in the cross-referencer’s base HashMap. Entries are keyed by reference targets, and their values are the collections of EStructuralFeature.Settings that identify all the source object-feature pairs referencing the keyed target. ECoreUtil.ExternalCrossReferencer is a convenient utility class for locating external cross-references in the containment tree, or trees, rooted at a specified EMF object, resource, or resource set, or arbitrary collection of all three. An external cross-reference is one that has a target that is not within the containment structure rooted at the object(s) being searched. ECoreUtil.ProxyCrossReferencer is a convenient utility class for locating proxies in the containment tree, or trees, rooted at a specified EMF object, resource, or resource set, or arbitrary collection of all three. ECoreUtil.UnresolvedProxyCrossReferencer is a convenient utility class for locating unresolvable (broken) proxies in the containment tree, or trees, rooted at a specified EMF object, resource, or resource set, or arbitrary collection of all three. ECoreUtil.UsageCrossReferencer is a convenient utility class for locating cross-references in the containment tree, or trees, rooted at a specified EMF object, resource, or resource set, or arbitrary collection of all three, with targets that are specific objects of interest. One or more objects of interest can be passed to the static find() or findAll() methods, respectively, which in turn construct an instance, with the search root(s), and then call their corresponding findUsage() or findAllUsage() instance methods.
Is exposed on InternalEObject
Explains why the name “CrossReferencer”. This is an informal qualification.
As explained in the “Introduction to EMF” tutorial, the EObjectValidator is used as base of generated validators and directly for packages without additional constraints defined.
Not always can we choose the “proxy handling” option we would like to…
Formatted string: /, encoded, … Encoding is done by Converting the character string into a sequence of bytes using UTF-8 Convert each character that is not an ASCII letter or digit into %HH, where HH is the hexadecimal value of the byte URL: Resources that can be accessed with existing protocols URN: “Intended to serve as persistent, location-independent, resource identifiers” oasis urn: http://rfc3121.x42.com/
URI.encodeFragment(String) can be used to produce a valid fragment.
The default value of the “Resolve Proxies” attribute in an Ecore model is true.
We could also call book.eContainer().eResource.getURI() instead of just library.eResource().getURI(), to illustrate that the book hasn't been removed from its container (although, that's kind of obvious from the fact that it ends up back in the same resource as the library)…
Should also mention generated editor support for containment proxies (Control / Uncontrol menu items)…
The question we want to answer is: what books were written by Dave? We could also use the UsageCrossReferencer…
Why are we not defining what an ECrossReferenceAdapter is? Because we (should) know what a CrossReferencer and an Adapter are…
The question we want to answer is: what books were written by Dave?
This is not used by the generated UI to decided whether an editor is dirty or not - EMF.Edit monitors the state of the command stack of the EditingDomain…
Resource.Internal, like InternalEObject and EStructuralFeature.Internal, is not really an “internal” API – it’s an API of less commonly used implementation oriented methods… all resources are assumed to implement this interface, and do so by virtue of extending ResourceImpl.
Generates implementation classes without separate interface declarations Set the value of the ‘Suppress Interfaces’ generator model property to ‘true’
Generates code without a package interface declaring metadata accessors and constants - these are generated into the package implementation, instead - Factory doesn’t extend EFactory Set the value of the ‘Suppress EMF Meta Data’ generator model property to ‘true’
Generates code where interfaces for modeled root classes extend a specified interface, or nothing at all Clear or set the value of the ‘Root Extends Interface’ generator model property - Qualified name of interface, which need not extend EObject
Generates code without @model tags in the Javadoc Set the value of the ‘Suppress EMF Model Tags’ generator model property to ‘true’
Generates methods for features and operations which use standard Java collection and object types instead of those from EMF (e.g. EList, EMap, EObject) Set the value of the ‘Suppress EMF Types’ generator model property to ‘true’
Header.javajetinc is an example of a template that should perhaps always be replaced – to contain your copyright.
Dynamic “placeholder” template can also add required imports for compiling the template (in case the insertions reference new types). Need to reference default template “container” in JET project settings – i.e. templates;@/org.eclipse.emf.codegen.ecore/templates.
Dynamic “placeholder” template can also add required imports for compiling the template (in case the overrides reference new types). Need to reference default template “container” in JET project settings – i.e. templates;@/org.eclipse.emf.codegen.ecore/templates.
Of course, there is always a trade-off between time and space concerns…
Of course, virtual feature delegation has a (significant) performance cost. We are also working on a VirtualEObjectImpl which will use virtual slots instead of a properties holder…
OPTION_DEFER_IDREF_RESOLUTION Option value: Boolean This option can be enabled to defer resolving references within a resource until the whole document has been parsed. The default strategy is to try to resolve each reference as it is encountered and then, at the end, resolve any ones that failed. This wastes time looking up forward references that do not exist yet, which, if you're using intrinsic IDs, can involve iterating over every object in the resource. OPTION_USE_PARSER_POOL Option value: org.eclipse.emf.ecore.xmi.XMLParserPool We strongly encourage to set this option for EMF load operation. This option is used to provide a parser pool, from which SAXParser instances are created and reused. XMLParserPool defines a simple interface for obtaining and releasing parsers based on their features and properties. Specifying a parser pool, such as an instance of the default implementation, XMLParserPoolImpl, can improve performance dramatically when a resource performs repeated loads. A single parser pool can also be shared among multiple resources. Default implementation is also thread-safe. OPTION_USE_XML_NAME_TO_FEATURE_MAP Option value: java.util.Map This option can be used to share the cache of mappings between qualified XML names (namespace + local name) and corresponding Ecore features across invocations of load(), or even among resources. It can take some time to determine these associations, since they can be affected by ExtendedMetaData or an XMLMap, so they are cached during a load. If you use this option to specify the same map for several loads, that instance will be used as the cache, improving the performance for all but the first. You can share a single map among multiple resources, unless they load different models with conflicting qualified names.
OPTION_USE_CACHED_LOOKUP_TABLE Option value: java.util.List Specify a list as a place holder for caching information during the subsequent saving of XML documents. This option can improve performance for serialization (saving) of multiple XML resources. This option is similar to the OPTION_USE_XML_NAME_TO_FEATURE_MAP which is used for deserialization (loading). OPTION_USE_DEPRECATED_METHODS Option value: Boolean Use methods that were deprecated in EMF. The default value is true. To improve deserialization performance turn this option to false. The methods affected are: XMLHelper#createObject(org.eclipse.emf.ecore.EFactory, EClassifier) XMLHander#handleNamespaceAttribs() XMLHandler#createObjectFromFactory(EFactory factory, String typeName) XMLLoadImpl#getEncoding() Note: if you use this option the SAX parser used for parsing documents must be namespace-aware parser, i.e. the namespaces should be turned on for the parser used. The default parser implementation is not namespace-aware. To turn on namespaces, either use OPTION_USE_PARSER_POOL or overwrite XMLLoadImpl#makeParser()
OPTION_FLUSH_THRESHOLD Option value: Integer This option can be used to specify a maximum number of characters to allow in the output stream before flushing it. This reduces the memory used in serializing a large file, but it is slower than the default behavior. OPTION_USE_CACHED_LOOKUP_TABLE Option value: java.util.List This option provides a placeholder to cache information about structure of the model. (using qualified XML names as a key for caching information). When possible, the same placeholder list should be shared among resources, unless you intent to serialize instances of different models. OPTION_CONFIGURATION_CACHE Option value: Boolean This option can be enabled to cache and reuse generic data in repeated save operations, avoiding the cost of reinitializing the data. This option is save to use when serializing instances of the same model.
OPTION_FORMATTED Option value: Boolean This option is used to disable formatting of documents, omitting whitespaces and line brakes, to improve the performance of saving and, subsequently, loading the resulting document. This means fewer bytes have to be written and read, but the serialization will be less human-readable. OPTION_USE_FILE_BUFFER Option value: Boolean This option can be enabled to accumulate output during serialization in a temporary file, rather than an in-memory buffer. This reduces the memory used in serializing a large file, but it is slower than the default behavior.
Every solid box in this picture represents a way to describe a modeled domain.
The HTML exporter even understands generics in models, highlighting things like type parameters
When exporting a model as a schema, we would need the qualified name of the package if we were adding an Ecore package annotation.
Before the Importer and Exporter hooks, we used to see all types of approaches to, for example, convert a proprietary format to Ecore: menu items, separate application, tool bar buttons, import wizard, …
That’s all one needs to know to provide an importer or an exporter. The rest of this section will address the “non-mandatory” framework we’ve created to make it easier to write converters.
Ideally, XML references would be based on identifiers, e.g. UUIDs.
The Ecore2Ecore mapping editor is much like the XSD2Ecore mapping editor.
The Ecore2XML editor is just a standard EMF-generated editor.
These steps cab be done in a customized resource factory implementation to set the default load/save options for all resources managed by the factory…
Could also be done by a customized editor or programmatically when calling the load()/save() methods.