tree 3ec823d2e709cc02a3c86bb24436559c133c4465
author Saadia Dhouib <saadia.dhouib@cea.fr> 1583850246 +0100
committer Saadia Dhouib <saadia.dhouib@cea.fr> 1608219321 +0100

Bug 569789 - [PapyrusManufacturing] Migration of source code from
internal server to eclipse



first commit of the sysml requirements model

First commit of AAS Modeling diagrams plugins

Adding architecture framework description

Modifying the UML profile to be conformant to AAS v2.0.1

change in the css style sheet


First commit of the Festo demonstrator

First commit of libraries plugin that Basyx code generator depends on
(org.apiguardian, org.junit.jupiter, org.junit.jupiter.params, etc)

commit of missing resources for org.eclipse.aas.basyx.lib


Integration of Basyx Code generation API with Papyrus

[Releng] Update the build with the new code generation plugins

- Code generation based on the AAS papyrus model information (submodels,
operations, attributes)
- Change of the bundle id of org.eclipse.aas.basyx.codegen
- Rewire the build for the new RCP

Adding Festo demonstrator model as a template in Papyrus wizard

First commit of the whirlpool model

implement variables

Modification of Papyrus code generator to take into account parameters
of operations
Synchronizing submodels compartments (attributes, operations) with the
content of the model

Correcting minor regression for the code generation

Modification of the profile to fix issues 19968, 19969

Regeneration of elementtypes, modification of palette to fix issues
19968, 19969

bugs 20049 Edit button on submodel attribute non-functional


Fix this bug by adding a ModelElement for AAS Sterotypes, fork the
HasStereotype Constraint to refer to the base_Class rather than the
sterotypeImpl

fix Bug 20050
*change profile : make idshort a derived read only property
--> changes in xwt files
*change generated code directory src-gen rather than src
*create a factory custom as well as ObjectImpl custom to specify the
implementation of id short
* identify a regex to constraint the idshort format
* new advice to approve only the valid format

fix Bug 20050

fix same name parameter errors.
now parameters in operations can have the same name.
fixes: #19970

Properties view regeneration

Re-fix bug 20049 Edit button on submodel attribute non-functional
and bug 20050 https://codev-tuleap.cea.fr/plugins/tracker/?aid=20050
after properties generation

implement remote operation execution

one project can be linked with other one and all operations and
submodels for that project will be created automatically

add info for new method

fix target platform


change java version to java 11

change java version

update classpath and target platform

use java 11 instead of java 1.8

The Basyx API for basyx projects creation has changed. Papyrus code
generator is updated with respect to these API changes.

implement SubModelElementCollection

- it is now possible to group Properties and Operations
- also updated Test file to beautify it.




Adding deployment information to the profile. Modification of
submodelementCollection

Modification of the profile to set the port Type to integer.
Regeneration of the properties view



SubmodelElementCollection association advices

-Restricting the creation of the relationship between
SubmodelElementCollection and submodel or SubmodelElementCollection and
SubmodelElementCollection
-Naming the association parentof
-Applying the SubmodelElementCollection stereotype to the association
end (property inside submodel)

generate Properties view with :
* readonly idShort
* edit button reworks for submodels collection in the AAS properties
view
* remove workaround: specific constraint for AAS (patch is merged in
Paparus https://bugs.eclipse.org/bugs/show_bug.cgi?id=567354



bugs #20376 Endpoint Edition

Implement customizable code body for operations.

fix operations and props not generated

- if not defined for submodel.
- implement submodelelementcollection into submodelelementcollection
- add more informative messages



Modification of the papyrus code generator

to generate submodel elements collections
to generate deployment information (aas id, aas server address, aas
server port, asset address(IP:PORT) )



implement property Type

One can now define what the property type is.

Resolving UI issues

Adding code generation menu on the diagram.
Adding a progress monitor dialog for code generation.




synch basyx build from 10.12.2020


some last improvements

- remove extClass from path
- add a readme to introduce the code.
- more debug messages during progress

minor layout fixes

implement operation variable type

minor example fix

Adding TestCases to the requirements model

First commit of the import Feature from AASX files (without releng)
to be continued

the import plugin

clean up the dev classes and CopyRights, remove unused classes

Integration in Papyrus of the new codegen api for operation parameters

Change-Id: I1e799b8c703a9be1b18c858708255ccd73790d86
Signed-off-by: Saadia Dhouib <saadia.dhouib@cea.fr>
Signed-off-by: Asma Smaoui <asma.smaoui@cea.fr>
Signed-off-by: Volkan Gezer <volkan.gezer@dfki.de>
Signed-off-by: Quentin Le Menez <quentin.lemenez@cea.fr>
