h1. Release Notes


h2. Eclipse APP4MC 1.0.0 (Nov 2020)

Model handling
* Model migration support (0.9.9 -> 1.0.0)

Model changes
* Removed MeasurementModel (deprecated since 0.9.9 and replaced by new ATDB)
* Removed ProcessEventType 'deadline'

Product
* New Amalthea Trace Database (ATDB)
* New transformations BTF -> ATDB, ATDB -> Amalthea
* Extended Metrics Viewer
* Several bug fixes

UI
* Added possibility to refresh a pinned visualization

_For details see "Release 1.0.0 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/1.0.0/bugs_


h2. Eclipse APP4MC 0.9.9 (Jul 2020)

Model handling
* Model migration support (0.9.8 -> 0.9.9)

Model changes
* Data types: Struct and StructEntry are taggable
* MeasurementModel is deprecated

Product
* Trace data and metrics: Extended definition of Amalthea Trace Database (Preview)
* Validations: New INCHRON validations, extended documentation

UI
* Model Explorer no longer expands model files
* Migration dialog supports recursive operation on folders

_For details see "Release 0.9.9 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.9/bugs_


h2. Eclipse APP4MC 0.9.8 (Apr 2020)

Model handling
* Model migration support (0.9.7 -> 0.9.8)

Product
* Eclipse target platform is updated to IDE 2019-12
* New (extendable) visualization framework
* Standard visualizations for runnables and deviations
* Additional example models
* EMF model viewers are available as update site
* ...

_For details see "Release 0.9.8 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.8/bugs_


h2. Eclipse APP4MC 0.9.7 (Jan 2020)

Model handling
* Model migration support (0.9.6 -> 0.9.7)
* Added virtual folders in component model tree view

Model changes
* Introduced namespaces and component structures
* New model element to describe hierarchical interfaces
* Model cleanup (simplified component ports)

Product
* Restructured migration component (also available as headless jar)

_For details see "Release 0.9.7 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.7/bugs_


h2. Eclipse APP4MC 0.9.6 (Oct 2019)

Model handling
* Model migration support (0.9.5 -> 0.9.6)
* New "no-load" nature (avoids model loading while moving/copying model files)
* Multi-line strings are supported in the editor (for selected string attributes)

Model changes
* Extended ModeConditions (allow the comparison of two mode labels)
* Refined EventChain definition (to explicitly describe fork-join, alternative, etc.)
* Counter added to RunnableCall

Build infrastructure
* Split git repository and independent build job for model migration component
* Changed to tycho-pomless maven builds

_For details see "Release 0.9.6 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.6/bugs_


h2. Eclipse APP4MC 0.9.5 (Jul 2019)

Model handling
* Model migration support (0.9.4 -> 0.9.5)
* New validation framework

Model changes
* Consolidated call graph: items of tasks and runnables are unified, call sequences are removed
* Simplified clock definitions (used in scenarios of variable rate stimuli)
* Limited frequency values to non negative (value >= 0)

_For details see "Release 0.9.5 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.5/bugs_


h2. Eclipse APP4MC 0.9.4 (Apr 2019)

Model handling
* Model migration support (0.9.3 -> 0.9.4)
* Optimized model search
* New validation framework (preview)

Model changes
* Extended modes to allow the handling of counters (integer values, comparison, increment, decrement)
* Uniform use of execution conditions (for stimuli, runnables, mode switches)
* Model cleanup (removed runnable deadlines, distinct naming)

_For details see "Release 0.9.4 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.4/bugs_


h2. Eclipse APP4MC 0.9.3 (Jan 2019)

Model handling
* Model migration support (0.9.2 -> 0.9.3)
* Optimized model search

Model changes
* Introduced "Ticks" as base concept for required computation effort
* Simplified "Execution Needs" (no specific entries for different processing units)
* Reworked distributions (discrete, continuous, time) without generics

_For details see "Release 0.9.3 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.3/bugs_


h2. Eclipse APP4MC 0.9.2 (Oct 2018)

Model handling
* Model migration support (0.9.1 -> 0.9.2)
* New model search dialog
* New model builders (with a Groovy-like builder pattern)

Model changes
* Small extensions in the hardware model

_For details see "Release 0.9.2 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.9.2/bugs_


h2. Eclipse APP4MC 0.9.1 (Jul 2018)

General
* New Eclipse Oxygen.3a based product (compatible with Java 8, Java 9 and Java 10)
* License change from EPL-1.0 to EPL-2.0

Model handling
* Model migration support (0.9.0 -> 0.9.1)
* New implementation of transient back references
* Unified approach for fast name search and mass delete
* Updated model utilities

Model changes
* New concept of DataDependency (to describe potential data dependencies)
* New possibility to specify RunnableParameters and CallArguments


h2. Eclipse APP4MC 0.9.0 (Apr 2018)

Model handling
* Model migration support (0.8.3 -> 0.9.0)
* Updated model utilities

Model changes
* *New hardware model*
* New concept of ExecutionNeed (replaces the former RunnableInstructions)

 __Note: This is the first implementation of the new hardware model. It will be extended in the next version and (minor) changes are expected__.


h2. Eclipse APP4MC 0.8.3 (Jan 2018)

General
* New Eclipse Neon.3 based product

Model handling
* Model migration support (0.8.2 -> 0.8.3)
* Updated model utilities

Model changes
* New mode conditions (logical AND)
* New timing requirement (end to start)
* Reworked Stimuli definitions
* New reference to port for client server and sender receiver communication

_For details see "Release 0.8.3 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.8.3/bugs_


h2. Eclipse APP4MC 0.8.2 (Oct 2017)

General
* Model changes (extensions)
* New graphical editors (based on Sirius)

Model handling
* Model migration support (0.8.1 -> 0.8.2)
* New model utilities

Model changes
* New runnable item to get the result of an asynchronous request
* New possibility to specify the label access implementation
* New measurement model
* New component event

_For details see "Release 0.8.2 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.8.2/bugs_


h2. Eclipse APP4MC 0.8.1 (Jul 2017)

General
* Model changes (extension and harmonization)
* Improved model handling
* New tooling: EMF Graphical Viewer

Model handling
* Model migration support (0.8.0 -> 0.8.1)
* New support for compressed model files (zip)
* More back references

Model changes
* Extended Schedulers (hierarchical, reservation based)
* Extend Semaphore definition (types)
* Consistent naming of Triggers, Activations and Stimuli
* New elements for data driven computation (conditions, triggers)

_For details see "Release 0.8.1 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.8.1/bugs_



h2. Eclipse APP4MC 0.8.0 (Apr 2017)

General
* Model changes (mainly to simplify handling)
* Improved tooling: model utilities
* New UI components: Multicore Wizard, Task-Visualizer (draft version)

Model handling
* Model migration support (0.7.2 -> 0.8.0)

Model changes
* Simplified model handling: Mapping Model, Modes, Time
* New classifiers to annotate Core and Memory
* Reworked Property Constraints
* Extended OS Overheads

_For details see "Release 0.8.0 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.8.0/bugs_



h2. Eclipse APP4MC 0.7.2 (Jan 2017)

General
* Smaller product definition (optional parts can be installed via update sites)
* Harmonized model API

Model handling
* Model migration support (0.7.1 -> 0.7.2)
* Improved back references

Model changes
* New core-specific runtimes (instructions) for runnables
* New model elements for streaming communication (Channels)*
* New Transmission Policy for communication (e.g. label accesses) 
* New Event-based Stimulus
* New Data Consistency needs
* New Counters for InterProcessActivation and EventStimulus
* Harmonized model elements to describe probability
* Storage of common elements (e.g. tags) in one central location

Bug fixes / Improvements
* Model migration (ISR call graph, Section names, cross document references)
* Back references (Memory -> Mapping, Scheduler -> CoreAllocation)

Documentation
* New model elements: Physical memory sections, Channels
* New examples

 * =  __Experimental feature (first modeling attempt that may change in future versions)__.

_For details see "Release 0.7.2 issues":https://projects.eclipse.org/projects/technology.app4mc/releases/0.7.2/bugs_



h2. Eclipse APP4MC 0.7.1 (Oct 2016)

Model handling
* Model migration support (0.7.0 -> 0.7.1)
* Improved update of opposite references
* Storage of default values is enabled by default

Model changes
* New distribution "Beta Distribution"
* New stimuli type "Synthetic" (to "replay" activations from a hardware trace)
* New DataStabilityGroup
* Introduced SamplingType as new attribute for Deviation
* Introduced physical memory sections (PhysicalSectionConstraint, PhysicalSectionMapping)
* Reworked AffinityConstraints (removed Scheduler constraints, added Data constraints)
* Reworked Event / Event-Chain Constraints
* Reworked RunnableSequencingConstraints
* New types for DataSizes and DataRates

_For details see "Bugzilla entries for 0.7.1":https://bugs.eclipse.org/bugs/buglist.cgi?product=App4mc&target_milestone=0.7.1_



h2. Eclipse APP4MC 0.7.0 (Jul 2016)

Model handling
* Model migration support (itea1.1.0 -> itea1.1.1 -> 0.7.0)
* Simplified model creation wizard
* One consolidated model
* Additional opposite references (transient) to ease model navigation
* Scripting support for workflows (based on Eclipse EASE)

Model changes
* Removed 'attributes' and 'features' from hardware model
* Replaced generic __ProcessAllocation__ with specific __ISRAllocation__ and __TaskAllocation__
* New __BigInteger__ values for __CustomAttributes__
* Some renamed classes and attributes (details in the help)

Model structure
* Removed direct dependency to Franca (replaced by implicit reference by interface name)

Documentation
* Updated model documentation / class diagrams
* New developer guide regarding Model Migration Framework
* New developer guide regarding Workflows

