From d0bce12653f6f46ca2f4a7d765933230005ff85c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martti=20K=C3=A4=C3=A4rik?= Date: Wed, 1 Nov 2023 13:05:10 +0200 Subject: [PATCH 01/13] Removed unused dependencies --- plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF b/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF index 84580e24..e0262054 100644 --- a/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF +++ b/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF @@ -14,7 +14,4 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.emf, org.eclipse.emf.ecore, org.etsi.mts.tdl.model, - junit-jupiter-api, - com.fasterxml.jackson.core.jackson-core, - com.fasterxml.jackson.core.jackson-databind, - com.fasterxml.jackson.core.jackson-annotations + junit-jupiter-api -- GitLab From ee674a551321580e7790cbaa2600437e5c3a9c9c Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 14:04:13 +0100 Subject: [PATCH 02/13] - cleanup imports --- .../to/docx/poi/ui/handlers/GenerationHandler.java | 2 -- .../org/etsi/mts/tdl/tools/to/docx/poi/Generator.java | 11 +---------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.tools.to.docx.poi.ui/src/org/etsi/mts/tdl/tools/to/docx/poi/ui/handlers/GenerationHandler.java b/plugins/org.etsi.mts.tdl.tools.to.docx.poi.ui/src/org/etsi/mts/tdl/tools/to/docx/poi/ui/handlers/GenerationHandler.java index c6443edb..f7cfb2d7 100644 --- a/plugins/org.etsi.mts.tdl.tools.to.docx.poi.ui/src/org/etsi/mts/tdl/tools/to/docx/poi/ui/handlers/GenerationHandler.java +++ b/plugins/org.etsi.mts.tdl.tools.to.docx.poi.ui/src/org/etsi/mts/tdl/tools/to/docx/poi/ui/handlers/GenerationHandler.java @@ -1,13 +1,11 @@ package org.etsi.mts.tdl.tools.to.docx.poi.ui.handlers; -import java.io.File; import java.util.Arrays; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; diff --git a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/src/org/etsi/mts/tdl/tools/to/docx/poi/Generator.java b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/src/org/etsi/mts/tdl/tools/to/docx/poi/Generator.java index 8462282e..9fbb4916 100644 --- a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/src/org/etsi/mts/tdl/tools/to/docx/poi/Generator.java +++ b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/src/org/etsi/mts/tdl/tools/to/docx/poi/Generator.java @@ -1,16 +1,10 @@ package org.etsi.mts.tdl.tools.to.docx.poi; -import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigInteger; import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.security.CodeSource; -import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -30,18 +24,15 @@ import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.apache.xmlbeans.XmlException; -import org.eclipse.core.runtime.Platform; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.xtext.EcoreUtil2; import org.eclipse.xtext.nodemodel.util.NodeModelUtils; -import org.etsi.mts.tdl.Annotation; import org.etsi.mts.tdl.Behaviour; import org.etsi.mts.tdl.Block; import org.etsi.mts.tdl.CompoundBehaviour; import org.etsi.mts.tdl.Package; -import org.etsi.mts.tdl.SingleCombinedBehaviour; import org.etsi.mts.tdl.TestConfiguration; import org.etsi.mts.tdl.TestDescription; import org.etsi.mts.tdl.resources.ResourceHandler; @@ -49,7 +40,6 @@ import org.etsi.mts.tdl.structuredobjectives.StructuredTestObjective; import org.etsi.mts.tdl.structuredobjectives.TestObjectiveVariant; import org.etsi.mts.tdl.structuredobjectives.VariantBinding; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTbl; -import org.osgi.framework.Bundle; public class Generator { @@ -151,6 +141,7 @@ public class Generator { titleRun.setText(p.getName()); } + //TODO: extract and reuse private List getContentsOfType(Resource resource, Class type) { List elements = resource.getContents() .stream() -- GitLab From 77d6560140c611934d1678a8f140853d57a5fdda Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 14:06:40 +0100 Subject: [PATCH 03/13] * switch to POI from orbit, update dependency versions, POM - remove unused dependencies --- org.etsi.mts.tdl.parent/pom.xml | 74 ++++++++++++++++++- org.etsi.mts.tdl.parent/top.target | 18 +++-- .../.classpath | 19 ----- .../META-INF/MANIFEST.MF | 26 ++----- .../build.properties | 19 ----- 5 files changed, 89 insertions(+), 67 deletions(-) diff --git a/org.etsi.mts.tdl.parent/pom.xml b/org.etsi.mts.tdl.parent/pom.xml index a7ef160e..bf9069c5 100644 --- a/org.etsi.mts.tdl.parent/pom.xml +++ b/org.etsi.mts.tdl.parent/pom.xml @@ -77,9 +77,10 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs 11 11 - 2.7.5 + 3.0.5 + 2.15.0 UTF-8 - 2.30.0 + 2.32.0 true 3.9.0 3.3.0 @@ -133,6 +134,19 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs true + + + org.eclipse.tycho + tycho-compiler-plugin + ${tycho-version} + + -err:-forbidden + false + + org.apache.maven.plugins @@ -175,6 +189,21 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs ${tycho-version} true + + + org.eclipse.tycho + tycho-p2-plugin + ${tycho-version} + + + attach-p2-metadata + package + + p2-metadata + + + + org.eclipse.tycho @@ -209,6 +238,23 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs x86_64 + + + + eclipse-plugin + org.eclipse.xtext.logging + 1.2.24 + + + + eclipse-feature + org.eclipse.rcp + 0.0.0 + + + @@ -289,4 +335,28 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs + + + macos + + + mac + + + + + -XstartOnFirstThread + + + + jdk9-or-newer + + [9,) + + + --add-modules=ALL-SYSTEM + + + + diff --git a/org.etsi.mts.tdl.parent/top.target b/org.etsi.mts.tdl.parent/top.target index be35dace..3d22dff9 100644 --- a/org.etsi.mts.tdl.parent/top.target +++ b/org.etsi.mts.tdl.parent/top.target @@ -12,15 +12,15 @@ - + - + - + @@ -40,6 +40,9 @@ + + + @@ -56,9 +59,12 @@ - - - + + + + + + \ No newline at end of file diff --git a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/.classpath b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/.classpath index 58c609fb..685a6999 100644 --- a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/.classpath +++ b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/.classpath @@ -7,24 +7,5 @@ - - - - - - - - - - - - - - - - - - - diff --git a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/META-INF/MANIFEST.MF b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/META-INF/MANIFEST.MF index db22fbf6..84a83b47 100644 --- a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/META-INF/MANIFEST.MF +++ b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/META-INF/MANIFEST.MF @@ -13,28 +13,12 @@ Require-Bundle: org.eclipse.core.runtime, org.etsi.mts.tdl.TPLan2, org.eclipse.emf.mwe.utils, org.eclipse.ocl.xtext.essentialocl, - org.etsi.mts.tdl.common + org.etsi.mts.tdl.common, + org.apache.poi, + org.apache.poi.ooxml, + org.apache.poi.ooxml.schemas, + org.apache.xmlbeans Bundle-RequiredExecutionEnvironment: JavaSE-11 Automatic-Module-Name: org.etsi.mts.tdl.tools.to.docx.poi Bundle-ActivationPolicy: lazy Export-Package: org.etsi.mts.tdl.tools.to.docx.poi -Bundle-ClassPath: lib/activation-1.1.1.jar, - lib/commons-codec-1.11.jar, - lib/commons-collections4-4.2.jar, - lib/commons-compress-1.18.jar, - lib/commons-logging-1.2.jar, - lib/commons-math3-3.6.1.jar, - lib/curvesapi-1.05.jar, - lib/jaxb-api-2.3.0.jar, - lib/jaxb-core-2.3.0.1.jar, - lib/jaxb-impl-2.3.0.1.jar, - lib/junit-4.12.jar, - lib/log4j-1.2.17.jar, - lib/poi-4.0.1.jar, - lib/poi-examples-4.0.1.jar, - lib/poi-excelant-4.0.1.jar, - lib/poi-ooxml-4.0.1.jar, - lib/poi-ooxml-schemas-4.0.1.jar, - lib/poi-scratchpad-4.0.1.jar, - lib/xmlbeans-3.0.2.jar, - . diff --git a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/build.properties b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/build.properties index 64438d01..96c0f377 100644 --- a/plugins/org.etsi.mts.tdl.tools.to.docx.poi/build.properties +++ b/plugins/org.etsi.mts.tdl.tools.to.docx.poi/build.properties @@ -2,24 +2,5 @@ source.. = src/ output.. = target/classes/ bin.includes = META-INF/,\ .,\ - lib/activation-1.1.1.jar,\ - lib/commons-codec-1.11.jar,\ - lib/commons-collections4-4.2.jar,\ - lib/commons-compress-1.18.jar,\ - lib/commons-logging-1.2.jar,\ - lib/commons-math3-3.6.1.jar,\ - lib/curvesapi-1.05.jar,\ - lib/jaxb-api-2.3.0.jar,\ - lib/jaxb-core-2.3.0.1.jar,\ - lib/jaxb-impl-2.3.0.1.jar,\ - lib/junit-4.12.jar,\ - lib/log4j-1.2.17.jar,\ - lib/poi-4.0.1.jar,\ - lib/poi-examples-4.0.1.jar,\ - lib/poi-excelant-4.0.1.jar,\ - lib/poi-ooxml-4.0.1.jar,\ - lib/poi-ooxml-schemas-4.0.1.jar,\ - lib/poi-scratchpad-4.0.1.jar,\ - lib/xmlbeans-3.0.2.jar,\ resource/ src.includes = resource/ -- GitLab From 308a65d9640bd1e54a59175835dd4c6a90e9eedc Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 14:06:58 +0100 Subject: [PATCH 04/13] * update CI image --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ca292082..8a507e3f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -90,7 +90,8 @@ variables: # for verifying and deploying images # Maven 3.8.x REQUIRES HTTPS repositories. # See https://maven.apache.org/docs/3.8.1/release-notes.html#how-to-fix-when-i-get-a-http-repository-blocked for more. -image: maven:3-openjdk-11 +image: maven:3.9.5-eclipse-temurin-17 + # Cache downloaded dependencies and plugins between builds. # To keep cache across branches add 'key: "$CI_JOB_NAME"' -- GitLab From a586012b9deac4de288de15469a7b9ceb394e7ba Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 14:09:48 +0100 Subject: [PATCH 05/13] * updated generated implementations after constraint updates --- .../src-gen/org/etsi/mts/tdl/Element.java | 2 +- .../src-gen/org/etsi/mts/tdl/impl/tdlPackageImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/Element.java b/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/Element.java index 4cd18a13..cb201dfe 100644 --- a/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/Element.java +++ b/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/Element.java @@ -88,7 +88,7 @@ public interface Element extends EObject * * * @model kind="operation" - * annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot body=' \n if (not self.container().oclIsUndefined()) then\n if (self.container().oclIsKindOf(TestDescription)) then\n self.container().oclAsType(TestDescription)\n else\n self.container().getParentTestDescription()\n endif\n else \n null\n endif'" + * annotation="http://www.eclipse.org/emf/2002/Ecore/OCL/Pivot body=' \n if (self.oclContainer().oclIsUndefined()) then\n null\n else \n if (self.container().oclIsKindOf(TestDescription)) then\n self.container().oclAsType(TestDescription)\n else\n self.container().getParentTestDescription()\n endif\n endif'" * @generated */ TestDescription getParentTestDescription(); diff --git a/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/impl/tdlPackageImpl.java b/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/impl/tdlPackageImpl.java index 8db1b70a..d445d66a 100644 --- a/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/impl/tdlPackageImpl.java +++ b/plugins/org.etsi.mts.tdl.model/src-gen/org/etsi/mts/tdl/impl/tdlPackageImpl.java @@ -5371,7 +5371,7 @@ public class tdlPackageImpl extends EPackageImpl implements tdlPackage source, new String[] { - "body", " \n if (not self.container().oclIsUndefined()) then\n if (self.container().oclIsKindOf(TestDescription)) then\n self.container().oclAsType(TestDescription)\n else\n self.container().getParentTestDescription()\n endif\n else \n null\n endif" + "body", " \n if (self.oclContainer().oclIsUndefined()) then\n null\n else \n if (self.container().oclIsKindOf(TestDescription)) then\n self.container().oclAsType(TestDescription)\n else\n self.container().getParentTestDescription()\n endif\n endif" }); addAnnotation (getPackageableElement__ConformsTo__String(), -- GitLab From ec8fdcc9af5b2a1d1724654be055842b0a017c66 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 14:12:33 +0100 Subject: [PATCH 06/13] + updated readme --- Readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Readme.md b/Readme.md index 50b2df44..44373af7 100644 --- a/Readme.md +++ b/Readme.md @@ -6,7 +6,7 @@ More info at [TDL website](https://tdl.etsi.org) ## Installing the plug-ins -The TDL tools are available as a set of Eclipse plug-ins. You need to first be able to run Eclipse. The [Eclipse Modeling Tools (2022-12)](https://www.eclipse.org/downloads/packages/release/2022-12/r/eclipse-modeling-tools) distribution contains most of the necessary prerequisites for the TDL tools. Newer versions should be compatible but have not been extensively tested yet. +The TDL tools are available as a set of Eclipse plug-ins. You need to first be able to run Eclipse. The [Eclipse Modeling Tools (2023-09)](https://www.eclipse.org/downloads/packages/release/2023-09/r/eclipse-modeling-tools) distribution contains most of the necessary prerequisites for the TDL tools. Newer versions should be compatible but have not been extensively tested yet. 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. @@ -83,10 +83,10 @@ The following steps are needed to setup a local development environment. * Download and install Eclipse Modeling Tools package * Install following additional components from Eclipse Marketplace * Sirius (v7) - * Eclipse Xtext (v2.29 or newer) + * Eclipse Xtext (v2.32 or newer) * Epsilon (v2.x) * Eclipse OCL (v6.x) - * Eclise Maven Integration m2e (v2.1.x) + * Eclipse Maven Integration m2e (v2.1.x) * Check out the repository * Import the plug-ins in the Eclipse workspace * Import -> Existing Projects into Workspace -- GitLab From ffe7018906d9aaa7fc18243a1ed3b6ebe8d996f4 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 14:13:39 +0100 Subject: [PATCH 07/13] - removed outdated wiki (moved to separate repo) --- wiki/images/Toolbar.PNG | Bin 37567 -> 0 bytes wiki/pages/1st-TDL-Open-Source-Meeting.md | 88 ---------------------- wiki/pages/Governance.md | 69 ----------------- wiki/pages/Home.md | 60 --------------- wiki/pages/How-to-contribute.md | 15 ---- wiki/pages/Installation.md | 24 ------ wiki/pages/Learn-about-TDL.md | 3 - wiki/pages/Legal-framework.md | 25 ------ wiki/pages/Usage.md | 44 ----------- 9 files changed, 328 deletions(-) delete mode 100644 wiki/images/Toolbar.PNG delete mode 100644 wiki/pages/1st-TDL-Open-Source-Meeting.md delete mode 100644 wiki/pages/Governance.md delete mode 100644 wiki/pages/Home.md delete mode 100644 wiki/pages/How-to-contribute.md delete mode 100644 wiki/pages/Installation.md delete mode 100644 wiki/pages/Learn-about-TDL.md delete mode 100644 wiki/pages/Legal-framework.md delete mode 100644 wiki/pages/Usage.md diff --git a/wiki/images/Toolbar.PNG b/wiki/images/Toolbar.PNG deleted file mode 100644 index e4b370e595834b7e51f121f634bd188c4ad107a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37567 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 HP6 - - - - - - -
- -**Discover the project** - -* [[Governance | Governance]] -* [[Legal framework]] -* [[Learn about TDL]] - - - -**Users** - -* [[Installation]] -* [[Usage]] - - - -**Developers** - -* [[How to contribute]] - -
- - - -## Meetings - -[[1st TDL Open Source Meeting]] - -## Software - -### TDL Open Source Implementation - -To accelerate the adoption of TDL, TC MTS has commissioned an open source implementation of TDL in order to lower the barrier to entry for both users and tool vendors in getting started with using TDL. The open source implementation comprises graphical and textual editors, validation facilities, as well as a UML profile for TDL to enable the application of TDL in UML-based working environments. It will be made available later in 2017 as an ETSI open source software project accessible from the TDL website and enabling contributions from the community. - -The open source implementation is based on the Eclipse XText toolset to provide a set of Java libraries and Eclipse plugins to support development of TDL specifications. - -### How to contribute - -Are you a test designer, a test developer or a tool vendor? Your contribution is most welcome! Active contributions to the TDL standardisation require an ETSI membership. Any interested company can find how to become an ETSI member here. - -The TOP source base is openly accessible. Its usage is governed by the Eclipse Public License (EPLv1). A source code contribution to TOP (merge request) requires adhering to EPLv1 and signing a Contributor Agreement between the developer and ETSI TC MTS beforehand. Find out more about TOP governance on the Governance wiki page. -Find out more information on how to contribute here. diff --git a/wiki/pages/How-to-contribute.md b/wiki/pages/How-to-contribute.md deleted file mode 100644 index d6fb1171..00000000 --- a/wiki/pages/How-to-contribute.md +++ /dev/null @@ -1,15 +0,0 @@ -## Are you a test designer, a test developer or a tool vendor? - -**Your contribution is most welcome!** - -Active contributions to the TDL standardisation require an ETSI membership. - -Any interested company can find how to become an ETSI member [here](http://www.etsi.org/membership/apply). - -## The TOP source base is openly accessible - -Its usage is governed by the Eclipse Public License (EPLv1). A source code contribution to TOP (merge request) requires adhering to EPLv1 and signing a Contributor Agreement between the developer and ETSI TC MTS beforehand. - -* Find out more about TOP governance on the [Governance wiki page](Governance). -* Find out more information on how to contribute here. -* Find out more information on how to set up a development environment in the [Readme](https://labs.etsi.org/rep/top/ide). diff --git a/wiki/pages/Installation.md b/wiki/pages/Installation.md deleted file mode 100644 index 75a74226..00000000 --- a/wiki/pages/Installation.md +++ /dev/null @@ -1,24 +0,0 @@ -The TDL tools are available as a set of Eclipse plug-ins. You need to first be able to run Eclipse. The [Eclipse Modeling Tools](https://www.eclipse.org/downloads/packages/release/2021-06/r/eclipse-modeling-tools) distribution contains most of the necessary prerequisites for the TDL tools. - -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: - - 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. - -To add the new repository to Eclipse, follow these steps: - -1. Open the menu item *Help* and select the item *Install new software* -1. Click *Add...* button to add a new repository -1. Insert the required information: - * Name: TOP Plugins - * Location: https://tdl.etsi.org/eclipse/latest/ -1. Click Ok. In the window, a new set of plugins called TDL should appear -1. Click on the checkbox to select all the plugins, then click *Next*. -1. Now follow the instructions to complete the installation - -After the installation Eclipse will need to be restarted. - -Next step: [Usage of the installed plugins.](Usage) diff --git a/wiki/pages/Learn-about-TDL.md b/wiki/pages/Learn-about-TDL.md deleted file mode 100644 index 39fc3cbd..00000000 --- a/wiki/pages/Learn-about-TDL.md +++ /dev/null @@ -1,3 +0,0 @@ -The Test Description Language (TDL) is a standardized testing technology developed and maintained by the [European Telecommunication Standards Institute](http://etsi.org) (ETSI) and specifically designed for high-level test specification. - -Find the introduction, materials and more at [tdl.etsi.org](http://tdl.etsi.org/). diff --git a/wiki/pages/Legal-framework.md b/wiki/pages/Legal-framework.md deleted file mode 100644 index e524e750..00000000 --- a/wiki/pages/Legal-framework.md +++ /dev/null @@ -1,25 +0,0 @@ - -## Intellectual Properties - -The content shared within the TOP project is covered by the [Eclipse Public License v1](https://www.eclipse.org/legal/epl-v10.html), as decided by ETSI TC MTS. - -## Contributor agreements - -### Corporate Contribution License Agreement -The Contributor License Agreements (CLA) define terms and conditions for any contribution to the TOP project. - -Contributions in name of a company (which should be a member of ETSI TC MTS) are covered by the Corporate CLA. This document is to be signed once by the company and covers the contribution from any employee. - -[Download the CCLA here](https://tdl.etsi.org/files/CCLA_TC-MTS_29-May-2017.pdf) - -### Individual Contributor License Agreement - -Covers people contributing in their own name, employees are still allowed to register both under corporate and as individuals. - -[Download the ICLA here](https://tdl.etsi.org/files/ICLA_TC-MTS_29-May-2017.pdf) - -### How to submit the Agreement - -CCLA should be filled in and sent to this email address. - -ICLA is to be accepted during the registration phase for individual accounts. diff --git a/wiki/pages/Usage.md b/wiki/pages/Usage.md deleted file mode 100644 index 3bf30a45..00000000 --- a/wiki/pages/Usage.md +++ /dev/null @@ -1,44 +0,0 @@ -# TDL editor plugin - -To create a new TDL model by means of the TDLan2 textual representation, follow these steps: - -- right click on a project or a folder in the package explorer and select New -> File, -- type the filename ending with **.tdlan2** -- the corresponding editor shall be automatically opened. - -# TDL-TO editor plugin - -To create a new TDL model by means of the TPlan2 textual representation for structured test objectives, follow this steps: - -- right click on a project or a folder in the package explorer and select New -> File, -- type the filename ending with **.tplan2** , -- the corresponding editor shall be automatically opened. - -# Convert the text into XF Format - -- To translate a TDL model from the TDLan2 textual representation to the XF format (or the other way around), open the source model and press the "T" icon on the toolbar. The resulting model shall be stored in the same folder as the source model with the type of the model (**.tdlan2** or **.tdl**) appended to the name of the source model. - -# Export TDL Test Objectives as Word tables - -## Install the plugin - -Make sure that the TDL Word export plugin is installed. Find here [how to install the plugins](Installation). After the plugin is installed, you will be asked to restart the Eclipse environment. - -After Eclipse restarts, you should be able to see a `W` button in the toolbar below the main menu. - -![Toolbar.PNG](https://labs.etsi.org/rep/top/ide/-/raw/master/wiki/images/Toolbar.PNG) - -## Use the export button! - -1. Open a **tplan2** document in Eclipse like this - -[![Tdlan example.PNG](https://tdl.etsi.org/wiki/images/8/8a/Tdlan_example.PNG)](https://tdl.etsi.org/wiki/index.php/File:Tdlan_example.PNG) - -1. Click on the `W` button in the toolbar and wait for a few seconds. It may happen that the Eclipse window is not responsive to clicks during the export execution, it does not mean that it is an error. - -1. When the processing is done, the newly created Word document will be in the same folder of the tplan file and should appear in the Project explorer -2. If the file is not shown, select the project, right click and select *Refresh* (or hit F5 on the keyboard) - -The result will look like: - -[![Word.PNG](https://tdl.etsi.org/wiki/images/8/8b/Word.PNG)](https://tdl.etsi.org/wiki/index.php/File:Word.PNG) \ No newline at end of file -- GitLab From c3734dc11533f390382f1d1e4797f79b2728107a Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 16:18:40 +0100 Subject: [PATCH 08/13] - switch to external openapi wrapper component --- features/org.etsi.mts.tdl.converters.feature/feature.xml | 7 +------ org.etsi.mts.tdl.parent/pom.xml | 1 - .../META-INF/MANIFEST.MF | 2 +- .../org.etsi.mts.tdl.openapi2tdl.next/META-INF/MANIFEST.MF | 2 +- updatesite/org.etsi.mts.tdl.updatesite/category.xml | 1 + 5 files changed, 4 insertions(+), 9 deletions(-) diff --git a/features/org.etsi.mts.tdl.converters.feature/feature.xml b/features/org.etsi.mts.tdl.converters.feature/feature.xml index a967bf73..4a6703c6 100644 --- a/features/org.etsi.mts.tdl.converters.feature/feature.xml +++ b/features/org.etsi.mts.tdl.converters.feature/feature.xml @@ -323,6 +323,7 @@ any resulting litigation. + - - diff --git a/org.etsi.mts.tdl.parent/pom.xml b/org.etsi.mts.tdl.parent/pom.xml index bf9069c5..aa2787de 100644 --- a/org.etsi.mts.tdl.parent/pom.xml +++ b/org.etsi.mts.tdl.parent/pom.xml @@ -30,7 +30,6 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xs ../plugins/org.etsi.mts.tdl.tools.to.docx.poi ../plugins/org.etsi.mts.tdl.tools.to.docx.poi.ui - ../plugins/org.etsi.mts.tdl.openapi.generator.wrapper ../plugins/org.etsi.mts.tdl.openapi.generator.ui ../plugins/org.etsi.mts.tdl.openapi2tdl.next ../plugins/org.etsi.mts.tdl.json2tdl diff --git a/plugins/org.etsi.mts.tdl.openapi.generator.ui/META-INF/MANIFEST.MF b/plugins/org.etsi.mts.tdl.openapi.generator.ui/META-INF/MANIFEST.MF index 38138a20..1917c926 100644 --- a/plugins/org.etsi.mts.tdl.openapi.generator.ui/META-INF/MANIFEST.MF +++ b/plugins/org.etsi.mts.tdl.openapi.generator.ui/META-INF/MANIFEST.MF @@ -10,6 +10,6 @@ Require-Bundle: org.eclipse.ui, org.eclipse.ui.editors;bundle-version="3.5.0", org.eclipse.ui.ide;bundle-version="3.5.0", org.eclipse.ui.workbench, - org.etsi.mts.tdl.openapi.generator.wrapper + org.etsi.mts.tdl.extras.openapi.generator.wrapper Bundle-ActivationPolicy: lazy Import-Package: org.eclipse.emf.common.util diff --git a/plugins/org.etsi.mts.tdl.openapi2tdl.next/META-INF/MANIFEST.MF b/plugins/org.etsi.mts.tdl.openapi2tdl.next/META-INF/MANIFEST.MF index e196d606..08da303b 100644 --- a/plugins/org.etsi.mts.tdl.openapi2tdl.next/META-INF/MANIFEST.MF +++ b/plugins/org.etsi.mts.tdl.openapi2tdl.next/META-INF/MANIFEST.MF @@ -7,7 +7,7 @@ Bundle-Vendor: European Telecommunications Standards Institute (ETSI) Automatic-Module-Name: org.etsi.mts.tdl.openapi2tdl.next Require-Bundle: org.etsi.mts.tdl.model, org.etsi.mts.tdl.common, - org.etsi.mts.tdl.openapi.generator.wrapper, + org.etsi.mts.tdl.extras.openapi.generator.wrapper, org.etsi.mts.tdl.helper, org.eclipse.ui;resolution:=optional, org.eclipse.core.resources;resolution:=optional, diff --git a/updatesite/org.etsi.mts.tdl.updatesite/category.xml b/updatesite/org.etsi.mts.tdl.updatesite/category.xml index 01199215..56a013c5 100644 --- a/updatesite/org.etsi.mts.tdl.updatesite/category.xml +++ b/updatesite/org.etsi.mts.tdl.updatesite/category.xml @@ -36,4 +36,5 @@ + -- GitLab From 625bff775695bea5b7dea5b19c41f18ecfd9d148 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 17:35:45 +0100 Subject: [PATCH 09/13] + updated http library to fix issues with openapi import --- .../org.etsi.mts.tdl.tx.ui/templates/HTTP.tdltx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.tx.ui/templates/HTTP.tdltx b/plugins/org.etsi.mts.tdl.tx.ui/templates/HTTP.tdltx index cc499b53..b1a4f2f0 100644 --- a/plugins/org.etsi.mts.tdl.tx.ui/templates/HTTP.tdltx +++ b/plugins/org.etsi.mts.tdl.tx.ui/templates/HTTP.tdltx @@ -17,13 +17,14 @@ Package HTTP { Package MessageBased { Import all from Standard - //Generic Method type - Type Method - Method mGET - Method mPOST - Method mPUT - Method mPATCH - Method mDELETE + //Generic Method type -> required for generation!!! + Enumerated Method { + Method GET, + Method POST, + Method PUT, + Method PATCH, + Method DELETE + } //Generic Request type Structure Request ( -- GitLab From 9ffa04342b04736565692c5a67da6039365ad3e6 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 17:46:16 +0100 Subject: [PATCH 10/13] * workarounds and safety checks for openapi import --- .../src/org/etsi/mts/tdl/helper/TDLHelper.java | 1 + .../openapi2tdl/next/OpenAPI2TDLTranslatorNext.java | 4 ++-- .../tdl/wizards/importWizards/ImportWizardPage.java | 12 ++++++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.helper/src/org/etsi/mts/tdl/helper/TDLHelper.java b/plugins/org.etsi.mts.tdl.helper/src/org/etsi/mts/tdl/helper/TDLHelper.java index 3a8a9d6c..5bc4994f 100644 --- a/plugins/org.etsi.mts.tdl.helper/src/org/etsi/mts/tdl/helper/TDLHelper.java +++ b/plugins/org.etsi.mts.tdl.helper/src/org/etsi/mts/tdl/helper/TDLHelper.java @@ -204,6 +204,7 @@ public class TDLHelper { modelFile = ws.getFile(new Path(resourceUri.toPlatformString(true))); } else if (resourceUri.isFile()) { // TODO + modelFile = ws.getFile(new Path(resourceUri.toFileString())); // String uriString = resourceUri.toFileString(); // java.net.URI uri = new java.net.URI(uriString); // IFile[] files = ws.findFilesForLocationURI(uri); diff --git a/plugins/org.etsi.mts.tdl.openapi2tdl.next/src/org/etsi/mts/tdl/openapi2tdl/next/OpenAPI2TDLTranslatorNext.java b/plugins/org.etsi.mts.tdl.openapi2tdl.next/src/org/etsi/mts/tdl/openapi2tdl/next/OpenAPI2TDLTranslatorNext.java index 42f73fd5..c67bbf76 100644 --- a/plugins/org.etsi.mts.tdl.openapi2tdl.next/src/org/etsi/mts/tdl/openapi2tdl/next/OpenAPI2TDLTranslatorNext.java +++ b/plugins/org.etsi.mts.tdl.openapi2tdl.next/src/org/etsi/mts/tdl/openapi2tdl/next/OpenAPI2TDLTranslatorNext.java @@ -144,7 +144,7 @@ public class OpenAPI2TDLTranslatorNext extends AbstractTranslator { boolean generateJavaMappings = true; if (preferences != null) generateJavaMappings = preferences.getBoolean(PropertyPage.GENERATE_JAVA_MAPPING, false); - if (generateJavaMappings) { + if (generateJavaMappings && theTdlPackage!=null) { mappingsPackage = tdlFactory.eINSTANCE.createPackage(); mappingsPackage.setName("JavaMapping"); getGeneratedPackage().getNestedPackage().add(mappingsPackage); @@ -270,7 +270,7 @@ public class OpenAPI2TDLTranslatorNext extends AbstractTranslator { } } - if (generateJavaMappings) + if (generateJavaMappings && mappingsPackage!=null) addMappings(filename, mappingsPackage, drmTarget, javaPackage); ensureUniqueNames(getGeneratedPackage()); diff --git a/plugins/org.etsi.mts.tdl.wizards/src/org/etsi/mts/tdl/wizards/importWizards/ImportWizardPage.java b/plugins/org.etsi.mts.tdl.wizards/src/org/etsi/mts/tdl/wizards/importWizards/ImportWizardPage.java index 2cf154fa..cb4c3d56 100644 --- a/plugins/org.etsi.mts.tdl.wizards/src/org/etsi/mts/tdl/wizards/importWizards/ImportWizardPage.java +++ b/plugins/org.etsi.mts.tdl.wizards/src/org/etsi/mts/tdl/wizards/importWizards/ImportWizardPage.java @@ -6,6 +6,9 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRoot; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; @@ -71,7 +74,7 @@ public class ImportWizardPage extends WizardNewFileCreationPage { editor = new FileFieldEditor("fileSelect","Select Data File: ",fileSelectionArea); //NON-NLS-1 //NON-NLS-2 editor.getTextControl(fileSelectionArea).addModifyListener(e -> { setSourcePath(new Path(ImportWizardPage.this.editor.getStringValue())); - if (!getSourcePath().lastSegment().equals("null")) { + if (getSourcePath().lastSegment()!=null && !getSourcePath().lastSegment().equals("null")) { preferences.put(lastUsed, getSourcePath().toOSString()); setFileName(getSourcePath().lastSegment()+".tdltx"); //TODO: generalise } @@ -127,8 +130,13 @@ public class ImportWizardPage extends WizardNewFileCreationPage { if (editor.getStringValue().endsWith(".yaml")) { //YAML System.out.println("From OpenAPI YAML..."); +// IWorkspace workspace = ResourcesPlugin.getWorkspace(); +// IWorkspaceRoot root = workspace.getRoot(); +// IPath location = root.getLocation(); String content = ConverterNext.processToString(editor.getStringValue(), - editor.getStringValue()+".tdltx", +// editor.getStringValue()+".tdltx", +// location.append(getContainerFullPath()).append(getFileName()).toOSString(), + getContainerFullPath().append(getFileName()).toOSString(), "SOURCE_MAPPING", "TARGET_MAPPING", inline -- GitLab From 56edbacc8d8b07f05a9ba9759e2542b6e087f951 Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 17:48:37 +0100 Subject: [PATCH 11/13] * ci adjustments --- .gitlab-ci.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8a507e3f..6a932146 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -237,16 +237,15 @@ pages: artifacts: true script: # Get the previous GitLab Pages content (otherwise other beta/stable branch gets removed..) - # - rm -rf /var/lib/apt/lists/* - # - apt update - # - apt-cache gencaches - # - apt install -y zip unzip - # - zip --help + - rm -rf /var/lib/apt/lists/* + - apt update + - apt-cache gencaches + - apt install -y zip unzip + - zip --help # - set +e # - curl --fail "$CI_PAGES_URL/content.zip" -o "content.zip" # - if [ -e "content.zip" ]; then unzip "content.zip"; rm "content.zip"; fi # - set -e - # - ls -la $RELEASE_PATH # Cleanup content? -> remove content in release path? # Add/update content - echo $CI_PAGES_URL -- GitLab From 7362d80620a99243c0a3b951af742f547340fbfe Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 18:46:21 +0100 Subject: [PATCH 12/13] - removed duplicate dependency definition --- plugins/org.etsi.mts.tdl.execution.java/pom.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/plugins/org.etsi.mts.tdl.execution.java/pom.xml b/plugins/org.etsi.mts.tdl.execution.java/pom.xml index dc5f353c..8ec52ddd 100644 --- a/plugins/org.etsi.mts.tdl.execution.java/pom.xml +++ b/plugins/org.etsi.mts.tdl.execution.java/pom.xml @@ -57,11 +57,6 @@ junit-jupiter-api 5.9.2 - - com.fasterxml.jackson.core - jackson-databind - 2.14.1 - org.assertj assertj-core -- GitLab From 7550e482e77b7024e00b47c87944ec4c1a31291f Mon Sep 17 00:00:00 2001 From: Philip Makedonski Date: Thu, 2 Nov 2023 19:02:26 +0100 Subject: [PATCH 13/13] - rollback dependency removals (make CI fail for some reason, builds fine locally) --- org.etsi.mts.tdl.parent/top.target | 3 +++ .../org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/org.etsi.mts.tdl.parent/top.target b/org.etsi.mts.tdl.parent/top.target index 3d22dff9..8e9b747c 100644 --- a/org.etsi.mts.tdl.parent/top.target +++ b/org.etsi.mts.tdl.parent/top.target @@ -61,6 +61,9 @@ + + + diff --git a/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF b/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF index e0262054..726531d0 100644 --- a/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF +++ b/plugins/org.etsi.mts.tdl.execution.java/META-INF/MANIFEST.MF @@ -14,4 +14,8 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.emf, org.eclipse.emf.ecore, org.etsi.mts.tdl.model, - junit-jupiter-api + junit-jupiter-api, + com.fasterxml.jackson.core.jackson-core, + com.fasterxml.jackson.core.jackson-databind, + com.fasterxml.jackson.core.jackson-annotations + -- GitLab