From 4b89b37aa8a1cfc8d7529d25707d2c66f771d17a Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 14:44:32 +0000 Subject: [PATCH 01/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c8c3453d..bd4e4d2a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -28,7 +28,8 @@ variables: # CI_TARGET_BRANCH: $CI_DEFAULT_BRANCH - CI_TARGET_BRANCH: "ttf-022" + # CI_TARGET_BRANCH: "ttf-022" + CI_TARGET_BRANCH: "master" DEV_CI_TARGET_BRANCH: "dev" MAIN_CI_TARGET_BRANCH: "master" SITE_LOCATION: "updatesite/org.etsi.mts.tdl.updatesite/target" @@ -254,6 +255,7 @@ pages-job: # Add/update content # TODO: differentiate on branch? - echo $CI_PAGES_URL + - echo $RELEASE_PATH - mkdir -p $RELEASE_PATH - cp -r -f $SITE_PATH/* $RELEASE_PATH # Zip the content and publish the zip again -- GitLab From fb8a0f9f771b682e863d4db11fab8330217c4fab Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 15:20:55 +0000 Subject: [PATCH 02/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index bd4e4d2a..af8a054a 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -194,7 +194,7 @@ prepare-job: echo "RELEASE_KEY=$RELEASE_KEY" >> variables.env echo "PACKAGE_NAME=$PACKAGE_NAME_MAIN" >> variables.env echo "RELEASE_PATH=public/updatesite/${RELEASE_KEY}" >> variables.env - echo "RELEASE_PAGE=https://top.etsi.org/ide/updatesite/${RELEASE_KEY}" + echo "RELEASE_PAGE=https://top.etsi.org/ide/updatesite/${RELEASE_KEY}" >> variables.env fi - echo "EXTRA_DESCRIPTION=automatic-release" >> variables.env - echo "VERSION=$VERSION" >> variables.env -- GitLab From ee858a4872401969196af8d7888c357dcd83848b Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 15:35:40 +0000 Subject: [PATCH 03/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index af8a054a..40e3a3f1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -42,7 +42,7 @@ variables: PACKAGE_NAME_MAIN: "TOP IDE Build" BETA_KEY: "beta" MAIN_KEY: "stable" - RELEASE_KEY: "beta" + RELEASE_KEY: "stable" RELEASE_PATH: "public/updatesite/${RELEASE_KEY}" RELEASE_PAGE: "https://top.etsi.org/ide/updatesite/${RELEASE_KEY}" STANDALONE_LOCATION: "plugins/org.etsi.mts.tdl.standalone/target" -- GitLab From eaff1a3d283432f6ea9e68bb0d7c6bd541f59caa Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 15:40:15 +0000 Subject: [PATCH 04/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 40e3a3f1..84d0ef51 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -258,6 +258,7 @@ pages-job: - echo $RELEASE_PATH - mkdir -p $RELEASE_PATH - cp -r -f $SITE_PATH/* $RELEASE_PATH + - ls -la $RELEASE_PATH # Zip the content and publish the zip again # - zip -r "content.zip" "public" # - mv "content.zip" "public/" -- GitLab From d0433ff07477faccf2c4f682492816a8c70ef4d4 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 18:37:45 +0000 Subject: [PATCH 05/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 84d0ef51..6c2b8993 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -238,7 +238,7 @@ upload-job: # - | # curl --header "JOB-TOKEN: ${CI_JOB_TOKEN}" --upload-file bin/${LIB_JAR} ${PACKAGE_REGISTRY_URL}/${LIB_JAR} -pages-job: +pages: stage: upload # image: curlimages/curl:latest needs: -- GitLab From de832d5467881d66c8b3853c2b34591f9d27b092 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 21:11:21 +0200 Subject: [PATCH 06/11] * updated ci config --- .gitlab-ci.yml | 32 +++++--------------------------- 1 file changed, 5 insertions(+), 27 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6c2b8993..58b1520e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -29,9 +29,10 @@ variables: # CI_TARGET_BRANCH: $CI_DEFAULT_BRANCH # CI_TARGET_BRANCH: "ttf-022" - CI_TARGET_BRANCH: "master" + TTF_CI_TARGET_BRANCH: "ttf-034" DEV_CI_TARGET_BRANCH: "dev" MAIN_CI_TARGET_BRANCH: "master" + CI_TARGET_BRANCH: ${DEV_CI_TARGET_BRANCH} SITE_LOCATION: "updatesite/org.etsi.mts.tdl.updatesite/target" ARCHIVE_NAME: "org.etsi.mts.tdl.updatesite-1.0.0-SNAPSHOT.zip" SITE_ARCHIVE: "${SITE_LOCATION}/${ARCHIVE_NAME}" @@ -158,27 +159,6 @@ build-job: # This job runs in the build stage, which runs first. - $SITE_PATH # - $STANDALONE_PATH -# unit-test-job: # This job runs in the test stage. - # stage: test # It only starts when the job in the build stage completes successfully. - # script: - # - echo "Running unit tests... This will take about 6 seconds." - # - sleep 6 - # - echo "Code coverage is 0%" - -# lint-test-job: # This job also runs in the test stage. - # stage: test # It can run at the same time as unit-test-job (in parallel). - # script: - # - echo "Linting code... This will take about 1 seconds." - # - sleep 1 - # - echo "No lint issues found." - -# deploy-job: # This job runs in the deploy stage. - # stage: deploy # It only runs when *both* jobs in the test stage complete successfully. - # environment: production - # script: - # - echo "Deploying application..." - # - echo "Application successfully deployed." - # Adapted from OpenAPI2TDL converter prepare-job: @@ -282,17 +262,15 @@ release-job: rules: - !reference [.default_rules, rules] script: - # unpack latest? - # TODO: permalink for latest release? or manual job? # --description "Published automatically, permalink for installation (valid for 7 days) at https://labs.etsi.org/rep/top/ide/-/releases/permalink/latest/downloads/repository." - echo $BUILD_JOB_ID - | release-cli create --name "Release $VERSION" \ --tag-name $VERSION \ --ref $CI_COMMIT_SHA \ - --assets-link "{\"name\":\"${PACKAGE_NAME}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${ARCHIVE_NAME}\",\"filepath\":\"/repository-archive\"}" \ - --assets-link "{\"name\":\"${PACKAGE_NAME} (latest ${RELEASE_KEY} repository (exipres in 7 days))\",\"url\":\"${REPO_PREFIX}/${BUILD_JOB_ID}/${REPO_PATH}\",\"filepath\":\"/repository\"}" \ - --assets-link "{\"name\":\"${PACKAGE_NAME} (latest ${RELEASE_KEY} release (permalink))\",\"url\":\"${RELEASE_PAGE}\"}" \ + --assets-link "{\"name\":\"${PACKAGE_NAME} (downloadable archive)\",\"url\":\"${PACKAGE_REGISTRY_URL}/${ARCHIVE_NAME}\",\"filepath\":\"/repository-archive\"}" \ + --assets-link "{\"name\":\"${PACKAGE_NAME} (snapshot ${RELEASE_KEY} repository for ${VERSION} (exipres in 7 days))\",\"url\":\"${REPO_PREFIX}/${BUILD_JOB_ID}/${REPO_PATH}\"}" \ + --assets-link "{\"name\":\"${PACKAGE_NAME} (latest ${RELEASE_KEY} release repository (permalink))\",\"url\":\"${RELEASE_PAGE}\"}" \ # --assets-link "{\"name\":\"${PACKAGE_NAME} (latest standalone (exipres in 7 days))\",\"url\":\"${PACKAGE_REGISTRY_URL}/${STANDALONE_NAME}\"}" \ # --assets-link "{\"name\":\"${PACKAGE_NAME} (latest)\",\"url\":\"${PACKAGE_LATEST_URL}/${ARCHIVE_NAME}\"}" \ # --assets-link "{\"name\":\"${MACOS_GUI_JAR}\",\"url\":\"${PACKAGE_REGISTRY_URL}/${MACOS_GUI_JAR}\"}" \ -- GitLab From 80d0e9215a90d6435890e717bce906cd62e996be Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 19 Oct 2023 22:04:49 +0200 Subject: [PATCH 07/11] * updated readme to emphasise latest links --- Readme.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Readme.md b/Readme.md index ac4aa709..50b2df44 100644 --- a/Readme.md +++ b/Readme.md @@ -10,21 +10,21 @@ The TDL tools are available as a set of Eclipse plug-ins. You need to first be a Once Eclipse is up and running, the easiest way to install the TOP tools is from the Eclipse Marketplace - simply search for TDL in the Eclipse Marketplace client within Eclipse, or go to the [TOP Marketplace Listing](https://marketplace.eclipse.org/content/top-tdl-open-source-project) and drag the install button into the Eclipse window. -Alternatively, you can install the plug-ins manually from an update site. In this case, you need to add the [update site](https://tdl.etsi.org/eclipse/latest/) for the TDL tools: +Alternatively, you can install the plug-ins manually from an update site. In this case, you need to add the [update site](https://top.etsi.org/ide/updatesite/stable) for the TDL tools: - https://tdl.etsi.org/eclipse/latest/ + https://top.etsi.org/ide/updatesite/stable -With the CI/CD integration, a beta-channel is available at the [development update site](https://top.etsi.org/ide/updatesite/beta) for the latest development versions of the TDL tools: +A beta-channel is available at the [development update site](https://top.etsi.org/ide/updatesite/beta) for the latest development versions of the TDL tools: https://top.etsi.org/ide/updatesite/beta -Eventually, the stable branch will be switched to CI/CD as well, to be made avalable at: +Legacy versions for older Eclipse versions (no longer tested) are available at: - https://top.etsi.org/ide/updatesite/stable + https://tdl.etsi.org/eclipse/latest/ After the update site is added, the list of plug-ins and features shall be shown in the installation dialog (menu item Help->Install New Software..). Select the desired features and proceed with the installation, which will require Eclipse to be restarted once the installation is finished. -Interim snapshot builds are also available from the [Packages](https://labs.etsi.org/rep/top/ide/-/packages) / [Releases](https://labs.etsi.org/rep/top/ide/-/releases) areas on GitLab. These can be downloaded and installed in Eclipse by adding a new update site from a local archive. Please note that these interim builds may not be stable as they reflect the development at a certain point in time between stable releases and while certain issues may be addressed, new ones may not yet have been identifed. +Interim snapshot builds are also available from the [Packages](https://labs.etsi.org/rep/top/ide/-/packages) / [Releases](https://labs.etsi.org/rep/top/ide/-/releases) areas on GitLab. These can be downloaded and installed in Eclipse by adding a new update site from a local archive. Please note that these snapshot builds may not be stable as they reflect the development at a certain point in time between stable releases and while certain issues may be addressed, new ones may not yet have been identified. In Eclipse 2021-06 some components may need to be updated first to ensure compatibility with the graphical editor. During the installation, this may be proposed as a solution. -- GitLab From 53142b3e497e73653b393d33132d6601a63bd636 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Tue, 24 Oct 2023 21:42:43 +0200 Subject: [PATCH 08/11] + added execution feature --- .../.project | 23 ++ .../build.properties | 1 + .../feature.xml | 318 ++++++++++++++++++ .../pom.xml | 18 + 4 files changed, 360 insertions(+) create mode 100644 features/org.etsi.mts.tdl.execution.feature/.project create mode 100644 features/org.etsi.mts.tdl.execution.feature/build.properties create mode 100644 features/org.etsi.mts.tdl.execution.feature/feature.xml create mode 100644 features/org.etsi.mts.tdl.execution.feature/pom.xml diff --git a/features/org.etsi.mts.tdl.execution.feature/.project b/features/org.etsi.mts.tdl.execution.feature/.project new file mode 100644 index 00000000..64a248ec --- /dev/null +++ b/features/org.etsi.mts.tdl.execution.feature/.project @@ -0,0 +1,23 @@ + + + org.etsi.mts.tdl.execution.feature + + + + + + org.eclipse.pde.FeatureBuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.m2e.core.maven2Nature + org.eclipse.pde.FeatureNature + + diff --git a/features/org.etsi.mts.tdl.execution.feature/build.properties b/features/org.etsi.mts.tdl.execution.feature/build.properties new file mode 100644 index 00000000..64f93a9f --- /dev/null +++ b/features/org.etsi.mts.tdl.execution.feature/build.properties @@ -0,0 +1 @@ +bin.includes = feature.xml diff --git a/features/org.etsi.mts.tdl.execution.feature/feature.xml b/features/org.etsi.mts.tdl.execution.feature/feature.xml new file mode 100644 index 00000000..cc7ae338 --- /dev/null +++ b/features/org.etsi.mts.tdl.execution.feature/feature.xml @@ -0,0 +1,318 @@ + + + + + Provides TDL execution capabilities via JUnit code generation (prototype). + + + + Eclipse Public License - v 1.0 +THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS +ECLIPSE PUBLIC +LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION +OF THE PROGRAM +CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. +1. DEFINITIONS +"Contribution" means: +a) in the case of the initial Contributor, the initial code and +documentation +distributed under this Agreement, and +b) in the case of each subsequent Contributor: +i) changes to the Program, and +ii) additions to the Program; +where such changes and/or additions to the Program originate +from and are +distributed by that particular Contributor. A Contribution 'originates' +from a Contributor if it was added to the Program by such Contributor +itself or anyone acting on such Contributor's behalf. Contributions +do not +include additions to the Program which: (i) are separate modules +of +software distributed in conjunction with the Program under their +own +license agreement, and (ii) are not derivative works of the Program. +"Contributor" means any person or entity that distributes the +Program. +"Licensed Patents" mean patent claims licensable by a Contributor +which are +necessarily infringed by the use or sale of its Contribution +alone or when +combined with the Program. +"Program" means the Contributions distributed in accordance with +this +Agreement. +"Recipient" means anyone who receives the Program under this +Agreement, +including all Contributors. +2. GRANT OF RIGHTS +a) Subject to the terms of this Agreement, each Contributor hereby +grants +Recipient a non-exclusive, worldwide, royalty-free copyright +license to +reproduce, prepare derivative works of, publicly display, publicly +perform, distribute and sublicense the Contribution of such Contributor, +if any, and such derivative works, in source code and object +code form. +b) Subject to the terms of this Agreement, each Contributor hereby +grants +Recipient a non-exclusive, worldwide, royalty-free patent license +under +Licensed Patents to make, use, sell, offer to sell, import and +otherwise +transfer the Contribution of such Contributor, if any, in source +code and +object code form. This patent license shall apply to the combination +of +the Contribution and the Program if, at the time the Contribution +is +added by the Contributor, such addition of the Contribution causes +such +combination to be covered by the Licensed Patents. The patent +license +shall not apply to any other combinations which include the Contribution. +No hardware per se is licensed hereunder. +c) Recipient understands that although each Contributor grants +the licenses +to its Contributions set forth herein, no assurances are provided +by any +Contributor that the Program does not infringe the patent or +other +intellectual property rights of any other entity. Each Contributor +disclaims any liability to Recipient for claims brought by any +other +entity based on infringement of intellectual property rights +or +otherwise. As a condition to exercising the rights and licenses +granted +hereunder, each Recipient hereby assumes sole responsibility +to secure +any other intellectual property rights needed, if any. For example, +if a +third party patent license is required to allow Recipient to +distribute +the Program, it is Recipient's responsibility to acquire that +license +before distributing the Program. +d) Each Contributor represents that to its knowledge it has sufficient +copyright rights in its Contribution, if any, to grant the copyright +license set forth in this Agreement. +3. REQUIREMENTS +A Contributor may choose to distribute the Program in object +code form under +its own license agreement, provided that: +a) it complies with the terms and conditions of this Agreement; +and +b) its license agreement: +i) effectively disclaims on behalf of all Contributors all warranties +and conditions, express and implied, including warranties or +conditions of title and non-infringement, and implied warranties +or +conditions of merchantability and fitness for a particular purpose; +ii) effectively excludes on behalf of all Contributors all liability +for +damages, including direct, indirect, special, incidental and +consequential damages, such as lost profits; +iii) states that any provisions which differ from this Agreement +are +offered by that Contributor alone and not by any other party; +and +iv) states that source code for the Program is available from +such +Contributor, and informs licensees how to obtain it in a reasonable +manner on or through a medium customarily used for software exchange. +When the Program is made available in source code form: +a) it must be made available under this Agreement; and +b) a copy of this Agreement must be included with each copy of +the Program. +Contributors may not remove or alter any copyright notices contained +within the Program. +Each Contributor must identify itself as the originator of its +Contribution, +if +any, in a manner that reasonably allows subsequent Recipients +to identify the +originator of the Contribution. +4. COMMERCIAL DISTRIBUTION +Commercial distributors of software may accept certain responsibilities +with +respect to end users, business partners and the like. While this +license is +intended to facilitate the commercial use of the Program, the +Contributor who +includes the Program in a commercial product offering should +do so in a manner +which does not create potential liability for other Contributors. +Therefore, +if a Contributor includes the Program in a commercial product +offering, such +Contributor ("Commercial Contributor") hereby agrees to defend +and indemnify +every other Contributor ("Indemnified Contributor") against any +losses, +damages and costs (collectively "Losses") arising from claims, +lawsuits and +other legal actions brought by a third party against the Indemnified +Contributor to the extent caused by the acts or omissions of +such Commercial +Contributor in connection with its distribution of the Program +in a commercial +product offering. The obligations in this section do not apply +to any claims +or Losses relating to any actual or alleged intellectual property +infringement. In order to qualify, an Indemnified Contributor +must: +a) promptly notify the Commercial Contributor in writing of such +claim, and +b) allow the Commercial Contributor to control, and cooperate +with the +Commercial Contributor in, the defense and any related settlement +negotiations. The Indemnified Contributor may participate in +any such claim at +its own expense. +For example, a Contributor might include the Program in a commercial +product +offering, Product X. That Contributor is then a Commercial Contributor. +If +that Commercial Contributor then makes performance claims, or +offers +warranties related to Product X, those performance claims and +warranties are +such Commercial Contributor's responsibility alone. Under this +section, the +Commercial Contributor would have to defend claims against the +other +Contributors related to those performance claims and warranties, +and if a +court requires any other Contributor to pay any damages as a +result, the +Commercial Contributor must pay those damages. +5. NO WARRANTY +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM +IS PROVIDED ON AN +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +EITHER EXPRESS OR +IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS +OF TITLE, +NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR +PURPOSE. Each +Recipient is solely responsible for determining the appropriateness +of using +and distributing the Program and assumes all risks associated +with its +exercise of rights under this Agreement , including but not limited +to the +risks and costs of program errors, compliance with applicable +laws, damage to +or loss of data, programs or equipment, and unavailability or +interruption of +operations. +6. DISCLAIMER OF LIABILITY +EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT +NOR ANY +CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, +INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT +LIMITATION +LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM +OR THE +EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF +THE POSSIBILITY +OF SUCH DAMAGES. +7. GENERAL +If any provision of this Agreement is invalid or unenforceable +under +applicable law, it shall not affect the validity or enforceability +of the +remainder of the terms of this Agreement, and without further +action by the +parties hereto, such provision shall be reformed to the minimum +extent +necessary to make such provision valid and enforceable. +If Recipient institutes patent litigation against any entity +(including a +cross-claim or counterclaim in a lawsuit) alleging that the Program +itself +(excluding combinations of the Program with other software or +hardware) +infringes such Recipient's patent(s), then such Recipient's rights +granted +under Section 2(b) shall terminate as of the date such litigation +is filed. +All Recipient's rights under this Agreement shall terminate if +it fails to +comply with any of the material terms or conditions of this Agreement +and does +not cure such failure in a reasonable period of time after becoming +aware of +such noncompliance. If all Recipient's rights under this Agreement +terminate, +Recipient agrees to cease use and distribution of the Program +as soon as +reasonably practicable. However, Recipient's obligations under +this Agreement +and any licenses granted by Recipient relating to the Program +shall continue +and survive. +Everyone is permitted to copy and distribute copies of this Agreement, +but in +order to avoid inconsistency the Agreement is copyrighted and +may only be +modified in the following manner. The Agreement Steward reserves +the right to +publish new versions (including revisions) of this Agreement +from time to +time. No one other than the Agreement Steward has the right to +modify this +Agreement. The Eclipse Foundation is the initial Agreement Steward. +The +Eclipse Foundation may assign the responsibility to serve as +the Agreement +Steward to a suitable separate entity. Each new version of the +Agreement will +be given a distinguishing version number. The Program (including +Contributions) may always be distributed subject to the version +of the +Agreement under which it was received. In addition, after a new +version of the +Agreement is published, Contributor may elect to distribute the +Program +(including its Contributions) under the new version. Except as +expressly +stated in Sections 2(a) and 2(b) above, Recipient receives no +rights or +licenses to the intellectual property of any Contributor under +this Agreement, +whether expressly, by implication, estoppel or otherwise. All +rights in the +Program not expressly granted under this Agreement are reserved. +This Agreement is governed by the laws of the State of New York +and the +intellectual property laws of the United States of America. No +party to this +Agreement will bring a legal action under this Agreement more +than one year +after the cause of action arose. Each party waives its rights +to a jury trial in +any resulting litigation. + + + + + + + + + diff --git a/features/org.etsi.mts.tdl.execution.feature/pom.xml b/features/org.etsi.mts.tdl.execution.feature/pom.xml new file mode 100644 index 00000000..b3bf16ce --- /dev/null +++ b/features/org.etsi.mts.tdl.execution.feature/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + + org.etsi.mts.tdl + org.etsi.mts.tdl.parent + 1.0.0-SNAPSHOT + ../../org.etsi.mts.tdl.parent + + + + org.etsi.mts.tdl.execution.feature + eclipse-feature + + TDL Execution Support Feature + \ No newline at end of file -- GitLab From 516566680e9fde316c815b18cb25d653947f7d53 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Tue, 24 Oct 2023 21:44:38 +0200 Subject: [PATCH 09/11] + ttcn3 generation fixes for enums, dataelementuse, and others + debugging operation --- .../epsilon/ttcn3/debug.eol | 11 + .../epsilon/ttcn3/reusable.eol | 325 ++++++++++++------ .../epsilon/ttcn3/ttcn3mapping.etl | 22 +- 3 files changed, 242 insertions(+), 116 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/debug.eol b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/debug.eol index 7d708f94..6d5e55b8 100644 --- a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/debug.eol +++ b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/debug.eol @@ -9,6 +9,17 @@ operation Any debugAnnotations() : Boolean { (" Comments: "+self.comment).println(); return true; } +operation Any debugElement(prefix : String) { + var pattern = ".+\\.(.+)Impl.+(\\(?)"; + (prefix+self.toString().replaceAll(pattern, "$1 $2")).println(); + for (c in self.eContents()) { + c.debugElement(prefix+" "); + } + for (c in self.eCrossReferences()) { + (prefix+"->"+c.toString().replaceAll(pattern, "$1 $2")).println(); + //c.debugElement(prefix+" "); + } +} operation Any debugTimeConstraintVariables() : Boolean { var expressionConstraint = diff --git a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/reusable.eol b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/reusable.eol index 5ddd1a6e..0dd65491 100644 --- a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/reusable.eol +++ b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/reusable.eol @@ -84,82 +84,80 @@ operation String getStringValue() : TTCN!Value { return v; } +operation TDL!DataUse getDataInstance() : TDL!DataInstance { + if (self.isKindOf(TDL!DataInstanceUse)) { + return self.dataInstance; + } else if (self.isKindOf(TDL!DataElementUse) and self.dataElement.isKindOf(TDL!DataInstance)) { + return self.dataElement; + } else { + (" TODO: "+self.~rule+" : Not Implemented Yet : "+self.type).log(1); + return null; + } +} + operation Any transformSingleMemberAssignment(m : TDL!Member, mad : TDL!DataUse) : TTCN!TemplateBody { + ("transformSingleMemberAssignment: "+self.name+"::"+m.name).log(1); var body = new TTCN!TemplateBody(); - if (mad.isDefined() and mad.isKindOf(TDL!DataInstanceUse)) { - if (mad.dataInstance.isDefined() and mad.argument.isEmpty()) { - body.simple = new TTCN!SimpleSpec(); - body.simple.expr = new TTCN!Value(); - body.simple.expr.ref = new TTCN!ReferencedValue(); - body.simple.expr.ref.head = new TTCN!Head(); - - //Template ->target = BaseTemplate reference - //Constant ->target = SingleConstDef reference - var e = mad.dataInstance.equivalent(); - if (e.isKindOf(TTCN!TemplateDef)) { - body.simple.expr.ref.head.target = e.base; - } else if (e.isKindOf(TTCN!ConstDef)) { - body.simple.expr.ref.head.target = e.defs.list.get(0); - } else { - //what else can it be? - } - - //reduction - //use extended field references - var useEFR = mad.reduction.exists(mr|mr.collectionIndex.isDefined()); - - if (useEFR) { - for (mr in mad.reduction) { - if (mr.member.isDefined()) { - var efr = new TTCN!ExtendedFieldReference(); - efr.field = mr.member.equivalent(); - - body.simple.expr.ref.fields.add(efr); - } - if (mr.collectionIndex.isDefined() - and mr.collectionIndex.dataInstance.isDefined()) { - var efr = new TTCN!ExtendedFieldReference(); - efr.array = new TTCN!Value(); - efr.array.ref = new TTCN!ReferencedValue(); - efr.array.ref.head = new TTCN!Head(); - - var ci = mr.collectionIndex.dataInstance.equivalent(); - if (ci.isKindOf(TTCN!TemplateDef)) { - efr.array.ref.head.target = ci.base; - } else if (ci.isKindOf(TTCN!ConstDef)) { - efr.array.ref.head.target = ci.defs.list.get(0); - } else { - //what else can it be? - } - - body.simple.expr.ref.fields.add(efr); - } - } - } else { - var t = body.simple.expr.ref.head; - for (mr in mad.reduction) { - if (mr.member.isDefined()) { - t.tail = new TTCN!RefValueTail(); - t.tail.value = mr.member.equivalent(); - - } - t = t.tail; - } - } - + if (mad.isDefined()) { + var di = mad.getDataInstance(); + if (di.isDefined()) { + //TODO: add support for DataElementUse + if (mad.argument.isEmpty()) { + var e = di.equivalent(); + body.simple = new TTCN!SimpleSpec(); + body.simple.expr = new TTCN!Value(); + body.simple.expr.ref = e.getReferencedValue(); + + //reduction + //use extended field references + var useEFR = mad.reduction.exists(mr|mr.collectionIndex.isDefined()); + + if (useEFR) { + for (mr in mad.reduction) { + if (mr.member.isDefined()) { + var efr = new TTCN!ExtendedFieldReference(); + efr.field = mr.member.equivalent(); + body.simple.expr.ref.fields.add(efr); + } + if (mr.collectionIndex.isDefined() + and mr.collectionIndex.getDataInstance().isDefined()) { + var ci = mr.collectionIndex.getDataInstance().equivalent(); + var efr = new TTCN!ExtendedFieldReference(); + efr.array = new TTCN!Value(); + efr.array.ref = ci.getReferencedValue(); + body.simple.expr.ref.fields.add(efr); + } + } + } else { + var t = body.simple.expr.ref.head; + for (mr in mad.reduction) { + if (mr.member.isDefined()) { + t.tail = new TTCN!RefValueTail(); + t.tail.value = mr.member.equivalent(); + + } + t = t.tail; + } + } + + } else { + //nested anonymous definitions + //or overriding + (" : TODO: "+mad.item).log(1); + if (mad.item.isDefined()) { + body = self.transformDefaultMatchingSymbol(m, mad); + } else { + body.field = mad.transformWildcardMemberAssignment(); + } + } } else { - //nested anonymous definitions - //or overriding - (" : "+mad.item).log(1); - if (mad.item.isDefined()) { - body = self.transformDefaultMatchingSymbol(m, mad); - } else { - body.field = mad.transformWildcardMemberAssignment(); - } + body = self.transformDefaultMatchingSymbol(m, mad); } } else { body = self.transformDefaultMatchingSymbol(m, mad); } + self.debugElement("Self: "); + body.debugElement("Body: "); return body; } @@ -218,42 +216,82 @@ operation TDL!Member getFieldDef(type:TDL!StructuredDataType) : TTCN!StructField } } +operation Any getReferencedValue() : TTCN!ReferencedValue { + var v = new TTCN!ReferencedValue(); + v.head = new TTCN!Head(); + + //Template ->target = BaseTemplate reference + //Constant ->target = SingleConstDef reference + if (self.isKindOf(TTCN!TemplateDef)) { + v.head.target = self.base; + } else if (self.isKindOf(TTCN!ConstDef)) { + v.head.target = self.defs.list.get(0); + } else if (self.isKindOf(TTCN!Enumeration)) { + v.head.target = self; + } else { + (" TODO: Not implemented yet: getReferencedValue for"+self).log(1); + //what else can it be? + } + return v; +} + //TODO: deprecated? -> not at present operation TDL!StructuredDataInstance transformMemberAssignment() : TTCN!CompoundExpression { var expr; - ("transformMemberAssignment: "+self.name).println(); + ("transformMemberAssignment: "+self.name).log(1); if (not self.memberAssignment.isEmpty()) { expr = new TTCN!FieldExpressionList(); for (ma in self.memberAssignment) { var fes = new TTCN!FieldExpressionSpec(); //fes.fieldRef = ma.member.equivalent(); fes.fieldRef = ma.member.getFieldDef(self.dataType); - (" "+ma.member.name+"->"+fes.fieldRef.eContainer().eContainer().name).println(); + (" "+ma.member.name+"->"+fes.fieldRef.eContainer().eContainer().name).log(1); //ma.memberSpec fes.expr = new TTCN!Value(); - if (ma.memberSpec.isKindOf(TDL!DataInstanceUse) - and ma.memberSpec.dataInstance.isDefined()) { - fes.expr.ref = new TTCN!ReferencedValue(); - fes.expr.ref.head = new TTCN!Head(); - - //Template ->target = BaseTemplate reference - //Constant ->target = SingleConstDef reference - var e = ma.memberSpec.dataInstance.equivalent(); - if (e.isKindOf(TTCN!TemplateDef)) { - fes.expr.ref.head.target = e.base; - } else if (e.isKindOf(TTCN!ConstDef)) { - fes.expr.ref.head.target = e.defs.list.get(0); + //TODO: other data uses? + var di = ma.memberSpec.getDataInstance(); + if (di.isDefined()) { + (di).println(); + var e = di.equivalent(); + e.println(); + + if (e.isUndefined()) { + if (di.dataType.name = "Boolean") { + fes.expr.predef = new TTCN!PredefinedValue(); + fes.expr.predef.boolean = di.name.toString().toLower(); + } } else { - //what else can it be? + fes.expr.ref = e.getReferencedValue(); } //TODO: handle overriding parameters? + } else if (ma.memberSpec.isKindOf(TDL!LiteralValueUse)) { + //TODO: extract + fes.expr.predef = new TTCN!PredefinedValue(); + if (ma.memberSpec.intValue.isDefined()) { + fes.expr.predef.integer = ma.memberSpec.intValue.toString(); + } else if (ma.memberSpec.boolValue.isDefined()) { + fes.expr.predef.boolean = ma.memberSpec.boolValue.toString(); + } else { + fes.expr.predef.charString = "\""+ma.memberSpec.value+"\""; + } + } else if (ma.memberSpec.isKindOf(TDL!SpecialValueUse)) { + fes.expr.predef = new TTCN!PredefinedValue(); + if (ma.memberSpec.isKindOf(TDL!OmitValue)) { + fes.expr.predef.omit = "omit"; + } else if (ma.memberSpec.isKindOf(TDL!AnyValue)) { + fes.expr.predef.charString = "TODO: ? (AnyValue)"; + } else if (ma.memberSpec.isKindOf(TDL!AnyValueOrOmit)) { + fes.expr.predef.charString = "TODO: * (AnyValueOrOmit)"; + } + } else { //TODO: handle DataElementUse, others fes.expr.predef = new TTCN!PredefinedValue(); fes.expr.predef.charString = "\"TODO: Not Implemented Yet\""; + (" NOT IMPLEMENTED YET: "+ma.memberSpec).log(1); + } - expr.specs.add(fes); } //TODO: handle unassigned members? -> add guards to corresponding rule @@ -267,6 +305,7 @@ operation TDL!StructuredDataInstance transformMemberAssignment() : TTCN!Compound (" TODO: "+self.~rule+" : What is going on here: "+self).log(1); expr = new TTCN!ArrayExpression(); } + expr.debugElement("Expr:"); return expr; } @@ -276,6 +315,7 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec //unassignedMember? //argument -> ParameterBinding (parameter:Member, dataUse:DataUse) //reduction? -> MemberReference + ("transformWildcardMemberAssignment: "+self.name).log(1); var field = new TTCN!FieldSpecList(); var t; if (self.dataInstance.isDefined()) { @@ -306,6 +346,7 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec var ma = self.argument.selectOne(a|a.parameter = m); //default: no wildcard, defined //in case not defined, check for inherited + ma.println(); if (ma.isDefined()) { mad = ma.dataUse; } else if (ma.isUndefined() @@ -326,20 +367,37 @@ operation TDL!StaticDataUse transformWildcardMemberAssignment() : TTCN!FieldSpec return field; } +//operation TDL!StructuredDataInstance transformWildcardMemberAssignment() : TTCN!FieldSpecList { +// ("transformWildcardMemberAssignment: "+self.name).log(1); +// var field = new TTCN!FieldSpecList(); +// for (m in self.dataType.allMembers()) { //TODO: why all? why not only assigned? +//// for (ma in self.memberAssignment) { +// var fs = new TTCN!FieldSpec(); +// fs.ref = m.equivalent(); +// +// var ma = self.memberAssignment.selectOne(ma|ma.member = m); +// var mad; +// if (ma.isDefined()) { +// mad = ma.memberSpec; +// } +// +// fs.body = new TTCN!TemplateBody(); +// fs.body = self.transformSingleMemberAssignment(m, mad); +// field.spec.add(fs); +// } +// return field; +//} + +//TODO: reactivate or differentiate above operation TDL!StructuredDataInstance transformWildcardMemberAssignment() : TTCN!FieldSpecList { + ("transformWildcardMemberAssignmentX: "+self.name).log(1); var field = new TTCN!FieldSpecList(); - for (m in self.dataType.allMembers()) { + for (ma in self.memberAssignment) { var fs = new TTCN!FieldSpec(); - fs.ref = m.equivalent(); - - var ma = self.memberAssignment.selectOne(ma|ma.member = m); - var mad; - if (ma.isDefined()) { - mad = ma.memberSpec; - } + fs.ref = ma.member.equivalent(); fs.body = new TTCN!TemplateBody(); - fs.body = self.transformSingleMemberAssignment(m, mad); + fs.body = self.transformSingleMemberAssignment(ma.member, ma.memberSpec); field.spec.add(fs); } return field; @@ -560,6 +618,64 @@ operation TDL!DataInstanceUse getTemplateBody() : TTCN!TemplateBody { return self.getTemplateBody(false); } +operation TDL!DataElementUse getTemplateBody() : TTCN!TemplateBody { + return self.getTemplateBody(false); +} + +//TODO: refactor, copied from below +operation TDL!DataElementUse getTemplateBody(flat : Boolean) : TTCN!TemplateBody { + var tb = new TTCN!TemplateBody(); + tb.simple = new TTCN!SimpleSpec(); + tb.simple.expr = new TTCN!Value(); + if (useDataMapping) { + var mapping = TDL!DataElementMapping.allInstances().select(m|m.mappableDataElement = self.dataElement).first(); //TODO: extract parameter + tb.simple.expr.predef = new TTCN!PredefinedValue(); + if (mapping.isDefined()) { + //t.ref = new TTCN!TypeReference(); + //TODO: check if defined + //t.ref.head = mapping.elementURI; + tb.simple.expr.predef.charString = mapping.elementURI.replaceAll("\"",""); + } else { + tb.simple.expr.predef.charString = "MAP_"+self.dataInstance.name; + } + } else { + if (self.dataElement.isDefined() and self.dataElement.isKindOf(TDL!DataInstance)) { + tb.simple.expr.ref = new TTCN!ReferencedValue(); + tb.simple.expr.ref.head = new TTCN!Head(); + tb.simple.expr.ref.head.target = self.dataElement.equivalent().base; + } else if (self.dataElement.isDefined() and self.dataElement.isKindOf(TDL!DataType)) { //TODO:differentiate structured vs simple vs collection + if (flat) { + (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); + tb.simple.expr.predef = new TTCN!PredefinedValue(); + tb.simple.expr.predef.charString = "\"TODO_INLINE_DATA_ELEMENT_FOR_"+self.dataElement.name+"\""; + } else if (self.argument.isEmpty()) { + //TODO: make sure type is present + tb.simple.expr = new TTCN!ArrayExpression(); + } else { + tb.simple=null; + tb.~type = self.dataElement.getTTCNType(); + tb.field = new TTCN!FieldSpecList(); + + for (a in self.argument) { + var fs = new TTCN!FieldSpec(); + fs.ref = a.parameter.equivalent(); + fs.body = a.dataUse.getTemplateBody(true); //TODO: expand? + tb.field.spec.add(fs); + } + } + + } else if (self.item.isDefined()) { + (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); + tb.simple.expr.predef = new TTCN!PredefinedValue(); + tb.simple.expr.predef.charString = "\"TODO_INLINE_COLLECTION\""; + } else { + (" TODO: "+self.~rule+" : Not supported yet: "+self).log(1); + } + } + return tb; + +} + operation TDL!DataInstanceUse getTemplateBody(flat : Boolean) : TTCN!TemplateBody { var tb = new TTCN!TemplateBody(); tb.simple = new TTCN!SimpleSpec(); @@ -673,24 +789,15 @@ operation String getVerdictStatement() : TTCN!FunctionStatement { } operation TDL!DataUse getVerdictStatement() : TTCN!FunctionStatement { - var sfs = new TTCN!FunctionStatement(); - sfs.verdict = new TTCN!SetLocalVerdict(); - sfs.verdict.expression = new TTCN!Value(); + var verdictName = "pass"; //TODO: more reasonable default? //TODO: handle corresponding verdict properly if (self.isKindOf(TDL!DataInstanceUse)) { - sfs.verdict.expression.predef = new TTCN!PredefinedValue(); - if (self.dataInstance.name = "pass") { - sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#pass; - } else if (self.dataInstance.name = "fail") { - sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#fail; - } else if (self.dataInstance.name = "inconclusive") { - sfs.verdict.expression.predef.verdictType = TTCN!VerdictTypeValue#inconc; - } else { - //TODO - } + verdictName = self.dataInstance.name; + } else if (self.isKindOf(TDL!DataElementUse)) { //TODO: check that it is a dataInstance of type Verdict? + verdictName = self.dataElement.name; } else { //TODO - } - return sfs; + } + return verdictName.getVerdictStatement(); } diff --git a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/ttcn3mapping.etl b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/ttcn3mapping.etl index 3670f4fb..82743e50 100644 --- a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/ttcn3mapping.etl +++ b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3/ttcn3mapping.etl @@ -236,11 +236,17 @@ rule EnumDT2E t.structured.enumDef = e; e.list = new TTCN!EnumerationList(); - for (v in dt.value) { - var literal = new TTCN!Enumeration(); - literal.name = v.TTCNname(); - e.list.enums.add(literal); - } +} + +rule EnumInstance2E + transform di : TDL!SimpleDataInstance + to e : TTCN!Enumeration { + guard : not useDataMapping and di.eContainer.isKindOf(TDL!EnumDataType) + + e.name = di.TTCNname(); + + var ep = di.dataType.equivalent(); + ep.list.enums.add(e); } @@ -828,6 +834,8 @@ rule StructuredDI2TD di.~rule = self; + (di.name).log(1); + var md = new TTCN!ModuleDefinition(); md.def = td; var m = di.eContainer.equivalent(); @@ -862,11 +870,11 @@ rule StructuredDI2TD // or ma.memberSpec.isKindOf(TDL!AnyValueOrOmit))).log(1); tb.field = di.transformWildcardMemberAssignment(); } else { - ("Simple: "+di.name).log(1); + ("Structure -> Simple: "+di.name).log(1); tb.simple = new TTCN!SimpleSpec(); tb.simple.expr = di.transformMemberAssignment(); } - + } rule StructuredDI2C -- GitLab From 07fd6648dad6712bf4dbf81fe4186aef70d4d14c Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Tue, 24 Oct 2023 19:48:42 +0000 Subject: [PATCH 10/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 58b1520e..d7300c27 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -77,6 +77,7 @@ variables: - if: $CI_PIPELINE_SOURCE == "schedule" when: never - if: $CI_COMMIT_BRANCH == $CI_TARGET_BRANCH + - if: $CI_COMMIT_BRANCH == $DEV_CI_TARGET_BRANCH - if: $CI_PIPELINE_SOURCE == "web" when: always - if: $CI_COMMIT_TAG -- GitLab From 8c729fd6c9499ef7883ea91a9247d9d5a9d66637 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Wed, 25 Oct 2023 12:47:25 +0000 Subject: [PATCH 11/11] Update .gitlab-ci.yml file --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d7300c27..21e24de0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -32,7 +32,7 @@ variables: TTF_CI_TARGET_BRANCH: "ttf-034" DEV_CI_TARGET_BRANCH: "dev" MAIN_CI_TARGET_BRANCH: "master" - CI_TARGET_BRANCH: ${DEV_CI_TARGET_BRANCH} + CI_TARGET_BRANCH: ${TTF_CI_TARGET_BRANCH} SITE_LOCATION: "updatesite/org.etsi.mts.tdl.updatesite/target" ARCHIVE_NAME: "org.etsi.mts.tdl.updatesite-1.0.0-SNAPSHOT.zip" SITE_ARCHIVE: "${SITE_LOCATION}/${ARCHIVE_NAME}" @@ -43,7 +43,7 @@ variables: PACKAGE_NAME_MAIN: "TOP IDE Build" BETA_KEY: "beta" MAIN_KEY: "stable" - RELEASE_KEY: "stable" + RELEASE_KEY: "beta" RELEASE_PATH: "public/updatesite/${RELEASE_KEY}" RELEASE_PAGE: "https://top.etsi.org/ide/updatesite/${RELEASE_KEY}" STANDALONE_LOCATION: "plugins/org.etsi.mts.tdl.standalone/target" -- GitLab