diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index d8ff0c1d2c0..ac0e61f1cc4 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -25,6 +25,7 @@ on:
- none
- regular
- all
+ - cli.gen
- tos.bd
- tos.di
- tos.dq
@@ -55,6 +56,7 @@ jobs:
inputs.builtProducts == 'none' && 'no-tos-products' ||
inputs.builtProducts == 'regular' && 'default' ||
inputs.builtProducts == 'all' && 'all-tos-products' ||
+ inputs.builtProducts == 'cli.gen' && 'cli.generator.product' ||
inputs.builtProducts == 'tos.bd' && 'tos.bd.product' ||
inputs.builtProducts == 'tos.di' && 'tos.di.product' ||
inputs.builtProducts == 'tos.dq' && 'tos.dq.product' ||
diff --git a/studio-se-master/build/pom.xml b/studio-se-master/build/pom.xml
index e5d468d5c9e..acfa2472f90 100644
--- a/studio-se-master/build/pom.xml
+++ b/studio-se-master/build/pom.xml
@@ -41,6 +41,7 @@
true
+ talaxie.cli.generator.product
talend.studio.tos.bd.product
talend.studio.tos.di.product
talend.studio.tos.dq.product
@@ -56,6 +57,7 @@
+ talaxie.cli.generator.product
talend.studio.tos.bd.product
talend.studio.tos.di.product
talend.studio.tos.dq.product
@@ -95,6 +97,18 @@
+
+ cli.generator.product
+
+
+ cli.gen
+ true
+
+
+
+ talaxie.cli.generator.product
+
+
tos.bd.product
diff --git a/studio-se-master/build/talaxie.cli.generator.product/config.ini b/studio-se-master/build/talaxie.cli.generator.product/config.ini
new file mode 100644
index 00000000000..0e9d65bc1aa
--- /dev/null
+++ b/studio-se-master/build/talaxie.cli.generator.product/config.ini
@@ -0,0 +1,16 @@
+#Product Runtime Configuration File
+
+osgi.splashPath=platform:/base/plugins/${product.branding.platform}/
+talend.studio.version=${version.full}
+eclipse.product=${product.branding.id}
+#The following osgi.framework key is required for the p2 update feature not to override the osgi.bundles values.
+osgi.framework=file\:plugins/org.eclipse.osgi_3.18.400.v20230509-2241.jar
+osgi.bundles=org.eclipse.equinox.simpleconfigurator@1\:start,org.eclipse.compare.win32@4,org.eclipse.core.filesystem.linux.x86_64@4,org.eclipse.core.filesystem.macosx@4,org.eclipse.core.filesystem.win32.x86_64@4,org.eclipse.core.net.linux.x86_64@4,org.eclipse.core.net.win32.x86_64@4,org.eclipse.core.resources.win32.x86_64@4,org.eclipse.e4.ui.swt.gtk@4,org.eclipse.e4.ui.workbench.renderers.swt.cocoa@4,org.eclipse.equinox.launcher.cocoa.macosx.x86_64@4,org.eclipse.equinox.launcher.gtk.linux.x86_64@4,org.eclipse.equinox.launcher.win32.win32.x86_64@4,org.eclipse.equinox.security.linux.x86_64@4,org.eclipse.equinox.security.macosx@4,org.eclipse.equinox.security.win32.x86_64@4,org.eclipse.jdt.launching.macosx@4,org.eclipse.jdt.launching.ui.macosx@4,org.eclipse.swt.cocoa.macosx.x86_64@4,org.eclipse.swt.gtk.linux.x86_64@4,org.eclipse.swt.win32.win32.x86_64@4,org.eclipse.ui.cocoa@4,org.eclipse.ui.win32@4,org.eclipse.swt.gtk.linux.aarch64@4,org.eclipse.core.filesystem.linux.aarch64@4,org.eclipse.equinox.launcher.cocoa.macosx.aarch64@4,org.eclipse.equinox.launcher.gtk.linux.aarch64@4,org.eclipse.swt.cocoa.macosx.aarch64@4
+org.eclipse.equinox.simpleconfigurator.configUrl=file\:org.eclipse.equinox.simpleconfigurator/bundles.info
+osgi.bundles.defaultStartLevel=4
+osgi.bundlefile.limit=200
+osgi.framework.extensions=org.talend.osgi.lib.loader,org.eclipse.osgi.compatibility.state
+file.encoding=UTF-8
+eclipse.p2.data.area=@config.dir/../p2/
+eclipse.p2.profile=profile
+default.update.site.url=https://update.talend.com/Studio/tos/
\ No newline at end of file
diff --git a/studio-se-master/build/talaxie.cli.generator.product/pom.xml b/studio-se-master/build/talaxie.cli.generator.product/pom.xml
new file mode 100644
index 00000000000..c58eee5b9a5
--- /dev/null
+++ b/studio-se-master/build/talaxie.cli.generator.product/pom.xml
@@ -0,0 +1,17 @@
+
+
+ 4.0.0
+
+ org.talend.studio
+ tos-products-parent-pom
+ 8.9.0-SNAPSHOT
+ ../talend.studio.tos.product.parent.pom
+
+
+ org.talaxie.cli.generator.product
+ eclipse-repository
+
+ ../../../tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/target/classes/product.properties
+
+
+
diff --git a/studio-se-master/build/talaxie.cli.generator.product/talaxie.product b/studio-se-master/build/talaxie.cli.generator.product/talaxie.product
new file mode 100644
index 00000000000..5d39ac19b04
--- /dev/null
+++ b/studio-se-master/build/talaxie.cli.generator.product/talaxie.product
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+ -console -consoleLog
+
+ -Xms512m
+-Xmx1536m
+-Dfile.encoding=UTF-8
+-Dorg.eclipse.swt.graphics.Resource.reportNonDisposed=false
+-Dswt.autoScale.updateOnRuntime=false
+-Dosgihelper.version=8.8.8-SNAPSHOT
+-Dosgi.requiredJavaVersion=21
+-XX:+UseG1GC
+-XX:+UseStringDeduplication
+-XX:MaxMetaspaceSize=512m
+--add-opens=java.base/java.lang=ALL-UNNAMED
+--add-opens=java.base/java.util=ALL-UNNAMED
+--add-opens=java.base/java.io=ALL-UNNAMED
+--add-opens=java.base/java.util.stream=ALL-UNNAMED
+--add-opens=java.base/java.util.regex=ALL-UNNAMED
+--add-opens=java.base/java.lang.invoke=ALL-UNNAMED
+--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
+--add-opens=java.base/java.net=ALL-UNNAMED
+--add-opens=java.base/java.nio=ALL-UNNAMED
+--add-opens=java.base/java.util.concurrent=ALL-UNNAMED
+--add-opens=java.base/sun.nio.ch=ALL-UNNAMED
+--add-opens=java.base/sun.nio.cs=ALL-UNNAMED
+--add-opens=java.base/sun.security.action=ALL-UNNAMED
+--add-opens=java.base/sun.security.pkcs=ALL-UNNAMED
+--add-opens=java.base/sun.security.x509=ALL-UNNAMED
+--add-opens=java.base/sun.util.calendar=ALL-UNNAMED
+--add-opens=java.security.jgss/sun.security.krb5=ALL-UNNAMED
+--add-modules=ALL-SYSTEM
+
+ -Xdock:icon=../Resources/talend.icns
+-XstartOnFirstThread
+-Dorg.eclipse.swt.internal.carbon.smallFonts
+-Dosgi.instance.area.default=../../../workspace
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/studio-se-master/build/target-platform/target-platform.target b/studio-se-master/build/target-platform/target-platform.target
index 6bd1da95903..a93ee73bf8b 100644
--- a/studio-se-master/build/target-platform/target-platform.target
+++ b/studio-se-master/build/target-platform/target-platform.target
@@ -1,7 +1,7 @@
-
+
@@ -87,6 +87,7 @@
+
diff --git a/studio-se-master/build/target-platform/target-platform.tpd b/studio-se-master/build/target-platform/target-platform.tpd
index e298ee83fd0..687cc06ef86 100644
--- a/studio-se-master/build/target-platform/target-platform.tpd
+++ b/studio-se-master/build/target-platform/target-platform.tpd
@@ -97,6 +97,7 @@ location "https://download.eclipse.org/nattable/releases/2.2.0/repository/" {
// Orbit repository for 2025-12
location "https://download.eclipse.org/tools/orbit/simrel/orbit-aggregation/2025-12/" {
org.apache.commons.commons-logging
+ org.apache.commons.logging
// org.apache.commons.commons-beanutils
// org.apache.commons.collections
// org.apache.xalan
diff --git a/tcommon-studio-se/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/AggregatorPomsHelper.java b/tcommon-studio-se/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/AggregatorPomsHelper.java
index d118a1230fc..309c905ebef 100644
--- a/tcommon-studio-se/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/AggregatorPomsHelper.java
+++ b/tcommon-studio-se/main/plugins/org.talend.designer.maven/src/main/java/org/talend/designer/maven/tools/AggregatorPomsHelper.java
@@ -654,7 +654,20 @@ public void syncAllPomsWithoutProgress(IProgressMonitor monitor) throws Exceptio
public void syncAllPomsWithoutProgress(IProgressMonitor monitor, String pomFilter, boolean withDependencies)
throws Exception {
- LOGGER.info("syncAllPomsWithoutProgress, pomFilter: " + pomFilter);
+ syncAllPomsWithoutProgress(monitor, pomFilter, withDependencies, true);
+ }
+
+ /**
+ * Write all poms (root + code + job) without forking Maven (no installRootPom, no code-project
+ * build); the downstream Maven reactor compiles instead.
+ */
+ public void syncAllPomsNoBuild(IProgressMonitor monitor) throws Exception {
+ syncAllPomsWithoutProgress(monitor, PomIdsHelper.getPomFilter(), false, false);
+ }
+
+ public void syncAllPomsWithoutProgress(IProgressMonitor monitor, String pomFilter, boolean withDependencies,
+ boolean fork) throws Exception {
+ LOGGER.info("syncAllPomsWithoutProgress, pomFilter: " + pomFilter + ", fork: " + fork);
IRunProcessService runProcessService = IRunProcessService.get();
if (runProcessService == null) {
return;
@@ -719,7 +732,9 @@ public void syncAllPomsWithoutProgress(IProgressMonitor monitor, String pomFilte
}
createRootPom(model, true, monitor);
- installRootPom(true);
+ if (fork) {
+ installRootPom(true);
+ }
monitor.worked(1);
if (monitor.isCanceled()) {
return;
@@ -729,8 +744,10 @@ public void syncAllPomsWithoutProgress(IProgressMonitor monitor, String pomFilte
monitor.subTask("Synchronize code poms"); //$NON-NLS-1$
System.setProperty("ignore.ci.mode", isCIMode.toString());
- updateCodeProjects(monitor, true);
- CodesJarM2CacheManager.updateCodesJarProject(monitor, true, true, true);
+ if (fork) {
+ updateCodeProjects(monitor, true);
+ CodesJarM2CacheManager.updateCodesJarProject(monitor, true, true, true);
+ }
System.setProperty("ignore.ci.mode", Boolean.FALSE.toString());
monitor.worked(1);
@@ -763,7 +780,9 @@ public void syncAllPomsWithoutProgress(IProgressMonitor monitor, String pomFilte
collectCodeModules(modules);
model.getModules().addAll(modules);
createRootPom(model, true, monitor);
- installRootPom(true);
+ if (fork) {
+ installRootPom(true);
+ }
}
monitor.worked(1);
if (monitor.isCanceled()) {
diff --git a/tdi-studio-se/main/features/org.talend.designer.feature/feature.xml b/tdi-studio-se/main/features/org.talend.designer.feature/feature.xml
index 3d1e591d490..881fc44082b 100644
--- a/tdi-studio-se/main/features/org.talend.designer.feature/feature.xml
+++ b/tdi-studio-se/main/features/org.talend.designer.feature/feature.xml
@@ -1,36 +1,86 @@
+
+
+
+ Complete description about this feature at http://www.talend.com/online/featuresdescription.html#designer-feature
+
+
+
+ Copyright Talaxie 2006, 2007
+
+
+
+ The licence are describe in branding feature
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Complete description about this feature at http://www.talend.com/online/featuresdescription.html#designer-feature
- Copyright Talaxie 2006, 2007
- The licence are describe in branding feature
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/tdi-studio-se/main/features/org.talend.generator.feature/.checkstyle b/tdi-studio-se/main/features/org.talend.generator.feature/.checkstyle
new file mode 100644
index 00000000000..ad7bc1dc010
--- /dev/null
+++ b/tdi-studio-se/main/features/org.talend.generator.feature/.checkstyle
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/features/org.talend.generator.feature/.project b/tdi-studio-se/main/features/org.talend.generator.feature/.project
new file mode 100644
index 00000000000..46dedd40675
--- /dev/null
+++ b/tdi-studio-se/main/features/org.talend.generator.feature/.project
@@ -0,0 +1,23 @@
+
+
+ org.talend.generator.feature
+
+
+
+
+
+ org.eclipse.pde.FeatureBuilder
+
+
+
+
+ com.atlassw.tools.eclipse.checkstyle.CheckstyleBuilder
+
+
+
+
+
+ org.eclipse.pde.FeatureNature
+ com.atlassw.tools.eclipse.checkstyle.CheckstyleNature
+
+
diff --git a/tdi-studio-se/main/features/org.talend.generator.feature/build.properties b/tdi-studio-se/main/features/org.talend.generator.feature/build.properties
new file mode 100644
index 00000000000..64f93a9f0b7
--- /dev/null
+++ b/tdi-studio-se/main/features/org.talend.generator.feature/build.properties
@@ -0,0 +1 @@
+bin.includes = feature.xml
diff --git a/tdi-studio-se/main/features/org.talend.generator.feature/feature.xml b/tdi-studio-se/main/features/org.talend.generator.feature/feature.xml
new file mode 100644
index 00000000000..e5b1c3c124e
--- /dev/null
+++ b/tdi-studio-se/main/features/org.talend.generator.feature/feature.xml
@@ -0,0 +1,100 @@
+
+
+
+
+ Complete description about this feature at http://www.talend.com/online/featuresdescription.html#designer-feature
+
+
+
+ Copyright Talaxie 2006, 2007
+
+
+
+ The licence are describe in branding feature
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/features/org.talend.generator.feature/pom.xml b/tdi-studio-se/main/features/org.talend.generator.feature/pom.xml
new file mode 100644
index 00000000000..f3f19254250
--- /dev/null
+++ b/tdi-studio-se/main/features/org.talend.generator.feature/pom.xml
@@ -0,0 +1,12 @@
+
+
+ 4.0.0
+
+ org.talend.studio
+ tdi-studio-se
+ 8.9.0-SNAPSHOT
+ ../../../
+
+ org.talend.generator.feature
+ eclipse-feature
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/.classpath b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/.classpath
new file mode 100644
index 00000000000..e19a4455c71
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/.classpath
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/.project b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/.project
new file mode 100644
index 00000000000..914954236af
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/.project
@@ -0,0 +1,28 @@
+
+
+ org.talaxie.cli.branding.generator
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/META-INF/MANIFEST.MF b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..1c0292d7c90
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/META-INF/MANIFEST.MF
@@ -0,0 +1,18 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: CLI Generator branding plug-in
+Bundle-SymbolicName: org.talaxie.cli.branding.generator;singleton:=true
+Bundle-Version: 8.9.0.qualifier
+Bundle-Activator: org.talaxie.cli.branding.generator.Activator
+Bundle-Vendor: .Talaxie.
+Bundle-Localization: plugin
+Require-Bundle: org.eclipse.core.runtime,
+ org.talend.core.runtime,
+ org.talend.commons.runtime,
+ org.talend.designer.core,
+ org.talend.designer.core.generator,
+ org.talend.core;bundle-version="[8.9.0,9.0.0)",
+ org.eclipse.jface
+Eclipse-LazyStart: true
+Eclipse-BundleShape: dir
+Automatic-Module-Name: org.talend.rcp.branding.tos
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/META-INF/eclipse.inf b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/META-INF/eclipse.inf
new file mode 100644
index 00000000000..32d8ee1f6ed
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/META-INF/eclipse.inf
@@ -0,0 +1 @@
+jarprocessor.exclude.children=true
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/about.ini b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/about.ini
new file mode 100644
index 00000000000..e6757ee1d9c
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/about.ini
@@ -0,0 +1,27 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%blurb
+
+# Property "windowImage" contains path to window icon (16x16)
+# needed for primary features only
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=icons/appli_32x32.gif
+
+# Property "aboutImage" contains path to product image (500x330 or 115x164)
+# needed for primary features only
+
+# Property "appName" contains name of the application (not translated)
+# needed for primary features only
+
+# Property "welcomePerspective" contains the id of the perspective in which the
+# welcome page is to be opened.
+# optional
+
+# Property "tipsAndTricksHref" contains the Help topic href to a tips and tricks page
+# optional
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/about.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/about.properties
new file mode 100644
index 00000000000..6916b9c7537
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/about.properties
@@ -0,0 +1,12 @@
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+blurb=Talaxie Open Studio\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\Visit http://www.talend.com
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/build.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/build.properties
new file mode 100644
index 00000000000..d59b4036fd2
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/build.properties
@@ -0,0 +1,14 @@
+source.. = src/main/java/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ splash.bmp,\
+ plugin_customization.ini,\
+ plugin.xml,\
+ plugin.properties,\
+ introContent.xml,\
+ content/,\
+ about.properties,\
+ about.ini,\
+ resources/,\
+ icons/
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/.eclipseproduct b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/.eclipseproduct
new file mode 100644
index 00000000000..a8be0025d7e
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/.eclipseproduct
@@ -0,0 +1,3 @@
+name=${product.name}
+id=${product.branding.id}
+version=${version.full}
\ No newline at end of file
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/about.mappings b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/about.mappings
new file mode 100644
index 00000000000..12839c73851
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/about.mappings
@@ -0,0 +1,4 @@
+0=${buildQualifier}
+1=${unqualifiedVersion}
+2=${product.name}
+3=${product.website}
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/product.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/product.properties
new file mode 100644
index 00000000000..9b96053cc63
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/filtered-resources/product.properties
@@ -0,0 +1,8 @@
+launcher.prefix=${launcher.prefix}
+storage.prefix=${storage.prefix}
+product.name=${product.name}
+product.branding.platform=${product.branding.platform}
+product.branding.id=${product.branding.id}
+mac.launcher.info=${mac.launcher.info}
+product.website=${product.website}
+storage.dir=${storage.dir}
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_16x16.gif b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_16x16.gif
new file mode 100644
index 00000000000..748acba3565
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_16x16.gif differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_16x16.png b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_16x16.png
new file mode 100644
index 00000000000..7ed85b0a836
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_16x16.png differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_24x24.png b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_24x24.png
new file mode 100644
index 00000000000..49e66bd63b3
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_24x24.png differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_32x32.gif b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_32x32.gif
new file mode 100644
index 00000000000..83915cf5ee9
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_32x32.gif differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_32x32.png b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_32x32.png
new file mode 100644
index 00000000000..e8ce7ee2f0d
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_32x32.png differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.gif b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.gif
new file mode 100644
index 00000000000..cdc125aa2ee
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.gif differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.icns b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.icns
new file mode 100644
index 00000000000..0c0593f94d7
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.icns differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.png b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.png
new file mode 100644
index 00000000000..7fdaca277ae
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.png differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.xpm b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.xpm
new file mode 100644
index 00000000000..ff68ae0ff6c
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/appli_48x48.xpm
@@ -0,0 +1,248 @@
+/* XPM */
+static char *_8a2ba20d6174335f5bf1b00bb8f489eLR5cGIhHh4Yb4Loh[] = {
+/* columns rows colors chars-per-pixel */
+"48 48 194 2 ",
+" c None",
+". c #1D1917",
+"X c #211D1E",
+"o c #2B1F24",
+"O c #1E2A2D",
+"+ c #1A2E31",
+"@ c #1E2F32",
+"# c #212321",
+"$ c #262321",
+"% c #242223",
+"& c #272523",
+"* c #232527",
+"= c #262424",
+"- c #272424",
+"; c #272524",
+": c #262525",
+"> c #262627",
+", c #272627",
+"< c #282725",
+"1 c #272827",
+"2 c #22272A",
+"3 c #272728",
+"4 c #21272D",
+"5 c #282529",
+"6 c #23282A",
+"7 c #252829",
+"8 c #262828",
+"9 c #272829",
+"0 c #25292B",
+"q c #26282A",
+"w c #26292A",
+"e c #27292B",
+"r c #23292D",
+"t c #232A2D",
+"y c #232B2D",
+"u c #23292E",
+"i c #232A2E",
+"p c #25292C",
+"a c #26282C",
+"s c #252B2C",
+"d c #242A2D",
+"f c #272B2C",
+"g c #262A2D",
+"h c #262B2D",
+"j c #242A2E",
+"k c #252A2E",
+"l c #252B2E",
+"z c #252A2F",
+"x c #242B2F",
+"c c #252B2F",
+"v c #262A2E",
+"b c #272A2E",
+"n c #262B2E",
+"m c #272B2E",
+"M c #262B2F",
+"N c #272B2F",
+"B c #212C2F",
+"V c #222D2E",
+"C c #232C2F",
+"Z c #252C2F",
+"A c #262C2F",
+"S c #272C2F",
+"D c #282929",
+"F c #2B2A29",
+"G c #282A2A",
+"H c #2A2C2F",
+"J c #262B30",
+"K c #252C30",
+"L c #242D31",
+"P c #252D31",
+"I c #262C30",
+"U c #272C30",
+"Y c #262D30",
+"T c #272D30",
+"R c #262C31",
+"E c #272C31",
+"W c #262D31",
+"Q c #272D31",
+"! c #272E31",
+"~ c #252C32",
+"^ c #272D32",
+"/ c #242E32",
+"( c #252F32",
+") c #252F33",
+"_ c #262E32",
+"` c #272E32",
+"' c #282C30",
+"] c #282D30",
+"[ c #292D30",
+"{ c #282D31",
+"} c #282D33",
+"| c #282E32",
+" . c #263133",
+".. c #243034",
+"X. c #243136",
+"o. c #2A3033",
+"O. c #179DF4",
+"+. c #179EF5",
+"@. c #169EF6",
+"#. c #1B9CF3",
+"$. c #199EF3",
+"%. c #199FF3",
+"&. c #1A9EF3",
+"*. c #1A9FF3",
+"=. c #1A9DF4",
+"-. c #199EF5",
+";. c #1A9EF4",
+":. c #1A9FF4",
+">. c #1A9CF6",
+",. c #16A1F6",
+"<. c #17A1F6",
+"1. c #17A0F7",
+"2. c #16A2F6",
+"3. c #17A6F4",
+"4. c #17A7F5",
+"5. c #17A4F6",
+"6. c #17A6F6",
+"7. c #19A0F3",
+"8. c #19A1F3",
+"9. c #1AA0F3",
+"0. c #1AA1F3",
+"q. c #1BA1F3",
+"w. c #19A2F3",
+"e. c #18A0F4",
+"r. c #19A0F4",
+"t. c #18A1F4",
+"y. c #19A1F4",
+"u. c #19A1F5",
+"i. c #1AA0F4",
+"p. c #1AA1F4",
+"a. c #1BA1F4",
+"s. c #1AA0F5",
+"d. c #1AA1F5",
+"f. c #18A2F4",
+"g. c #19A2F4",
+"h. c #18A3F4",
+"j. c #19A3F4",
+"k. c #19A2F5",
+"l. c #18A3F5",
+"z. c #1AA2F4",
+"x. c #1AA3F5",
+"c. c #1BA3F5",
+"v. c #19A0F6",
+"b. c #18A1F7",
+"n. c #1BA1F6",
+"m. c #18A2F6",
+"M. c #19A2F6",
+"N. c #18A3F6",
+"B. c #19A3F6",
+"V. c #19A3F7",
+"C. c #1AA2F6",
+"Z. c #1BA2F6",
+"A. c #18A4F4",
+"S. c #18A5F4",
+"D. c #18A4F5",
+"F. c #19A4F5",
+"G. c #18A6F5",
+"H. c #19A4F6",
+"J. c #19A6F6",
+"K. c #17AAF6",
+"L. c #13ADF7",
+"P. c #15ACF6",
+"I. c #16ADF6",
+"U. c #17A3F9",
+"Y. c #13A5F8",
+"T. c #17A4F9",
+"R. c #17A6FA",
+"E. c #19A2F8",
+"W. c #18A3F8",
+"Q. c #19A3F8",
+"!. c #19A3F9",
+"~. c #19A3FA",
+"^. c #19A4F8",
+"/. c #1AA7F9",
+"(. c #18A4FA",
+"). c #19A4FA",
+"_. c #19A5FA",
+"`. c #18A4FC",
+"'. c #18A6FD",
+"]. c #18A5FF",
+"[. c #18A6FE",
+"{. c #19A7FE",
+"}. c #18A6FF",
+"|. c #17ADFA",
+" X c #17AFFB",
+".X c #17A9FF",
+"XX c #16ADFF",
+"oX c #18A8FA",
+"OX c #18A8FF",
+"+X c #18A9FF",
+"@X c #18AAFF",
+"#X c #16B0F7",
+"$X c #15B7FB",
+"%X c #12C4FF",
+/* pixels */
+" ; 8 m ",
+" & 8 R m ",
+" u.u.u.u.u.u.u.u.u.OXOX # m R m ",
+" u.u.u.u.u.u.u.u.u.u.u.u.u.u._..X ; R R m ",
+" u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.!.XX m R R ",
+" G.u.u.u.u.u.u.u.u.u.u.u.8.u.u.u.u.u.u.u.u.u.}. m R R ",
+" u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.!. ] R R R ",
+" u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u. m R R R ",
+" u.u.u.u.u.u.u.u.u.u.u. u.u.u.u.u.u.u.u.u.u.u.u. m R R m ",
+" 8.u.u.u.u.u.u.u. u.u.u.u.u.u.u.u.u.!. . R R ] + ",
+" $.u.u.u.u.u.u. u.u.u.u.u.u.u.-.|. H R R m ",
+" K.u.u.u.u.u.G. u.u.u.u.u.u.u.8. m R R .. ",
+" u.u.u.u.u.6. u.u.u.u.u.u.u._. 8 R R m ",
+" G.u.u.u.u.,. R m R R R R R R 8.u.u.u.u.u.8. R R R R ",
+" O.u.u.u.u.u. Z R R R R R R R R R R R 8.u.u.u.u.u.|. m R R R ",
+" u.u.u.u.u. R R R R R R R R R R R R R R m P.u.u.u.u.u.u. R R R ] ",
+" u.u.u.$.#X .R R R R R R 8 8 Z R R R R u.u.u.u.u.u. R R R R ",
+" u.u.u.u.u. ] R R R R 8 m R R R u.u.u.u.u.u.}. Z R R R ",
+" u.u.u.u.6. ] R R R R OX}. R R R 4 u.u.u.u.u.R. m R R R ",
+" u.u.u.u. ] R R R R !.u.u.u.u. ] R R u.u.u.u.u.u. R R R J ",
+" u.u.u.u. R R R R R u.u.u. R R u.u.u.u.u.u. R R R m ",
+"u.u.u.u.u. R R R R R u.$.L. R R u u.u.u.u.u.,. R R R R ",
+"u.u.u.u.6. R R R R * _.u.u. R R 8 u.u.u.u.u. R R R R ",
+"u.u.u.u.O. R R R R R u.u. m R G ,.u.u.u.u. R R R R ",
+",.8.u.u. R R R R m u.u. R R u.u.u.u.u. R R R R ",
+"u.u.u.u. R R R R R u.u. m R 6 u.u.u.u.u. R R R R ",
+"u.u.u.u. R R R R R u.u. ] R U.u.u.u.u. ] R R R R ",
+"u.u.u.u. R R R R R u.u. R R R X u.u.u.u.u. u R R R R ",
+" u.u.u.u. R R R R R u.u.u. Z R R R m u.u.u.u.u. R R R R ",
+" u.u.u.G. R R R R R V u.u.O. $ u.u.u.u.-.-. R R R R ",
+" u.u.u.u. R R R R R R u.8.u.u. oX8.u.u.u.-.P. R R R R V ",
+" u.u.u.u. R R R R R R 6.u.u.u.u.u. _.u.u.u.u.u.u.-. R R R R u ",
+" u.u.u.R. m R R R R R u u.u.u.u.u.u.u.u.u.u.u.u.u.u.u.u. m R R R m ",
+" u.u.u.G. 5 R R R R R R u.u.u.u.u.u.u.u.u.u.u.u. 2 R R R R @ ",
+" u.u.u.u. R R R R R R R u.u.u.u.u.u.u.u. R R R R R ] ",
+" u.u.u.u. ; R R R R R R J V R R R R R O ",
+" Y.8.u.8. Z R R R R R R ] m R R R R R R ",
+" 8.u.u.-. o R R R R R R R R u m R R R R R R ",
+" u.u.$.$X $ R R R R R R R R m R R R R R R R m o. ",
+" u.u.$.%X G R R R R R R R R R R m R R m R R R R R R R R V ",
+" u.u.u.-. m R R R R R R R R R R R R R R R R R R R R R R R R R R .. ",
+" G.u.u.u. ; R R R R R R R R R R R R R R R R R R R R R R R R ",
+" u.u.u. < m R R R R R R R R R R R R R R R R R R R R m ",
+" u.u.u.XX 3 m R R R R R R Z R R R R R R R R R R u ",
+" u.u._. G 1 m R R R R R R R R R R R R m m ",
+" 8.u.u.}. ; ; 8 Z R R R R R R R ",
+" u.u.}.}. ",
+" G.!.OX "
+};
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/designer.icns b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/designer.icns
new file mode 100644
index 00000000000..12f9e978644
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/designer.icns differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/designer.ico b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/designer.ico
new file mode 100644
index 00000000000..756c5457b31
Binary files /dev/null and b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/icons/designer.ico differ
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/introContent.xml b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/introContent.xml
new file mode 100644
index 00000000000..c5dff2d66e7
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/introContent.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin.properties
new file mode 100644
index 00000000000..bcbb965408a
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin.properties
@@ -0,0 +1,3 @@
+productBlurb = {2}\n\nVersion: {1}\nBuild id: {0}\n\n\n(c) Copyright 2026 Talaxie Inc. All rights reserved.\nVisit {3}
+productName=Talaxie CLI Generator
+Integration=Integration
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin.xml b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin.xml
new file mode 100644
index 00000000000..a41ce08b1f4
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_customization.ini b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_customization.ini
new file mode 100644
index 00000000000..e644bf6b84e
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_customization.ini
@@ -0,0 +1,4 @@
+org.eclipse.ui/SHOW_PROGRESS_ON_STARTUP = false
+org.eclipse.ui/KEY_CONFIGURATION_ID=org.talend.core.scheme
+org.eclipse.m2e.core/eclipse.m2.offline=true
+org.eclipse.equinox.p2.ui.sdk.scheduler/enabled=false
\ No newline at end of file
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_fr.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_fr.properties
new file mode 100644
index 00000000000..4150f47d0f2
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_fr.properties
@@ -0,0 +1,3 @@
+productBlurb = {2}\n\nVersion\u00A0: {1}\nID du build\u00A0: {0}\n\n\n(c) Copyright 2026 Talaxie SA. Tous droits r\u00E9serv\u00E9s.\nConsultez {3}
+productName=Talaxie CLI Generator
+Integration=Int\u00E9gration
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_ja.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_ja.properties
new file mode 100644
index 00000000000..3120b7d4e04
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_ja.properties
@@ -0,0 +1,3 @@
+productBlurb = {2}\n\n\u30D0\u30FC\u30B8\u30E7\u30F3: {1}\n\u30D3\u30EB\u30C9ID: {0}\n\n\n(c) Copyright 2026 Talaxie Inc. All rights reserved.\n\u30A2\u30AF\u30BB\u30B9\u5148: {3}
+productName=Talaxie CLI Generator
+Integration=\u30A4\u30F3\u30C6\u30B0\u30EC\u30FC\u30B7\u30E7\u30F3
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_zh_CN.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_zh_CN.properties
new file mode 100644
index 00000000000..30824cd0c25
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/plugin_zh_CN.properties
@@ -0,0 +1,3 @@
+productBlurb = {2}\n\n\u7248\u672C: {1}\n\u5185\u90E8\u7248\u672C\u53F7: {0}\n\n\n(c) Copyright 2026 Talaxie Inc. \u4FDD\u7559\u6240\u6709\u6743\u5229\u3002\n\u8BBF\u95EE {3}
+productName=Talaxie CLI Generator
+Integration=\u96C6\u6210
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/pom.xml b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/pom.xml
new file mode 100644
index 00000000000..5d5f5bd79fe
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/pom.xml
@@ -0,0 +1,79 @@
+
+
+ 4.0.0
+
+ org.talend.studio
+ tdi-studio-se
+ 8.9.0-SNAPSHOT
+ ../../../
+
+ org.talaxie.cli.branding.generator
+ eclipse-plugin
+
+
+
+ TOS_CLI_GEN
+ ${launcher.prefix}
+ cli_gen
+ Talaxie CLI Code Generator
+ ${project.artifactId}
+ ${project.artifactId}.product
+ ${product.name} for Mac OS X, Copyright Talaxie. 2026. All rights reserved.
+ http://www.deilink.fr\n
+
+
+
+
+
+ filtered-resources
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+
+
+ default-deploy
+ deploy
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+
+
+ attach-license-artifact
+ package
+
+ attach-artifact
+
+
+
+
+ ./resources/license.txt
+ txt
+ license
+
+
+ ./resources/NOTICE.txt
+ txt
+ notice
+
+
+ ${project.build.outputDirectory}/.eclipseproduct
+ txt
+ eclipseproduct
+
+
+
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/resources/NOTICE.txt b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/resources/NOTICE.txt
new file mode 100644
index 00000000000..ce35fc57d27
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/resources/NOTICE.txt
@@ -0,0 +1,586 @@
+Talaxie Open Studio for Data Integration
+Copyright (c) 2006-2021 Talaxie Inc. - www.deilink.fr
+All rights reserved.
+
+
+This program and the accompanying materials are made available
+under the terms of the Apache License, Version 2.0
+
+
+This product includes software developed at
+Talaxie Inc. (http://www.deilink.fr).
+
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org).
+Licensed under the Apache License Version 2.0.
+
+
+This product includes software developed at
+The Eclipse Foundation (http://www.eclipse.org).
+Licensed under the Eclipse Public License - v1.0
+
+
+This product includes software developed at
+ASM Helper Minidev.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+AWS SDK Java (https://github.com/aws/aws-sdk-java).
+Licensed under Apache-2.0
+(C) 2016, Amazon Web Services
+
+This product includes software developed at
+Amazon Aws Libraries.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Amazon SDK for Java (https://aws.amazon.com/sdkforjava).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Amazon-S3 (https://github.com/aws/aws-sdk-java/blob/master/LICENSE.txt).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+AtInject (https://code.google.com/p/atinject/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Avro MapReduce.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Box Java SDK (V2) (https://github.com/box/box-java-sdk-v2/blob/master/LICENSE).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+CSV Tools.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Castor.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Ehcache.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Ezmorph.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Google APIs Client Library for Java.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Google Gson (https://code.google.com/p/google-gson/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Groovy.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Guava (https://github.com/google/guava).
+Licensed under Apache-2.0
+Copyright (C) 2010 The Guava Authors
+
+This product includes software developed at
+Guava (https://github.com/google/guava/blob/master/COPYING).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Guava: Google Core Libraries for Java (https://code.google.com/p/guava-libraries/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Guava: Google Core Libraries for Java 1.6+ (https://code.google.com/p/guava-libraries/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Guava: Google Core Libraries for Java 1.6+.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Hadoop Libraries.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Hadoop Libraries (Retrieved from CDH3u0. LICENSE.txt explains that Zookeeper is distributed under Apache License 2.0).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Ini4j.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+JClouds.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jackcess (http://jackcess.sourceforge.net/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jackson.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jackson JSON Processor (http://wiki.fasterxml.com/JacksonLicensing).
+Licensed under Apache-2.0
+Copyright (C) 2012-2013 FasterXML.
+
+This product includes software developed at
+Jackson JSON processor.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jackson Java JSON-processor.
+Licensed under Apache-2.0
+Copyright ©2009 FasterXML, LLC
+
+This product includes software developed at
+Jackson Java JSON-processor.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jackson Libraries.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jasypt : Java Simplified Encryption.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+JetS3t.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jettison.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Joda Time.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Joda-Time (http://www.joda.org/joda-time/).
+Licensed under Apache-2.0
+Copyright ©2002-2016 Joda.org
+
+This product includes software developed at
+Joda-Time (http://www.joda.org/joda-time/).
+Licensed under Apache-2.0
+Copyright ©2002-2015 Joda.org
+
+This product includes software developed at
+Joda-Time.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Json Simple (https://code.google.com/p/json-simple/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Json-Simple (https://github.com/fangyidong/json-simple).
+Licensed under Apache-2.0
+Yidong Fang
+Chris Nokleberg
+Dave Hughes
+
+This product includes software developed at
+Lucene Core.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+MarkLogic Java Client API.
+Licensed under Apache-2.0
+Copyright 2012-2015 MarkLogic Corporation
+
+This product includes software developed at
+Microsoft Azure SDK for Java (https://github.com/Azure/azure-sdk-for-java).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+OpenSAML (https://wiki.shibboleth.net/confluence/display/OpenSAML/Home/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Plexus (https://codehaus-plexus.github.io/index.html).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Resty : A simple HTTP REST client for Java.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Rocoto (http://99soft.github.io/rocoto/index.html
+).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Sisu Guice (https://github.com/sonatype/sisu-guice).
+Licensed under Apache-2.0
+Copyright (c) 2006 Google, Inc. All rights reserved.
+
+This product includes software developed at
+Sonatype Plexus (https://github.com/sonatype?utf8=%E2%9C%93&query=plexus).
+Licensed under Apache-2.0
+Copyright The Codehaus Foundation.
+
+This product includes software developed at
+Spring.
+Licensed under Apache-2.0
+Pivotal Software Inc. / The original author or authors
+
+This product includes software developed at
+SshJ (https://github.com/shikhar/sshj/blob/master/LICENSE).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+StAX API.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+StAXON - JSON via StAX (https://github.com/beckchr/staxon/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Talend ESB Libraries.
+Licensed under Apache-2.0
+Talend
+
+This product includes software developed at
+WSS4J.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Woden.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Woodstox.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+XMLSchema.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Xerces2 Java Parser.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+XmlBeans.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+XmlSchema Core.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Zip4J.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+google-gson.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+google-guice (https://code.google.com/p/google-guice/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+json-path (https://code.google.com/p/json-path/).
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+json-smart.
+Licensed under Apache-2.0
+
+
+This product includes software developed at
+Jetty (http://www.eclipse.org/jetty/).
+Licensed under Apache-2.0;EPL-1.0
+Copyright (C) 2016 The Eclipse Foundation.
+
+This product includes software developed at
+Jetty.
+Licensed under Apache-2.0;EPL-1.0
+
+
+This product includes software developed at
+Jetty (http://www.eclipse.org/jetty/licenses.php).
+Licensed under Apache-2.0;EPL-1.0
+
+
+This product includes software developed at
+Jackson Java JSON-processor.
+Licensed under Apache-2.0;LGPL-2.1
+
+
+This product includes software developed at
+Woodstox : High-performance XML processor (http://woodstox.codehaus.org/ http://woodstox.codehaus.org/Download).
+Licensed under Apache-2.0;LGPL-2.1
+
+
+This product includes software developed at
+Woodstox : High-performance XML processor (http://woodstox.codehaus.org).
+Licensed under Apache-2.0;LGPL-2.1
+
+
+This product includes software developed at
+Cryptacular.
+Licensed under Apache-2.0;LGPL-3.0
+
+
+This product includes software developed at
+SqliteJDBC.
+Licensed under BSD-2-Clause
+
+
+This product includes software developed at
+ASM.
+Licensed under BSD-3-Clause
+INRIA
+
+This product includes software developed at
+AntlR.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Antlr 3 Runtime.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Force.com Web Service Connector (WSC).
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Ganymed SSH-2 for Java.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+HsqlDB.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Jaxen.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Paraccel JDBC Driver.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+PostgreSQL JDBC Driver.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Salesforce.com (http://www.force.com).
+Licensed under BSD-3-Clause
+Copyright (c) 2005-2013, salesforce.com
+
+This product includes software developed at
+Scala (http://www.scala-lang.org/).
+Licensed under BSD-3-Clause
+Copyright (c) 2002-2016 EPFL; Copyright (c) 2011-2016 Lightbend, Inc. (formerly Typesafe, Inc.)
+
+This product includes software developed at
+XStream (http://xstream.codehaus.org/license.html).
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+XStream.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+XStream Core.
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+jsr-305 (JSR 305: Annotations for Software Defect Detection in Java;https://code.google.com/p/jsr-305/).
+Licensed under BSD-3-Clause
+
+
+This product includes software developed at
+Java API for RESTful Services.
+Licensed under CDDL-1.1
+
+
+This product includes software developed at
+Java API for RESTful Services (http://grepcode.com/snapshot/repo1.maven.org/maven2/javax.ws.rs/javax.ws.rs-api/2.0-m10).
+Licensed under CDDL-1.1
+
+
+This product includes software developed at
+Jaxb.
+Licensed under CDDL-1.1;GPL-2.0-with-classpath-exception
+
+
+This product includes software developed at
+WSDL4J.
+Licensed under CPL-1.0
+
+
+This product includes software developed at
+Aether (http://www.eclipse.org/aether/).
+Licensed under EPL-1.0
+Copyright (c) 2010, 2014 Sonatype, Inc.
+
+This product includes software developed at
+Eclipse Sisu.
+Licensed under EPL-1.0
+Copyright (c) 2010, 2015 Sonatype, Inc.
+
+This product includes software developed at
+H2 Embedded Database and JDBC Driver (H2 is EPL 1.0 !).
+Licensed under EPL-1.0
+
+
+This product includes software developed at
+Jetty.
+Licensed under EPL-1.0
+Copyright (c) ${copyright-range} Mort Bay Consulting Pty. Ltd.
+
+This product includes software developed at
+Mondrian.
+Licensed under EPL-1.0
+
+
+This product includes software developed at
+SWTChart.
+Licensed under EPL-1.0
+
+
+This product includes software developed at
+Logback.
+Licensed under EPL-1.0;LGPL-2.1
+
+
+This product includes software developed at
+Java Json (http://www.json.org/license.html).
+Licensed under Json
+
+
+This product includes software developed at
+org-json-java.
+Licensed under Json
+
+
+This product includes software developed at
+AOP Alliance (Java/J2EE AOP standards) (http://aopalliance.sourceforge.net/).
+Licensed under Public Domain
+
+
+This product includes software developed at
+Simple API for CSS.
+Licensed under W3C
+
+
+This product includes software developed at
+BCProv.
+Licensed under X11
+Copyright (c) 2000 - 2016 The Legion of the Bouncy Castle Inc. (https://www.bouncycastle.org)
+
+This product includes software developed at
+BouncyCastle.
+Licensed under X11
+
+
+This product includes software developed at
+SL4J.
+Licensed under X11
+
+
+This product includes software developed at
+SL4J (http://www.slf4j.org/license.html).
+Licensed under X11
+
+
+This product includes software developed at
+SL4J.
+Licensed under X11
+Copyright (c) 2004-2013 QOS.ch
+
+This product includes software developed at
+Simple Logging Facade for Java (http://www.slf4j.org/license.html).
+Licensed under X11
+
+
+This product includes software developed at
+Simple Logging Facade for Java.
+Licensed under X11
+
+
+This product includes software developed at
+dropbox-sdk-java : Java library for the Dropbox Core API.
+Licensed under X11
+
+
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/resources/license.txt b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/resources/license.txt
new file mode 100644
index 00000000000..da31897134f
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/resources/license.txt
@@ -0,0 +1,13 @@
+Copyright (c) 2006-2021 Talaxie Inc. - www.deilink.fr
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages.properties
new file mode 100644
index 00000000000..33a033dfad6
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages.properties
@@ -0,0 +1,5 @@
+corporationname=Talaxie
+loginimagehigh=/icons/login_h.png
+loginimageleft=icons/login_v.jpg
+TosBrandingService_job_license_header_content=// ============================================================================\n//\n// Copyright (c) 2006-2015, Talaxie Inc.\n//\n// This source code has been automatically generated by_{0}\n// / Licensed under the Apache License, Version 2.0 (the "License");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an "AS IS" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n
+TosBrandingService_routine_license_header_content=Copyright (c) 2006-2015, Talaxie Inc.\n//\n// This source code has been automatically generated by_{0}\n// / Licensed under the Apache License, Version 2.0 (the "License");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an "AS IS" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_fr.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_fr.properties
new file mode 100644
index 00000000000..f7066ebd4ec
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_fr.properties
@@ -0,0 +1,5 @@
+corporationname=Talaxie
+loginimagehigh=/icons/login_h.png
+loginimageleft=icons/login_v.jpg
+TosBrandingService_job_license_header_content=// ============================================================================\n//\n// Copyright (c) 2006-2015, Talaxie SA.\n//\n// Le code source a \u00E9t\u00E9 automatiquement g\u00E9n\u00E9r\u00E9 par_{0}\n// / Soumis \u00E0 la Licence Apache, Version 2.0 (la "Licence").\n// votre utilisation de ce fichier doit respecter les termes de la Licence.\n// Vous pouvez obtenir une copie de la Licence sur\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// Sauf lorsqu'explicitement pr\u00E9vu par la loi en vigueur ou accept\u00E9 par \u00E9crit, le logiciel\n// distribu\u00E9 sous la Licence est distribu\u00E9 "TEL QUEL",\n// SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite.\n// Consultez la Licence pour conna\u00EEtre la terminologie sp\u00E9cifique r\u00E9gissant les autorisations et\n// les limites pr\u00E9vues par la Licence.\n\n
+TosBrandingService_routine_license_header_content=Copyright (c) 2006-2015, Talaxie SA.\n//\n// Le code source a \u00E9t\u00E9 automatiquement g\u00E9n\u00E9r\u00E9 par_{0}\n// / Soumis \u00E0 la Licence Apache, Version 2.0 (la "Licence").\n// votre utilisation de ce fichier doit respecter les termes de la Licence.\n// Vous pouvez obtenir une copie de la Licence sur\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// Sauf lorsqu'explicitement pr\u00E9vu par la loi en vigueur ou accept\u00E9 par \u00E9crit, le logiciel\n// distribu\u00E9 sous la Licence est distribu\u00E9 "TEL QUEL",\n// SANS GARANTIE OU CONDITION D'AUCUNE SORTE, expresse ou implicite.\n// Consultez la Licence pour conna\u00EEtre la terminologie sp\u00E9cifique r\u00E9gissant les autorisations et\n// les limites pr\u00E9vues par la Licence.
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_ja.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_ja.properties
new file mode 100644
index 00000000000..009395c8078
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_ja.properties
@@ -0,0 +1,5 @@
+corporationname=Talaxie
+loginimagehigh=/icons/login_h.png
+loginimageleft=icons/login_v.jpg
+TosBrandingService_job_license_header_content=// ============================================================================\n//\n// Copyright (c) 2006-2015, Talaxie Inc.\n//\n// \u3053\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306F{0}\u306B\u3088\u3063\u3066\u81EA\u52D5\u7684\u306B\u751F\u6210\u3055\u308C\u307E\u3057\u305F\n// / Apache License\u3001\u30D0\u30FC\u30B8\u30E7\u30F32.0 (\u4EE5\u4E0B\u300C\u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u300D\u3068\u3044\u3046)\u306E\u4E0B\u3067\u30E9\u30A4\u30BB\u30F3\u30B9\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u9075\u5B88\u305B\u305A\u306B\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u30B3\u30D4\u30FC\u306F\u6B21\u306E\u30B5\u30A4\u30C8\u3067\u53D6\u5F97\u3067\u304D\u307E\u3059:\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// \u5F53\u8A72\u306E\u6CD5\u5F8B\u306B\u3088\u308B\u8981\u6C42\u307E\u305F\u306F\u66F8\u9762\u3067\u306E\u540C\u610F\u304C\u306A\u3044\u9650\u308A\u3001\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u4E0B\u3067\u914D\u5E03\u3055\u308C\u308B\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306F\u3001\u300C\u73FE\u72B6\u3069\u304A\u308A\u300D\u306B\u3001\n// \u660E\u793A\u307E\u305F\u306F\u6697\u793A\u306B\u304B\u304B\u308F\u3089\u305A\u3001\u3042\u3089\u3086\u308B\u4FDD\u8A3C\u3042\u308B\u3044\u306F\u6761\u4EF6\u306A\u3057\u3067\u914D\u5E03\u3055\u308C\u307E\u3059\u3002\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u4E0B\u3067\u3001\u8A31\u53EF\u304A\u3088\u3073\u5236\u9650\u3092\u9069\u7528\u3059\u308B\n// \u7279\u5B9A\u306E\u8A00\u8A9E\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u3054\u89A7\u304F\u3060\u3055\u3044\u3002\n\n
+TosBrandingService_routine_license_header_content=Copyright (c) 2006-2015, Talaxie Inc.\n//\n// \u3053\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306F{0}\u306B\u3088\u3063\u3066\u81EA\u52D5\u7684\u306B\u751F\u6210\u3055\u308C\u307E\u3057\u305F\n// / Apache License\u3001\u30D0\u30FC\u30B8\u30E7\u30F32.0 (\u4EE5\u4E0B\u300C\u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u300D\u3068\u3044\u3046)\u306E\u4E0B\u3067\u30E9\u30A4\u30BB\u30F3\u30B9\u3055\u308C\u3066\u3044\u307E\u3059\u3002\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u9075\u5B88\u305B\u305A\u306B\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4F7F\u7528\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u30B3\u30D4\u30FC\u306F\u6B21\u306E\u30B5\u30A4\u30C8\u3067\u53D6\u5F97\u3067\u304D\u307E\u3059:\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// \u5F53\u8A72\u306E\u6CD5\u5F8B\u306B\u3088\u308B\u8981\u6C42\u307E\u305F\u306F\u66F8\u9762\u3067\u306E\u540C\u610F\u304C\u306A\u3044\u9650\u308A\u3001\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u4E0B\u3067\u914D\u5E03\u3055\u308C\u308B\u30BD\u30D5\u30C8\u30A6\u30A7\u30A2\u306F\u3001\u300C\u73FE\u72B6\u3069\u304A\u308A\u300D\u306B\u3001\n// \u660E\u793A\u307E\u305F\u306F\u6697\u793A\u306B\u304B\u304B\u308F\u3089\u305A\u3001\u3042\u3089\u3086\u308B\u4FDD\u8A3C\u3042\u308B\u3044\u306F\u6761\u4EF6\u306A\u3057\u3067\u914D\u5E03\u3055\u308C\u307E\u3059\u3002\n// \u672C\u30E9\u30A4\u30BB\u30F3\u30B9\u306E\u4E0B\u3067\u3001\u8A31\u53EF\u304A\u3088\u3073\u5236\u9650\u3092\u9069\u7528\u3059\u308B\n// \u7279\u5B9A\u306E\u8A00\u8A9E\u306E\u30E9\u30A4\u30BB\u30F3\u30B9\u3092\u3054\u89A7\u304F\u3060\u3055\u3044\u3002
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_zh_CN.properties b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_zh_CN.properties
new file mode 100644
index 00000000000..90991329b4b
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/messages_zh_CN.properties
@@ -0,0 +1,5 @@
+corporationname=Talaxie
+loginimagehigh=/icons/login_h.png
+loginimageleft=icons/login_v.jpg
+TosBrandingService_job_license_header_content=// ============================================================================\n//\n// \u7248\u6743\u6240\u6709 (c) 2006-2015, Talaxie Inc.\n//\n// \u6B64\u6E90\u4EE3\u7801\u5DF2\u7531_{0} \u81EA\u52A8\u751F\u6210\n// / \u6839\u636E Apache \u8BB8\u53EF\u8BC1 2.0 \u7248 (\u201C\u8BB8\u53EF\u8BC1\u201D) \u6388\u4E88\u8BB8\u53EF\uFF1B\n// \u9664\u975E\u7B26\u5408\u8BB8\u53EF\u8BC1\u8981\u6C42\uFF0C\u5426\u5219\u60A8\u4E0D\u5F97\u4F7F\u7528\u6B64\u8F6F\u4EF6\u3002\n// \u60A8\u53EF\u4EE5\u8BBF\u95EE\u6B64\u7F51\u9875\u83B7\u53D6\u8BB8\u53EF\u8BC1\u7684\u526F\u672C\uFF1A\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// \u9664\u975E\u9002\u7528\u6CD5\u5F8B\u8981\u6C42\u6216\u4E66\u9762\u540C\u610F\uFF0C\n// \u5426\u5219\u6839\u636E\u8BB8\u53EF\u8BC1\u5206\u53D1\u7684\u8F6F\u4EF6\u987B\u6309\u201C\u539F\u6837\u201D\u63D0\u4F9B\uFF0C\u4E14\u4E0D\u9644\u5E26\u4EFB\u4F55\u660E\u793A\u6216\u6697\u793A\u7684\u62C5\u4FDD\u6216\u6761\u4EF6\uFF0C\n// \u4E14\u4E0D\u9644\u5E26\u4EFB\u4F55\u660E\u793A\u6216\u6697\u793A\u7684\u62C5\u4FDD\u6216\u6761\u4EF6\u3002\n// \u8BF7\u53C2\u9605\u8BB8\u53EF\u8BC1\u4E86\u89E3\u6709\u5173\u8BB8\u53EF\u8BC1\u4E0B\u5177\u4F53\u7684\u6743\u9650\u548C\n// \u9650\u5236\u89C4\u5B9A\u3002\n\n
+TosBrandingService_routine_license_header_content=\u7248\u6743\u6240\u6709 (c) 2006-2015, Talaxie Inc.\n//\n// \u6B64\u6E90\u4EE3\u7801\u5DF2\u7531_{0} \u81EA\u52A8\u751F\u6210\n// / \u6839\u636E Apache \u8BB8\u53EF\u8BC1 2.0 \u7248 (\u201C\u8BB8\u53EF\u8BC1\u201D) \u6388\u4E88\u8BB8\u53EF\uFF1B\n// \u9664\u975E\u7B26\u5408\u8BB8\u53EF\u8BC1\u8981\u6C42\uFF0C\u5426\u5219\u60A8\u4E0D\u5F97\u4F7F\u7528\u6B64\u8F6F\u4EF6\u3002\n// \u60A8\u53EF\u4EE5\u8BBF\u95EE\u6B64\u7F51\u9875\u83B7\u53D6\u8BB8\u53EF\u8BC1\u7684\u526F\u672C\uFF1A\n// http://www.apache.org/licenses/LICENSE-2.0\n// \n// \u9664\u975E\u9002\u7528\u6CD5\u5F8B\u8981\u6C42\u6216\u4E66\u9762\u540C\u610F\uFF0C\n// \u5426\u5219\u6839\u636E\u8BB8\u53EF\u8BC1\u5206\u53D1\u7684\u8F6F\u4EF6\u987B\u6309\u201C\u539F\u6837\u201D\u63D0\u4F9B\uFF0C\u4E14\u4E0D\u9644\u5E26\u4EFB\u4F55\u660E\u793A\u6216\u6697\u793A\u7684\u62C5\u4FDD\u6216\u6761\u4EF6\uFF0C\n// \u4E14\u4E0D\u9644\u5E26\u4EFB\u4F55\u660E\u793A\u6216\u6697\u793A\u7684\u62C5\u4FDD\u6216\u6761\u4EF6\u3002\n// \u8BF7\u53C2\u9605\u8BB8\u53EF\u8BC1\u4E86\u89E3\u6709\u5173\u8BB8\u53EF\u8BC1\u4E0B\u5177\u4F53\u7684\u6743\u9650\u548C\n// \u8BF7\u53C2\u9605\u8BB8\u53EF\u8BC1\u3002
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/Activator.java b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/Activator.java
new file mode 100644
index 00000000000..ede8180510c
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/Activator.java
@@ -0,0 +1,52 @@
+package org.talaxie.cli.branding.generator;
+
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends Plugin {
+
+ // The plug-in ID
+ public static final String PLUGIN_ID = "org.talaxie.cli.branding.generator"; //$NON-NLS-1$
+
+ // The shared instance
+ private static Activator plugin;
+
+ /**
+ * The constructor
+ */
+ public Activator() {
+ plugin = this;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+ */
+ public void stop(BundleContext context) throws Exception {
+ plugin = null;
+ super.stop(context);
+ }
+
+ /**
+ * Returns the shared instance
+ *
+ * @return the shared instance
+ */
+ public static Activator getDefault() {
+ return plugin;
+ }
+
+}
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/CliBrandingService.java b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/CliBrandingService.java
new file mode 100644
index 00000000000..a8b261d9df5
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/CliBrandingService.java
@@ -0,0 +1,85 @@
+package org.talaxie.cli.branding.generator;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.osgi.framework.Bundle;
+import org.talaxie.cli.branding.generator.i18n.Messages;
+import org.talend.core.branding.AbstractTalendBrandingService;
+import org.talend.core.ui.branding.IBrandingConfiguration;
+
+public class CliBrandingService extends AbstractTalendBrandingService {
+
+ @Override
+ public String getStartingBrowserId() {
+ // won't show the starting page
+ return null;
+ }
+
+ @Override
+ public String getShortProductName() {
+ return getProductName();
+ }
+
+ @Override
+ public String getCorporationName() {
+ return Messages.getString("corporationname"); //$NON-NLS-1$
+ }
+
+ @Override
+ public ImageDescriptor getLoginHImage() {
+ return null;
+ }
+
+ @Override
+ public ImageDescriptor getLoginVImage() {
+ return null;
+ }
+
+ @Override
+ public URL getLicenseFile() throws IOException {
+ final Bundle b = Platform.getBundle(Activator.PLUGIN_ID);
+ final URL url = FileLocator.toFileURL(FileLocator.find(b, new Path("resources/license.txt"), null)); //$NON-NLS-1$
+ return url;
+ }
+
+ @Override
+ public IBrandingConfiguration getBrandingConfiguration() {
+ return null;
+ }
+
+ @Override
+ public String getAcronym() {
+ return "tos_cli_gen";
+ }
+
+ @Override
+ public String getJobLicenseHeader(String version) {
+ return Messages.getString("TosBrandingService_job_license_header_content", this.getFullProductName(), version);
+ }
+
+ @Override
+ public String getRoutineLicenseHeader(String version) {
+ return Messages.getString("TosBrandingService_routine_license_header_content", this.getFullProductName(),
+ version);
+ }
+
+ @Override
+ public String getProductName() {
+ return "Talaxie CLI Generator";
+ }
+
+ @Override
+ public String getOptionName() {
+ return "";
+ }
+
+ @Override
+ public String getUserManuals() {
+ return "DI";
+ }
+}
diff --git a/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/i18n/Messages.java b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/i18n/Messages.java
new file mode 100644
index 00000000000..1b4b8594ad2
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talaxie.cli.branding.generator/src/main/java/org/talaxie/cli/branding/generator/i18n/Messages.java
@@ -0,0 +1,53 @@
+// ============================================================================
+//
+// Copyright (C) 2006-2021 Talaxie Inc. - www.deilink.fr
+//
+// This source code is available under agreement available at
+// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
+//
+// You should have received a copy of the agreement
+// along with this program; if not, write to Talaxie SA
+// 9 rue Pages 92150 Suresnes, France
+//
+// ============================================================================
+package org.talaxie.cli.branding.generator.i18n;
+
+import java.util.ResourceBundle;
+
+import org.talaxie.cli.branding.generator.Activator;
+import org.talend.commons.i18n.MessagesCore;
+
+/**
+ * Default implementation of MessageCore from org.talend.commons plug-in.
+ *
+ */
+public class Messages extends MessagesCore {
+
+ private static final String BUNDLE_NAME = "messages"; //$NON-NLS-1$
+
+
+ private static ResourceBundle resourceBundle = ResourceBundle.getBundle(BUNDLE_NAME);
+
+ /**
+ * Returns the i18n formatted message for key in the class bundle.
+ *
+ * @param key - the key for the desired string
+ * @return the string for the given key in the class resource bundle
+ * @see MessagesCore#getString(String, ResourceBundle)
+ */
+ public static String getString(String key) {
+ return getString(key, Activator.PLUGIN_ID, resourceBundle);
+ }
+
+ /**
+ * Returns the i18n formatted message for key and args in the specified bundle.
+ *
+ * @param key - the key for the desired string
+ * @param args - arg to include in the string
+ * @return the string for the given key in the given resource bundle
+ * @see MessagesCore#getString(String, ResourceBundle, Object[])
+ */
+ public static String getString(String key, Object... args) {
+ return MessagesCore.getString(key, Activator.PLUGIN_ID, resourceBundle, args);
+ }
+}
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java b/tdi-studio-se/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java
index 97f651476ab..252d0ffbcd4 100644
--- a/tdi-studio-se/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java
+++ b/tdi-studio-se/main/plugins/org.talend.designer.codegen/src/main/java/org/talend/designer/codegen/components/model/ComponentsFactory.java
@@ -234,13 +234,15 @@ protected void initComponentNameMap() {
if (StringUtils.isEmpty(componentName)) {
continue;
}
+ var tckJdbcType = ITCKUIService.get().getTCKJDBCType();
+ String tckJdbcLabel = tckJdbcType == null ? null : tckJdbcType.getLabel();
if (IGenericService.getService().isTcompv0(component)
&& (UnifiedComponentUtil.isAdditionalJDBCComponent(component.getName())
- || component.getName().contains(ITCKUIService.get().getTCKJDBCType().getLabel()))) {
+ || (tckJdbcLabel != null && component.getName().contains(tckJdbcLabel)))) {
continue;
}
String componentNameLowerCase = componentName.toLowerCase();
- if (componentNameLowerCase.startsWith(ITCKUIService.get().getTCKJDBCType().getLabel().toLowerCase())) {
+ if (tckJdbcLabel != null && componentNameLowerCase.startsWith(tckJdbcLabel.toLowerCase())) {
componentNameLowerCase = "t" + componentNameLowerCase;
}
Map> map = componentNameMap.get(componentNameLowerCase);
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.classpath b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.classpath
new file mode 100644
index 00000000000..0aa1aa099fb
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.project b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.project
new file mode 100644
index 00000000000..de3988e2c8b
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.project
@@ -0,0 +1,28 @@
+
+
+ org.talend.designer.core.generator
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.pde.ManifestBuilder
+
+
+
+
+ org.eclipse.pde.SchemaBuilder
+
+
+
+
+
+ org.eclipse.pde.PluginNature
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.settings/org.eclipse.core.resources.prefs b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 00000000000..4824b802631
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/=UTF-8
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.settings/org.eclipse.jdt.core.prefs b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 00000000000..a092867c450
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/META-INF/MANIFEST.MF b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/META-INF/MANIFEST.MF
new file mode 100644
index 00000000000..7edc5822f25
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/META-INF/MANIFEST.MF
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Code Generator Plug-in
+Bundle-SymbolicName: org.talend.designer.core.generator;singleton:=true
+Bundle-Vendor: Talaxie
+Bundle-Version: 8.9.0.qualifier
+Export-Package: org.talend.designer.core.generator
+Require-Bundle: org.eclipse.equinox.app,
+ org.eclipse.core.jobs,
+ org.eclipse.core.runtime,
+ org.talend.commons.runtime,
+ org.eclipse.emf.common,
+ org.talend.core.repository,
+ org.eclipse.emf.ecore,
+ org.talend.core,
+ org.talend.core.runtime,
+ org.talend.model,
+ org.talend.designer.core,
+ org.talend.repository.localprovider,
+ org.eclipse.core.resources,
+ org.talend.repository,
+ org.talend.designer.maven
+Automatic-Module-Name: org.talend.designer.core.generator
+Bundle-RequiredExecutionEnvironment: JavaSE-21
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/build.properties b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/build.properties
new file mode 100644
index 00000000000..6f20375d6c7
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ plugin.xml
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/plugin.xml b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/plugin.xml
new file mode 100644
index 00000000000..5182e079249
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/plugin.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/pom.xml b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/pom.xml
new file mode 100644
index 00000000000..30b8b716b82
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/pom.xml
@@ -0,0 +1,12 @@
+
+
+ 4.0.0
+
+ org.talend.studio
+ tdi-studio-se
+ 8.9.0-SNAPSHOT
+ ../../../
+
+ org.talend.designer.core.generator
+ eclipse-plugin
+
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core.generator/src/org/talend/designer/core/generator/CodeGeneratorApplication.java b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/src/org/talend/designer/core/generator/CodeGeneratorApplication.java
new file mode 100644
index 00000000000..252db4f43c7
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core.generator/src/org/talend/designer/core/generator/CodeGeneratorApplication.java
@@ -0,0 +1,235 @@
+package org.talend.designer.core.generator;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IProjectDescription;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceRoot;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.equinox.app.IApplication;
+import org.eclipse.equinox.app.IApplicationContext;
+import org.talend.commons.CommonsPlugin;
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.core.CorePlugin;
+import org.talend.core.GlobalServiceRegister;
+import org.talend.core.ICoreService;
+import org.talend.core.context.Context;
+import org.talend.core.context.RepositoryContext;
+import org.talend.core.model.general.Project;
+import org.talend.core.model.process.IProcess;
+import org.talend.core.model.properties.ProcessItem;
+import org.talend.core.model.properties.Property;
+import org.talend.core.repository.model.ProxyRepositoryFactory;
+import org.talend.core.repository.model.RepositoryFactoryProvider;
+import org.talend.core.repository.utils.TalendResourceSet;
+import org.talend.core.runtime.CoreRuntimePlugin;
+import org.talend.core.runtime.util.URIHelper;
+import org.talend.core.ui.branding.IBrandingService;
+import org.talend.designer.codegen.ICodeGeneratorService;
+import org.talend.designer.maven.tools.AggregatorPomsHelper;
+import org.talend.repository.ProjectManager;
+import org.talend.repository.ui.login.LoginHelper;
+
+/**
+ * Generates code for the process which URI is provided as argument.
+ */
+public class CodeGeneratorApplication implements IApplication {
+
+ /**
+ * Fails the application with an error message and usage reminder.
+ *
+ * @param message the error message to print
+ */
+ private Integer fail(String message) {
+ System.err.println(message);
+ printUsage();
+ return IApplication.EXIT_OK;
+ }
+
+ @Override
+ public Object start(IApplicationContext context) throws Exception {
+ // run without a Workbench, so services take their non-UI code paths
+ CommonsPlugin.setHeadless(true);
+ // non-interactive poms handling, as for a CI build
+ System.setProperty("ci.mode", "true");
+ // generation needs only the source; component runtime jars are resolved by the downstream build
+ System.setProperty("skip_missing_jars", "true");
+ // get the process URI from the application arguments
+ String[] args = (String[]) context.getArguments().get(IApplicationContext.APPLICATION_ARGS);
+ if (args == null || args.length == 0) {
+ return fail("No process path provided as argument.");
+ }
+
+ ensureRepositoryFactoryProvider();
+ // register project folders found in the workspace dir (a fresh checkout is not yet imported)
+ importWorkspaceProjects();
+ // check workspace location is an existing workspace
+ var wsProjects = ProxyRepositoryFactory.getInstance().readProject();
+ if (wsProjects.length == 0) {
+ return fail("The workspace provided does not contain any Talaxie project: "
+ + Platform.getInstanceLocation().getURL().getPath());
+ }
+
+ // check process path argument points to an existing file in workspace
+ var path = args[0];
+ URI uri = URI.createPlatformResourceURI(path, true);
+ var rset = new TalendResourceSet();
+ if (!rset.getURIConverter().exists(uri, null)) {
+ return fail("The process path provided as argument does not point an existing file: " + path);
+ }
+
+ // load the ProcessItem before the poms/generation steps, which rely on the current project
+ var resource = rset.getResource(uri, true);
+ var property = resource.getContents().stream().filter(Property.class::isInstance).map(Property.class::cast)
+ .findFirst();
+ if (!property.isPresent()) {
+ return fail("The process path provided as argument does not point to a valid properties file: "
+ + uri.toFileString());
+ }
+ var processItemOpt = property.map(Property::getItem).filter(ProcessItem.class::isInstance)
+ .map(ProcessItem.class::cast);
+ if (!processItemOpt.isPresent()) {
+ return fail("The process path provided as argument points to a properties file which property does not "
+ + "point to a ProcessItem: " + uri.toFileString());
+ }
+ ProcessItem processItem = processItemOpt.get();
+ ensureRepositoryContextProject(processItem, wsProjects);
+
+ // initialize the JET code-generation templates (the GUI does this at logon)
+ Job templateInit = GlobalServiceRegister.getDefault().getService(ICodeGeneratorService.class)
+ .initializeTemplates();
+ templateInit.schedule();
+ templateInit.join();
+
+ // sync routines/beans source so the generated job's `import routines.*` resolve
+ ICoreService coreService = GlobalServiceRegister.getDefault().getService(ICoreService.class);
+ coreService.syncAllRoutines();
+ coreService.syncAllBeans();
+
+ // write the project poms (root code.Master + code + job) without forking Maven
+ String techLabel = ProjectManager.getInstance().getCurrentProject().getTechnicalLabel();
+ new AggregatorPomsHelper(techLabel).syncAllPomsNoBuild(new NullProgressMonitor());
+
+ IProcess process = CorePlugin.getDefault().getDesignerCoreService().getProcessFromProcessItem(processItem);
+ CodeGenerator generator = new CodeGenerator(() -> process);
+ generator.schedule();
+ generator.join();
+
+ // flush the generated resources before exit
+ ResourcesPlugin.getWorkspace().save(true, new NullProgressMonitor());
+ return IApplication.EXIT_OK;
+ }
+
+ /**
+ * Registers every Talaxie project folder (one containing both {@code .project} and
+ * {@code talend.project}) found directly under the workspace location as an Eclipse project,
+ * so that {@link ProxyRepositoryFactory#readProject()} can find it. This makes a fresh,
+ * non-GUI workspace usable headlessly (e.g. a git checkout mounted in CI).
+ */
+ private void importWorkspaceProjects() {
+ try {
+ File wsDir = new File(Platform.getInstanceLocation().getURL().toURI());
+ File[] subs = wsDir.listFiles();
+ if (subs == null) {
+ return;
+ }
+ IWorkspace ws = ResourcesPlugin.getWorkspace();
+ IWorkspaceRoot root = ws.getRoot();
+ for (File sub : subs) {
+ File dotProject = new File(sub, ".project");
+ File talendProject = new File(sub, "talend.project");
+ if (sub.isDirectory() && dotProject.isFile() && talendProject.isFile()) {
+ IProjectDescription desc = ws.loadProjectDescription(new Path(dotProject.getAbsolutePath()));
+ IProject p = root.getProject(desc.getName());
+ if (!p.exists()) {
+ p.create(desc, null);
+ }
+ if (!p.isOpen()) {
+ p.open(null);
+ }
+ }
+ }
+ } catch (Exception e) {
+ ExceptionHandler.process(e);
+ }
+ }
+
+ /**
+ * Prints usage instructions for this application.
+ */
+ private void printUsage() {
+ System.out.println("Usage: TOS_CLI_GEN.exe -data \n"
+ + "or alternatively: TOS_DI.exe -product org.talaxie.cli.branding.generator.product -data \n"
+ + "You should provide:\n"
+ + " - the to an existing Talaxie workspace, such as `C:/TOS_DI-X.Y.Z/workspace`\n"
+ + " - the to a properties file in workspace, such as `MY_PROJECT/process/myJob_0.1.properties`");
+ }
+
+ /**
+ * Ensure Context.REPOSITORY_CONTEXT_KEY contains a project to avoid NPE in
+ * project-based preference lookups during Process initialization.
+ *
+ * @param wsProjects workspace projects to find the project of the process item
+ */
+ private void ensureRepositoryContextProject(ProcessItem processItem, Project[] wsProjects) {
+ var ctx = CoreRuntimePlugin.getInstance().getContext();
+ var repoCtx = Optional.ofNullable(ctx.getProperty(Context.REPOSITORY_CONTEXT_KEY))
+ .map(RepositoryContext.class::cast).orElseGet(() -> {
+ var res = new RepositoryContext();
+ ctx.putProperty(Context.REPOSITORY_CONTEXT_KEY, res);
+ return res;
+ });
+ // branch/field lookups (getReferencedProjects) require a non-null fields map
+ if (repoCtx.getFields() == null) {
+ repoCtx.setFields(new HashMap<>());
+ }
+ if (repoCtx.getUser() == null) {
+ repoCtx.setUser(LoginHelper.getUser(LoginHelper.createDefaultLocalConnection()));
+ }
+ if (repoCtx.getProject() == null) {
+ IFile itemFile = URIHelper.getFile(URIHelper.convert(processItem.eResource().getURI()));
+ Stream.of(wsProjects).filter(p -> p.getTechnicalLabel().equals(itemFile.getProject().getName())).findFirst()
+ .ifPresentOrElse(repoCtx::setProject, () -> {
+ fail("The project of the process item cannot be found in the workspace projects: "
+ + itemFile.getProject().getName());
+ });
+ ;
+ }
+ }
+
+ /**
+ * In headless CLI, proxy factory may not be initialized by login workflow.
+ */
+ private void ensureRepositoryFactoryProvider() {
+ /*
+ * There is no ICloudSignOnService implementation in Talaxie. So we do not need
+ * to worry about cloud connection and login, and can directly proceed with
+ * local workspace (default local connection).
+ */
+ var connBean = LoginHelper.createDefaultLocalConnection();
+ var proxyRepositoryFactory = ProxyRepositoryFactory.getInstance();
+ if (proxyRepositoryFactory.getRepositoryFactoryFromProvider() == null) {
+ // need a branding service to get the repository factory provider
+ GlobalServiceRegister.getDefault().getService(IBrandingService.class);
+ // set repository factory provider with the default local connection
+ proxyRepositoryFactory.setRepositoryFactoryFromProvider(
+ RepositoryFactoryProvider.getRepositoriyById(connBean.getRepositoryId()));
+ }
+ }
+
+ @Override
+ public void stop() {
+ // do nothing.
+ }
+
+}
\ No newline at end of file
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core/META-INF/MANIFEST.MF b/tdi-studio-se/main/plugins/org.talend.designer.core/META-INF/MANIFEST.MF
index 6290b105cf7..ca19e6255fe 100644
--- a/tdi-studio-se/main/plugins/org.talend.designer.core/META-INF/MANIFEST.MF
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core/META-INF/MANIFEST.MF
@@ -95,6 +95,7 @@ Export-Package: org.talend.designer.core;
org.talend.designer.core.assist,
org.talend.designer.core.build,
org.talend.designer.core.debug,
+ org.talend.designer.core.generator,
org.talend.designer.core.i18n,
org.talend.designer.core.model,
org.talend.designer.core.model.components,
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/generator/CodeGenerator.java b/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/generator/CodeGenerator.java
new file mode 100644
index 00000000000..240e9c9dd17
--- /dev/null
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/generator/CodeGenerator.java
@@ -0,0 +1,110 @@
+package org.talend.designer.core.generator;
+
+import java.util.function.Consumer;
+import java.util.function.Supplier;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.talend.commons.exception.ExceptionHandler;
+import org.talend.core.model.process.IProcess;
+import org.talend.core.model.repository.IRepositoryObject;
+import org.talend.designer.runprocess.IProcessor;
+import org.talend.designer.runprocess.ProcessorException;
+import org.talend.designer.runprocess.ProcessorUtilities;
+
+/**
+ * A job to generate code for a given process.
+ */
+public class CodeGenerator extends Job {
+
+ /** Provides the process for which to generate code */
+ private Supplier processSupplier;
+ /** Synchronize access during code generation (e.g. on SWT Display) */
+ private Consumer lock = Runnable::run;
+ /** Provides the processor to use for code generation */
+ private Supplier processorSupplier = () -> {
+ // create a processor for the process to generate code
+ var process = processSupplier.get();
+ var property = (process instanceof IRepositoryObject r) ? r.getProperty() : null;
+ return ProcessorUtilities.getProcessor(process, property, process.getContextManager().getDefaultContext());
+ };
+
+ /**
+ * Creates a new code generator job.
+ *
+ * @param processSupplier a supplier that provides the process for which to
+ * generate code
+ */
+ public CodeGenerator(Supplier processSupplier) {
+ this(processSupplier, Runnable::run);
+ }
+
+ /**
+ * Creates a new code generator job.
+ *
+ * @param processSupplier a supplier that provides the process for which to
+ * generate code
+ * @param lock a lock object to synchronize access (e.g. on SWT
+ * Display) during code generation
+ */
+ public CodeGenerator(Supplier processSupplier, Consumer lock) {
+ super("Generating code");
+ this.processSupplier = processSupplier;
+ this.lock = lock;
+ setUser(false);
+ setPriority(Job.INTERACTIVE);
+ }
+
+ /**
+ * Sets the lock object to synchronize access (e.g. on SWT Display) during code
+ * generation.
+ *
+ * @param lock a lock object executing the generation runnable
+ * @return this code generator for chaining
+ */
+ public CodeGenerator withLock(Consumer lock) {
+ this.lock = lock;
+ return this;
+ }
+
+ /**
+ * Sets the processor supplier to use for code generation.
+ *
+ * @param processorSupplier a supplier that provides the processor to use
+ * @return this code generator for chaining
+ */
+ public CodeGenerator withProcessorSupplier(Supplier processorSupplier) {
+ this.processorSupplier = processorSupplier;
+ return this;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ var process = processSupplier.get();
+ if (process == null) {
+ return Status.error("Process not found for code generation.");
+ }
+ var processor = ProcessorUtilities.getProcessor(process, null, process.getContextManager().getDefaultContext());
+ boolean codeGenerated = processor.isCodeGenerated();
+ lock.accept(() -> {
+ try {
+ monitor.beginTask("Generating code", IProgressMonitor.UNKNOWN);
+ boolean lastGeneratedWithStats = ProcessorUtilities.getLastGeneratedWithStats(process.getId());
+ boolean lastGeneratedWithTrace = ProcessorUtilities.getLastGeneratedWithTrace(process.getId());
+
+ int option = codeGenerated ? ProcessorUtilities.GENERATE_MAIN_ONLY
+ : ProcessorUtilities.GENERATE_WITH_FIRST_CHILD;
+ // emit source only; the generated Maven project is compiled by the downstream build
+ option |= ProcessorUtilities.GENERATE_WITHOUT_COMPILING;
+ ProcessorUtilities.generateCode(process, process.getContextManager().getDefaultContext(),
+ lastGeneratedWithStats, lastGeneratedWithTrace, true, option, monitor);
+ } catch (ProcessorException e) {
+ ExceptionHandler.process(e);
+ }
+ });
+ return Status.OK_STATUS;
+ }
+
+}
diff --git a/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/AbstractMultiPageTalendEditor.java b/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/AbstractMultiPageTalendEditor.java
index 9a6df43ec5a..0efc718e131 100644
--- a/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/AbstractMultiPageTalendEditor.java
+++ b/tdi-studio-se/main/plugins/org.talend.designer.core/src/main/java/org/talend/designer/core/ui/AbstractMultiPageTalendEditor.java
@@ -40,12 +40,9 @@
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.core.runtime.RegistryFactory;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.notify.impl.AdapterImpl;
import org.eclipse.gef.EditPart;
@@ -151,6 +148,7 @@
import org.talend.designer.core.DesignerPlugin;
import org.talend.designer.core.IMultiPageTalendEditor;
import org.talend.designer.core.ISyntaxCheckableEditor;
+import org.talend.designer.core.generator.CodeGenerator;
import org.talend.designer.core.i18n.Messages;
import org.talend.designer.core.model.components.EParameterName;
import org.talend.designer.core.model.process.AbstractProcessProvider;
@@ -1441,37 +1439,11 @@ private void codeSync() {
}
}
}
- // if some code has been generated already, for the editor we should need only the main job, not the childs.
+ // if some code has been generated already, for the editor we should need only
+ // the main job, not the children.
boolean codeGenerated = processor.isCodeGenerated();
- Job job = new Job("Generating code") {
-
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- Display.getDefault().syncExec(() -> {
- try {
- monitor.beginTask("Generating code", IProgressMonitor.UNKNOWN);
- boolean lastGeneratedWithStats = ProcessorUtilities.getLastGeneratedWithStats(process.getId());
- boolean lastGeneratedWithTrace = ProcessorUtilities.getLastGeneratedWithTrace(process.getId());
-
- if (codeGenerated) {
- ProcessorUtilities.generateCode(process, process.getContextManager().getDefaultContext(),
- lastGeneratedWithStats, lastGeneratedWithTrace, true, ProcessorUtilities.GENERATE_MAIN_ONLY,
- monitor);
- } else {
- ProcessorUtilities.generateCode(process, process.getContextManager().getDefaultContext(),
- lastGeneratedWithStats, lastGeneratedWithTrace, true,
- ProcessorUtilities.GENERATE_WITH_FIRST_CHILD, monitor);
- }
- } catch (ProcessorException e) {
- ExceptionHandler.process(e);
- }
- });
- return Status.OK_STATUS;
- }
- };
- job.setUser(false);
- job.setPriority(Job.INTERACTIVE);
- job.schedule();
+ new CodeGenerator(() -> process).withLock(Display.getDefault()::syncExec).withProcessorSupplier(() -> processor)
+ .schedule();
}
/**
diff --git a/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/Lookups.java b/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/Lookups.java
index 107c098dfce..75984d73e9c 100644
--- a/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/Lookups.java
+++ b/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/Lookups.java
@@ -136,7 +136,12 @@ public static ComponentService service() {
}
public static TaCoKitCache taCoKitCache() {
- return lookup(TaCoKitCache.class);
+ try {
+ return lookup(TaCoKitCache.class);
+ } catch (final Exception e) {
+ // no TaCoKit component server (e.g. headless) -> no cache
+ return null;
+ }
}
public static ProcessManager manager() {
diff --git a/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/service/TCKUIService.java b/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/service/TCKUIService.java
index 14685d2cf0b..3cea824c321 100644
--- a/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/service/TCKUIService.java
+++ b/tdi-studio-se/main/plugins/org.talend.sdk.component.studio-integration/src/main/java/org/talend/sdk/component/studio/service/TCKUIService.java
@@ -66,6 +66,10 @@ public boolean isTCKRepoistoryNode(RepositoryNode node) {
@Override
public ERepositoryObjectType getTCKRepositoryType(String componentName) {
TaCoKitCache cache = Lookups.taCoKitCache();
+ // no cache -> no TCK config types
+ if (cache == null) {
+ return null;
+ }
Map configTypeNodeMap = cache.getConfigTypeNodeMap();
ConfigTypeNode configTypeNode = configTypeNodeMap.values().stream().filter(n -> componentName.equals(n.getName()))
.findFirst().orElse(null);
diff --git a/tdi-studio-se/pom.xml b/tdi-studio-se/pom.xml
index ac077c1a9c4..1b6a02e5866 100644
--- a/tdi-studio-se/pom.xml
+++ b/tdi-studio-se/pom.xml
@@ -33,6 +33,7 @@
main/features/org.talend.designer.feature
+ main/features/org.talend.generator.feature
main/features/org.talend.gmf.feature
main/features/org.talend.fragment.jars.di.feature
main/features/org.talend.rcp.branding.tos.feature
@@ -50,6 +51,7 @@
main/plugins/org.talend.designer.components.libs
main/plugins/org.talend.designer.components.localprovider
main/plugins/org.talend.designer.core
+ main/plugins/org.talend.designer.core.generator
main/plugins/org.talend.designer.core.swt
main/plugins/org.talend.designer.dbmap
main/plugins/org.talend.designer.documentation
@@ -90,6 +92,7 @@
main/plugins/org.talend.libraries.zmq
main/plugins/org.talend.presentation.onboarding.resource
main/plugins/org.talend.presentation.onboarding.resource.tos
+ main/plugins/org.talaxie.cli.branding.generator
main/plugins/org.talend.rcp.branding.tos
main/plugins/org.talend.repository
main/plugins/org.talend.repository.ftp