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 zcmV)uK$gFWP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGmbN~PnbOGLGA9w%&l2l1VK~#8N?Y(z& z9mk#L3;p}fzB9Auz4IpQ#PxW0cD%C_c4x*(wq<)P$x2qTB{?T$S;-P9QGq$<8~_l3 z$RrYx0TKYg1TX+30to^H!JH(K3RJd#@Av&xRd;pYz84n+z@Vu*=W}j{>gww1?y65$ z_w7#k`mGO8MnNTY4PKz0qZh}X!9-l3?gVrlNler-@xb;Di-`5b@|J~~*2%-21JUeH z$eW78vFwXOM?ZKYDcbuC=RNiwO3a=^=X`q4(Qa@sinGEln*)kA;f$gumex4zG<2U9 zc6gjpbVaj0iq3eP6t;!gf0DKeCoZ3TNfNWHS+@dtiG=fS6WFdq+iuTG$mxXa2-AJW zW2cS1FPYY!vq27=^Jp{hF{L=~u}fnQCySjrc8V{R#&gWFjaH}`Y!#y@uooeb@W|zULmt*Q~uG3MsM`G3gQSHO1fOd%6 zr7$U*+fP$r^B|>F_tToHzPPL&4Jw1gtVgCF@>o^TE3DjTI7lmo0C5DptO98TS(yYY zz(&xUkmZK*gFZaItQ;JqWo14~OAiQ3BIywp3*EH1M6sw?vjKF`LW>2O`RhTaFt3Pz z8T<-`oiw*_zc8m@pT}&F-$AqTVwsr>+G$2kJ5A5o>$7ezO%?Xg)GV-@rZAH;4ZCQP zO@`w2wTjn3TAT1{TC2w^hE!%vD@|ClQ+QeP(&`<;c(7_ajbFKq#(@=z7o%9djefhl z#b;T3o?qHR&n?|T&)O_DGz-rx0!{RE42=PPvv6~Orxs#b1Pe4g{PaRjN6_;mEo&WE zzhQ~Wmm23`jBB2g?a*MmmTk2_c`$)#8lDbh{*Y{?7ldsdnEt}@?exNmATO@m;j?O| zFitamb*u2wnl|C()Lp^^khWWRC4Ge{`+Yirx-wG3bn`@Ejn5y@+Y3=q3qJYMDX zm~|&4eJ|(JzX$gGg4lNjZ%(SY;TARpu{%6+W^1G7fyK;J64J zPZstu7m0U#`gq5%oJR`(xQ~NAKN7Nl&oPgP`HV`>8jp8wF?QYq+r)K(T?Ws`oL^hz z+)}7A^x!hJ&zDGWzF76wxRu*g9jEI#)Oq7qZWUfywN0~~US6%3ux5v5C)cCEuU}tF z=Q>yL>*7fnySa`w?4ikApHC6?(v<9Wnkt~K=U>e{Wa6+=QfS37X#R+ROo=;*WGh6v2kI#!1 zFN9@=D!f!V#GcyBRuYlN+MxFI@Y)?D>1^-WDN&}1s61SS&W*nc;|~bhs=4V zWkn;xg8B`0-D<_lTpt?zdeVrBkrdRmyM>7vduSrd$)wD^EGUL{5fnuSi-}^Iuup)H zgqe}MpXpTO#WHg^Lgf$9vY9sEF(g%siHsx%n(H7PCQKhakN#(gVXH!?rzx#bt(wiw^`Qj3+P*dSL>vxJ+8xDohNM z?(@3lwX_|4GAdq4-R`p{1fS3oR&Ntt4#Ow@%Ul7xWTCEL7*kmY5S$ho$1?EZ@-30P zuq?#VW)>b0F)tZpT|TyGd3j_YW!|`V#ic=I7QkG6Y1y;qndu?0j6r(1SU9AYOT>dE z#1k1`T!O=X!)Y2-(*UE_;3fR(hFN+VlI~s6WctHVq7uWfg@xgD1_UJmN?2mWBp%q_ zmxk(H0lKV|xP&Cduo47i#h|2x_sR0@v2tQ#HN4=mrNwISJ#>%CaC%n)q7o@08cSHB z=7pz4%8KMEEGw3wxmpjpyY(v&w|2ol4l5uNmr2kXl4zA%Mz7D z*bRFc%L&9JT>}xxs2!k;x&g{$vg#T0%VZ0OdH68T@2AXKMMg~@i_0OVm&Kx&g`<~J zD-UYaxX&Su!|_>mGO(;h(yBwc$&(Qe*$y8iSz55-V8qNri#jgcxNG*JX@i9vYK zd!#{ck}o&tWr}7w#m>AT*2Cce2bdcCSp)evf&;lbZcB7h-_6XCnchfYM7{k;|uuDMiOprDfoK~L^ht~5 zH3MIjyqd}aWMJ9xV7Ylk*vbvP&&#VUFmAA?55WW$3mcin>+&$-r3vJZ1#}@yn@@l?1&j zwy;<-VI&070uc#_NfOv;B}2mA7TwEYgS^{v5oa)k zjbPKD(~1D2L_iP#uC!P(HsaEHm>8I(+img}EW-08e!GDsuO-?CfRH*%O2XN3ok_Cz|QmyO=hbo~2>QnWmW< z!4wvsDVaMHGI{MzmY`w4f;1_8M*>V7D{d%_$r(N>ADmAXvneu;JS*&NnU=LH0A$dE zWpH|Un#D9`D$fUy!^s)w^=eZB!y@x4=hMi`%gjqGFL<5^mFbJ9P|+x2m@8Rz#i$xd zx$@VIscCSf$3Qp8rol!-t|UeMil|t!0*pLF3CKkJazz|9Z%8aL85+)uk(UTjL7t6l z`9w*J>S2k7%Oyfo;)3$E#3T{sirzGoXf$nMu^ZxOxUrUoTQ%f%!|oCB{E9~+QL#Y} zizOd1h@`|3m56i#(-=EXK~YJ*S0zeRVuZxTl(|JvR21VF(~D_%i6zzWGK&hBz{kl1 zEh?%<1;dEI7sqN0%pagEfWH%gUTKvFDBS$pVxVeo{-la&x&&kHxcz-p8u zu^RCJORR@+wFCrM#8RMd2PMSn74gxs5l3Vsjx8l74QpD=Egvl_VNpR3lD%EFs6
  • 5G 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%0DKHB1blqqlOv0YaQx#OQs)jH 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 diff --git a/wiki/pages/1st-TDL-Open-Source-Meeting.md b/wiki/pages/1st-TDL-Open-Source-Meeting.md deleted file mode 100644 index 4bb2a012..00000000 --- a/wiki/pages/1st-TDL-Open-Source-Meeting.md +++ /dev/null @@ -1,88 +0,0 @@ -## Agenda - -| | Topic | Speaker | Materials | -| :---: | :---------------------------------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: | -| 14:00 | Welcoming | Andreas Urlich, TDL Steering Group | | -| 14:15 | Introduction/Tutorial to TDL | Philip Makedonski, TDL Open Source Leadership | [Slides](https://tdl.etsi.org/uploads/TDL_Workshop_2018_PM.pdf) | -| 14:45 | Presentation of TOP and current available tools | Martti Kaarik, TDL Open Source Leadership | | -| 15:15 | BREAK | | | -| 15:30 | Current usage inside/outside ETSI | | | -| 15:35 | Usage of TDL in MTS TST | Axel Rennoch, MTS-TST WG Chairman | [Slides](https://tdl.etsi.org/uploads/TDL4TST_AR.pdf) | -| 15:45 | Usage of TDL in ETSI CTI projects | Sebastian Mueller, ETSI Center for Testing and Interoperability | [Slides](https://tdl.etsi.org/uploads/UPDATE_TDL_TO_USAGE_SM.ppt) | -| 16:00 | Needs for the community for future development | | | -| 16:45 | Wrap up/Next steps | | | - -## Notes - -1. Welcoming from Andreas Ulrich - -1. Round table of presentations - - In the room: Philip, Martti, Dirk, Axel, André, Sascha, Yens, Alexander Kaiser, Sebastian, Alex, Michele - - Remote: Finn, Bostjan, Andreas, Gary, Eric, Jan -2. Overview on TDL and Latest from standardization (Philip) -3. Q&A - - Jan: Open Source project, is there a grammar available? - - Philip: The implementation is based on Xtext, it is published in the repository. Also there is a BNF grammar in the Annex of the Metamodel Standards - - Martti: The Xtext grammar is for the informative textual grammar but what is normatively specified is the Meta Model -4. TOP Tooling (Martti) - - Installation information are available at https://labs.etsi.org/rep/top/ide -5. Q&A - - Andreas: We do have full implementation of the language and is available to everyone via the links pasted in the chat and -6. Discussion on applications of TDL: - - The results from the Survey on TDL were presented - - Andreas: is there a need for participants on UML integration? - - No comments provided - -### Open discussion on TDL and TOP - -#### Discussion on TDL language - -- Andreas: Reported experiences focus on TDL-TO. Have you - TDL-TO users- tried other approaches? How does it relate? - - Axel: I used Tplan in the past. Feels quite similar. - - Jens: In our application domain we did not have an internal testing framework for SW. -- Philip: Quite a lot of interest in TDL-TO but not much interest in TDL. Could you elaborate on why is that so? TDL too big? Too foreign? TDL-TO more familiar? - - Axel: Coming from INT work, the methodology is composed by TPs and TTCN3 code. TP languages seem lightweight and are complementary to TTCN3. - - Sebastian:We do see the use of TDL as somehow overlapping with TTCN3. We could not see advantages of TDL over TTNC3. ETSI CTI will keep evaluating TDL and maybe Interoperaility Testing could be a valuable application. - - Andreas: I think there are abstract TDL features which are handy, we may need to focus more on the translation features of TDL to TTCN3 -- Philip: The implementation of tools translating from TDL to TTCN3 is still in the pipe and we do not have detailed plans at the moment. The level and quality of expertise required is not easy to meet. -- Andreas: Looking back at the results from the Survey, there seems to be the need to provide translation to more than just TTCN3, therefore some flexibility in the mapping may be needed. -- Philip: The intention of the TDL to TTCN3 was to show the way on the possibility to translate into executable languages. May be the case to extend documentation (e.g. on the wiki) on the goal and methodology to enable third parties to develop their own translators. -- Andreas: Important to support the community and the request for the users. -- Philip: The users are invited to share their experiences/materials on the wiki. -- Michele: My proposal Use the bugzilla as much as possible so that to keep any feedback -- Andres: Better documentation should be provided on the wiki/website -- Dirk: Maybe a Forum can be easier and enable search engines to track information (as it is done in TTCN3) - -- Reported issues: - - Group element could not be used - - defining constants (#14) - - issue11 - Configuration connection cannot be resolved - - issue10 - Group does not work (references to the domain elements not found) - - issue12 - NOT keyword required - - issue13 - WORD conversion - - issue14 - how to define a constant? entity keyword not required containing semi colons; use meaningful tabulation Test Config : make the gate /PDU declaration optional mix of upper and lower case. why? - -#### Discussion on TDL language - -- Reported issues: - - no distinction among literals/content and package definition references (event, entity, pics) - - Possible way to include comments into word export (e.g. under final condition) - - Configuration connection not resolver (#11) - - Group does not work (#10) - - NOT keyword (#12) - - (#13) - - entity keyword not required - - Q: containing semi colons ; use meaningful tabulation - - A: needs to be further evaluated - - test config: make the gate / PDU declaration optional - - mix of upper and lower case. why? - -- Michele: Important to lower the barrier for developers and allow the possiblity to host/link other tools/projects. Is there anybody interested in developing TDL tools? -- Philip: As said before, the level of expertise required is a difficulty to onboard contributors -- Andreas: Better documentation on the website could help. -- Andreas: What are the expectations/intentions from newcomers? (participants who are not TDL users). - -#### Providing more documentation - -- Advertise a link to the TP created in MTS TST should be referenced on TDL website -- TDL team is asked to provide examples as well \ No newline at end of file diff --git a/wiki/pages/Governance.md b/wiki/pages/Governance.md deleted file mode 100644 index 95f5be43..00000000 --- a/wiki/pages/Governance.md +++ /dev/null @@ -1,69 +0,0 @@ -The TOP project has been created to grow a community around TDL the test description language. The language is specified by ETSI Methods for Testing and Specification committe (TC MTS) as an independent, extensible testing language. - -You can find more information about ETSI (European Telecommunication Standards Institute) at [www.etsi.org](http://www.etsi.org/) and the information and work program of TC MTS [here](https://portal.etsi.org/tb.aspx?tbid=97&SubTB=97). - -The governing rules are decided within TC MTS itself. - -## TOP Governing groups - -### Project lead (PL) - -This is a small group of people from from TC MTS and ETSI CTI that deals with: - -* Providing project timeline and roadmap, -* Ensuring IP compliance of code base, -* Deciding on TOP roles assignement. - -### Steering Group (SG) - -TOP Steering Group is formed by the people in the TDL Steering Group. Its tasks: - -* To coordinate TOP's technical activities -* To provide guidelines for future development -* To resolve conflicts at technical level -* To guarantee neutrality from contributors - -### Advisory group (AG) - -The Advisory Group for TOP is ETSI TC MTS itself. Decisions regarding TOP are taken at MTS meetings, held usually every 3 months. The advisory groups goals are: -* To set the policies of the project -* To make administrative decisions -* To coordinate marketing efforts - -Find out [how to participate in TC MTS](mailto:membership@etsi.org). - -## Roles - -### User - -* Browse and download code base. -* Join the mailing list or forum, access to wiki - -### Contributor - -Same as user plus: -* Create a new issue / bug report -* Provide bug fixes as code patches -* Create new feature requests -* Provide code and tests for new features -* Contribute to the TOP wiki - -Anybody is welcome to contribute code and ideas to the TOP project. - -Find out [how to contribute](How-to-contribute). - -### Committer - -Same as contributor plus: -* Consolidate code changes -* Ensure software quality and validate bug fixes -* Manage new versions and branches - -## Access Rights - -The following rules are used to assign access rights to the TOP Group and Projects on the ETSI Labs Gitlab server, for both members of Testing Task Forces assigned to develop the project, and to volunteers who have signed the Contributors License Agreement: - -- TTF Leader and MTS Chair get Maintainer level rights to the whole TDL Open Source group, for as long as they are in these roles. -- Individuals or representatives of an organisation which has signed a Contributor License Agreement get Developer level access to the TOP IDE group. -- Members of a current TTF get Developer access at TDL Open Source group level. They also get assigned Developer access to their specific TTF project. This level of access can be upgraded to Maintainer (for the TTF or for the group) if required - TTF leader to decide. -- Members of a closed TTF retain their Developer access to that TTF project but lose it for all other groups, unless they've signed the CLA or are on another active TTF. diff --git a/wiki/pages/Home.md b/wiki/pages/Home.md deleted file mode 100644 index 1088d35d..00000000 --- a/wiki/pages/Home.md +++ /dev/null @@ -1,60 +0,0 @@ -# Welcome to TOP - TDL Open source Project! - -The TDL Open Source Project (TOP) fosters the shared development and testing of contributed tools to manage TDL files, generate documentation and code. - -The project is an initiative of ETSI TC MTS – the ETSI committee that standardizes methods for testing and specification. - -[Subscribe here](https://tdl.etsi.org/index.php/contact) to the TDL public mailing list to keep in touch with TDL community, receive news and find support on the TDL public mailing list. - -## Quick links - - - - - - - - -
    - -**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